ken Inserito: 11 dicembre 2019 Segnala Share Inserito: 11 dicembre 2019 Per questione di scambio dati con un db sql esterno ho 4 blocchi dati differenti con la medesima struttura (tipo di dato). ogni DB rappresenta una delle 4 sorgenti di materiale che posso avere. fin'ora avevo un solo DB con 4 array del tipo di dato e in scl facilmente mi ero creato il puntatore per prelevare i dati che mi servivano. ora con i 4 db differenti non trovo un modo "elegante" per fare la stessa cosa. la soluzione provvisoria è quella di creare nei dati temp un array identico a quello dei DB e con 4 istruzioni if vado a copiare l'intero db nei dati temporanei: IF #Braccio = 1 THEN #Dati_braccio:= "DB101 Braccio 1".pacco; END_IF; dove #dati_braccio è l'array temporaneo del tipo di dato (è un array di 32 tipi di dato) dove "DB101 Braccio 1".pacco è un DB con un array di 32 tipo di dato quello che non mi piace è copiare l'intera area. i 32 elementi dell'array contengono dati di una singola bobina, potrei avere perciò un massimo di 32 bobine. quello che solitamente faccio è leggere, verificare e copiare i dati del singolo elemento dell'array direttamente da DB. esempio: IF "DB111 Dati bobine".Braccio[#Braccio].Codice[#Item]= #"Ultima riga" // Controlla codice se corrisponde a ultima bobina del braccio THEN #"Fine ordine" := 1; // alza bit fine ordine RETURN; END_IF; dove #Braccio è il numero del braccio da cui leggere i dati (da 1 a 4) dove #Item è l'elemento dell'array di cui voglio leggere la stringa di caratetteri Codice e verificare se è uguale a quello che identifica l'ultima riga e quindi alzare il bit per il ladder normale. ora, con 4 DB differenti non trovo il modo per sostituite ""DB111 Dati bobine"" in una variabile. l'unico modo che ho pensato e utilizzato è quello di creare la medesima struttura nei dati temp. esiste un modo per evitare di copiare i dati? Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 11 dicembre 2019 Segnala Share Inserita: 11 dicembre 2019 mettere un case a monte e discriminare le 4 DB? altrimenti si può comporre il tag tramite script sullo scada, soluzione che però non mi piace se deve cambiare dei flag nel PLC. Link al commento Condividi su altri siti More sharing options...
ken Inserita: 11 dicembre 2019 Autore Segnala Share Inserita: 11 dicembre 2019 (modificato) Si faccio col case e discrimino ma correggimi se sbaglio, in questo modo copio il db scelto con case in area locale per poi leggere ogni singolo dato dell'array. In awl potevo fare : auf DBxx per poi fare L DBWxx questo in scl non lo posso fare o almeno non sono capace io di farlo. nella soluzione Blocco dati con 4 array avevo risolto la situazione in modo semplice, capibile e con poche righe di programma. Modificato: 11 dicembre 2019 da ken Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 11 dicembre 2019 Segnala Share Inserita: 11 dicembre 2019 (modificato) ti fai un puntatore in ingresso poi lo gestisci con l'overlay (funzione AT). ultimamente ho postato del codice per la gestione di una sirena per allarmi o un'altra diavoleria del genere. Potresti prendere spunto da li tipo questo Modificato: 11 dicembre 2019 da pigroplc Link al commento Condividi su altri siti More sharing options...
ken Inserita: 11 dicembre 2019 Autore Segnala Share Inserita: 11 dicembre 2019 Dopo cena gli do una guardata. grazie Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 11 dicembre 2019 Segnala Share Inserita: 11 dicembre 2019 anche questa discussione: Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 6 marzo 2020 Segnala Share Inserita: 6 marzo 2020 Se passi il dato come IN/OUT alla tua funzione , non esegui nessuna copia , ma semplicementi passi il puntatore alla tua struttura e ci lavori tranquillamente Esempio Link al commento Condividi su altri siti More sharing options...
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