Vai al contenuto
PLC Forum


DB ottimizzate, comunicazione s7-1500 - winCC 7.4


Filippo Molteni

Messaggi consigliati

Filippo Molteni

Buongiorno,

 

sto realizzando un progetto con plc 1516 e scada wincc7.4, ho utilizzato dei PID del tipo CONT_C e vorrei riportare alcuni parametri all' interno dello scada in appositi popup.

Non riesco a modificare la db di istanza ottimizzata in una normale in modo tale da poter puntare i singoli indirizzi.

Come posso fare per poter scrivere e visualizzare i dati della db a scada?

Grazie

Link al commento
Condividi su altri siti


I dati da scambiare con lo SCADA li metti in un altro DB.
I dati di impostazione li copi dal DB per lo SCADA nel DB di lavoro, e fai esattamente il contrario per i dati in lettura.

 

Anche senza questo problema, io considero sempre preferibile organizzare i dati di scambio con HMI/SCADA in strutture dedicate.

Link al commento
Condividi su altri siti

36 minuti fa, Filippo Molteni ha scritto:

Questo modo lo conosco, cercavo solo un modo più rapido di copiare un db di istanza in un' altra DB.

Personalmente non condivido questo modo di operare.
Per la funzione PID i parametri da scambiare sono pochi. Volendo esagerare, oltre ai canonici Gain, TI e TD, ci puoi mettere i limiti del set point, i parametri di scalatura, i limiti dell'uscita, e qualche altro parametro di funzionamento.
Copiare tutto il DB di istanza, piuttosto massiccio, solo per i pochi dati che devono essere accessibili dallo SCADA, non mi pare una buona mossa.
Io, normalmente, per operare con i PID, uso una funzione alla quale passo come IN/OUT una struttura con i dati di setup ed una struttura con i dati di sola lettura. All'interno della funzione, oltre alla gestione del cambio modo di funzionamento, mi occupo dello scambio con il DB di istanza del PID di quelle poche variabili che veramente servono.
Il quale DB di istanza del PID viene anch'esso passato alla funzione come parametro IN/OUT.

Link al commento
Condividi su altri siti

Filippo Molteni
Il 17/11/2021 alle 12:55 , batta ha scritto:

Personalmente non condivido questo modo di operare.
Per la funzione PID i parametri da scambiare sono pochi. Volendo esagerare, oltre ai canonici Gain, TI e TD, ci puoi mettere i limiti del set point, i parametri di scalatura, i limiti dell'uscita, e qualche altro parametro di funzionamento.
Copiare tutto il DB di istanza, piuttosto massiccio, solo per i pochi dati che devono essere accessibili dallo SCADA, non mi pare una buona mossa.
Io, normalmente, per operare con i PID, uso una funzione alla quale passo come IN/OUT una struttura con i dati di setup ed una struttura con i dati di sola lettura. All'interno della funzione, oltre alla gestione del cambio modo di funzionamento, mi occupo dello scambio con il DB di istanza del PID di quelle poche variabili che veramente servono.
Il quale DB di istanza del PID viene anch'esso passato alla funzione come parametro IN/OUT.

Si certo, io dovrei leggere PV,SP, Gain, TI, TD, MAN, selezioni ON/OFF di P,I,D e le uscite quindi è circa una DB di 60 Byte.

Cercavo un metodo più veloce avendo circa 20/30 PID e dovendo creare una db importante e uno scambio segnali.

 

Grazie

 

 

Link al commento
Condividi su altri siti

5 ore fa, Filippo Molteni ha scritto:

Cercavo un metodo più veloce avendo circa 20/30 PID

Crei un "Tipo di dati" con i dati del PID che ti servono sullo SCADA.
Crei un DB dedicato allo SCADA dove dichiari, utilizzando il Tipo di dati, le strutture dei vari PID (potresti anche fare un array).
Fai una funzione alla quale passi, come IN/OUT, l'intero DB di istanza del PID e la struttura dei soli dati che ti servono per lo SCADA.

 

Esempio:

FUNCTION "ScambioDati_PID_SCADA" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_IN_OUT 
      DatiScada : "StructDatiPidScada";
      DatiPid {InstructionName := 'PID_Compact'; LibVersion := '2.3'} : PID_Compact;
   END_VAR


BEGIN
	
	#DatiPid.Setpoint := #DatiScada.SP;
	#DatiPid.Retain.CtrlParams.Gain := #DatiScada.Gain;
	#DatiPid.Retain.CtrlParams.Ti := #DatiScada.Ti;
	#DatiPid.Retain.CtrlParams.Td := #DatiScada.Td;
	
	#DatiScada.PV := #DatiPid.ScaledInput;
	
END_FUNCTION

 

Credo sia una soluzione più razionale rispetto la copia dell'intero DB di istanza.

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