in data 09-19-2015 10:24 AM
Salve!
Ho un problema. Sto utilizzando labview per creare un programma che deve comunicare con un plc attraverso l'opc della siemens simatic net. Il mio problema non è nella scrittura dei tag, ma nella lettura. Spesso mi capita che se leggo due tag o più contemporaneamente mi capita che alcuni valori letti sono zero. Questo se faccio un semplice open read e close. Per ovviare a questo problema ho utilizzato una sequenza temporale:apro connessione aspetto un secondo, leggo il tag aspetto un secondo, chiudo la connessione aspetto unsecondo. Questo metodo a volte funziona e a volte no. Che devo fare sono disperato. È da tenere presente che l'opc labview si trovano sulla stesa macchina. È opportuno utilizzare l'opzione wait on update?
in data 09-20-2015 02:25 AM
Nessun consiglio? Ho labview 2013!
in data 09-21-2015 03:04 AM
Ciao jmontybari,
cosa usi per comunicare con l'OPC server? DSC o Datasocket? Da server vedi le variabili che si aggiornano correttamente?
in data 09-21-2015 08:49 AM
Utilizzo solo dataSocket, il problema è tanto più frequente con l'utilizzo dei datasocket all'interno di Sub VI che richiamo a monte. Ti allego alcuni sub VI che utilizzo
in data 09-21-2015 08:55 AM
Si le variabili si aggiornano correttamente
in data 09-22-2015 03:34 AM
Ciao jmontybari,
ci sono parecchi errori nel codice. Non puoi mai sapere se la wait function viene eseguita prima o dopo il codice in ogni sequence, devi in qualche modo sequenziarla (magari con il filo dell'errore e una flat, o con un'altra sequence). Comunque ti consiglio di usare una macchina a stati, come idea generale.
in data 09-22-2015 05:48 AM
Quali errori ci sono?
Mancano solo le variabili globali. Come mai devo sequenziare il wait?
in data 09-22-2015 05:51 AM
Purtoppro non ho esperienza nella macchina a stati in labview. Comunque come mi hai suggerito ora ho letture consistenti!
in data 09-22-2015 10:51 AM
Ci sono parecchi errori di stile che ti fanno perdere in efficienza e leggibilità del codice, ma ci vuole un po' di pratica per imparare a programmare bene in LabVIEW. Devi sequenziare il Wait perchè, messo così, non sai mai se esegue prima o dopo il resto del codice. LabVIEW è ottimizzato per esecuzione in parallelo, ma proprio per questo due pezzi di codice posso essere eseguiti nell'ordine "deciso" dalla CPU in quel momento. Per questo, se te ne serve prima uno poi l'altro, devi fare in modo che l'esecuziona rispecchi la tua volontà. Tutto qui.
In bocca al lupo!
in data 09-22-2015 02:30 PM
Che errori di stile parli?