Vai al contenuto

Esempi programmazione in IEC61131

Home Forum Programmazione IEC 61131 (LogicLab) Esempi programmazione in IEC61131

Stai visualizzando 15 post - dal 1 a 15 (di 15 totali)
  • Autore
    Post
  • #35185
    Anonimo
    Inattivo

    Premetto che sono un neofita di questo tipo di programmazione, dovrei risolvere questa problematica:

    Alla pressione di un interruttore il sistema fa partire un timer che calcola il tempo di pressione, al rilascio dello stesso il sistema confronta il tempo con 2 tempi di riferimento ed aggiunge una unità al contatore o di una o dell’altra. Il flusso logico non è difficile ma mi potete dare un esempio di come si realizza utilizzando la CPU SlimLine.

    #37174
    Sergio Bertana
    Amministratore del forum

    La domanda non è chiarissima, ho cercato di interpretarla, ho realizzato un semplice progetto LogicLab che utilizza due programmi. Il controllo del tempo viene eseguito sull’ingresso 0 del modulo CPU di SlimLine, ma può essere facilmente modificato per gestire ingressi logici da qualsiasi modulo di estensione.

    LogicIO: Programma in LD, esegue l’acquisizione dei due ingressi sul modulo CPU di SlimLine.
    CheckTime: Programma in ST, esegue il calcolo del tempo di attivazione e gestisce i counters.

    Ho definito 3 soglie di tempo e 4 counters, un counter per ogni soglia ed uno se il valore di tempo è inferiore alla 1a soglia. I tempi sono calcolati in uS, se tempo inferiore ad 1 secondo viene incrementato il Counter[0], tempo tra 1 e 2 secondi  viene incrementato il Counter[1], tempo tra 2 e 3 secondi viene incrementato il Counter[2], tempo superiore a 3 secondi viene incrementato il Counter[3].

    Download stampa programma e programma sorgente.

    #37175
    Anonimo
    Inattivo

    In primis ringrazio molto dellla risposta, sto cercando di capire come funziona il tutto, e per chiarezza di informazione cerco di spiegare cosa vorrei realizzare. Devo contare i sacchi che passano nella linea di produzione quindi vorrei utilizzare un sensore che chiude il contatto al passaggio del sacco poi in funzione del tempo che il contatto rimane chiuso posso identificare che tipo di sacco è il piccolo o il grande e aggiungo 1 o nella variabile piccolo o nella variabile grande. Poi ci sarà una richiesta da parte del PC al PLC che preleverà i tolali e li azzera.

    Spero di essere stato esaustivo. Una domanda lo posso provare con il simulatore di PLC virtuale ?

    Questo è un mondo che mi affascina, ho programmato quasi tutto nella mia vita ma l’automazione aziendale ancora mi manca, nonostante la mia veneranda età 47 ho sempre voglia di capire (per fortuna).

    #37176
    Sergio Bertana
    Amministratore del forum

    Ora è tutto chiaro, quindi avendo bisogno di un solo ingresso digitale, puoi utilizzare il solo modulo CPU che dispone di 2 ingressi digitali. Per contare i sacchi quindi occorre verificare il tempo di attivazione dell’ingresso che potrebbe essere una fotocellula di lettura sacco.
     
    Nel programma prevederò due valori di tempo soglia minimo e massimo per i due tipi di sacco. Se il tempo è compreso nel range del sacco piccolo incrementerò il numero di sacchi piccoli, se il tempo è compreso nel range del sacco grande incrementerò il numero di sacchi grandi. Tutti i tempi non compresi in questo range saranno scartati (Errore di lettura).
     
    Ti realizzo un programma completamente testabile sul simulatore PC, attivando opportunamente l’ingresso Fotocellula vedrai gestire i counters di sacco. Nel programma ho realizzato un blocco funzione TimeRange che poi viene utilizzato in linguaggio ladder per gestire il conteggio sacchi.
     
    L’FB TimeRange ha un ingresso a cui collegare l’ingresso di fotocellula e prevede la definizione di un tempo minimo e massimo di attivazione ingresso. Se l’ingresso è attivato per un tempo compreso nel range si attiva per un loop di programma l’uscita Ok che gestisce l’incremento del counter di sacco.
     
    Nella task di Boot viene eseguito il programma StartUp che definisce le etichette ed i ranges delle variabili sul simulatore in modo da personalizzarlo per il tuo programma (Screenshot). Per aggiornare le etichette occorre dopo avere trasferito il programma nel simulatore agire sul tasto Reboot Plc.
     
    Usandolo sul simulatore potrai vedere i valori sia nel simulatore che in debug, mentre per la tua applicazione devi usare forzatamente un modulo CPU SlimLine e per leggere i valori puoi utilizzare un pannello operatore oppure un programma su PC utilizzando il protocollo Modbus RTU oppure Modbus over IP. Stampa programma e download programma sorgente.

    #37201
    Anonimo
    Inattivo

    Finalmente oggi dovrebbe essere partita la cpu e dovrei riceverla domani o al massimo dopo domani.

    Sempre perché sono un neofita mi saprebbe direche tipo di rilevatore utilizzare per contare i sacchi che vadano bene con la cpu ? Ne esistono veramente moltissimi.

    #37202
    Sergio Bertana
    Amministratore del forum

    I 2 ingressi digitali della CPU come tutti gli ingressi digitali dei moduli di espansione sono optoisolati ed accettano una tensione in ingresso nel range da 10 a 30 Volt. Per il conteggio dei sacchi mi parlavi di utilizzare una fotocellula a sbarramento il cui fascio viene interrotto dal passaggio del sacco.

    Sul mercato esistono moltissimi tipi di fotocellule, non ti posso dare una indicazione precisa, cito ad esempio il sensore a sbarramento E3F2 della Omron (Vedi datasheet).

    Ti consiglio di cercare da un rivenditore di materiale elettromeccanico oppure effettuando una ricerca con il termine sensori fotoelettrici sul sito RS components.

    #37207
    Anonimo
    Inattivo

    Ho collegato il tutto ma quando cambio target e lo compilo mi da una serie di errori di variabili non definite

    BagCounter(1$O:5) – error A4097:  VarOut0 => Object not found
    BagCounter(1$O:5) – error A4097:  VarOut0 => Object not found
    BagCounter(2$O:5) – error A4097:  VarOut1 => Object not found
    BagCounter(2$O:5) – error A4097:  VarOut1 => Object not found
    StartUp(6) – error A4097:  CfgLogInp0Descr => Object not found
    StartUp(8) – error A4097:  CfgVarOut0Min => Object not found
    StartUp(9) – error A4097:  CfgVarOut0Max => Object not found
    StartUp(10) – error A4097:  CfgVarOut0Descr => Object not found
    StartUp(12) – error A4097:  CfgVarOut1Min => Object not found
    StartUp(13) – error A4097:  CfgVarOut1Max => Object not found
    StartUp(14) – error A4097:  CfgVarOut1Descr => Object not found

    Come mai ?

    #37208
    Sergio Bertana
    Amministratore del forum

    E’ normale che dia quegli errori, la variabili VarOut0 e VarOut1 sono variabili definite solo nel simulatore, quindi sul target reale non vengono trovate. Occorre definire due variabili una per il conteggio dei sacchi piccoli ed una per il conteggio dei sacchi grandi. Ti ho modificato il programma definendo le variabili:

    SacchiPiccoli AT %MW100.16 : UINT; { DE:”Numero sacchi piccoli” }
    SacchiGrandi AT %MW100.18 : UINT; { DE:”Numero sacchi grandi” }

    Da notare che le ho allocate in memoria ad indirizzo fisso, in questo modo sono accessibili da modbus. Ad esempio utilizzando un terminale operatore touch screen basterà creare una pagina con due oggetti di visualizzazione variabili uno che legge l’indirizzo modbus 40008 (Per visualizzare il numero di sacchi piccoli) e l’altro che legge l’indirizzo modbus 40009 (Per visualizzare il numero di sacchi grandi).

    Tutti gli errori del programma StatUp sono anche loro connessi all’uso di variabili che parametrizzano il simulatore. Tutto il programma StartUp non serve sul sistema reale e quindi l’ho eliminato. Ecco la stampa del programma ed il codice sorgente.

    #37211
    Anonimo
    Inattivo

    Come posso interrogare il valore dei dei contatori ed eseguire il loro reset da software esterno in .net per esempio ?
    Lo posso fare via Lan o devo accedere via rs232 ?

    #37212
    Sergio Bertana
    Amministratore del forum

    I sistemi SlimLine supportano il protocollo Modbus Ascii ed Rtu (Vedi Modbus Protocol Reference) sulle porte seriali (Bisogna configurarlo dalla pagina web del prodotto), e over IP dalla interfaccia ethernet (Vedi Modbus messaging on TCP/IP).
     
    Come ho scritto nel post precedente le variabili di conteggio sacchi sono state appoggiate su valori UINT allocati nella DB100 dello SlimLine e questo permette di leggerne e scriverne il valore (Quindi resettarle) da modbus. Il protocollo modbus è uno standard “de facto” e quindi si trova molta documentazione su come implementarlo.
     
    Nel nostro forum si trovano molte informazioni sul modbus, in questo post c’è una implementazione in Php.

    #37213
    Sergio Bertana
    Amministratore del forum

    In alternativa all’utilizzo di Modbus, come già espresso in questo post, su SlimLine utilizzando il blocco funzione SysSktListen è possibile mettere in ascolto su di una porta TCP un socket e gestire lo scambio dati su di esso, la stessa cosa è possibile da porta seriale.

    Utilizzando quindi i metodi classici Sysfopen, Sysfgetc, Sysfputc, SysVarsscanf, SysVarfprintf è possibile ricevere e trasmettere dati sia da porta seriale che da socket TCP/IP, questo rende possibile creare una propria gestione di un qualsiasi protocollo di comunicazione.

    Ecco quindi che nel tuo caso è possibile realizzare la gestione di un semplice protocollo su TCP/IP per acquisire il valore dei contatori e per resettarli. Ho aggiunto al programma di conteggio sacchi anche la gestione della ciomunicazione TCP con i comandi di lettura valore contatori e reset.

    Aprendo la connessione con un client Telnet (Esempio Toolly) sulla porta 2000 (Vedi Screenshot), verrà visualizzato un messaggio di Welcome, poi inviando il comando ?C<CR> viene ritornato il valore dei due contatori ed inviando il comando !C<CR> il valore dei due contatori viene resettato, stampa e download programma sorgente.

    #37229
    Anonimo
    Inattivo

    La ringrazio della sua disponibilità, ho come mi ha consigliato acquistato una fotocellula Omron E3F2-R4B4-M1-M ho collegato il marrone al V+ il blu al V- il bianco al DI00 del PLC ed il nero a DICom.

    Quando accendo il tutto vedo che interrompendo il flusso il LED sulla fotocellula si accende ma i contatori non si incrementano, e neppure se vado in debug live nel ladder vedo il contatto di Fotocellula attivarsi. Cosa sbaglio ??

    #37230
    Sergio Bertana
    Amministratore del forum

    Vediamo il significato di ogni filo della fotocellula Omron, dalla documentazione che ho allegato nel post precedente non vi è cenno al colore bianco che tu riporti, ma cercando su Internet penso di poter dire che:

    Pin 1, Marrone: Power supply (V+)
    Pin 2, Bianco: Mode selection (Lon/Don)
    Pin 3, Blù: Power supply (GND)
    Pin 4, Nero: Uscita

    La fotocellula che tu hai scelto è di tipo PNP, quindi ha una uscita (Pin 4) cha và a V+ quando attiva (LED acceso). Sono corrette le connessioni della alimentazione (Marrone e Blù) ma il Nero và connesso al DI00 ed il DICom và connesso al GND (Insieme al filo Blù).

    Il filo bianco scambia il modo di uscita attivo/disattivo se fotocellula illuminata, lo puoi lasciare libero.

    #37474
    Anonimo
    Inattivo

    Il sistema SlimLine funziona alla grande ho solo un piccolo problema se il sacco non viene riconosciuto ne grande ne piccolo si perde. Come faccio ad ampliare i contatori creandone uno nuovo che totalizzi tutti quelli che esulano dagli altri range ?

    #37475
    Sergio Bertana
    Amministratore del forum

    L’idea più semplice che mi viene è di aggiungere un ramo nel programma con un altro blocco funzione TimeRange definendo come tempi valori piccoli (Esempio TimeMin 100mS  e TimeMax 100 mS), questo ti permetterà di conteggiare tutti i sacchi, sarà poi il programma da PC a gestire il conteggio corretto.

    L’algoritmo potrebbe essere, viene incrementato il numero di sachi totali, se nell’arco di 5 Secondi non si ha incremento di nessuno degli altri contatori, sacco perso.

    La stessa cosa è fattibile da programma PLC… provare per credere…

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