gremodic Inserito: 14 novembre 2021 Segnala Inserito: 14 novembre 2021 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
gremodic Inserita: 15 novembre 2021 Autore Segnala Inserita: 15 novembre 2021 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);
batta Inserita: 15 novembre 2021 Segnala Inserita: 15 novembre 2021 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.
gremodic Inserita: 16 novembre 2021 Autore Segnala Inserita: 16 novembre 2021 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.
batta Inserita: 16 novembre 2021 Segnala Inserita: 16 novembre 2021 (modificato) 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: 16 novembre 2021 da batta
gremodic Inserita: 17 novembre 2021 Autore Segnala Inserita: 17 novembre 2021 (modificato) 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: 17 novembre 2021 da gremodic
batta Inserita: 17 novembre 2021 Segnala Inserita: 17 novembre 2021 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora