Pagina 1 di 1

Dichiarazione variabili in CoDeSys

MessaggioInviato: 2 nov 2012, 17:29
da Candy
La seguente dichiarazione è corretta:
Codice: Seleziona tutto
VAR_GLOBAL
   dwGvar1         AT %MD0         : DWORD;
   bGbit1          AT %MX0.0          : BOOL ;
END_VAR

Il bit bGbit1 è parte della variabile dwGvar1.
Mentre invece io sto tentando di fare qualcosa di diverso, ovvero dichiarare variabili senza allocazione specifica, così:
Codice: Seleziona tutto
VAR_GLOBAL
   dwGvar1                     : DWORD;
   bGbit1          AT dwGvar1          : BOOL ;
END_VAR

Ma il compilatore si rivolta e borbotta parecchio.

Il compilatore SCL di Siemens invece accetta questa forma:
Codice: Seleziona tutto
VAR_GLOBAL
   dwGvar1                       : DWORD;
   bGbits        AT dwGvar1 : ARRAY[0..31] OF BOOL ;
END_VAR

Che è meglio di niente. Ma CoDeSys nemmeno questa.

Risulta possibile dichiarare sia la variabile numerica, sia i singoli bit, con relativi nomi simbolici, senza specificarne l'allocazione? In che forma?

Re: Dichiarazione variabili in CoDeSys

MessaggioInviato: 3 nov 2012, 16:59
da AOX
Sembra che le variabili allocate dal compilatore siano meno accessibili di quelle dichiarate in posizione assoluta nella ram. Una domanda simile l'avevo già posta su questo forum. In C come fai a gestire il singolo bit di una variabile? Penso con le maschere e le operazioni logiche sulle word. Con lo stesso principio in CoDeSys hanno messo in libreria delle funzioni di manipolazione dei bit delle variabili.

Re: Dichiarazione variabili in CoDeSys

MessaggioInviato: 3 nov 2012, 18:17
da Candy
Si serto, me ne sono scritte anche io di simili funzioni. Ma, certo, un'istruzione orientata a bit è ben più veloce di una funzione con loop e maschere varie.

Re: Dichiarazione variabili in CoDeSys

MessaggioInviato: 3 nov 2012, 20:07
da AOX
Immagino che avrai già letto questa pagina dell'help online:
Codesys_bitadd.pdf
(10.16 KiB) Scaricato 522 volte
(manca l'ultima immagine). Questo sembra che sia il massimo delle possibilità sull'argomento.
La gestione mista a bit e byte è possibile se usi la memoria tipo M con indirizzamento assoluto che rispetto alle variabili dichiarate in testa al listato (e allocate dal compilatore dove gli fa comodo) richiedono di definire la posizione fisica nello spazio M.
Nei PLC, almeno tempo fa, mi sembra che le memorie fossero già tutte predefinite come allocazione, mentre la dichiarazione tipica di un linguaggio ad alto livello come il Basic o il C ne ha ereditato anche gli stessi limiti. Addirittura la variabile booleana in C alla fine è un byte intero. D'altra parte un processore non penso faccia prima a gestire un valore booleano lavorando su un singolo bit di un byte e alla fine impaccare 8 variabili booleane in un byte sarebbe una bella strozzatura per un compilatore.
Comunque se scopri qualche cosa mi interessa visto che mi capita spesso di ricevere una domanda come questa.