1) Non si possono dichiarare RETAIN le variabili di I/O, se vuoi mantenere la situazione di una variabili allo spegnimento del sistema dichiare una variabile globale BOOL di tipo RETAIN ed appoggi lo stato sulla variabile e poi copi la variabile sulla relativa variabile di uscita.
E’ evidente che non puoi e sarebbe inutile mantenere lo stato delle variabili di ingresso, quelle riportano lo stato reale dell’ingresso quindi lo stato del dispositivo che lo comanda.
2) Si usano i FB quando hai più uscite ma sopratutto quando hai variabili di memoria definite all’interno. I FB mantengono la memoria allocata e quindi lo stato delle variabili, mentre nelle function tutte le variabili interne sono distrutte all’uscita della function.
3) Si può fare, riportiamo esempi di collegamento con Raspberry utilizando Node-RED, tra l’altro l’MPS055 è basato su Raspberry e permette in un unico prodotto di avere la programmazione LogicLab e di utilizare Node-RED (Vedi esempio).
4) Si il modello MPS054 ha 4 I/O, e sono mappati come %IX255.0, %IX255.1, %QX255.0, %QX255.1.
5) SysFirstLoop non è una funzione, è una variabile globale (ce ne sono molte) che è attiva solo al primo loop di esecuzione programma. Ma come hai visto c’è la task Boot sotto alla quale puoi collegare tutti i program che vuoi e questi sono eseguiti una sola volta alla prima esecuzione.
Viene utilizzato SysFirstLoop per comodità nei programmi dove si deve agire al primo loop di esecuzione sulle variabili locali, che non sarebbero visibili da altri program e quindi non potrebbero essere gestite da un program eseguito in task di Boot.