sallos
13. August 2012 um 15:30
1
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
Helmut
13. August 2012 um 16:51
2
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
sallos
13. August 2012 um 17:11
3
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
paresy
13. August 2012 um 18:00
4
Du hast den Haken bei „ReadOnly“ aktiviert.
paresy
sallos
13. August 2012 um 18:19
5
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?
Helmut
13. August 2012 um 18:36
6
Hast Du im Splitter was eingestellt?
Im Debug-Fenster der ser. Schnittstelle is’ da was?
Gruß Helmut
sallos
13. August 2012 um 18:51
7
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.
sallos
13. August 2012 um 19:06
8
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 )
Helmut
13. August 2012 um 19:10
9
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…
sallos
13. August 2012 um 19:18
10
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.
paresy
13. August 2012 um 20:00
11
Wäre komisch, aber probier mal ein ComPort_SetDTR(12345, True); an deine IO Instanz zu senden.
paresy
sallos
13. August 2012 um 20:12
12
Hab ich gemacht, aber immer noch das gleiche Bild.
Muss ich das wieder auf false setzen?
paresy
14. August 2012 um 14:58
13
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
sallos
14. August 2012 um 15:19
14
dank noch mal für den super Support!