TIA Frage Modbus Kommunikation Seriell mit China Ultraschall Generator

Johanning

Level-2
Beiträge
21
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forumsteilnehmer,

ich habe die Hoffnung, dass hier einige Profis zur Modbus Kommunikation mitlesen.

Ich versuche eine Kommunikation zwischen einer Simatic S7 1200 CPU mit Schnittstelle RS422/485 über PtP und einem China Generator zu Programmieren.
Ich habe bevor ich den Generator bekommen habe, die Kommunikation zwischen zwei Steuerungen getestet und das hat auch funktioniert.

Wenn ich jetzt aber als Master die ersten Worte vom Generator lesen will bekomme ich ständig den Fehler 80C8 Slave Timeout und beim Generator leuchtet
die RX Led (Beschriftung am Gerät) konstant. Es könnte aber auch die Tx Led sein, laut Beschreibung (Beschriftung am Gerät und in der Anleitung sind vertauscht).

Wie würdet Ihr folgende Beschreibung verstehen:
Modbus communication protocol (Modbus_RTU, 8/N/1, Slaver), Only Modbus_RTU slaves are supported, all parameters ere 2 bytes long.
Ich würde das so verstehen, das die Siemens CPU als Slave arbeiten muss. Aber ein Beispiel vom Hersteller ist als Master, funktioniert aber so nicht.

Als erstes liest das Beispiel per MB_MASTER (MB_ADDR = 1, MODE = 0, DATA_ADDR = 30001, DATA_LEN = 4), dann kommt sofort der beschrieben Fehler.

Laut Beschreibung wäre es das erste Register:
1. 01H Read Coil Status with Address Range 0x0000 - 0x0003, 4 Worte.
2. 02H Read Input Status with Address Range 0x0000 - 0x0000, 1 Wort.
3. 03H Read Holding Register with Address Range 0x0000 - 0x0019, 20 Worte.
4. 04H Read input Register with Address Range 0x0000 - 0x0005, 6 Worte.

Im Beispiel wird 01H, 02H und 04H immer von 30001 gelesen und 03H von 40769 gelesen und in verschieden DB Adressen geschrieben, wäre das so richtig?
Meiner Meinung nach muss 01H von 30001 gelesen, 02H von 30005, 03H von 40001 und 04H von 30006 gelesen werden.

Hab ich das so richtig verstanden, oder was ist da falsch?

Danke fürs lesen und die evtl. Antworten.

Gruss

Volker
 

Anhänge

Zuviel Werbung?
-> Hier kostenlos registrieren
Wie würdet Ihr folgende Beschreibung verstehen:
Modbus communication protocol (Modbus_RTU, 8/N/1, Slaver), Only Modbus_RTU slaves are supported, all parameters ere 2 bytes long.
Ich würde das so verstehen, das die Siemens CPU als Slave arbeiten muss. Aber ein Beispiel vom Hersteller ist als Master, funktioniert aber so nicht.
Das wäre sehr unüblich. Ich glaube, die SPS muss Modbus Master sein.
Wie heisst der Generator? Welches Beispiel vom Hersteller funktioniert warum nicht?
 
Das wäre sehr unüblich. Ich glaube, die SPS muss Modbus Master sein.
Wie heisst der Generator? Welches Beispiel vom Hersteller funktioniert warum nicht?
Danke, dann werde ich es als Master weiter probieren.

Der Generator ist von RPS Sonic der HC-CS2000C, ich habe die original Bedienungsanleitung mal angehängt.
RPS hat mir ein Beispiel Programm in Chinesisch geschickt, aber da werden 9 Register gelesen. Der HC-CS2000C hat aber nur 4 zum Lesen und 2 zum Schreiben. Im Beispiel Programm werden 8 Register mit jeweils 3 Worten und 1 mit 18 Worten gelesen.
Kannst Du mir auch was zu der Adressierung 30001 usw. sagen?
 

Anhänge

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe keine Abschlusswiderstande, da ich über die RS485 Schnittstelle und kurzer Verbindung, nur mit dem Generator kommunizieren möchte.
In industrieller Umgebung trotzdem die Abschlusswiderstände setzen.

