Vai al contenuto
PLC Forum


Copiare intero DB di Istanza su un DB Globale


gremodic

Messaggi consigliati

Buonasera a tutti,

avrei bisogno di aiuto sulla seguente questione:

 

In genere per fornire una tabella di scambio per lo SCADA, faccio una copia-incolla del db globale che ho usato, lo rinomino, cambio il numero di DB e con l'istruzione move copio per intero il contenuto del DB sorgente (globale) sul DB di destinazione scada. Avendo fatto copia incolla le strutture sono identiche e non ho problemi. 

 

Ho provato a fare la stessa cosa con i DB di istanza delle FB, ma in questo caso iniziano i problemi. Se provo a fare la stessa identica operazione, ottengo un errore da parte del blocco MOVE, mi dice che "Only data blocks based on a PLC data type or a system data type can be moved with the MOVE instruction".

 

Errori simili ottengo con il "MOVE_BLK" e "MOve_BLK_Variant"

 

Avete suggerimenti da darmi per uscire da questa situazione ed evitare di mapparmi ad uno ad uno tutte le variabili contenute nel DB di istanza?

 

Grazie Mille

 

 

 

 

 

Instance dB.JPG

move_blk.JPG

Move_blk_Variant.JPG

Link al commento
Condividi su altri siti


Buongiorno a tutti,

penso di essere riuscito a risolvere la mia problematica. Magari se qualcuno ha voglia può confermare che il mio modo di procedere va bene ed eventualmente segnalarmi se ci sono metodi migliori.

 

Ho costruito a mano il DB Globale, copiando dal DB di istanza tutte le variabili e riempendo i vuoti che si creavano con il passaggio dalle sezioni Input Output InOut Static, con dei tag spare.

Dopodichè ho utilizzato l'istruzione POKE_BLK, ed effettivamente vedo che ha funzionato, i valori vengono copiati correttamente. DI seguito riporto la sintassi utilizzate per l'istruzione:

 

POKE_BLK(area_src := 16#84,
         
         dbNumber_src := 110,
         byteOffset_src := 0,
         area_dest := 16#84,
         dbNumber_dest := 14,
         byteOffset_dest := 0,
         count := 1232,
         ENO => ENO);

Link al commento
Condividi su altri siti

Per funzionare, funziona. Ma, personalmente, detesto utilizzare degli indirizzi come richiesto da questa funzione, che se fai una sola, banale modifica, non va più nulla.
Perché, semplicemente, nel DB per lo SCADA non crei solo le strutture che ti servono, uguali a quelle del DB di istanza (meglio se utilizzi i "tipi di dati"), e copi le strutture anziché tutto il DB?
 

Questa necessità di copiare tutto il DB mi fa tanto pensare ad una gestione delle variabili che non tiene conto dell'uso che se ne deve fare.
Per esempio, se ci sono valori di setup li potresti organizzare in una struttura dedicata (da copiare con un'unica istruzione).
O, ancora meglio, sempre per rimanere sull'esempio delle variabili di setup, passarle alla funzione come IN/OUT (utilizzando un "Tipo di dati"). Le variabili esistono solo nel DB che utilizzi per la comunicazione con lo SCADA, e sono collegate alla funzione come parametro.

Link al commento
Condividi su altri siti

Si concordo pienamente che è meglio impostare in partenza diversamente il progetto, in questo caso però mi sono ritrovato con un progetto lasciato incompleto da un collaboratore che è andato via, per cui sia riscriverlo che copiare i dati 1 ad 1 erano entrambe soluzioni molto dispendiose. Ovviamente sono consapevole che il meccanismo per funzionare richiede che entrambi i DB siano con la medesima conformazione, infatti ho dovuto colmare i salti con delle variabili spare.

Link al commento
Condividi su altri siti

Domanda: ma quanti sono i dati da copiare per lo SCADA?
Se mi dici che sono centinaia di variabili è un conto, ma se le variabili sono qualche decina, personalmente, piuttosco che usare istruzioni che puntano agli indirizzi assoluti, preferirei copiare i dati uno per uno, utilizzando sempre e solo il simbolico.
 

Modificato: da batta
Link al commento
Condividi su altri siti

Saranno circa 150-200, ad ogni modo sicuramente il problema è la base di partenza che non ha previsto strutture dati correttamente organizzate.

Se cosi fosse stato si sarebbero dovute copiare solo poche decine di strutture.

In ogni caso sono contento di questo inconveniente che mi ha datto modo di scoprire una nuova funzione che sconoscevo ;)

Modificato: da gremodic
Link al commento
Condividi su altri siti

Dunque, una funzione che utilizza 150-200 variabili è probabilmente una funzione di una certa complessità. E mi dici che le variabili sono state buttate giù così, come venivano (alla "membro di molosso", per citare Livio), senza organizzarle opportunamente in strutture?

Se così è, complimenti all'autore, che ha fornito un classico esempio di ciò che non si dovrebbe fare.

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