Da RTE v33.18, riferito a programmi scritti in R3, è possibile "iniettare" dei programmi modificati mentre il controllo è in modo esecuzione (led arancione mode lampeggiante) senza dover eseguire un boot di sistema.
Operatività
Dopo aver eseguito la modifica al programma ed averlo compilato con zero errori, dalla finestra di progetto è possibile effettuare l'operazione in due modi diversi a scelta del programmatore:
Il programmatore dovrà quindi strutturare il suo programma (task/rule) in modo tale da evitare che vengano rieseguite funzioni di inizializzazione che tipicamente vengono messe prima del loop principale. A tal fine è possibile utilizzare le variabili predefinite RESTARTED e SYNC_RESTART
I registri volatili R, RR ed SR che vengono azzerati al boot non vengono azzerati in caso di modifica "LIVE".
La keyword RESTART_POINT permette di selezionare il punto in cui il programma si deve fermare, prima di far partire (dall'inizio) quello caricato (questo solo se è stato seleionato il riavvio sincronizzato)
La keyword RESTART_POINT può essere utilizzata più volte nello stesso programma.
Ricarica in memoria e riavvia
•Il programma (TASK) viene fermato all' istruzione in cui si trova e viene sostituito con quello nuovo
•La variabile predefinita RESTARTED segnala la presenza di questa situazione
•Se la modifica viene fatta alle RULE il sistema deve essere in missing power (GLOBAL_POWER = false)
Ricarica in memoria e riavvia sincronizzato
•Il programma (TASK) viene fermato alla prima istruzione RESTART_POINT e viene sostituito con quello nuovo
•La variabile predefinita SYNC_RESTART segnala la presenza di questa situazione
•La keyword RESTART_POINT può essere utilizzata più volte nello stesso programma
•Se la modifica viene fatta alle RULE il sistema deve essere in missing power (GLOBAL_POWER = false)
Esempi
Esempio di utilizzo:
; boot backing already executed lit rInitDone r(1000)
; if first boot init is started so I can handle the LIVE modifications _if (not rInitDone) call InitTask1 rInitDone = true
; Main loop __main_loop__ ; stop point in the running program restart_point
; management of operating mode changes call HndModeChange out (150) = inp(1)
; machine state manager select (rOperativeMode) case M_MIS_POWER ; Missing power handling call HndMisPower break ... |