was beinhaltet die Log Datei? Kannst bitte einen Ausschnitt posten?
Welche Probleme hattest du?
Bevor ich hier Ausschnitte poste muss ich kurz etwas ausholen.
Die Anlage an der die Probleme auftreten ist ein Verbund von 8 USVen, die elektrisch parallel geschaltet sind. Ein Steuerschrank mit einem Beckhoff CP2715 Panel PC kommuniziert mit diesen USVen nacheinander via Modbus TCP über eine Instanz des Funktionsbausteins "FB_MBReadRegs", wobei pro USV drei Abfragen an unterschiedlichen Adressen mit einer unterschiedlichen Anzahl an Registern erfolgt. Es gibt im ganzen Projekt auch nur diese eine Instanz. Außerdem soll(te) auch ein Janitza Messgerät über diese Instanz abgefragt werden, hier allerdings nur mehrere Register von einer Adresse.
In einem Array einer Struktur ist die Reihenfolge hinterlegt, wann von welcher IP, ab welcher Adresse, welche Anzahl an Registern ausgelesen werden soll.
Hier mal ein Scope View, wo der Fehler zu sehen ist. Die erste (oberste) Achse enthält den Index an dem aus dem Array ausgelesen wird, welcher Slave, an welcher Adresse abgefragt werden soll. Die zweite ist der Eingang "bExecute", die Dritte der Ausgang "bBUSY", die vierte der Ausgang "bError" des FBs, die fünfte Achse zeigt den Zustand des Ausgangs "cbRead" des FBs an und somit die Anzahl der gelesenen Bytes.
Die empfangenen Daten werden in einem Word Array abgelegt. Die letzte Achse enthält die Daten eines einzelnen Index dieses Arrays.

