Thread Content
Es gibt ein System sowie ein DCS, die über MODBUS kommunizieren. Das DCS ist das zentrale Steuerungssystem JX-300XP. Das Problem ist folgendes: Die vom anderen System gesendeten Daten bestehen entweder aus zwei oder vier Bytes. Die Daten mit zwei Bytes werden ordnungsgemäß verarbeitet, während die Daten mit vier Bytes nicht richtig interpretiert werden können. Das Problem ist im Grunde klar: Es handelt sich um eine von der anderen Seite bereitgestellte Registeradresse – es handelt sich dabei um eine 32-Bit-, also vierbytegroße Variable. Doch DCS kann keine vierbytegroßen Variablen direkt lesen. Wie lässt sich dieses Problem lösen?
Bei 32 Bit handelt es sich dabei um reelle Zahlen. Im System des Gegners werden sie in 16-Bit-Ganzzahlen umgewandelt, und anschließend wird dies auf der Seite der Zentrale wieder umgewandelt.
Im Modbus-Protokoll ist kein 32-Bit-Datentyp vorgesehen; es werden nur 16-Bit-Registerdaten definiert. Daher muss man selbst programmieren, um dieses Problem zu lösen – egal ob auf der Slave- oder Master-Seite. Man muss sich also selbst um die Handhabung dieses Datentyps kümmern
Es ist sehr wahrscheinlich, dass die höheren 16 Bit und die niedrigeren 16 Bit vertauscht sind. Man kann die Gleitkommazahl auf der Slave-Seite in eine 16-Bit-Ganzzahl umwandeln oder auf der Master-Seite die höheren 16 Bit mit den niedrigeren 16 Bit austauschen
Führen Sie einen Modbus-Scan durch, um den Datentyp zu bestimmen. Es könnte sich um einen 64-Bit-Double-Typ handeln. In einigen Systemen ist der gesammelte Wert tatsächlich vom Double-Typ – beispielsweise sind die gesammelten Werte im Daniel-Flussmessgerät von diesem Typ. Bei Fließkommazahlen sind in der Regel 4 Bytes erforderlich; die möglichen Kombinationen sind meist 1234/3412/2143/4321 usw. . . . Besonders ekelerregend ist es, darauf zu stoßen. . . . Bei Siemens-PLCs, die mit einem Modbus-Communication-Device arbeiten, ist das Format für Fließkommazahlen 3412; bei herkömmlichen PLCs ist es 1234
Schauen Sie im DCS-Handbuch nach, wie Datentypen definiert werden – manche werden als „real“ bezeichnet, andere als „dword“
Der Threadersteller sowie die anderen Nutzer haben das MODBUS-Protokoll verwendet. Beim MODBUS_RTU-Protokoll können pro Übertragung n Daten übertragen werden – wie hoch kann dieser Wert n maximal sein? Wie viele Daten kann MODBUS_RTU pro Übertragung maximal übertragen? n kann nicht unendlich groß sein, sonst könnte die Datenübertragung nie abgeschlossen werden.