Vai al contenuto
PLC Forum


Copiare I Singoli Bit Di Una Word


mariodipiu

Messaggi consigliati

Salve, ho un problema con i bit di una word che vorrei gestire in lettura; più precisamente mi interessano solo alcuni bit di "stato" della word, che dunque vorrei leggere e trasferire in alcuni bit temporanei una word della funzione.

Ecco il mio problema:

Ho fatto una funzione con ingressi, uscite e 2 word temporanee, una che chiamo SW(status Word) con Address 0.0 e l'altra che chiamo CW (command word) con Address 2.0.

Adesso vado a leggere (in awl) una word della periferia profibus, supponiamo PEW 264 e la trasferisco in SW con i due comandi L e T. Fino a qui tutto ok.

A questo punto però vorrei leggere, quindi "puntare" ai singoli bit della SW, sempre in AWL e singolarmente trasferirli nei bit che compongono la word CW.

Vorrei dunque scrivere qualcosa del genere :

L SW [#p 0.0]

T CW [#p 0.0]

(ma ovviamente così non funziona...)

vorrei utilizzare caso mai anche il registro AR1 e LAR1, che non conosco e che nelle discussioni presenti su PLC Forum , viene dato per scontato e non riesco a capire come funziona..sarebbe la giusta occasione per imparare ad usarli.

Di awl capisco poco, questo sicuramente è il grosso problema..per piacere c'è qualcuno che può spiegarmi cosa scrivere e commentarmi anche il codice..piano piano per piacere.

Grazie a tutti, anticipatamente.

Link al commento
Condividi su altri siti


Non ho capito bene, quali bit di SW vuoi trasferire in CW ? solo alcuni ? o tutti?

Se li devi trasferire pari-pari basta che fai:

L SW

T CW

ma questo immagino proprio che lo sai...

Se dei mascherare ponendo a 0 alcuni bit che non ti interessano puoi fare

L SW

L 2#1111000000000000

UW

T CW

(qui "passano" solo i 4 bit più significativi e gli altri vengono azzerati)

Se vuoi scrivere un bit di SW in CW senza toccare tutti gli altri puoi anche usare l'indirizzo assoluto, anche se non è molto elegante e devi stare attento a non spostare i parametri temp, io lo faccio quando sono di fretta ma metto il temp in questione per primo (LW0) così sono sicuro che non cambio l'indirizzo per sbaglio in seguito (comunque step 7 ti avvisa che la variabile è usata in maniera assoluta quando fai modifiche nelle temp):

U L 0.0 // SW è nella word Temp LW 0 e questo è il suo bit 0.0

= L 2.0 // CW è nella word temp L W 2 e questo è il suo bit 0.0

Questo fa la stessa cosa dell'esempio precedente però usa i puntatori e non c'è problema se si spostano/aggiungono variabili temp all'fc:

L P##sw // word temp
LAR1
U L [AR1,P#0.0]
L P##cw // word temp
LAR1
= L [AR1,P#0.0]
Modificato: da JumpMan
Link al commento
Condividi su altri siti

Ciao JumpMan,

grazie per la risposta..

Per piacere mi puoi commentare le ultime righe di AWL? Puoi spiegarmi cosa fanno?Piano, tieni presente che non sono affatto bravo con l'awl..ed i puntatori li usavo in C..

Io voglio copiare, per esempio, solo alcuni bit di questa word SW e trasferirli in un'altra variabile word qual'è CW..oppure, allo steso modo copiare i singoli bit della SW in una word di una DB ( se è necessario avere memoria dello stato anche dopo il ciclo di scansione)..Se puoi, eventualmente, anche indicarmi qualche semplice link dove si parla dei puntatori in s7 300..

Ho già letto la guida presente in PLCForum, in cui si parla del concetto di puntatore bit e non a byte..quello è chiaro per me..vorrei esempi, utili, per esempio a copiare i singoli bit, a trsaferirli in altre word, a fare le operazioni bit a bit..il concetto di puntatore any..

Così che, appena avrò chiaro queste cose, ho da trasformare delle librerie che uso per lavoro da AWL ad SCL...

Grazie mille per l'aiuto..sp

Link al commento
Condividi su altri siti

Credo che la tecnica della mascheratura sia semplice ed immediata .

Poi conviene scomodare i puntatori solo se effettivamente necessario (specialmente con Siemens) .

bigalex :blink:

Link al commento
Condividi su altri siti

mariodipiu, forse provenendo dal c non sei abituato a lavorare coi bool, nei plc le funzioni per leggere/scrivere bit sono già implementate nativamente, che poi si possa farlo con istruzioni a parola o con i puntatori è un altro discorso, ma le istruzioni di base per "copiare", o fare altre cose con i bit sono quelle booleane che si trovano in questo albero:

post-2480-0-10462700-1400623265_thumb.jp

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...