Vorab noch eine Bemerkung zum Janitza. Das Janitza wurde nie montiert, aber abgefragt. Das Janitza wird bei Array Index 25 abgefragt, was der höchste Index ist. Diese Abfrage verursacht natürlich einen Fehler.
Auf dem Scope View wird zunächst die Abfrage abgearbeitet, die im Array an Index 22 steht. Vom Slave sollen 80 Register, also 160 Bytes abgefragt werden. Was hier schon auffällig ist, ist, dass der Ausgang "cbRead" des FBs 60 Bytes meldet. Diese Abfrage wird mit einem Fehler (Fehlernummer 1861Dez) beendet/abgebrochen.
Anschließend wird die Abfrage ausgeführt, die im Array an Index 23 steht. Es soll der selbe Slave an einer anderen Adresse abgefragt werden, diesmal sollen 100 Register abgefragt werden, was 200 Bytes entsprechen würde. Auch hier liegt am Ausgang "cbRead" des FBs wieder der Wert 60 an. Hierbei handelt es sich übrigens um die Anzahl Bytes, die bei der jeweils dritten Abfrage eines Slaves übermittelt werden soll.
Diese Abfrage wird scheinbar erfolgreich beendet, denn der Ausgang "bBUSY" geht auf FALSE und der Ausgang "bError" bleibt auf FALSE. Hier passieren nun ganz seltsame Dinge. Der Ausgang "cbRead" wechselt im selben Zyklus wie "bBUSY" von 60 Bytes auf 160 Bytes, dies entspricht der Anzahl Bytes, die bei der vorhergehenden Abfrage übermittelt werden sollten. Das Datum (Ist tatsächlich der Singular von Daten), das auf der letzten Achse angezeigt wird ist die Warn ID, die von der achten USV übermittelt wird. An dieser USV liegt keine Warnung an, daher muss hier eigentlich eine 0 gemeldet werden, was aber nicht der Fall ist. Das übermittelte Datum entspricht dem Inhalt des Registers der vorhergehenden Abfrage.
Hier noch ein paar Auszüge aus dem Logfile:
Code:
18-06-2025:13:43:44.663: CTcModbusSrv::CTcModbusSrv tComm:5000 tKA:0 prio:200
18-06-2025:13:43:44.702: >>TcModbusSrv: Start
18-06-2025:13:43:44.715: TcModbusSrv: Load mapping from file succeeded
18-06-2025:13:43:44.719: TcModbusSrv: loaded configuration file \Hard Disk\TwinCAT\Functions\TF6250-Modbus-TCP\Server\TcModbusSrv.xml
18-06-2025:13:43:44.731: <<TcModbusSrv: Failed to connect server port hr=0x98110001
18-06-2025:13:48:01.676: >>CTcModbusSrv::Stop
18-06-2025:13:48:01.691: CTcModbusSrv::Stop Stop client
18-06-2025:13:48:01.697: CTcModbusSrv::Stop Stop server
18-06-2025:13:48:01.701: CTcpModbusServer::CloseConnections(); Entry...
18-06-2025:13:48:01.706: CTcpModbusServer::CloseConnections(); Exit
18-06-2025:13:48:01.711: CTcModbusSrv::Stop disconnect ads server
18-06-2025:13:48:01.715: <<CTcModbusSrv::Stop Stop server
18-06-2025:13:49:56.883: CTcModbusSrv::CTcModbusSrv tComm:5000 tKA:0 prio:200
18-06-2025:13:49:56.887: >>TcModbusSrv: Start
18-06-2025:13:49:56.893: TcModbusSrv: Load mapping from file succeeded
18-06-2025:13:49:56.897: TcModbusSrv: loaded configuration file \Hard Disk\TwinCAT\Functions\TF6250-Modbus-TCP\Server\TcModbusSrv.xml
18-06-2025:13:49:56.914: CTcpModbusServer::CloseConnections(); Entry...
18-06-2025:13:51:47.161: CTcpSocket::Release this = 0x008FDDD0, refCnt=1.
18-06-2025:13:51:47.161: >> CTcpSocket::CloseSocket(); this = 0x008FDDD0,
readId == 0x7f8051e socket=5 m_bCreated=1 m_bListening=0.
18-06-2025:13:51:47.168: AmsReceiverThread (008FDDA0-0x789058e) has ended.
18-06-2025:13:51:47.170: CTcpSocket::CloseSocket(); Lock>> this = 0x008FDDD
ThreadId == 0x7f8051e socket=5 m_bCreated=1 m_bListening=0.
18-06-2025:13:51:47.179: CTcpSocket::CloseSocket(); shutdown reciver this = 0x008FDDD0, ThreadId == 0x7f8051e.
18-06-2025:13:51:47.183: CTcpSocket::Receiver; SOCKET_ERROR err=0x2714!
18-06-2025:13:51:47.184: CTcpSocket::CloseSocket() (1) succeeded this =
008FDDD0, ThreadId == 0x6ab0026
18-06-2025:13:51:47.190: CMBAP::OnReceive(); SocketError:10004
6 7 4
18-06-2025:13:51:47.192: CMBPduSync signal connection aborted
:
18-06-2025:13:51:47.199: CTcpSocket::Receiver; nErr == 10004 this = 0x008FDDD0!
18-06-2025:13:51:47.201: CTcpSocket::CloseSocket(); unlock>>this = 0x008FDDD0, T
eadId == 0x7f8051e.
18-06-2025:13:51:47.207: >> CTcpSocket::CloseSocket(); this = 0x008FDDD0, ThreadId == 0x7f8051e socket=-1 m_bCreated=0 m_bListening=0.
18-06-2025:13:51:47.210: CTcpSocket::CloseSocket(): Waiting for thread (0x7f8051e) exit !
D$\¡|‡ ‹ ‹ ‹Ð¡|‡ +‰$¡|‡ ‹ ‹@ÿÐ!ÿ‹D$`ƒÄ
18-06-2025:13:51:47.217: CTcpSocket::CloseSocket(); Lock>> this = 0x008FDDD0, ThreadId == 0x7f8051e socket=-1 m_bCreated=0 m_bListening=0.
uô
18-06-2025:13:51:47.223: CTcpSocket::CloseSocket(); unlock>>this = 0x008FDDD0, ThreadId == 0x7f8051e.
18-06-2025:13:51:47.227: << CTcpSocket::CloseSocket() this = 0x008FDDD0, ThreadId == 0x7f8051e.
18-06-2025:13:51:47.233: ####CTcpSocket::Receiver; this = 0x008FDDD0, Thread (0x7f8051e) of TCP port is being stopped!
18-06-2025:13:51:47.237: CTcpSocket::CloseSocket(): Wait for thread (0x7f8051e) exit successful !