Vai al contenuto
PLC Forum


Scambio Dati In Virgola Mobile Da Panasonic Gt05 E Fp-x


MRK_

Messaggi consigliati

Buonasera a tutti!

Da qualche giorno lavoro su panasonic FP-X e GT05, non sono un esperto in materia di PLC ma con questo tipo ho riscontrato mote meno difficoltà nella programmazione rispetto a tanti altri. Da un po' mi sono arenato su un problema di scambio dati in virgola mobile dal pannello al PLC e viceversa, qualcuno sa come effettuare questa operazione?

Link al commento
Condividi su altri siti


Roberto Gioachin

Nessuna risposta?

Forse la domanda non è comprensibile!!

Comunque... se sul plc hai utilizzato una variabile in doppia word, dichiarata come variabile in virgola mobile, sul pannello operatore la devi dichiarare nello stesso modo.

Fatto questo problemi non ne devono esistere.

Se invece la tua variabile in doppia word, non è dichiarata come virgola mobile, non puoi visualizzarla nel pannello in questo modo, altrimenti vedi dei numeri assurdi.

Quale ambiente di sviluppo stai utilizzando per il plc? che operazioni hai fatto per ottenere la variabile da visualizzare sul pannello? come hai impostato la variabile sul pannello?

Prova spiegare meglio il problema e le operazioni che hai fatto.

Ciao

Roberto

Link al commento
Condividi su altri siti

Ciao Roberto

forse la mia domanda era un po' troppo generica, data anche dall'inseperienza.

Come sistema di sviluppo utilizzo FPWIN 5.0 e la variabile che tentavo di utilizzare (erroneamente) era una DT1XX che di suo non è una doppia word, quindi era impossibile che riuscissi a visualizzarla come variabiel float a questo punto la domada corretta è:

come faccio ad impostare una variabile in virgola mobile sul PLC in modo da poterla condividera anche dal pannello?

Ciao, grazie

Mirko

Link al commento
Condividi su altri siti

Roberto Gioachin

Con FPWin-pro si deve procedere in questo modo:

La variabile che devi visualizzare o modificare con il pannello operatore, deve essere dichiarata come "Real", ti ticordo che parlare di numeri reali o in virgola mobile (floating point) è la stessa cosa.

Quindi, dichiara su "Variabili globali" un nome (identificatore) che identifichi la tua variabile; un indirizzo fisico del plc (p.e. DT120 in maiuscolo), l'indirizzo IEC viene assegnato automaticamente; il tipo di variabile, in questo caso "REAL": se necessario anche un valore iniziale.

Una variabile dichiarata, ha poco significato se non viene utilizzata nel programma, scrivi quindi una parte di codice nel linguaggio che desideri, utilizzando per l'appunto la variabile appena assegnata, ti basta scrivere anche semplicemente una istruzione "MOV".

Ora apri il programma del pannello operatore, in una pagina inserisci una "data parts", su "data format" seleziona "float", su reference device scrivi DT120.

Scarica i programmi e vedrai che ti funziona tutto.

Ciao

Roberto

Link al commento
Condividi su altri siti

Quello che tu mi hai detto di fare è esattamente quello che anche io avevo fatto ma mi si presenta un problema:

Quando io dichiaro la variabile DT120 nelle variabili globali ed eseguo il controllo mi compare un errore:

"F1101 - Identificatore dimensione errato"

Alchè mi sorge un dubbio, sicuramente sbaglio, ma la variabile DT120 non è una variabile a 16bit? e una variabile dichiarata float non richiede 32bit?

Correggimi se sbaglio...

Ciao grazie

Mirko

Link al commento
Condividi su altri siti

Roberto Gioachin
"F1101 - Identificatore dimensione errato"

Quando si parla di identificatore, si parla del "nome" che attribuisci alla variabile, quindi ad essere errato è proprio quello, non è che per caso hai dato un nome troppo lungo alla variabile?

Oppure non è che hai utilzzato un nome non valido?

sicuramente sbaglio, ma la variabile DT120 non è una variabile a 16bit? e una variabile dichiarata float non richiede 32bit?

Non sbagli.

Quando dichiari una variabile, inserisci anche l'indirizzo della variabile, per esempio DT120.

Se questa e una doppia word, oppure un float, il plc usa DT120 e DT121, ma non è necessario che le scrivi tutte e due, in quanto il tipo di variabile stabilisce già che stai utilizzando due word consecutive.

Ciao

Roberto

Link al commento
Condividi su altri siti

Roberto Gioachin

Ho verificato l'errore che proponi, a volte si è abituati a certe convenzioni che non ci si fà caso.

Per evitare l'errore F1101, devi ricordarti di definire l'indirizzo della variabile come DDT120 e non DT120.

In alternativa devi definire la variabile con lo standerd IEC1131, cioè %MD5.120

Questo vale per tutte le variabili a 32 bit.

Ciao

Roberto

Modificato: da Roberto Gioachin
Link al commento
Condividi su altri siti

Ciao Roberto,

[OK] adesso funziona correttamtne tutto!

Mi resta solo un dubbio -> ma se io definisco la variabile DT120 ad esempio come duble, di default quale variablie usa il sistema come seconda parte di DT120. La DT121?

scusa se approfitto, ma ti ciedevo un altra cosa..

io devo creare una funzione che ad una data ora (ora, minuto) mi attivi un uscita.

nel registro di sistema DT90054 (e dintroni) il PLC alloca i dati relativi alla data e all'ora sottoforma di word da 16 bit di cui nei primi 8 pone un dato e negli altri pone un altro dato.

Quale potrebbe essere il "percorso" più breve e/o comodo per dividere la WORD in due data una posizione di interruzione (sul 8°bit) in modo da poterla poi convertire in INT senza problemi di conversioen WORD->INT?

La strada che ho adottato adesso è quella di convertire la word in stringa a quattro caratteri dopo di che l'ho divisa in due con le funzioni lift e right e sucessivamente convertita in int.

Il tutto funziona ma è un "altarino" secondo me scorretto, al di la dei passaggi (quasi infiniti paragonati alla semplicità dell'operazione) comunque mi pare un assurdo dover convertire un dato in una stringa per poi riconvertirla in un numero...

Ciao e grazie

Link al commento
Condividi su altri siti

Roberto Gioachin

Ciao MRK

Allora, il plc Panasonic, come tanti altri (ma non tutti), ti permette di utilizzare due aree di memoria 16 bit consecutive da utilizzare come variabile a 32 bit.

La word che utilizzi come indirizzo diventa la word meno significativa (i sedici bit di destra), la word sucessiva diventa la word più significativa.

Nel tuo esempio, un valore a 32 bit scritto su DT120, viene scritto su DT120 e DT121, dove DT120 è la parte di destra della cifra.

Ore minuti e secondi, sono tutti codificati in BCD, quindi devi vedere i dati presenti in DT90054 e dintorni come dei valori in BCD e non word, da convertire in intero.

Ci sono diverse strade per risolvere il problema, puoi per esempio utilizzare l'istruzione F6_DGT presente sulla libreria FP, che ti permette di copiare un certo numero di caratteri esadecimali da una word ad un'altra, avendo cura di cancellare le informazioni presenti nella word di destinazione prima di scriverci qualcosa.

In ogni caso non ci sono sistemi sbagliati per fare queste conversioni, ci sono solo sistemi che funzionano ed altri che non funzionano oppure sono poco affidabili.

Quando un sistema funziona bene è sempre valido.

Ciao

Roberto

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