Associazione di un simbolo a una variabile PLC

PLC, servomotori, inverter...robot

Moderatori: Foto Utentedimaios, Foto Utentecarlomariamanenti

Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
Messaggi: 232
Iscritto il: 20 mar 2011, 11:29
Contatta:
0
voti

[1] Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteAOX » 19 giu 2011, 16:37

Mi rivolgo a quanti ne sanno ben più di me di programmazione PLC visto che uso principalmente il C.
Se ho definito una variabile per esempio di tipo byte come questa:

VAR_GLOBAL
MyByte: BYTE;
END_VAR

esiste un modo per assegnare un simbolo di equivalenza per esempio ad uno dei bit della variabile tipo come si farebbe, ipoteticamente parlando, in una macro in C:

#define MyBit MyByte.3

per utilizzare la variabile booleana MyBit nel programma in alternativa a MyByte.3 ???

Grazie, mi risolvereste un dubbio che ho da un po' di tempo...

Avatar utente
Foto UtenteIvan_Iamoni
5.336 6 10 12
Utente disattivato per decisione dell'amministrazione proprietaria del sito
Messaggi: 2330
Iscritto il: 22 ott 2006, 18:45
1
voti

[2] Re: Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteIvan_Iamoni » 20 giu 2011, 4:13

Ciao AOX, dipende dal tipo di piattaforma di programmazione parli.
In ogni caso, l'assegnazione "simbolica" di un operando, a cui credo ti stia riferendo, sia esso un bit oppure un byte è una pura formalità a livello di editazione, il codice sorgente non ne tiene conto.
Nel caso di un PLC Siemens, le variabili Globali sono contenute ed organizzate in area dati chiamata DB di tipo globale, in caso di assegnazione simbolica, questa viene fatta bit per bit o byte per byte tramite un secondo strumento di editazione simboli.
In linea generale, quando in un DB si assegnano delle variabili, queste posso essere lette in forma assoluta tramite la seguente dizione:

L DB1.DBD0 // Legge la doppia parola contenuta a partire dall'indirizzo zero del DB 1
L DB1.DBW0 // Legge la parola contenuta a partire dall'indirizzo zero del DB 1
L DB1.DBB0 // Legge il primo byte a partire dall'indirizzo zero del DB 1
U DB1.DBX0.1 // interroga lo stato del secondo bit a partire dall'indirizzo zero del DB 1
U DB1.DBX0.2 // interroga lo stato del terzo bit a partire dall'indirizzo zero del DB 1

E così via.......

Volendo usare un assegnazione simbolica, le cose si complicano un pochino, nel senso che il simbolo assegnato è univoco e non può essere frazionato.
Per spiegrami meglio, se assegno il simbolo "Pippo" al blocco dati DB1 , posso assegnare anche il simbolo "Pluto" al primo byte, così andrò a sostituire l'espressione L DB1.DBB0 con L "Pippo"."Pluto".
Purtroppo qui mi fermo, nel senso che in termini assoluti, posso anche interrogare lo stato del primo bit di "Pluto", ma solo in questo modo consentito dal compilatore U DB1.DBX0.0

Nel caso si usasse un PLC Allen Bradley, si può fare benissimo il discorso che accenni.
Nel caso di una variabile globale , che chiamo "Pippo" e dichiaro come Decimale e INT , posso usarla nel programma come : Pippo a livello di byte oppure Pippo.0 oppure Pippo.1 a livello di singolo bit.

Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
Messaggi: 232
Iscritto il: 20 mar 2011, 11:29
Contatta:
0
voti

[3] Re: Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteAOX » 20 giu 2011, 8:31

Ti ringrazio della dettagliata spiegazione. Il mio caso è molto prossimo a quello del Allen Bradley probabilmente perché la mia esigenza nasce dal linguaggio standardizzato dalla IEC61131-3.
In tal caso è possibile utilizzare la notazione Pippo.0 o Pippo.1 per entrare nel singolo bit di un byte dichiarato tutto intero. La mia domanda, partendo da questo punto, è se sia previsto nel IEC un modo per dare un nome simbolico, e quindi più facile da ricordare, a tale espressione a bit in modo da usare per esempio il simbolo Start per individuare un singolo bit. Questo mi serve per esempio se leggendo da seriale un byte che corrisponde ad un canale di 8 ingressi voglio indirizzare un singolo ingresso con un simbolico. Per vie traverse una soluzione si trova ma mi chiedevo se esiste un metodo più diretto visto che sono previste delle sintassi vicine, ma non esattamente, a quello che vorrei:


TYPE <Identifier>: <Assignment term>;
END_TYPE

provando:
TYPE MyBit: Pippo.0;
non gli sta bene....


oppure:


var
MyBit AT %IB1.2: BOOL;
END_VAR

che lavora però solo con l'indirizzo assoluto del byte e non con una variabile qualsiasi


oppure:

**********************
**********************
If you have declared a global constant, which defines the bit-index, you can use this constant for a bitaccess.
Declaration in global variables list for both examples:
Variable enable defines which bit should be accessed:

