Jump to content
PLC Forum


Problema interpretazione dati contigui


Recommended Posts

Posted

Buongiorno a tutti.

 

Scusate se Vi rubo del tempo per questo problema che per alcuni sarà una banalità:

in linguaggio AWL su step 7 di simatic manager, se voglio appoggiare alla DB1.DBD0 i primi 4 byte dell'area degli ingressi il codice è il seguente:

L PED0

T DB1.DBD0

Indipendentemente se le aree sopracitate sono state dichiarate anche in altri tipi di dato (es: bit, byte, word) il codice funziona.

 

In linguaggio SCL o KOP in step 7 di TIA Portal non riesco a replicarlo.

 

Mi illuminate?

 

Grazie


dina_supertramp
Posted (edited)

Il DB è simbolico, per quello non vedi gli indirizzi assoluti.

La riga sottolineata in giallo è perché "DB_Appoggio.Word" è dichiarato come intero (INT) e quindi ti avvisa che potresti perdere precisione andando a leggere la IW1

 

 

2024-12-20 10_52_35-Windows10x64_22H2_TIA19 - VMware Workstation.png

 

 

2024-12-20 11_03_46-Windows10x64_22H2_TIA19 - VMware Workstation.png

Edited by dina_supertramp
Posted

Ok, ricevuto.

 

Bisogna comunque dichiarare la variabile nella tabella delle variabili nel formato in cui la si vuole trattare.

Se io ho già dichiarato tutti gli ingressi I0.0/I0.1/I0.2/etc... per poter copiare l'area dei primi 4 byte in un db devo almeno dichiarare un'altra variabile es:ID0 che comprenda l'area che va da I0.0 fino a I3.7. Questa cosa non occorre farla con il vecchio step 7. Puntando al valore assoluto, in qualsiasi tipo di dato, lo si può trattare. Pensavo si potesse fare anche con TIA Portal

 

Grazie dell'aiuto

dina_supertramp
Posted (edited)
17 minuti fa, marcob1984 ha scritto:

Bisogna comunque dichiarare la variabile nella tabella delle variabili nel formato in cui la si vuole trattare.

No, puoi lasciare dichiarati i singoli bit nella tabella variabili (I0.0,I0.1, ecc.) e poi interrogare la il byte di ingressi 0 nel codice (IB0) come abbiamo sempre fatto con anche con l'S7.

Ti verrà creata automaticamente la tag del byte 0 e inserita nella prima tabella variabili a disposizione.
Quando la crea in automatico perché appunto la dichiari al momento della scrittura del codice e non in precedenza in una var table, la infila nella prima tabella variabili che trova, sta a te riordinarla.

Non c'è nessuna differenza "in meno" rispetto al S7 del Simatic Manager, le uniche differenze sono "in più" in merito all'accesso alle variabili.

 

2024-12-20 12_34_13-Windows10x64_22H2_TIA19 - VMware Workstation.png

2024-12-20 12_35_08-Windows10x64_22H2_TIA19 - VMware Workstation.png

2024-12-20 12_35_56-Windows10x64_22H2_TIA19 - VMware Workstation.png

Edited by dina_supertramp
Posted

puoi anche non dichiararla, ma appena tu scrivi ew0 il tia ti crea un tag nella tabella delle variabili con il simbolico con nome tagxxx quindi a questo punto ti conviene dichiararlo

Posted
5 minuti fa, marcob1984 ha scritto:

per poter copiare l'area dei primi 4 byte in un db devo almeno dichiarare un'altra variabile es:ID0 che comprenda l'area che va da I0.0 fino a I3.7. Questa cosa non occorre farla con il vecchio step 7. Puntando al valore assoluto, in qualsiasi tipo di dato, lo si può trattare. Pensavo si potesse fare anche con TIA Portal

Mi pare non sia una grande fatica dare il nome anche alla variabile "ID0".
Anzi, il TIA, se richiami una variabile con l'indirizzo, assegna automaticamente un nome tipo Tag1, Tag2, ecc.
E questa mi pare una buona cosa. Ho sempre odiato lavorare con gli indirizzi.
Uno dei vantaggi che salta prima all'occhio lavorando in simbolico?
Immagina di dover copiare, per seguire il tuo esempio, quattro byte di ingressi a partire da I0.0, e di farlo accedendo all'indirizzo, come doppia word, "ID0".
Poi immagina che questo indirizzo venga cambiato. Il tuo codice non funziona più, lo devi andare a correggere.
Immagina invece di avere dato un nome a quella variabile, e di utilizzare il nome nel programma. Ti basta riasseganre l'indirizzo associato a quel nome.

 

Ancore più evidente se fai riferimento a variabili di un DB, e vai ad inserire o a togliere variabili prima di quella che stai usando che, quindi, cambia indirizzo.
Devi andare a cercare in giro nel programma tutti i richiami e correggerli. Se lavori con il nome, tutto si sistema da solo.


Comunque, lo puoi fare anche con il TIA, solo che, per accedere ad una variabile con l'indirizzo, se è in un DB il DB deve essere "non ottimizzato".

 

E guauarda anche le istruzioni "Scatter" e "Gather".

 

Però il modo giusto di procedere è quello di abbandonare il vecchio modo di lavorare con gli indirizzi, e di strutturare il programma e le variabili, già in origine, per lavorare con il simbolico.

dina_supertramp
Posted
3 minuti fa, batta ha scritto:

Però il modo giusto di procedere è quello di abbandonare il vecchio modo di lavorare con gli indirizzi, e di strutturare il programma e le variabili, già in origine, per lavorare con il simbolico.

Condivido.

@marcob1984 abituati a lavorare con i simboli (vedi prima risposta --> "DB_Appoggio.Byte") scordati l'accesso assoluto (DBx.DB....) a meno che non ti sia imposto da eventuali device esterni con cui parli.

Posted

Grazie mille a tutti.

 

@batta hai perfettamente ragione. E' molto di aiuto il fatto di lavorare con il simbolico, senza ombra di dubbio. Il punto è che fino a stamattina ero "ignorante" sul fatto che bastava dichiarare prima la variabile per poterla utilizzare come volevo.

 

Grazie ancora.

 

Sereno Natale e felice anno nuovo a tutti.

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...