Vai al contenuto
PLC Forum


Accesso a struct Bool come byte/word


fiorezzz

Messaggi consigliati

Salve a tutti

Mi capita di usare delle strutture di dati  Bool utilizzati al posto dei singoli Merker (tipo pippo.bit0 ..pippo.bit1 ..pippo.bit2 ecc. anzichè  M1.0 M1.1 M1.2

A volte oltre ad un accesso come bit mi interessa accedere come byte/word  (se fossero merker li raggrupperei tipo L MW1 ..L MB1 ecc)

Sia per leggere se tutti i bit  sono  a zero o impostarli tutti a zero  

Io non trovo di meglio che fare delle singole routine a cui passo la struct per poi azzerare o interrogare i singoli bit

Ci sono soluzioni ad accesso simbolico + furbo ? (non voglio utilizzare  riferimenti assoluti tramite i classici puntatori )  

Link al commento
Condividi su altri siti


Argomento ricorrente.
Dai un'occhiata alla "Sovrapposizione con AT" (se fai una ricerca nella guida in linea ti rimanda subito all'argomento) e alle istruzioni GATHER e SCATTER.
Personalmente preferisco usare gather e scatter, ma si tratta di scelte personali.

Link al commento
Condividi su altri siti

33 minuti fa, batta ha scritto:

Dai un'occhiata alla "Sovrapposizione con AT" (se fai una ricerca nella guida in linea ti rimanda subito all'argomento) e alle istruzioni GATHER e SCATTER.
Personalmente preferisco usare gather e scatter, ma si tratta di scelte personali.

Sul 300?

Link al commento
Condividi su altri siti

Sarei anche in ambiente TIA ..ma lavoro con una CPU ancora Step7 (un bel mix che mi confonde sempre le idee) e quindi molte funzionalità TIA CPU..1200/1500 non sono disponibili 

Link al commento
Condividi su altri siti

1 ora fa, fiorezzz ha scritto:

e quindi molte funzionalità TIA CPU..1200/1500 non sono disponibili 

Le funzionalità del 1200/1500 sul 300 non le hai, sia che usi li step7 o che usi il TIA.
Strutture di dati intendi DB, nel 300 anche le db hanno l'indirizzo, es DB1.DBX0.0 - 0.1 - 0.2......., e gli stessi bit si possono raggruppare a byte e a word come i merker, DB1.DBB0 per i byte e DB1.DBW0 per le word e DB1.DBD0 per le doppie word. 

Link al commento
Condividi su altri siti

OK Ma 

Ho una struct di BOOL  DB100.Pippo.M1 ..DB100.PIPPO.M2  ..o meglio db100.dbx0.1 Db100.dbx0.2 ..ma ci accedo appunto in modo simbolico DBnn.Pippo.M2 ..PIPPO.M1

quando in un solo colpo voglio azzerare la struct o verificare se qualche bit<>0 tipo L DB100.dbb0 o L0 T DB100.DBB0  ..ma in modo simbolico in TIA non posso scrivere
L DB100.PIPPO (e neanche in step7 ..) 
(Ps. sono in ambiente TIA ma non con CPU 1200/1500 ma ancora condizionato da CPU S7-300) 

Link al commento
Condividi su altri siti

Non puoi lavorare in simbolico, devi usare l'indirizzamento, DB100.dbb0.
Se usi il TIA ti esce un warning che la variabile non è assegnata ad un simbolico, ma è solo un warning.

Link al commento
Condividi su altri siti

Forse mi spiego male 

Sono con TIA e voglio usare simbolico (come prevede il TIA se possibile) ( ma non con CPU1200/1550 ma serie Step7) 

Avendo per comodità di scrittura/lettura codice una struct di Boolean (Potrei fare una struct di array ..ma il nome array[1]..array[0] ..è poco utile   e comodo) 

in alcuni momenti voglio resettare tutti i bit della struct o verificare se sono solo a zero ..mi sono fatto una routine a cui passo la struct che dimensiono sempre a 16bit 

e poi testo singoli bit per sapere se sono a zero o res singoli bit per azzerare tutto ..mi chiedevo se esisteva un modo migliore per farlo .

 

Link al commento
Condividi su altri siti

La caratteristica di usare il simbolico non è del TIA, ma del 1500/1200, se usi un 300 che lo programmo con il TIA o con lo step7 classic non cambia le funzioni che hai con un software le hai con l'altro e quello che non hai con uno non ce l'hai con l'altro.

L'unica cosa che cambia è l'ambiete di sviluppo.

Il 300 non prevedeva l'utilizzo del simbolico con lo step7 e non ha il simbolico con il TIA. Funzioni, simbolico ed altro non sono caratteristiche dell'ambiente di sviluppo ma del plc, se un plc non le ha, non le ha, qualunque ambiente di sviluppo usi.

Ricordati che stai usando un dispositivo nato ormai più di 25 anni fa se non di più non puoi pretendere di avere funzioni di un dispositivo attuale.

Modificato: da acquaman
Link al commento
Condividi su altri siti

Il 23/9/2021 alle 16:07 , acquaman ha scritto:

Sul 300?

Hai completamente ragione. Questa domanda, di solito, viene posta sui 1200/1500, e non mi sono accorto che si parla, invece, di 300.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...