Esempi programmazione in IEC61131
Home › Forum › Programmazione IEC 61131 (LogicLab) › Esempi programmazione in IEC61131
- Questo topic ha 14 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 5 mesi fa da
Sergio Bertana.
-
AutorePost
-
Marzo 20, 2012 alle 8:32 am #35185
Anonimo
InattivoPremetto 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.
Marzo 20, 2012 alle 10:24 am #37174Sergio Bertana
Amministratore del forumLa 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.
Marzo 20, 2012 alle 2:20 pm #37175Anonimo
InattivoIn 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).
Marzo 20, 2012 alle 3:00 pm #37176Sergio Bertana
Amministratore del forumOra è 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.Aprile 10, 2012 alle 3:59 pm #37201Anonimo
InattivoFinalmente 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.
Aprile 11, 2012 alle 6:07 am #37202Sergio Bertana
Amministratore del forumI 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.
Aprile 16, 2012 alle 12:37 pm #37207Anonimo
InattivoHo 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 foundCome mai ?
Aprile 16, 2012 alle 2:05 pm #37208Sergio Bertana
Amministratore del forumE’ 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.
Aprile 17, 2012 alle 6:56 am #37211Anonimo
InattivoCome 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 ?Aprile 17, 2012 alle 7:46 am #37212Sergio Bertana
Amministratore del forumI 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.Aprile 17, 2012 alle 8:04 am #37213Sergio Bertana
Amministratore del forumIn 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.
Aprile 23, 2012 alle 12:38 pm #37229Anonimo
InattivoLa 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 ??
Aprile 24, 2012 alle 12:23 pm #37230Sergio Bertana
Amministratore del forumVediamo 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: UscitaLa 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.
Novembre 13, 2012 alle 10:58 am #37474Anonimo
InattivoIl 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 ?
Novembre 13, 2012 alle 5:07 pm #37475Sergio Bertana
Amministratore del forumL’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…
-
AutorePost
- Devi essere connesso per rispondere a questo topic.