TIA Auslesen und anzeigen eines MODBUS RTU Slave Registers in TiaPortal

Azubi94

Well-known member
Beiträge
72
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Liebes SPS Forum,

ich versuche zur Zeit einen IPC (Slave) mittels S7 1500 und Kommunikations Baugruppe CM PtP HF über Modbus rtu auszulesen (peer to peer). Ich würde gerne die Werte in einer Liste darstellen. Ich habe versucht, mich mittels Siemens Dokumentation an das Thema heranzutasten und habe folgendes Programm erstellt:
nw1.JPG
Nw2.JPG

Nw3&4.JPG

Das ist soweit mein Ansatz um den Slave auszulesen. Ich habe ehrlich gesagt nur grob verstanden wie genau die Kommunikation verläuft. Ich habe jedoch verstanden, dass im DB_BUFFER die Werte/Register angezeigt werden können (im ideal Fall).

tabelle.JPG

Ich möchte also mal (als Nachweis der Funktionalität) irgend einen Wert in der Tabelle anzeigen. Der Slave (IPC) hat folgende Kenndaten:


modbus slave.jpg

Ich habe leider keinen wirklichen Plan wie ich das umsetzen soll, bin deshalb dankbar für jeden Hinweis.

Viele Grüße

Jens
 

Captain Future

Well-known member
Beiträge
619
Punkte Reaktionen
154
Viel Arbeit….
Erstmal würde ich feste Werte an den Modbus Comm Load schreiben….
oder Deinen DB1 zeigen was da drin steht.
Port 0 das klappt nicht hier muß die Adresse der Schnittstelle stehen…

1623351461943.png

Die Adresse für den Port findet man unter PLC-Variablen -> Systemkonstanten

Was wichtig ist im DB von deinem Modbus_Comm_Load
es gibt einen Eintrag "MODE" = Betriebsart

Zulässige Betriebsarten sind:
0 = Vollduplex (RS232)
1 = Vollduplex (RS422) Vierdraht-Betrieb (Punkt-zu-Punkt)
2 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Master, CM PtP (ET 200SP))
3 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Slave, CM PtP (ET 200SP))
4 = Halbduplex (RS485) Zweidraht-Betrieb 1)

Hier mußt Du mit Sicherheit 4 = Halbduplex (RS485) Zweidraht-Betrieb eintragen
Werkseinstellung ist 0 = Vollduplex (RS232) Da mal in die Unterlagen vom Slave schauen.....

Wer das nicht weiß such oft ein paar Stunden.... oder Tage
Dann mal in die Hilfe von TIA sehen deine Bits Done, Error usw. sind nur für einen Zyklus true
Heißt wenn du mal ein paar Fehlernummer sehen willst solltest Du mit dem Error den Status in einen anderen Bereich kopieren
Damit man vernünftig die Fehlernummern lesen kann und anschließend in der Hilfe vom TIA sich schlau macht...
 
OP
Azubi94

Azubi94

Well-known member
Beiträge
72
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Viel Arbeit….
Erstmal würde ich feste Werte an den Modbus Comm Load schreiben….
oder Deinen DB1 zeigen was da drin steht.
Port 0 das klappt nicht hier muß die Adresse der Schnittstelle stehen…

Anhang anzeigen 54820

Die Adresse für den Port findet man unter PLC-Variablen -> Systemkonstanten

Was wichtig ist im DB von deinem Modbus_Comm_Load an:

es gibt einen Eintrag "MODE" = Betriebsart

Zulässige Betriebsarten sind:
0 = Vollduplex (RS232)
1 = Vollduplex (RS422) Vierdraht-Betrieb (Punkt-zu-Punkt)
2 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Master, CM PtP (ET 200SP))
3 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Slave, CM PtP (ET 200SP))
4 = Halbduplex (RS485) Zweidraht-Betrieb 1)

Hier mußt Du mit Sicherheit 4 = Halbduplex (RS485) Zweidraht-Betrieb eintragen
Werkseinstellung ist 0 = Vollduplex (RS232) Da mal in die Unterlagen vom Slave schauen.....

