domenico.romano
Risposte nei forum create
-
AutorePost
-
domenico.romano
PartecipanteDopo essermi dedicato ad altro ho ripreso questo progetto. Utilizzo la CPU con RS485 integrata e la configurazione è quella descritta. Continua ad essere un mistero perchè con SpyData non vedo i pacchetti Tx ma diciamo che al momento è il male minore.
Mi piacerebbe capire se c’è un modo per dare priorità alle funzioni di scrittura holding register qualora venisse aggiornato un valore. Invio per eMail il programma così magari è più facile capire cosa intendo
Allo stato attuale il bus impiega 1 minuto e mezzo per fare il giro e tornare ad interrogare il primo dispositivo.
Il problema è che non riesco a diminuire ulteriormente i valori di delay (1.2 al momento) e timeout (1.4) di comunicazione a causa probabilmente di un problema con i dispositivi che sto interrogando che liberano la seriale “con difficoltà”.
Vorrei come workaround riuscire ad interrompere il loop di lettura qualora la variabile “setpoint” che viene scritta su ogni dispositivo venisse modificata lato PLC ed eseguire il comando di scrittura prima di tornare al loop di lettura.
Esiste qualche esempio dal quale poter prendere spunto ? Come sempre grazie mille per il supporto!
domenico.romano
PartecipanteInnanzitutto grazie a entrambi per i preziosi consigli.
Il programma è sulla task back ma effettivamente, dopo un pò di studio per capire anche meglio il funzionamento del bus, è evidente che gli slave che sto interrogando hanno difficoltà a tornare in idle (arduino mkr zero con shield rs485) e il problema sembra essere nella gestione dell’interframe delay e non ne riesco a venire a capo.
Lato PLC invece, avrei solo un quesito al momento: sto utilizzando un programma che chiama un FB che sfrutta ACModbus_v2 e con SpyData, come diceva anche Sergio in un post precedente, leggo solo i pacchetti Rx.
Se imposto l’ENABLE in FALSE e poi in TRUE leggo il primo Tx da SpyData e poi smette nuovamente. Come potrei risolvere?
domenico.romano
PartecipanteGrazie mille Sergio!
C’è sicuramente qualche chiamata che sto effettuando che è sbagliata, ma il problema principale si verifica quando vado ad interrogare più nodi.
Ho provato ad effettuare sempre la stessa lettura dal nodo 3 e va avanti senza mai interrompersi, appena inizio ad alternare la lettura dal nodo 3 e dal nodo 4 il PLC mi restituisce errore di timeout all’infinito, nonostante le prime letture vadano a buon fine, Esempio :
10:48:03.911872|ModbusMaster:Tx|03 03 00 00 00 05 84 2B 10:48:04.229805|ModbusMaster:Rx|03 03 0A 82 3F 00 00 00 00 E8 B8 00 00 25 A2 10:48:04.730514|ModbusMaster:Tx|04 03 00 00 00 05 85 9C 10:48:05.553558|ModbusMaster:Rx|04 03 0A 82 3F 00 00 00 00 08 78 08 91 DF 75 10:48:06.054401|ModbusMaster:Tx|03 03 00 00 00 05 84 2B 10:48:07.183762|ModbusMaster:Rx|03 03 0A 82 3F 00 00 00 00 E8 B8 00 00 25 A2 10:48:07.684226|ModbusMaster:Tx|04 03 00 00 00 05 85 9C 10:48:07.914834|ModbusMaster:Rx|04 03 0A 82 3F 00 00 00 00 08 72 08 98 3F 71 10:48:08.415358|ModbusMaster:Tx|03 03 00 00 00 05 84 2B 10:48:09.914539|ModbusMaster:Rx| 10:48:09.915090|ModbusMaster:Er|Error:10007050, On Case:211, Back:51 10:48:10.415550|ModbusMaster:Tx|04 03 00 00 00 05 85 9C 10:48:11.915648|ModbusMaster:Rx| 10:48:11.916211|ModbusMaster:Er|Error:10007050, On Case:211, Back:51 10:48:12.416508|ModbusMaster:Tx|03 03 00 00 00 05 84 2B 10:48:13.916551|ModbusMaster:Rx| 10:48:13.917108|ModbusMaster:Er|Error:10007050, On Case:211, Back:51 10:48:14.417409|ModbusMaster:Tx|04 03 00 00 00 05 85 9C 10:48:15.917548|ModbusMaster:Rx| 10:48:15.918106|ModbusMaster:Er|Error:10007050, On Case:211, Back:51 10:48:16.418389|ModbusMaster:Tx|03 03 00 00 00 05 84 2B
Hai qualche consiglio ?
domenico.romano
PartecipanteLa comunicazione non si chiude mai se interrogo sempre lo stesso nodo ma sono comunque presenti degli errori ripetuti ciclicamente :
09:37:11.032825|ModbusMaster:Rx|03 03 0A 82 3F 03 E8 23 F0 E8 B8 00 00 4A FF 09:37:12.018824|ModbusMaster:Rx|03 05 00 01 00 00 9D E8 09:37:12.019576|ModbusMaster:Er|Error:10007153, On Case:61, Back:61 09:37:13.005968|ModbusMaster:Rx|03 05 00 01 FF 00 DC 18 09:37:13.992708|ModbusMaster:Rx|03 06 00 01 00 00 D9 E8 09:37:14.978813|ModbusMaster:Rx|03 06 00 02 00 00 29 E8 09:37:15.969282|ModbusMaster:Rx|03 03 0A 82 3F 00 00 00 00 E8 B8 00 01 E4 62 09:37:16.955459|ModbusMaster:Rx|03 05 00 01 FF 00 DC 18 09:37:16.956336|ModbusMaster:Er|Error:10007152, On Case:61, Back:61 09:37:17.942685|ModbusMaster:Rx|03 05 00 01 00 00 9D E8 09:37:18.929504|ModbusMaster:Rx|03 06 00 01 03 E8 D9 56 09:37:19.915316|ModbusMaster:Rx|03 06 00 02 23 F0 30 9C 09:37:20.905934|ModbusMaster:Rx|03 03 0A 82 3F 03 E8 23 F0 E8 B8 00 00 4A FF 09:37:21.892275|ModbusMaster:Rx|03 05 00 01 00 00 9D E8
domenico.romano
PartecipanteGrazie mille Sergio, al momento sto cercando una soluzione invece per scrivere l’orario nel formato hh:mm:ss.msec ma non riesco a trovare alcuna variabile di sistema che abbia i msec implementati e mi risulta macchinoso tirarli giu da SysGetSysTime. Mi sto perdendo una soluzione piu semplice ?
-
AutorePost