Consideriamo la possibilità di mettere a frutto strumenti più standard e competenze più comuni tra i progettisti S/W, e di utilizzare metodi e strumenti non necessariamente ristretti al settore specifico.
I nodi di un approccio di questo genere sono:
Nel proseguo, affrontiamo questi punti.
Sono quelli che permettono di descrivere la struttura e il funzionamento del sistema, e alcuni di essi, più orientati agli aspetti funzionali, sono anche indicati per condividere le specifiche del sistema con il committente.
Personalmente, attingo volentieri all'armamentario di UML, con diagrammi di flusso dei dati, diagrammi a stati, diagrammi di sequenza, diagrammi a classi, etc.
Per quello che riguarda in particolare la logica di controllo di un sistema, i diagrammi a stati sono uno strumento che coniuga due esigenze apparentemente contrapposte:
Eccone un esempio:
Come ambiente di sviluppo e test, si può usare la macchina che si preferisce; personalmente utilizzo un PC con Windows, dove eseguo localmente tutte le parti del sistema, fino alla loro completa messa a punto.
Come ambiente di esercizio, sia per la parte centralizzata del sistema che per i dispositivi sul campo, conviene utilizzare server o dispositivi con sistema operativo Linux. È una piattaforma su cui è disponibile una tale varietà di strumenti e componenti S/W da avere difficilmente rivali.
Solo per citarne alcuni, si possono installare database, web server, sistemi di comunicazione, ed è ricca anche la dotazione relativa alla sicurezza, con firewall, protocolli sicuri, VPN, e quant'altro.
Anche in questo caso le scelte possibili sono molteplici, ma siamo comunque nell'ambito degli strumenti orientati alla programmazione in linguaggi standard, non dedicati.
Personalmente utilizzo Visual Studio per lo sviluppo di applicazioni con alcuni linguaggi, e VS Code per lo sviluppo con altri. Entrambi offrono potenti strumenti per dare ausilio sia alla codifica che al test.
Per quanto riguarda la codifica, ci si può avvalere, se si vuole, dell'ausilio di agenti di intelligenza artificiale. Inoltre sono disponibili funzionalità che semplificano la ri-fattorizzazione del codice, l'installazione e utilizzo di librerie, il versionamento della base di codice, eventualmente la collaborazione tra sviluppatori.
Per quanto riguarda il test, vi sono ausili per il test automatico di regressione, utili in particolar modo per quelle parti del S/W che sono riutilizzabili, e organizzate come librerie di componenti S/W.
Consideriamo l'utilizzo di linguaggi di programmazione general purpose.
È presente su questo stesso sito tutta una serie di articoli sull'argomento, che invito a leggere. Inoltre, più avanti, sono riportati vari esempi di codice sorgente, in più di un linguaggio, dove viene mostrato come si può procedere nella realizzazione di varie parti di un sistema di controllo esemplificativo.
Ci rivolgiamo a protocolli standard e di utilizzo generale, se possibile abbandonando la tecnica del polling, e l'indirizzamento diretto delle variabili dei dispositivi (p. es Modbus).
Per la comunicazione non in tempo reale tra dispositivi periferici e server, consideriamo in primis il protocollo di rete HTTP, e in particolare le interfacce RESTful, con codifica JSON dei contenuti.
Per la comunicazione in tempo reale tra parti del sistema, privilegiamo il protocollo MQTT, con codifica JSON del contenuto dei messaggi. In caso di comunicazioni tra web app e server, si userà la connessione via websocket.
Sono tutte tecnologie estremamente diffuse, ben standardizzate e consolidate, assolutamente affidabili, efficienti, e ampiamente note agli sviluppatori S/W. E di ognuna esiste la versione sicura, basata su tecnologia SSL.
Per quanto riguarda i dispositivi sul campo, che devono leggere input e pilotare output, vi sono varie opzioni, ma di seguito verranno considerati in particolare prodotti basati su H/W standard, sistema operativo Linux, integrati in modo da avere caratteristiche funzionali e di robustezza adatte all'utilizzo nei contesti di nostro interesse.
In particolare:
Giorgio Barchiesi
Albo degli Ingegneri Sez. A, N. 4027 della Prov. di Trento
P.IVA 02370260222, C.F. BRC GRG 58L26 C794R
Copyright © 2015-2024 Giorgio Barchiesi - Tutti i diritti riservati