Linguaggio PLC (KOP / AWL)

Un saluto a tutti!

Siete liberi di prendermi per matto !!! ......ma comunque cercherò di portare a termine il progetto..... anche con l'aiuto molto ben accetto, di qualcuno che abbia voglia di dare il proprio contributo.

Il progetto lo chiamerò ARDUOPLC.

In passato ho realizzato un piccolo e semplice progetto per realizzare delle semplici applicazioni a scopo didattico.
Il progetto si chiamava FACILEPLC postato su www.facileplc.blogspot.com che ha avuto un feedback discreto.

Questo semplice progetto, serviva a realizzare un micro PLC a costo molto basso, programmabile in un linguaggio simile all' AWL di Siemens, chiamato da me FPLC completamente free.

Dopo una minuziosa ricerca nel web, ho riscontrato che esistono simulatori/programmatori come LadderPIC che somigliano molto a quello che vorrei realizzare io, o addirittura come il mastodontico AUTOMGEN 8, potentissimo software purtroppo non free che nella ultima versione ha inserito un tools per generare il codice in C compatibile con Arduino.

Lo scopo di questo progetto, è dare un piccolo contributo al mondo Arduino in campo della programmazione logica di tipo LADDER (KOP per Siemens) o IL logic (AWL per Siemens) dedicato a tutti i programmatori di PLC con una certa esperienza che vorrebbero realizzare qualcosa di semplice senza spendere troppo (anzi molto poco) o addirittura per realizzare delle demo con un linguaggio industriale.

Vi chiederete:
"Ma che bisogno c'è di creare questo, quando esiste un IDE che con il linguaggio C ci permette di gestire il microprocessore di Arduino come si vuole?"

Bene! Semplicemente perchè, chi come me, programma i PLC Siemens, GE-Fanuc o altri ancora, utilizzando da anni linguaggi prettamente logici o a contatti "LADDER" , non vuole scostarsi troppo dallo standard industriale e quindi tende a minimizzare la potenza e la versatilità di Arduino.

Esistono mini PLC che forniscono in kit il software di programmazione completo del PLC con prezzi relativamente bassi, come ad esempio CUBLOC, (ottimo dispositivo) che fornisce anche una programmazione in LADDER e BASIC nell' IDE gratuito.

Ecco che allora ho pensato : Perchè non creare qualcosa che possa interfacciare il mondo della programmazione PLC industriale con il favoloso mondo Arduino visto che in passato molti lo hanno richiesto, ma nessuno ha mai portato avanti questa idea?

Sarebbe bello poterlo inserire come tools nell' IDE di Arduino, per implementare la sua compatibilità di programmazione a livello tecnico/industriale e semplificarne molto il suo utilizzo.

Ecco una bozza descrittiva del progetto:

a) Realizzazione di un semplice software che possa testare e simulare la logica (in primis, demo, in futuro on line con l' hardware)
b) Realizzazione di un convertitore di linguaggio, da logico o Ladder a linguaggio C compatibile con Arduino.
c) Poter integrare sull'IDE di Arduino la possibilità di richiamere il tools se possibile, o leggere il file generato e programmare direttamente Arduino, che non ne sono sicuro, ma credo che sia già fattibile.

Per il punto a), ho iniziato a realizzare un simulatore di logica semplice che posterò prossimamente su www.arduoplc.blogspot.com ,realizzato in VisualBasic già funzionante comprendente le seguenti funzioni:
comandi logici: OR, OR NOT, AND, AND NOT, XOR, XOR NOT, SET, RESET, Fronte di salita, Fronte di discesa,Master control (RLC)
comandi di controllo: LABEL, GOTO
comandi di calcolo : ADD, SUBT, MOLT, DIV, Confronto (=, <>, >=, <=)
comandi di assegnazione: OUTPUT, MEMORY, REGISTER
32 fronti di salita
32 fronti di discesa
32 memorie digitali interne
32 registri di tipo integer +/- 32765 (per realizzare counter, timer e calcolo conversioni)

Previsione delle connessioni HW:
6 ingressi digitali fisici
6 uscite digitali fisiche
6 ingressi analogici

1 comunicazione Seriale/USB per il PC

