Modbus RTU welcher Funktion Code?

Moin,

ich habe an meinem Rechner eine RS8485 Schnittstelle als COM1.

Im IPS habe ich einen I/O und eine Splitter Instanz eingerichtet, aber ich bekomme keinen Daten?!

Daraufhin hab ich mal ModbusPoll installiert und siehe da ich kann den Slave auslesen:

ModbusPoll:
Rx:01 03 02 00 64 B9 AF
Tx:01 03 03 E8 00 01 04 7A

Nun habe ich mal in Debug der COM Instanz nachgesehen und mir ist aufgefallen das dieser was ganz andres Sendet?!

IPS:
01 04 03 E8 00 01 B1 BA

Mein Slave scheint nur auf dem Funktion Code 3 zu hören.

Kann man den Funktion Code im IPS ändern??

Lars

Hallo Lars,
Du bekommst wieder Mecker vom Meister, du solltest genauer fragen:

Du möchtest ein Relais abfragen oder ein Byte, siehe Modbus RTU Protokollbeschreibung zB.

hier

Aufbau der Modbus Nachrichten VI
 Modbus Funktionen:
 01 (0x01) Read Coils
 02 (0x02) Read Discrete Inputs
 03 (0x03) Read Holding Registers
 04 (0x04) Read Input Registers
 05 (0x05) Write Single Coil
 06 (0x06) Write Single Register
 07 (0x07) Read Exception Status

Gruß Helmut

Warum? Ist doch ne Wichtige Frage warum sendet IPS immer Funktionscode 4

Der Aufbau einer Modbus Nachricht ist:



 

Read Input Registers (FC=04)

Request

This command is requesting the content of analog input register # 30009
from the slave device with address 17.

11 04 0008 0001 B298

11: The Slave Address (17 = 11 hex)
04: The Function Code (read Analog Input Registers)
0008: The Data Address of the first register requested. (30009-30001 = 8)
0001: The total number of registers requested. (read 1 register) 
B298: The CRC (cyclic redundancy check) for error checking.

Also sender IPS ein Code 4.
Und meine Slaves können leider nur Funktionscode 3.

Lars

Du hast den Haken bei „ReadOnly“ aktiviert.

paresy

Mh okay also senden tut ips nun das gleiche nur leider keine Antwort:

Mit Modbus Poll:

000114-Tx:02 03 00 00 00 01 84 39
000115-Rx:02 03 02 01 F4 FC 53

IPS:
COM1:
02 03 00 00 00 01 84 39
Splitter:
03 00 00 00 01 Wait Error

Wo dran kann das liegen das es mit dem Modbus Poll geht und mit IPS nicht?

Hast Du im Splitter was eingestellt?

Im Debug-Fenster der ser. Schnittstelle is’ da was?

Gruß Helmut

Da kann man nicht viel einstellen…Ich habe noch mal die Com1 Einstellungen nachgeguckt und die sind so wie im ModbusPoll

9600
8
1
None

Im Modbus Poll kann man noch Respone und Delay Time einstellen aber das gibt es nicht im IPS.

Wie oben gesacht in der Com instanz steht nur:

Transmitted 02 03 00 00 00 01 84 39

Und der Splitter steht auf Modbus RTU. Und die entsprechende ID des Teilnehmers.

Ich habe am RS485 2 Geräte zum Testen und von beiden kann ich nichts abrufen ( ID1 und ID2 )

In Tread#5 hast Du was im Splitter und DAS kann ja nur über die Com-Schnittstelle gegangen sein.

Und in der Com hast Du nur das Senden gesehen ??

Wunderlich…

Ja man sieht nur das Senden, obwohl der Sende Code genauso aussieht wie mit ModbusPoll und da antwort das Gerät.

Habs mal angehängt.

Wäre komisch, aber probier mal ein ComPort_SetDTR(12345, True); an deine IO Instanz zu senden.

paresy

Hab ich gemacht, aber immer noch das gleiche Bild.

Muss ich das wieder auf false setzen?

Problem gefunden und gelöst.

Manche RS485 benötigen einen ganz bestimmten Modus Namens RTS Toggle. Den kann man aber der nächsten Version (2.6) dann per ComPort_SetRTSFlowControl($id, 3); aktivieren.

paresy

dank noch mal für den super Support!