Vai al contenuto
PLC Forum


Problema interpretazione dati contigui


Messaggi consigliati

Inserito:

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
Inserita: (modificato)

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

Modificato: da dina_supertramp
Inserita:

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
Inserita: (modificato)
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

Modificato: da dina_supertramp
Inserita:

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

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

Inserita:

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.

 

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