VAR_GLOBAL CONSTANT
enable:int:=2;
END_VAR

Example 1, Bitaccess on an integer variable:

Declaration in POU:
var
xxx:int;
END_VAR

Bitaccess:
xxx.enable:=true; -> the third bit in variable xxx will be set TRUE
*********************
*********************

che al limite permette di tenersi dietro l'identificativo enable che ricorda il significato.

Avatar utente
Foto UtenteIvan_Iamoni
5.336 6 10 12
Utente disattivato per decisione dell'amministrazione proprietaria del sito
Messaggi: 2330
Iscritto il: 22 ott 2006, 18:45
0
voti

[4] Re: Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteIvan_Iamoni » 24 giu 2011, 9:27

Per quanto mi è dato sapere, la descrizione più dettagliata possibile al momento è quella dell'esempio di AB che ti avevo dato.
Questo è un esempio di visualizzazione della tabella variabili globali del PLC in questione.
Assignement_Table.JPG
Assignement_Table.JPG (87.53 KiB) Visto 2562 volte

La descrizione della variabile nello schema ladder appare così come la vedi nella radice a sinistra.
Credo che lo standard IEC non scenda in un simile dettaglio di editazione dei commenti, ma si limiti a definire la tipologia di linguaggio, la struttura generale, e la tipologia del set funzioni, standard da usare.
Questi "dettagli" sono diversi a seconda dell'editor di programma usato.

Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
Messaggi: 232
Iscritto il: 20 mar 2011, 11:29
Contatta:
0
voti

[5] Re: Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteAOX » 24 giu 2011, 16:54

Forse se la seconda colonna "Alias For" serve a dare un nome simbolico al singolo bit allora siamo praticamente prossimi a quello che intendevo. Comunque in ogni caso è una sostituzione di testo con testo a livello di preprocessor ossia prima della compilazione vera e propria e quindi specifico dell'ambiente di sviluppo.
Nel IEC esiste la possibilità di usare i singoli bit di qualsiasi variabile dichiarata intera usando la notazione pippo.0 ed inoltre si può anche dichiarare una variabile booleana con un nome simbolico imponendogli di essere un particolare bit di una variabile intera ma questo mi sembra valga solo se riferita ad indirizzi assoluti come le variabili dichiarate %IB, %QB e %MB ma non su variabili rilocabili arbitrariamente dal compilatore.
Grazie per la risposta e l'interessamento a questo mio dubbio che comunque ha già fatto un passo avanti.
Ciao
Aldo

Avatar utente
Foto UtenteIvan_Iamoni
5.336 6 10 12
Utente disattivato per decisione dell'amministrazione proprietaria del sito
Messaggi: 2330
Iscritto il: 22 ott 2006, 18:45
0
voti

[6] Re: Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteIvan_Iamoni » 25 giu 2011, 23:43

Forse se la seconda colonna "Alias For" serve a dare un nome simbolico al singolo bit........

No mi dispiace, non ci siamo AOX, quell'Alias, serve solo ad associare al TAG un'altra descrizione che riporta comunque allo stesso valore, se la dichiarazione del tag è INT resta uguale quindi "alias".0 "Alias.1" etc. etc.
Toglimi una curiosità, stai realizzando l'interfaccia di programmazione del tuo PLC?

Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
Messaggi: 232
Iscritto il: 20 mar 2011, 11:29
Contatta:
0
voti

[7] Re: Associazione di un simbolo a una variabile PLC

Messaggioda Foto UtenteAOX » 26 giu 2011, 8:11

Per fortuna l'interfaccia di programmazione è già fatta in quanto è CoDeSys, anche se già da tempo ho fatto compilatori di listati plc gestendo le label associate all'indirizzo qualsiasi (byte o bit). Tuttavia dovendo inteagire con questo anche a livello di firmware in C sotto CoDeSys mi servirebbe associare un nome simbolico al singolo bit di un byte dichiarato globale, senza dichiarare esplicitamente le singole variabili booleane. Per esempio quando uso uno slave CANopen il tool ti da la possibilità di vedere anche i singoli bit dei canali di ingresso e di associargli anche un nome. Questo è integrato nel tool mentre io parallelamente vorrei creare una cosa analoga per i canali di IO di schede di espansione in RS485 mie proprietarie e non in CANopen. Ho già raggiunto da un po' questa integrazione ma per presentarlo all'utente finale nel modo più semplice possibile vorrei fare anche questo passo. Per ora ho fatto dei programmi esterni .exe che traducono un file di definizioni in testo esterno in un formato importabile nell'ambiente, ma il configuratore esterno è più scomodo di quello integrato. Però se uno ha la possibilità nell'applicativo di fare la stesa delle proprie associazioni ai bit allora mi posso limitare a fornire pronto e comunicato solo l'intero byte della periferica.
Ciao
Aldo


Torna a “Automazione industriale ed azionamenti”