Vai al contenuto

Comparazione variabili in linguaggio IL

Home Forum Programmazione IEC 61131 (LogicLab) Comparazione variabili in linguaggio IL

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Autore
    Post
  • #35580
    Mario
    Partecipante

    Allego 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 LblB

    LblA:
      LD T01
      ADD 1
      ST T01
      RET

    LblB:
      LD T01
      LT 1000
      ST F02

    Come si fa a trasferire un programma sul PLC senza che vengano azzerate tutte le variabili ritentive.

    #38273
    Sergio Bertana
    Amministratore del forum

    Nel 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 F02

    #38274
    Sergio Bertana
    Amministratore del forum

    Aggiungo 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).

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Devi essere connesso per rispondere a questo topic.