Abilitare JavaScript per vedere questo sito.

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:

Modifiche_live_r3

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)  
lit rOperativeMode r(1001)

 

; 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
        ...
    end_select

    ...
end_main_loop

 

  

Keyboard Navigation

F7 for caret browsing
Hold ALT and press letter

This Info: ALT+q
Page Header: ALT+h
Topic Header: ALT+t
Topic Body: ALT+b
Contents: ALT+c
Search: ALT+s
Exit Menu/Up: ESC