Wer das nicht weiß such oft ein paar Stunden.... oder Tage
Dann mal in die Hilfe von TIA sehen deine Bits Done, Error usw. sind nur für einen Zyklus true
Heißt wenn du mal ein paar Fehlernummer sehen willst solltest Du mit dem Error den Status in einen anderen Bereich kopieren
Damit man vernünftig die Fehlernummern lesen kann und anschließend in der Hilfe vom TIA sich schlau macht...
Hallo und danke für deine Antwort. Es liegen folgende feste Werte am Modbus comm load:
MBLOAD (db1).JPG
Die Betriebsart sollte stimmen.
Ebenfalls habe ich die Adresse für die Schnittstelle unter "Port" deklariert:
Main [OB1].JPG
Das mit dem Kopieren des Errors in einen anderen Bereich habe ich leider nicht ganz verstanden.
 
OP
Azubi94

Azubi94

Well-known member
Beiträge
72
Punkte Reaktionen
0
Viel Arbeit….
Erstmal würde ich feste Werte an den Modbus Comm Load schreiben….
oder Deinen DB1 zeigen was da drin steht.
Port 0 das klappt nicht hier muß die Adresse der Schnittstelle stehen…

Anhang anzeigen 54820

Die Adresse für den Port findet man unter PLC-Variablen -> Systemkonstanten

Was wichtig ist im DB von deinem Modbus_Comm_Load
es gibt einen Eintrag "MODE" = Betriebsart

Zulässige Betriebsarten sind:
0 = Vollduplex (RS232)
1 = Vollduplex (RS422) Vierdraht-Betrieb (Punkt-zu-Punkt)
2 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Master, CM PtP (ET 200SP))
3 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Slave, CM PtP (ET 200SP))
4 = Halbduplex (RS485) Zweidraht-Betrieb 1)

Hier mußt Du mit Sicherheit 4 = Halbduplex (RS485) Zweidraht-Betrieb eintragen
Werkseinstellung ist 0 = Vollduplex (RS232) Da mal in die Unterlagen vom Slave schauen.....

Wer das nicht weiß such oft ein paar Stunden.... oder Tage
Dann mal in die Hilfe von TIA sehen deine Bits Done, Error usw. sind nur für einen Zyklus true
Heißt wenn du mal ein paar Fehlernummer sehen willst solltest Du mit dem Error den Status in einen anderen Bereich kopieren
Damit man vernünftig die Fehlernummern lesen kann und anschließend in der Hilfe vom TIA sich schlau macht...
Die Fehlernummern unter Status im Modubus_Load ist doch quasi die 7000 oder ?
 
OP
Azubi94

Azubi94

Well-known member
Beiträge
72
Punkte Reaktionen
0
Viel Arbeit….
Erstmal würde ich feste Werte an den Modbus Comm Load schreiben….
oder Deinen DB1 zeigen was da drin steht.
Port 0 das klappt nicht hier muß die Adresse der Schnittstelle stehen…

Anhang anzeigen 54820

Die Adresse für den Port findet man unter PLC-Variablen -> Systemkonstanten

Was wichtig ist im DB von deinem Modbus_Comm_Load
es gibt einen Eintrag "MODE" = Betriebsart

Zulässige Betriebsarten sind:
0 = Vollduplex (RS232)
1 = Vollduplex (RS422) Vierdraht-Betrieb (Punkt-zu-Punkt)
2 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Master, CM PtP (ET 200SP))
3 = Vollduplex (RS422) Vierdraht-Betrieb (Mehrpunkt Slave, CM PtP (ET 200SP))
4 = Halbduplex (RS485) Zweidraht-Betrieb 1)

Hier mußt Du mit Sicherheit 4 = Halbduplex (RS485) Zweidraht-Betrieb eintragen
Werkseinstellung ist 0 = Vollduplex (RS232) Da mal in die Unterlagen vom Slave schauen.....

Wer das nicht weiß such oft ein paar Stunden.... oder Tage
Dann mal in die Hilfe von TIA sehen deine Bits Done, Error usw. sind nur für einen Zyklus true
Heißt wenn du mal ein paar Fehlernummer sehen willst solltest Du mit dem Error den Status in einen anderen Bereich kopieren
Damit man vernünftig die Fehlernummern lesen kann und anschließend in der Hilfe vom TIA sich schlau macht...
Ich habe folgendes feststellen können:
Im Modbus_Master bekomme ich einen ERROR und es werden mir folgende Fehlercodes unter STATUS ausgegeben:
- 7001
- 7002
- 8188
(bild: MBCONFIG)
MBCONFIG.JPG

