Home › Forum › Programmazione IEC 61131 (LogicLab) › Comparazione variabili in linguaggio IL
- Questo topic ha 2 risposte, 2 partecipanti ed รจ stato aggiornato l'ultima volta 12 anni, 3 mesi fa da
Sergio Bertana.
-
AutorePost
-
Giugno 16, 2014 alle 6:37 am #35580
Mario
PartecipanteAllego un semplice programmino scritto in IL che sembra mostrare un malfunzionamento delle comparazioni dopo un ritorno da subroutine. La comparazione funziona regolarmente se la subroutine non è chiamata. Nel programma che segue se F01 è alto la comparazione LT 1000 non viene eseguita.
LD F01
JMPC LblA
JMP LblBLblA:
LD T01
ADD 1
ST T01
RETLblB:
LD T01
LT 1000
ST F02Come si fa a trasferire un programma sul PLC senza che vengano azzerate tutte le variabili ritentive.
Giugno 16, 2014 alle 6:44 am #38273Sergio Bertana
Amministratore del forumNel programma che hai scritto non vi è nessuna subroutine, nella normativa IEC non è possibile realizzare subroutines all’interno di un programma. Le funzioni o le FB devono essere definite come tali e solo dopo averle definite possono essere richiamate da programma.
Nel tuo programma se F01 è alto esegui un salto condizionato JMPC alla etichetta LblA dove incrementi T01 e poi con RET esci dal programma. Per eseguire una subroutine (Function in IEC 61131) devi definirla (Esempio AddValue) e poi eseguirla da IL. Allego la stampa del programma ed il codice sorgente.
LD F01
JMPCN Lbl (* Se F01 non attivo salto a label *)LD T01 (* Carico 1o operando funzione (Value) *)
AddValue 1 (* Eseguo funzione passando 2o operando (Increment) *)
ST T01 (* Memorizzo valore di ritorno da funzione *)Lbl:
LD T01
LT 1000
ST F02Giugno 16, 2014 alle 8:09 am #38274Sergio Bertana
Amministratore del forumAggiungo la risposta alla domanda sulle variabili ritentive, come riportato in questo topic, le variabili RETAIN sono inizializzate al loro valore di INIT al caricamento del programma. Se vuoi che rimangano settate al loro valore al caricamento del programma devi mapparle sulla DB 100 ad indirizzi a partire da 2048.
Come vedi nel programma di esempio del post precedente ho mappato le variabili in quest’area, attenzione alle variabili a WORD devono essere mappate ad indirizzi divisibili per 2. Le variabili DWORD o REAL devono essere mappate ad indirizzi divisibili per 4.
Cancellazione memoria, proprio perché le variabili RETAIN allocate nella DB 100 non sono inizializzate al caricamento del programma, se utilizzate, conviene effettuarne l’azzeramento per evitare di averle valorizzate a valori indesiderati. Per eseguire la cancellazione, connettersi in Telnet al sistema e dopo il login arrestare l’esecuzione del programma utente PLCCommand -stop, eseguire la cancellazione della memoria PLCCommand -mc e poi rimandare in esecuzione il programma PLCCommand -go, (Screenshot).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.