TIA Modbus TCP/IP Kommunikation TIAV18 1500er

ProgWolf

Level-2
Beiträge
7
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Leute,

ich bin neu auf dem Gebiet Modbus.
Ich muss auf einem Gerät lesen und schreiben über Modbus TCP/IP.
CPU:
192.168.200.102
255.255.255.0
Partner Gerät: PLU-A16.16 von Rinck Elektronics. (siehe Anhang)
192.168.200.116
255.255.255.0

ich muss im Input Reg. die "in_value(1)" lesen
und im Holding Reg. die "in_hw_conf(1)" Schreiben

der Kunde hat verschiede Sensor Typen um Temperaturen zu messen

Ich habe mir von Siemens das Beispielprojekt "modbus_tcp_s7-1500_s7-1200" angesehen und komme nicht weiter.
Ich habe immer einen Error anstehen und den Status gibt es nicht :-D.

im Bild "ModbusData" sehen Sie die Einstellung die ich eingestellt habe.
im Bild "MB_Reg" habe ich einen DB erstellt wo ich das Input und Holding Register lesen und schreiben kann. (Hoff das, dass richtig ist.)
im Bild "Programm auszug" sehen Sie wie ich den Baustein beschalte.

Was muss ich an den Parametern:
  • modbusMode
  • modbusDataAdresse
  • modbusDataLen
schreiben damit ich lesen und schreiben kann ?

Woher weis ich welche Einstellungen meine CPU hat in Bezug der Baudrate und Parity ?

Befinde ich mich mit dem Beispielprogramm von Siemens auf dem Holzweg?
Gibt es bessere Wege/ Lösungen ?

Ich bedanke mich schon mal für eure Hilfe.
 

Anhänge

  • AN_C910_D_PLU-A_BUS_Protokoll.PDF
    240,1 KB · Aufrufe: 13
  • ModbusData.PNG
    ModbusData.PNG
    100,7 KB · Aufrufe: 21
  • MB_Reg.PNG
    MB_Reg.PNG
    8,7 KB · Aufrufe: 21
  • Programm auszug.PNG
    Programm auszug.PNG
    76,1 KB · Aufrufe: 21
Ich habe mir von Siemens das Beispielprojekt "modbus_tcp_s7-1500_s7-1200" angesehen und komme nicht weiter.
Welches Beispielprojekt meinst du? Hast du einen Link?
Halte dich an die Beschreibungen des MB_CLIENT und TCON in der TIA Hilfe, die reichen eigentlich.
Welche TIA Version verwendest du? Und welche CPU?

Ich habe immer einen Error anstehen und den Status gibt es nicht :-D.
Der Errorstatus ist 16#80A4. Das wird der Fehlerstatus des unterlagerten TCON sein:
80A4 IP-Adresse des remoten Endpunkts der Verbindung ist ungültig oder sie entspricht der IP-Adresse des lokalen Partners.

Der Modbus Client Baustein benötigt in der Verbindungsbeschreibung (Parameter connect) nicht die eigene IP-Adresse (die ist völlig egal), sondern die des Partner-Gerätes, also 192.168.200.116

Was muss ich an den Parametern:
  • modbusMode
  • modbusDataAdresse
  • modbusDataLen
schreiben damit ich lesen und schreiben kann ?
Welche Register willst Du denn lesen und schreiben?
Tip: versuche zunächst nur ein einzelnes Register zu lesen. Hilfreich ist oft auch, das Lesen mit einem Modbus Test Client Programm zu testen
Es gibt kostenlose Modbus Test Clients, einen ganz einfachen z.B. von Janitza das Tool Modbus Diagnose - für meine Testzwecke hat das immer ausgereicht.
Empfehlung: Teste mal mit dem Janitza Tool das lesen, ob es damit funktioniert. Das Tool muß nicht installiert werden, es ist eine einfache exe zum direkt ausführen.

Woher weis ich welche Einstellungen meine CPU hat in Bezug der Baudrate und Parity ?
ModbusTCP verwendet keine Baudrate und Parity, die braucht man nur für ModbusRTU
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Welches Beispielprojekt meinst du? Hast du einen Link?
Im Anhang der zip

Halte dich an die Beschreibungen des MB_CLIENT und TCON in der TIA Hilfe, die reichen eigentlich.
Ist auf jeden fall ein anderer Baustein als im Testprogramm vom Siemens

Welche TIA Version verwendest du? Und welche CPU?
TIA-Portal V18 Update 2, und die CPU ist eine CPU 1513-1 PN, Artikelnummer: 6ES7 513-1AL02-0AB0