(MBLOAD)
MBLOAD (db1).JPG

(MBBUFFER)
DBBUFFER.JPG

Das sind soweit alle DBs. Unter Beobachtung lässt sich erkennen, dass in DBCONFIG ERROR immer die Zustände wechselt...
Irgend eine Idee ?

Grüße

Jens
 

Captain Future

Well-known member
Beiträge
619
Punkte Reaktionen
154
Zuviel Werbung?
->Hier kostenlos registrieren
1. Mit Betriebsart 4 kommt in den DB vom Modbus_Comm_Load und hat nichts mit dem Mode vom
Modbus_Master zu tun.
Bildchen DB vom Modbus_Comm_Load
1623749914490.png

Mit den Bits Done, Error vom Modbus_Comm_Load sollest Du mal ein anderes Bit SETZEN
U Done
S Merker xy

Wenn das Bit True ist erst dann wurde die Schnittstelle ohne Fehler mit Deinen Parametern initialisiert.

Mit dem Bit Error solltest Du den Status mal in einen anderen Speicher kopieren
weil diese Bits alle nur für einen Zyklus da sind. Heißt kann man ganz schlecht beobachten mit dem Laptop
Das gilt auch für deinen Modbus_Master Error + Status

2. Ich würde wenn ich keine Ahnung habe meine Schnittstelle richtig initialisiert und prüfen ob das passt
und immer nur einen Auftrag mit dem Modbus_Master (REQ) anstoßen per Hand und meine Fehler suchen.
Erst wenn das alles passt und funktioniert dann kannst Du mit deinem Timer arbeiten.
 

Spawnsen

Member
Beiträge
11
Punkte Reaktionen
4
Servus zusammen

Ich kann dir die folgende Bibliothek auf GitHub ans Herz legen.
Damit arbeite ich in der Firma ständig und man kann relativ schnell Templates für verschiedene Geräte anlegen.
Einen guten Support auf GitHub wird durch den Entwickler auch geleistet.
https://github.com/rexhip/rexhip
S7-1500 und Modbus RTU habe ich schon mehrfach damit getestet und realisiert.

Gruß Spawnsen
 

Captain Future

Well-known member
Beiträge
619
Punkte Reaktionen
154
Poste mal ein paar Screenshots von einem Deiner Projekte.
Vielleicht kannst du auch noch ein paar Eckpunkte aufzählen worauf man unbedingt am Anfang achten sollte.
Wie man vorgeht für ein neues Templates wenn man zum erstenmal mit der Bibliothek arbeitet.
Denke da hast du bestimmt viel Erfahrung von der wir hier alle profitieren können.

Sieht auf alle Fälle interessant aus dein Tipp von der Bibliothek auf GitHub.
 
OP
Azubi94

Azubi94

Well-known member
Beiträge
72
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Servus zusammen

Ich kann dir die folgende Bibliothek auf GitHub ans Herz legen.
Damit arbeite ich in der Firma ständig und man kann relativ schnell Templates für verschiedene Geräte anlegen.
Einen guten Support auf GitHub wird durch den Entwickler auch geleistet.
https://github.com/rexhip/rexhip
S7-1500 und Modbus RTU habe ich schon mehrfach damit getestet und realisiert.

Gruß Spawnsen
Danke für den Hinweis, ich habe aber ehrlich gesagt keine Ahnung wie man sowas anlegt. Wäre wirklich nett, wenn du mal irgend ein Bsp. hochladen könntest, wo man sieht wie sowas integriert wird.

Gruß

Jens
 

Spawnsen

Member
Beiträge
11
Punkte Reaktionen
4
Klar kein Problem.
Hier eine kurze Anleitung:

1. Bibliothek ins TIA V16 importieren

2. FB "modbus_rtu_1500" in den Programmbausteinordner ziehen (alle Abhängigkeiten werden automatisch ins Projekt kopiert)
1623761739482.png