Per il punto b), basterà utilizzare il linguaggio logico delle istruzioni, per creare dei rami in linguaggio C che verranno utilizzati per l'IDE, dove cominceranno tutti per "if", rispettando la logica del ramo "step" che deve essere eseguito. Il tutto sequenzialmente.
La configurazione degli I/O e la mappatura della memoria, sarà effettuata utilizzando un file di riferimento editabile e configurabile.

Che ne pensate ? :frowning:

---> http://cubloc.com/product/01_01cb210.php

Bene ora quello che io pensavo di studiare per il prossimo inverno, ora sono impegnato in altro progetto
che mi questo momento ha la priorità, ma se un pò più in la ti servisse un aiutino sarò ben felice.

Ivanred

Grazie PaoloP. :slight_smile:

Il riferimento che mi hai indicato (già evidenziato non direttamente nel mio primo post), è proprio quello che vorrei realizzare con Arduino, ma in un linguaggio logico simile all' AWL ed in un secondo momento in Ladder.

Ciao.

Ciao Ivanred. :grin:

Spero che tu possa aiutarmi prima, sempre che sia un argomento di tuo interesse.

Sto ultimando la demo del simulatore del linguaggio logico e penso per fine mese di postare il tutto con descrizioni ed istruzioni per l'uso.

Buona giornata.

Ciao,

tempo fa avevo trovato questo progetto di compilatore di logica Ladder: "Ladder Logic for PIC and AVR" (licenza GPL Version 3)

http://www.cq.cx/ladder.pl

e poi quest'altro articolo su come farlo funzionare con Arduino.

Credo possa essere utile al tuo progetto.

Ciao,
Marco.

Grazie Marco. :wink:

L'info è interessante e la libreria "ladder.h" potrebbe essere utilizzata per la mia applicazione.

Da tener conto che il simulatore LD ladderpic utilizza un linguaggio strettamente ladder, mentre io ne voglio realizzare uno in un linguaggio logico.

Grazie ancora.

Ciao

a differenza di facilepcl, dove oltre ad un lavoro sw hai dovuto creare anche l'hw, questo vuole essere solo un progetto sw ? e come hardware ArduinoUno ?

Non posso che fare gli auguri di successo ma ....
Da ormai vecchio programmatore di PLC dico di aver visto come una benedizione il passaggio da IL con tastierina dedicata a LADDER ; al tempo su un Compaq 8088 ; quello che chiuso sembra una macchina per cucire.
Ma la soddisfazione piu' grande e' stato l'avere fra le mani un tool IEC61131-3 , vale a dire un qualcosa che ti permette di scegliere il tipo di linguaggio
Ho praticamente abbandonato il Ladder per ST e cioe' la programmazione strutturata ; ci fai tutto e di piu'.
Il progetto puo' essere un buon esecizio di stile ma secondo me lo vedo poco utile
Se uno deve fare qualche lavoretto minimalista in Ladder si compra il LOGO Siemens
NON uccidetemi.

Bruno

Ciao Testato. :stuck_out_tongue_closed_eyes:

Si è proprio così, praticamente utilizzare arduino uno come base HW con 6 in dig, 6 out dig, 6 in ana e le relative memorie e registri interni.

Il simulatore, inizialmente testa il SW in linguaggio AWL, poi, compilato lo prepara per essere trasferito su arduino uno.

In un secondo momento, dovrò implementare la funzione on-line che permette di supervisionare il micro-plc, proprio come i veri tools di programmazione delle grandi case.

Come future, pensavo di implementare l'utilizzo di arduino mega, per utilizzarlo come CPU, ed eventualmente arduino uno come schede di implementazione I/O........... si ma sono ancora lontano. Inizio a preparare il micro plc con arduino uno.

Buona serata.

Ciao Bruno.

Certo, hai ragione!

Sai, cerco solo, come ho detto nel primo post, di dare un piccolo contributo alla flessibilità di questo strumento.

Il tools di cui parli credo non sia gratuito, e sicuramente le potenzialità nemmeno da confrontare con questo francobollo personalizzato.

Ecco che cosa intendo per piccolo contributo, qualcosa di gratuito alla portata di tutti che possa integrare un linguaggio logico diverso dal C.

Grazie per il chiarimento. Spero, una volta postato il tutto, di avere un tuo feedbak qualsiasi esso sia, sempre ben accetto.