Welche Register willst Du denn lesen und schreiben?
ich muss im Input Reg. die "in_value(1)" lesen, Modbusadresse 2 (30000)
und im Holding Reg. die "in_hw_conf(1)" schreiben, Modbusadreese 4 (40000)

Tip: versuche zunächst nur ein einzelnes Register zu lesen. Hilfreich ist oft auch, das Lesen mit einem Modbus Test Client Programm zu testen
Danke für den Tipp, schaue ich mir gleich mal an.
 

Anhänge

  • ModbusTCP_S71500_V15-1.zip
    2,9 MB · Aufrufe: 8
Ich verstehe den/ die Zusammenhänge nicht der Parameter wie in der Hilfe von TIA beschrieben.
  • MB_Mode
  • MB_Data_Addr
  • MB_Data_LEN
weiter unten am Baustein finde ich das gleiche noch mal, nur einzelt fürs Lesen und schreiben ?
und wo packt der Baustein die gelesen daten hin ?
 

Anhänge

  • Modbus.PNG
    Modbus.PNG
    195,1 KB · Aufrufe: 8
Eine Beschreibung für den Baustein findest du, wenn du ihn markierst und F1 drückst.

Screenshot 2023-10-11 142559.png


Das Beispiel von Siemens ist für einen Datenaustausch zwischen einer 1500 und einer 1200 gedacht:
NET_Modbus_TCP_S7-1500_S7-1200_01_de.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe den/ die Zusammenhänge nicht der Parameter wie in der Hilfe von TIA beschrieben.
  • MB_Mode
  • MB_Data_Addr
  • MB_Data_LEN
weiter unten am Baustein finde ich das gleiche noch mal, nur einzelt fürs Lesen und schreiben ?
und wo packt der Baustein die gelesen daten hin ?
Ich würde nicht den Baustein vom Siemens Beispiel nehmen, sondern den MB_CLIENT direkt aufrufen. Da brauchst du dann am besten eine Schrittkette, um das Lesen und Schreiben in 2 Jobs nacheinander auszuführen. Siehe die TIA Hilfe zu MB_CLIENT.

Zuerst musst du höchstwahrscheinlich die MB_UNIT_ID direkt im Instanz-DB vom MB_CLIENT auf den Wert setzen, der für das Rinck-Gerät im Holding Register 1 (dev_address) eingestellt ist: Default value ist 1
MB_Unit_ID = 1

Und für die Lese- und Schreibaufträge würde ich folgende Parameter probieren:
ich muss im Input Reg. die "in_value(1)" lesen, Modbusadresse 2 (30000)
MB_MODE = 0
MB_DATA_ADDR = 30003
MB_DATA_LEN = 1

und im Holding Reg. die "in_hw_conf(1)" schreiben, Modbusadreese 4 (40000)
MB_MODE = 1
MB_DATA_ADDR = 40005
MB_DATA_LEN = 1

Und an MB_DATA_PTR gibst du eine INT- oder WORD-Variable an, wo der gelesene Wert abgelegt werden soll bzw. wo der zu schreibende Wert drin steht.
 
Zuerst musst du höchstwahrscheinlich die MB_UNIT_ID direkt im Instanz-DB vom MB_CLIENT auf den Wert setzen, der für das Rinck-Gerät im Holding Register 1 (dev_address) eingestellt ist: Default value ist 1
MB_Unit_ID = 1
Die Info war Gold wert!!! Den Rest hatte ich schon fast richtig.
Komisch finde ich nur, das im Register wieder ein Offset von 1 drin ist.

Wenn ich die "modbusDataLen" >30 setzte spinnt der Baustein. ich schätze ich kann nicht mehr lesen, aber wodran liegt das?
Kann mir jemand das beantworten?

BESTEN DANK schon mal für eure Hilfe !!!
 
Komisch finde ich nur, das im Register wieder ein Offset von 1 drin ist.
Das ist historisch so entstanden, daß manche Entwickler bei 0 anfangen zu zählen und manche bei 1. Deshalb muß man bei Modbus bei der Angabe der gewünschten Registernummer fast immer +/- 1 ausprobieren.

Wenn ich die "modbusDataLen" >30 setzte spinnt der Baustein. ich schätze ich kann nicht mehr lesen, aber wodran liegt das?
Gibt es da einen Fehlerstatus/Fehlernummer?
Vielleicht begrenzt die Implementierung des Modbus-Servers von Rinck die max Anzahl von in einem Auftrag ansprechbarer Register? Das Modbus Protokoll begrenzt auf max 125 Register, in manchen Geräten ist die Anzahl auf kleinere Werte begrenzt (evtl. wegen leistungsschwachem µP).
 
Zurück
Oben