Per le funzioni create dall'utente nel progetto o nella libreria utente, viene creato un sottoprogramma nel programma compilato. Ogni volta che viene caricato, vengono trasferiti per primi i parametri di ingresso delle classi VAR_INPUT and VAR_IN_OUT. Poi avviene un salto nel sottoprogramma corrispondente. Infine sono letti nuovamente i parametri di uscita delle classi VAR_OUTPUT e VAR_IN_OUT. Il numero di sottoprogrammi o funzioni che potete definire dipende dal tipo di controllore.
Per una funzione definita da utente è creato un solo sottoprogramma. che può essere chiamato da diversi punti.
Per facilitare il confronto del codice assembler creato, nell'esempio che segue sono usati indirizzi FP. Poiché il programma diventa più complicato quando si usano indirizzi FP, raccomandiamo di usare variabili con nomi significativi.
La funzione definita da utente User_ADD è caricata nel diagramma contatti:
Ha il seguente contenuto:
Codice assembler per il PLC:
ST |
R9010 |
Trasferimento dei parametri di ingresso |
|
F0 |
(*MV*) |
R9010 è sempre TRUE |
|
DT0 |
DT0 -> User_ADD.In1 |
||
DT550 |
|||
F0 |
(*MV*) |
||
DT1 |
DT1 -> User_ADD.In2 |
||
DT551 |
|||
CALL |
0 |
Richiamo del sottoprogramma User_ADD |
|
ST |
R9010 |
Ricaricamento dei parametri di uscita |
|
F0 |
(*MV*) |
||
DT552 |
|||
DT2 |
User_ADD -> DT2 |
||
... |
|||
ED |
Fine del programma principale |
||
SUB |
0 |
Sottoprogramma User_ADD |
|
ST |
R9010 |
||
F22 |
(*PLUS_S*) |
||
DT550 |
|||
DT551 |
|||
DT552 |
Se (TRUE) |
||
UserAdd=UserAdd.In1 + UserAdd.In2 |
|||
RET |
Ritorno al programma principale |