Ciao.

[quote author=Giuseppe G. link=topic=88703.msg670620#msg670620 date=1327854843]Spero, una volta postato il tutto, di avere un tuo feedbak qualsiasi esso sia, sempre ben accetto.[/quote]Sicuramente faro' prove e cerchero' di dare almeno dei consigli
Il mio pensiero era rivolto al fatto che un linguaggio strutturato e' molto piu' flessibile di un Ladder
Ci crei dei costrutti anche complessi che in Ladder richiedono flags di appoggio anche in funzione del fatto che gli elementi nella riga sono in numero limitato
Con il Ladder ci ho lavorato 'na vita e ci lavoro pure adesso
Avendo pero' avuto l'opportunita di avere per le mani un sistema CNC/PLC con il summenzionato tool ( LogicLab per la cronaca ) ho assaporato nuove vie che ricordavo solo nei miei lavoretti hobbistici fatti in Basic
Con Arduino sto' raccantando i pezzi per farmi ( o meglio per farlo a mia moglie ) un "semaforo" che indichi i flussi di corrente nel nostro impianto elettrico con fotovoltaico sul tetto , cosi non mi stressa piu' per sapere se puo attaccare una o due lavatrici in contemporane :slight_smile:
Buon lavoro .. seguiro lo volgersi dll'opera.
Ciao
Bruno

buon lavoro anche da parte mia,
se potro' essere utile come tester sono qui :slight_smile:

Per Giuseppe
mi scuso per il ritardo ma sono stato molto impegnato in questi giorni (neve e ancora neve)
ti aiuto ben volentieri ma in questo periodo posso fare il tester o poco più.
Anni fa ho usato i sistemi S5 di Siemens quindi conoscevo bene ladder ho usato anche il Kop e ovviamente l'AWL.
Vedo che ti hanno già postato il LINK di ladder.pl era a il progetto a cui volevo far riferimento,
vai avanti che quello che stai fancendo è l'ideale per l'hobbysta e per chi non vuole perdere tempo per imparare in nuovo linguaggio.
Domani sera faccio un giro sul forum..
Saluti
Ivanred

:slight_smile: ho le lacrime agli occhi!!!

io mi occupo di sistemi di automazione PLC (SIEMENS) SCADA, DCS, telecontrollo, sviluppo abitualmente in AWL per la flessibilità e la potenza del linguaggio, inoltre a parità di funzioni logiche programmate, AWL utilizza molta meno memoria rispetto ad un linguaggio KOP (ladder) o FUP (porte logiche), dettaglio non trascurabile se si intende utilizzare Arduino come base hardware del sistema PLC.

disponibilissimo!!!

fatemi sapere :slight_smile:

saluti
kattivik76

Buon giorno a tutti.

Mi fà piacere che qualcuno sia interessato al progetto.

Bene ho giusto qualche domanda da rivolgerVi per il linguaggio da utilizzare.

Pensavo ad un linguaggio leggermente diverso dall' AWL, in quanto Siemens potrebbe richiedere i diritti d'autore e bloccare il progetto, visto che è un linguaggio proprietario, così mi sono inventato FPLC (Facile PLC) che si discosa solo nelle sigle di comando.

Qui sotto riporto alcuni dei comandi Semens originali e il corrispettivo FPLC (una sorta di miscuglio tra Siemens e GeFanuc):

Siemens FPLC
O or O
ON ornot NO
U and A
UN andnot NA
X xor X
XN xornot NX
= assegna =
S set SE
R reset RE

FP fronte di salita FP
FN fronte di disc. FN

Ex.x input dig Ix
Ax.x output dig Qx
Mx.x memory dig Mx
DBWx registro 16bit Rx
PEWx input ana AIx

Vorrei qualche consulenza su questo argomento, in quanto il simulatore è pronto con i comandi in FPLC. Cosa ne pensate?
Meglio utilizzare i comandi AWL originali (sempre che si possa fare) o FPLC?

Aspetto una Vostra conferma per postare la prima versione del simulatore.

PS: Se siete interessati al sorgente in VB6 del simulatore, fatemi sapere il Vostro indirizzo di posta inviandomi una richiesta a cimice96@hotmail.it

Un saluto a tutti.

Giuseppe G.

Ciao Giuseppe,

penso che il fatto di utilizzare il linguaggio AWL non sia un problema per quanto riguarda siemens, non credo, e non ho trovato nessun riferimento in merito, che il linguaggio AWL sia depositato e non utilizzabile a livello di implementazione in progetti customizzati, ad esempio la funzione OR, definita o I0.0 non penso che abbiano depositato la "o" :wink: credo che non ci siano problemi al riguardo.

potrei per sicurezza contattare il supporto tecnico di siemens automation e chiedere conferma direttamente a loro :wink:

una cosa differente sarebbe l'utilizzo di step7 "ufficioso" per la programmazione di arduino, ma non credo sia il nostro caso!!!

ti allego il mnemonico completo del linguaggio AWL, secondo me la versione inglese che ho evidenziato, è la più facile... anzi, la meno difficile da capire ed utilizzare...

ti ho mandato una mail all'indirizzo che hai lasciato sul post precedente.

saluti
kattivik76

mnemonik_tabelle_i.pdf (58 KB)

La mia opinione l'ho gia' espressa piu' sopra
Torno a scrivere per chiederti se hai previsto l'implementazione di temporizzatori
E , se affermativo , come intendi svilupparli

Lo chiedo perche' ho sviluppato una piccola applicazione dove ho inserito 2 Timer , ritardati all'eccitazione per essere precisi , e devo dire che per fare 'na roba fatta bene che si comporti come una riga ladder bisogna scrivere qualche riga
Avendoli appoggiati sul millis ho tenuto conto anche del suo overflow ; vedere discussione in proposito .

Visto che i Timer oltre il centesimo non servono mai , con il senno di poi , avrei fatto meglio crearmi un clock centesimale ed utilizzare questo su dei contatori
A te la replica

Concordo con brunol949 sono necessari i temporizzatori e non solo quelli da qualche millisec e i monostabili.
per quanto riguarda il linguaggio non so se l'AWL è protetto da diritti ma scusa il "tuo" linguaggio l'hai scritto nella colonna centrale es. se vuoi fare il SET perchè lo devi chiamare in un altro modo?
SET RESet OR AND NOT sono universali nel mondo del elettronica ricorda che quando Siemens ha fatto l'AWL non ha nientaltro che usato il tedesco al posto dell'inglese Einsgang in crucco vuol dire ingresso Input in inglese, Ausgang (o qualcosa del genere) uscita Output.
Spero di esserti stato utile.

Saluti e buon lavoro

Ivanred

x brunol949

Visto che i Timer oltre il centesimo non servono mai , con il senno di poi , avrei fatto meglio crearmi un clock centesimale ed utilizzare questo su dei contatori

Inizialmente ho previsto dei contatori che tramite il ciclo del programma prevede un clock massimo di 1 decimo di secondo, cioè il ciclo completo di esecuzione in cascata, sarà di 100ms (10 cicli al secondo) per un massimo di 196 istruzioni FPLC.

Relativamente poco, ma occorre poi vedere lo spazio occupato in linguaggio C una volta compilato ed inserito su Arduino.

Credo che almeno a 2k (2000 istruzioni) si possa poi tranquillamente arrivare.

Da tener conto che la gestione dei timer effettivamente diventa un pò più complessa, nel momento in cui, occorre gestire tempi che potrebbero non essere soddisfatti dalla velocità del micro con un programma FPLC complesso.

Al momento si possono realizzare solo timer con ritardo all' eccitazione o dei counter UP e DOWN per i quali abbiamo a disposizione 32 registri a 16 bit utilizzabili a piacere (anche questi eventualmente implementabili in futuro se lo spazio di memoria lo consente)

x ivanred

per quanto riguarda il linguaggio non so se l'AWL è protetto da diritti ma scusa il "tuo" linguaggio l'hai scritto nella colonna centrale es. se vuoi fare il SET perchè lo devi chiamare in un altro modo?

Proprio perchè la struttura dell' AWL è identica o molto simile a FPLC.
Altro motivo, è legato alla lettura dei comandi che al momento vengono interpretati da due lettere ben distinte (es. BE = Block End oppure SE = Set Enabled e così via).

Un Saluto a tutti. :slight_smile:
Giuseppe G.