Wie verwendet man die MODBUS RTU COM_MOD_MAST Fehlerdiagnose bei AC500-eco???

occam

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!
Auf einer AC500-eco versuche Ich mittels COM_MOD_MAST (RS485) Daten von mehreren Teilehmern zu auszutauschen.
Dazu verwende Ich folgenden Kode:
CASE RqCnt OF
(*This is a new Communication Cycle! *)
0:​
MB_Fct:=3; (* Rx Command!*)
MBSlaveDvADR:=1;
MBRxLngth:=20;
MBSlaveRqAddr:=128;​
MBRxDataAdr:=ADR(tmH1St);​
1:​
MBSlaveRqAddr:=5;
MBRxLngth:=1;
MBRxDataAdr:=ADR(tmH1HD1St);
2:​
In jedem weiteren Zweig werden jeweils verschiedene Parameter vorgegeben - Modbus Teilnehmer Addresse, Register etc.etc.
3:​
.............
12:​
.............
ELSE
PLC_St:=COMM_FAULT;
END_CASE

MBTxRq(EN:=FALSE);

MBTxRq(EN:= TRUE,​
COM := 2,
SLAVE := MBSlaveDvADR,
FCT := MB_Fct,
TIMEOUT := 250,
ADDR := MBSlaveRqAddr,
NB := MBRxLngth,
DATA := MBRxDataAdr,

DONE => MB_RDY,
ERR => MB_ERR,


ERNO =>Mod_ErrNum
);​

Mod_Done:=MBTxRq.DONE;
Mod_Error:=MBTxRq.ERR;

RqCnt:=(RqCnt+1) MOD 13;​

Der Kode ist Bestandteil von einem zyklyschen POU (500 ms, PRI 5).
Soweit OK - die Daten werden ausgetauscht. Dann habe Ich die RS485 Verbindung zu einem der MODBUS Slave Teilnehmer unterbrochen, und stellte fest, dass ERR und DONE staendig FALSE sind und somit keinerlei Diagnostik der Kommunikation moeglich ist. Alle Versuche die Werte von ERR und DONE auf andere Variablen - z.B Mod_Done und Mod_Error(global/lokal) zu uebertragen waren ergebnisslos. In der obigen Variante sind MB_ERR und MB_RDY digitale on-board Ausgaenge, auch das half nicht. Wenn aber auf den COM_MODE_MAST Block ein breakpoint gesetzt wird, werden ERR und DONE wie erwartet gesetzt -TRUE, sobald aber der Block verlassen wird, werden sie erneut FALSE!
Zusaetzlich versuchte Ich die Ausfuehrungszeit von dem COM_MODE_MAST zu ermitteln - vor und nach Block mass Ich die laufende Zeit (TIME()) und speicherte sie in einer Matrix. Fuer alle Telegramme war sie < 1 ms - unabhaengig davon ob die Kommunikation erfolgreich oder nicht war, obwohl eine TIMEOUT vor 250 ms vorgegeben wurde.
Offensichtlich ist etwas nicht wie es sein sollte, aber WAS?
Ich waere fuer jede Hilfe SEHR dankbar!

Frohe Ostern!
 
hallo, timeout zw. kommunikationspartnern ist bei modbus rtu mind. 250 ms denke ich..... hat aber nichts mit der programmausführungszeit zu tun, welche du misst bg bb
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke fuer die Interesse bits'bytes!
Die Zeiten sind unterschiedlich - die angeschlossenen slave AC500-eco sind recht schnell - in ~110ms senden sie ~200 Byte - und das bei 19200 bps. Aber mit dem RS485 Analyzer den ich unter Windows verwende ist das mehr Richtwert als Messung! Die anderen Teilnehmer sind deutlich langsamer ~300 ms. Und das ist ein Teil des Problems - wenn der DONE Parameter aus dem COM_MOD_MAST Block nicht verfuegbar ist, muss Ich die Kommunikation timeout nach dem langsamsten Teilnehmer ausrichten!
 
Zurück
Oben