taymyr Inserito: 3 aprile 2020 Segnala Inserito: 3 aprile 2020 Ciao a tutti, su Step 7 - In un FC è possibile interrogare lo stato di un singolo bit di una word dichiarata come IN o TEMP? Cioè: Interfaccia Nome Tipo IN Prova INT oppure TEMP Prova1 INT nel segmento U M0.0 U #Prova."un bit qualsiasi della word" = M 2.0 In pratica, c'è il modo per interrogare "un bit qualsiasi della word" dichiarata su IN o TEMP? Spero di essere stato chiaro ... Grazie in anticipo Stefano
ken Inserita: 3 aprile 2020 Segnala Inserita: 3 aprile 2020 visto che scrivi nella sezione 300 tutte le variabili hanno un indirizzo fisico. le variabili Temp possono essere chiamate con suffisso L di fianco alla variabile trovi l'indirizzo (quello che in tia si chiama offset). U L0.0 è il bit 0 della tua variabile Prova1 per gli ingressi non conosco la sintassi corretta
taymyr Inserita: 3 aprile 2020 Autore Segnala Inserita: 3 aprile 2020 Grazie Ken si lo so che le variabili TEMP sono definite come L con le TEMP e solo per rendere più "interpretabile" il programma. Era "simpatico", infatti, continuare ad usare la dichiarazione tipo: #Prova1.un bit qualsiasi della word" Se invece dichiari una word come IN / OUT /InOut non so come fare … eventualmente ci fosse un modo Ciao
pigroplc Inserita: 3 aprile 2020 Segnala Inserita: 3 aprile 2020 esiste anche su step7 se non erro la funzione di overlay: "AT" un simpatico esempio che ho inserito tempo addietro: cerca "Specchairebit" cambierà qualcosa se lo esegui sullo step 7 classico piuttosto che sul TIA....
batta Inserita: 3 aprile 2020 Segnala Inserita: 3 aprile 2020 Oppure (solo in awl), con i puntatori. Esempio: L P##inputVar // Carica l'indirizzo della variabile "inputVar" LAR1 // nel registro indirizzi 1 A [ AR1 , P#0.3 ] // Interroga lo stato del bit nr.3 della variabile puntata dal registro indirizzi Assieme alla sovrapposizione con AT, usare i puntatori offre il vantaggio di non dover modificare il codice (per risistemare gli indirizzi) nel caso di inserimento o eliminazione di variabili.
taymyr Inserita: 3 aprile 2020 Autore Segnala Inserita: 3 aprile 2020 <batta> Hai ragione "batta" … non ci avevo pensato proprio … ma come ti vengono queste idee … Già provato e funziona alla grande … funziona con Word/Dword … con Merker/Input/Output/DBX, praticamente con tutto Grazie mille <pigroplc> onestamente non ho mai sentito parlare di questa funzione "AT" … Cerco di capire di cosa si tratta Grazie mille Ciao
batta Inserita: 3 aprile 2020 Segnala Inserita: 3 aprile 2020 33 minuti fa, taymyr ha scritto: ma come ti vengono queste idee Non è una mia idea, ma semplicemente uno dei modi di utilizzare i puntatori. Più o meno, la scoperta dell'acqua calda ;-) Con le CPU 1200/1500 si possono adottare altre strategie, senza ricorrere ai puntatori.
taymyr Inserita: 3 aprile 2020 Autore Segnala Inserita: 3 aprile 2020 Non sarà una tua idea … ma le sai tutte!!!
batta Inserita: 3 aprile 2020 Segnala Inserita: 3 aprile 2020 1 ora fa, Yiogo ha scritto: cioè stai dicendo che su questi plc non vedi direttamente il booleiano MY_word.bit Nel 300, dove le variabili hanno tutte un indirizzo noto, era poco importante. Nei 1200/1500, che lavorano solo con il simbolico (salvo diversa impostazione), puoi accedere a bit, byte o word con quella sintassi. Pensa che ho scoperto da poco, con una certa meraviglia, che myWord.bit non si può usare in Codesy.
cdc Inserita: 4 aprile 2020 Segnala Inserita: 4 aprile 2020 16 ore fa, batta ha scritto: Oppure (solo in awl), con i puntatori. Esempio: L P##inputVar // Carica l'indirizzo della variabile "inputVar" LAR1 // nel registro indirizzi 1 A [ AR1 , P#0.3 ] // Interroga lo stato del bit nr.3 della variabile puntata dal registro indirizzi Assieme alla sovrapposizione con AT, usare i puntatori offre il vantaggio di non dover modificare il codice (per risistemare gli indirizzi) nel caso di inserimento o eliminazione di variabili. Ciao, ma se devo rendere parametrizzabile anche il bit (nel tuo esempio il 3), come posso fare usando i puntatori in S7-300?
batta Inserita: 4 aprile 2020 Segnala Inserita: 4 aprile 2020 (modificato) 9 ore fa, cdc ha scritto: ma se devo rendere parametrizzabile anche il bit (nel tuo esempio il 3), come posso fare usando i puntatori in S7-300? Per rendere parametrizzabile il numero del bit, puoi incrementare il contenuto del registri indirizzi, e poi leggere lo stato del bit puntato dal registro indirizzi. Esempio: Fai sempre attenzione all'ordinamento dei byte. Nell'esempio, il contenuto della variabile inputVarInt è: 2#0000_0000_0000_0100. Il bit alto è il bit numero 2 della variabile ma, dato l'ordinamento dei byte secondo lo standard Motorola (big endian), devi interrogare lo stato del bit 10. Potresti risolvere facendo lo swap dei byte ed appoggiando il risultato ad una variabile locale. Esempio: Poi, ci sono anche altri metodi per ottenere lo stesso risultato. Esempio: L P##localVarInt // Carica indirizzo della variabile L #bitNr // Carica numero del bit della variabile ITD // Trasforma in DINT +D // Somma all'indirizzo della variabile il numero del bit da puntare T #adr // Scrivi risultato in "adr" (variabile di tipo DINT) U L [#adr] // Interroga lo stato del bit puntato nell'area delle variabili locali = #bitStatus // Scrivi stato del bit Ora, con le cpu 1200/1500 e TIA Portal, che mette a disposizione anche un editor di testo strutturato che non ha paragoni con quello del SimaticManager, cerco sempre soluzioni che non comportino l'uso dei puntatori. Devo dire che mi sono divertito, dopo tanto tempo, a tornare a fare qualche piccolo esercizio con i puntatori. E, aggiungo, nei casi (per quanto rari) si dovesse ricorrere all'uso di puntatori, la gestione dei puntatori in AWL è più flessibile (e non è più complicata) dell'uso di PEEK e POKE in strutturato. Modificato: 4 aprile 2020 da batta
Operational Amplifier Inserita: 4 aprile 2020 Segnala Inserita: 4 aprile 2020 Complimenti Batta... 🧙♂️
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