Vai al contenuto
PLC Forum


Come puntare un singolo bit di una word dichiarata come IN o TEMP


taymyr

Messaggi consigliati

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

 

Link al commento
Condividi su altri siti


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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

<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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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. 

Link al commento
Condividi su altri siti

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?

 

Link al commento
Condividi su altri siti

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:

immagine.png.b2f0628046fe4ea4286c37b80ec8e539.png

 

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:

immagine.png.2644f08ba1a14f00f97a7031559176ca.png

 

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: da batta
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...