3. Einen passenden Station Block für deinen Anwendungsfall programmieren
Hier am besten in die Anleitung gucken: https://github.com/rexhip/rexhip/blob/master/docs/Station blocks.md
Kurz um...Du kannst im Static Bereich deine zu lesende Variable anlegen und musst diese unten im Programm dann beschreiben. Du musst nur vorm eigentlichen auslesen einstellen was für ein Typ von Variable du lesen möchtest.
Unten im Beispiel siehst du "....read.input_reg" und dann kommen die einzelnen Lesebefehle mit der Startadresse
1623761844648.png

4. Station Block aufrufen und Hardware einstellen
Unter hardwar_id die ID deiner PtP Baugrupp eingeben (unter Systemkonstanten zu finden)
Im Kopfbereich deinen Station Block mit einer Instanz ausstatten und unten im Programm aufrufen.
Beim Aufruf musst du dann nur noch die Modbusadresse einstellen
1623762405772.png

5. Alles im OB123 aufrufen
1623762817296.png

6. Kontrollieren ob Teilnehmer erreichbar ist
Du kannst im Instanz_DB unter den einzelnen Geräten schauen ob diese die Modbusaufträge erfolgreich abarbeiten
Das ganz erscheint dann unter .....Static.sb.log.Done_cnt
Dort erscheinen auch fehlerhafte Aufträge bzw Kommunikationsfehler
1623762873089.png
 

Anhänge

  • 1623761689507.png
    1623761689507.png
    37,1 KB · Aufrufe: 2
OP
Azubi94

Azubi94

Well-known member
Beiträge
72
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Vielen Dank für den Upload !
Ich habe nun nochmal meinen Slave genauer betrachtet und im Modbus_Master_DB die Datenlänge angepasst auf 8 bits/word.
Ebenfalls habe ich die Anfangsadresse auf 4001 gestellt.
7002.JPG
bekomme nun nur noch die Fehlermeldung 16#7002 angezeigt...
Ich finde hierzu jedoch keine sicheren Informationen im Informationssystem.
Es heißt in einem anderen Forum nur, dass das bedeutet, dass auf einen Teilnehmer gewartet wird..
Was hast du genau für ein Gerät welches du auslesen möchtest?
Kannst du mal die Parameterliste linken?
Bei dem Gerät/slave handelt es sich um einen ipc von Beckhoff. Darauf Läuft TwinCAT3 als Soft SPS für eine Anlagensteuerung. Zugriff habe ich jedoch nicht auf die Soft SPS. Es sind nur die eingetragenen Daten im MB_LOAD bekannt (Baudrate, Parität, Adresse). Die Modbusliste liegt mir zwar vor, jedoch verstehe ich die Adressen Zuordnung nicht wirklich.
Hier mal ein kleiner Ausschnitt:
ausschnitt_Modbusliste.JPG
Meine Aufgabe ist es also, diese Parameter irgendwie in einer Liste in Echtzeit anzuzeigen/auszulesen.
 

Spawnsen

Member
Beiträge
11
Punkte Reaktionen
4
Also bei Siemens liegen die Adressen etwas anders. Meistens musst du die gegebenen Adressen mit der Startadresse von Siemens addieren.

Wenn du zB. Ölwanne 207 auslesen möchtest, musst du diese +40001 oder +30190 rechnen.
Das ist dann die DATA_ADDR und die DATA_LEN sind dann die Anzahl der Daten die du hintereinander auslesen willst.
Dort müsste dann glaube eine 3 rein, da du ja nur bis Kurbelraum 209 lesen kannst und dann wieder eine Unterbrechung hast.

Ich kann dir nur nicht mehr sagen ob das aktuell immer noch so funktioniert.
Die Bausteine wurden auch mehrfach angepasst und aktualisiert.

Du musst allerdings wissen, was das genau für Parameter sind.

1623766877060.png

Parameter DATA_ADDR und MODE:
1623767086315.png



Ich kann dir nur die oben genannte Bibliothek empfehlen.
Habe da auch Tage dran gesessen bis ich ein Modbus Gerät am laufen hatte und ich brauchte aber 8 Teilnehmer mit Lesen und Schreiben :D
 
Oben