Tipp: lies erstmal nur 1 Register.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
RS485 Slave Adresse ist am Generator eingestellt und bei MB_MASTER an MB_ADDR angegeben?
Es funktioniert nach nochmaligem Tausch der beiden Leitungen, ich konnte es vorher nur nicht sehen, da es so schnell ging.
Danke, ich werden jetzt erstmal weiter testen.
Also das lesen von Register 1 (4 Worte von Adresse 30001) scheint geklappt zu haben. Wie lese ich jetzt das nächse Register mi einem Wort?
Wieder von Adresse 30001 oder 30005?
 
Also das lesen von Register 1 (4 Worte von Adresse 30001) scheint geklappt zu haben.
"4 Worte": da hast du 4 Register von 30001 bis 30004 gelesen

Wie lese ich jetzt das nächse Register mi einem Wort?
Wieder von Adresse 30001 oder 30005?
Ab Adresse 30005. Die hättest du aber auch gleich zusammen mit 30001 bis 30004 lesen können.
Wegen dem Modbus-Protokoll-Overhead ist es schneller und einfacher, möglichst viele Register in einem Rutsch zu lesen, auch wenn ein paar uninteressante Register dabei sind.
 
Danke, aber ich lese die Register lieber einzeln. jetzt muss ich also die DATA_ADDR auf 30005 setzen, muss ich die MB_ADDR auch um einen hochsetzen, auf 2 oder lasse ich die auf 1?
 
Mit dem Registerlesen funktioniert, ich habe Register 2 mit einem Wort 30005 ausgelesen. Jetzt muss ich ein Halteregister auslesen. Geht das mit 30006, 40001 oder 40006?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bist du sicher, dass deine bisherigen Versuche korrekt funktioniert haben?

1. 01H Read Coil Status with Address Range 0x0000 - 0x0003, 4 Worte.
2. 02H Read Input Status with Address Range 0x0000 - 0x0000, 1 Wort.
3. 03H Read Holding Register with Address Range 0x0000 - 0x0019, 20 Worte.
4. 04H Read input Register with Address Range 0x0000 - 0x0005, 6 Worte.
(rot markiert ist falsch)

Diese 4 Datenbereiche lesen würde ich wie folgt:
MB_MASTER
(1) MB_ADDR = 1, MODE = 0, DATA_ADDR = 1, DATA_LEN = 4
(2) MB_ADDR = 1, MODE = 0, DATA_ADDR = 10001, DATA_LEN = 1
(3) MB_ADDR = 1, MODE = 0, DATA_ADDR = 40001, DATA_LEN = 26
(4) MB_ADDR = 1, MODE = 0, DATA_ADDR = 30001, DATA_LEN = 6
 
Warum sind die falsch? In der Anleitung steht folgendes:

Description of the communication protocol

Modbus communication protocol(Modbus_RTU,8/N/1,Slaver),Only Modbus_RTU

slaves are supported, all parameters are 2 bytes long.

101H Read coil status

Addressrange0x0000——0x0003。

0x0000: Alarm reset (self-clearing)

0x0001: Frequency sweep (self-clearing)

0x0002: Sonic start

0x0003: User parameter saving (self-clearing)

202H Read input status

Add range 0x0000——0x0000 。

0x0000:empty

303H Read the holding register

Add range 0x0000——0x0019

0x0000: maximum frequency

0x0001: frequency minimum

0x0002: upper power limit

0x0003: sweep start point

0x0004~0x0017: Reserved

0x0018: Welding amplitude

0x0019: Welding time

404H Read input register

Add range 0x0000——0x0005

0x0000: real-time power

0x0001: real-time frequency

0x0002: Fault code (see 4 Troubleshooting and Solution)

0x0003: State machine code 1

0x0004: sweep end point

505H Force (write) a single coil (supports 0fH function code)

Add range 0x0000——0x0003。

For the address of each coil, see 01H function code.

11

6, 06H function code: Force (write) single holding register (supports

10H function code) Address range 0x0000——0x0019

For the address of each parameter, see 03H Function Code.


Wie müsste es Deiner Meinung nach aussehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für Deine Geduld. Ich habe zum ersten Mal mit serieller Kommunikation zu tun und weiss leider nicht viel darüber. Sieht so aus, als würde es jetzt funktionieren. Ich kann jedes Register auslesen und auch beschreiben. Wenn ich ein Register beschreibe, kommt die Änderung auch im Generator an, wenn ich das entsprechende lese. Noch Einmal vielen Dank und einen schönen Tag.
 
Zurück
Oben