.NET Micro Framework
Sviluppo di soluzioni embedded moderne con .NET Micro Framework
Lorenzo Maiorfi – Innovactive Engineering s.r.l.
Virtualizzazione del «core» Un processore software (CLR) stack-based esegue
bytecode espresso in linguaggio «CIL» Integrazione binaria tra moduli software
La CLR si occupa di threading, gestione della memoria, interazione con procedure «native»,ecc.
La CLR «consuma» delle unità eseguibili dette «assembly»
Un assembly è costituito da: metadati (un db interno che descrive i «prototipi» di
tutti i tipi e membri definiti nell’assembly) bytecode CIL (la sequenza di istruzioni che costituisce
il «corpo» di ciascun metodo (funzione) manifest (esprime le dipendenze da altri assembly)
Principali intenti di .NET (MF)
1. Lo sviluppatore scrive codice utilizzando linguaggi di alto livello (C#/VB.NET)
2. Il compilatore genera uno o più assembly
3. Il bytecode degli assembly così generati viene scritto sulla memoria Flash del dispositivo mediante l’IDE o con un apposito tool (MFDeploy)
4. Il device al reset esegue il «TinyBooter» che a sua volta carica la «TinyCLR»
5. La TinyCLR carica gli assembly ed esegue il metodo «entry-point» utente
Sviluppare firmware per .NET MF
DEMO «getting started» Utilizziamo Netduino Eseguiamo la scrittura, il test, il debug e il
rilascio di un semplice firmware Diamo uno sguardo al compilato “IL” Esploriamo più nel dettaglio il modello di
threading e l’interazione con il flusso di esecuzione del firmware nativo del microcontrollore (gestione interrupt)
Produttività Ambiente di sviluppo, compilatore, debugger ed
emulatore costituiscono la toolchain più produttiva disponibile nel mercato embedded
Affidabilità Runtime «managed», controllo completo su
ogni «layer» dell’applicazione Portabilità
Virtualmente portabile su tutti qualsiasi core, attualmente copre tutti i core ARM™ 32 bit
Supporto Completamente «open», molte librerie di base,
molte risorse community
Punti di forza del .NET MF
Struttura del .NET MFApplicazione e Librerie UtenteLayer Applicazione
LibrerieLayer Librerie .NET WPF Comms …
CLR
Layer Runtime
ExecEngine
TypeSystem
Garbage
Coll.Interop
PAL Timers RAM I/O
HAL Drivers oppure OS Facilities
Processore e PerifericheLayer Hardware
«P
OR
TIN
G»
Funzionalità di base Tipi di base, XML, webservice, globalizzazione,
crittografia, manipolazione testo, diagnostica, sicurezza
Funzionalità di sistema Networking, file-system, user interface,
threading Gestione periferiche
USB (device/host), GPIO (con interrupt), I2C, SPI, UART, ADC, PWM, Watchdog, power
Componenti di terze parti CAN, DAC, RTC, Glide (UI+Touch), SQLLite, ecc.
Base Class Libraries
DEMO «Object Oriented Design» Sperimentazione con un semplice ADC
12-bit con interfaccia SPI (Microchip MCP3201)
Sviluppo di un semplice driver “managed”
Aggiunta di nuove funzionalità tramite ereditarietà
Astrazione del modello di interazione con la periferica
Implementazione di un nuovo driver con lo stesso modello
Integrazione dei due componenti in un’applicazione completa
Controllo Accesso Impianti «Outdoor» Identificazione mezzi RFID (short/long range) ZigBee (mesh) Integrazione con sistemi informativi di terze
parti (AS/400, Windows, Unix) Controllo barriere mezzi Logging remoto attività sistema Monitoraggio continuo parametri ambientali
delle centraline
Applicazioni «Real-World» #1
Banco prove motori ventilanti Caratterizzazione flusso/potenza a norme CEI Acquisizione continua di
Encoder velocità motori Pressioni (in diversi punti del tubo Venturi) Temperatura/umidità ambientali Potenza DC e AC
Gestione motori induzione 220V/50Hz, 110V/60Hz, DC brushless con e senza controller integrato
Interfacciamento con software gestione prove «kiosk» (Windows 7+WPF+touch)
Applicazioni «Real-World» #2
Terminali controllo produzione Gestione ingressi digitali «conta-pezzi»
industriali (24V, PLC) Interfaccia utente con display Touch 4.3" Wide Lettore RFID Lettore Barcode Supporto Ethernet/WiFi Tastiera capacitiva con microcontrollore
dedicato Buzzer piezoelettrico Controllo uscite digitali 24V e proporzionali
(anche con controllo PID)
Applicazioni «Real-World» #3
Banco cassa autonomo self-checkout Gestisce tutta l’attività di check-out senza
operatori, parallelizzando le fasi «lente» 14 moduli (hardware+firmware) indipendenti
8 Celle di carico 2 Motori AC trifase con encoder assoluto SSI 36 Barriere IR (30 singole,4 array da 32, 2 da 10) 8 Motori DC (gestione portelli) con lock magnetico 8 Lettori barcode integrati 14 Nastri trasportatori/mototamburi 20 strisce led «guida» multi-colore Integrazione con software «front-end» kiosk
Applicazioni «Real-World» #4
Performance Non adatto ad applicazioni molto intensive sul
piano computazionale Controllo del timing
Non adatto ad applicazioni real-time Non è un OS
Non esiste un supporto «di base» per processi, file-system, comunicazione, sicurezza, ecc.
Pochi porting GHI Electronics (4), Secret Labs (2), Mountaineer
Group (2), Sytech Designs, Love Electronics
Punti deboli …
Performance Interoperabilità codice «managed» / nativo
Controllo del timing Utilizzo di schede multi-processore (come la
Triumvirato: USBizi+MSP430+CPLD !!!) Non è un OS
Molti servizi sono stati sviluppati nel tempo dai vendor come estensioni del framework
Pochi «porting» Molti sono open (Netduino, Mountaineer
Boards, GHI OSH) e lo stesso Porting Kit è completamente open (netmf.codeplex.com)
…ma risolvibili !
DEMO «Internet-of-Things»
DigitalINPUTs
DigitalOUTPUTs
AnalogINPUTs
AnalogOUTPUTs
HTTP TCP/IP
.NET MFBOARDBrowser
(PC, SmartPhone, Tablet)
Server WEB
LIVE «Internet-of-Things» Access Point WiFi con SSID
«maiorfi_sopra» (è aperto!) http://192.168.1.50/demoiot
Cosa serve per iniziare? Visual Studio 2010 (anche in versione
Express) .NET Micro Framework SDK (4.2 QFE2)
Scheda .NET MF a scelta tra Fez-Cerberus, Netduino, Fez-Panda II,
Fez-Cerbuino Bee €<30 Netduino+, Mountaineer,
Fez-Hydra, ArgonR1, Nano €<100 Fez-Spider, ChipworkX €120-250
Moduli con connettori standard «Gadgeteer» in formato «shield» Arduino da collegare con jumper-wires «proto-boards»
Online Resourceswww.TinyCLR.ITtwitter: @tinyclr
innovactive.itmountaineer-boards.comtinyclr.comnetduino.comloveelectronics.co.uksytechdesigns.com