mariodipiu Inserito: 19 maggio 2014 Segnala Share Inserito: 19 maggio 2014 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 More sharing options...
JumpMan Inserita: 19 maggio 2014 Segnala Share Inserita: 19 maggio 2014 (modificato) 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: 19 maggio 2014 da JumpMan Link al commento Condividi su altri siti More sharing options...
mariodipiu Inserita: 19 maggio 2014 Autore Segnala Share Inserita: 19 maggio 2014 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 More sharing options...
bigalex Inserita: 20 maggio 2014 Segnala Share Inserita: 20 maggio 2014 Credo che la tecnica della mascheratura sia semplice ed immediata . Poi conviene scomodare i puntatori solo se effettivamente necessario (specialmente con Siemens) . bigalex Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 21 maggio 2014 Segnala Share Inserita: 21 maggio 2014 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: Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora