TIA Modbus RTU auslesen/Schreiben funktioniert einfach nicht

RoHa1965

Level-2
Beiträge
19
Reaktionspunkte
0
Hallo,

ich habe ein Problem und hoffe mir kann jemand dabei helfen (der Siemens Support hat schon aufgegeben, glaube ich...).

Ich versuche an einer S7-1200 mit CM1241 Modul auf einen Modbus -Slave zuzugreifen, aber es kommt einfach keine Kommunikation zustande.
Gelesen werden sollen die Eingangsregister 2-9 des Slave (8 bits lang).
Baudrate; Parität; Modbusadresse habe ich schon zig mal kontrolliert. Kabel mit und ohne Abschlußwiederstand, A-B tauschen ... alles schon durch.
Einen RS-485 Dongle hab ich mir jetzt bestellt und zuerst den Slave getestet. Das Ding macht genau was es soll - Lesen und Schreiben ist kein Problem.
Anschließend hab ich das ganze auf der SPS Seite simuliert und das Problem ist das gleiche wie mit dem echten Slave. Ich kann im Kommunikationsmonitor sehen, dass eine Anfrage über Rx gesendet wird, allerdings findet Seitens des Slave wohl keine Antwort statt. Was ja augenscheinlich nur an einer falschen Anfrage-Syntax liegen kann, weil beide Bauteile werden wohl nicht defekt sein. Aber auch hier habe ich alles probiert.
Anfrage mit Mode 0 an 300003 (30001 +2) aber auch an 30000 und 30001 .... nix.
Anfrage mit Mode 1 an 400001 usw. (ja ich weiss dass das Quatsch ist, aber ich hab halt alles probiert) .... nix
Anfrage mit Mode 104 an 2 usw. ..... nix.
Immer kommt die Statusmeldung 80C8 ... also Timeout weil keine Reaktion des Slave.

Auch bei der Zieladresse hab ich am Ende alles probiert: Array of Bytes, Int, Word ... es funktioniert nix... (nicht optimierten Zugriff habe ich auch ausgewählt).

Den Com-Load habe ich mit permantentem EN und Req über First-Scan und dann auch den EN über SR mit R an Done aufgerufen, brachte alles nix.
Ich bin so langsam am Ende meiner Weisheit (die wohl bei Modbus nicht sehr gross ist ;-)).

Hat vielleicht jemand Erfahrungen mit Modbus-RTU und eine zündende Idee für mich?
Ich wäre um jeden Strohhalm dankbar!

Gruß
RoHa1965
 
Wie heisst dein Modbus Slave genau? Hast du mal einen Link zum Handbuch mit der Modbus-Beschreibung des Slaves?
Welche Firmware hat deine S7-1200 CPU?
Wie lautet die Artikelnummer deines CM1241 RS485?
Wie sind die RS485 A- und B-Leitungen am CM1241 angeschlossen? Wie lang ist das RS485 Kabel?

Einen RS-485 Dongle hab ich mir jetzt bestellt und zuerst den Slave getestet. Das Ding macht genau was es soll - Lesen und Schreiben ist kein Problem.
Du hast ein Modbus Testtool verwendet? Welche Modbus-Adressparameter hast du verwendet (Registernummer, Anzahl Register)? Konntest du die dabei verwendete CRC sehen?

Ich kann im Kommunikationsmonitor sehen, dass eine Anfrage über Rx gesendet wird
Was für ein Kommunikationsmonitor? Wurde die gleiche CRC (wie im Testtool) gesendet?
Hinweis: Anfragen werden über Tx gesendet (Transmit), Rx ist Empfangen (Receive).

Immer kommt die Statusmeldung 80C8 ... also Timeout weil keine Reaktion des Slave.
Bei der Anweisung MB_MASTER?
Welchen Status liefert MB_COMM_LOAD?
Hast du dir mal in der TIA Hilfe das Beispielprogramm für einen Modbus-Master angeschaut?
 
Hallo PN/DP,

bin gerade nicht mehr im Büro, aber hier die Daten die ich aus dem Kopf weiss (der Rest dann morgen).

Der Modbus-Slave nennt sich Cornel ALU (ist ein Freikühler - polnischer Hersteller). Das Datenblatt hab ich im Büro und kann es dann gerne senden.) Die CPU ist eine 1214C (Art.nr folgen).
Zum Anschluss verwende ich einen Siemens Profibusstecker (mit und ohne eingeschaltetem Abschlusswiederstand ausprobiert). Das Kabel ist aktuell ca. 3 Meter lang.

Das Testtool ist ein USB to RS485 Dongle und als Software habe ich Modbus-Poll (als Simulator für den Masterbetrieb) und Modbus-Slave verwendet. Der Kommunikationsmonitor ist dabei im Modbus-Slave enthalten. Dort kann man dann sehen welche Daten über den Bus reinkommen in der Form Rx: 7F 6F..... ( ist es das was Du unter CRC meinst? Du siehst mich unwissend hier stehen...;-).
Da das Rx in dem Fall auf der Slave Seite angezeigt wird ist es dann ja der Receiver.

Und ja, das 80C8 kommt auf der Master Seite an der SPS (Status des Modbus-Masters).
Der Modbus-Comm_Load liefert glaube ich 7000 und 7002, muss ich aber nochmal kontrollieren.
Das Beispielprojekt habe ich mir angesehen und es funktioniert ja auch eigentlich alles. Also der Comm_Load wird ausgeführt und steht auf DONE (und wird danach auch nicht nochmal aufgerufen) und der Master wird zyklisch aufgerufen (nach einem DONE oder ERROR mit 2 Sekunden Delay).

Die Registernummer ist wie schon beschrieben die 30003 (laut Siemens 30001+2) mit einer Länge von 8 um das Register 2-9 auszulesen.

Bei der CRC bin ich leider nicht im Thema, lerne aber gerne dazu ;-).....

Gruß
RoHa
 
Die CRC (2 Byte Prüfsumme) muss man gar nicht verstehen, die wird automatisch von MB_MASTER generiert.
Wenn der Slave nicht antwortet, dann fühlt er sich meist nicht angesprochen: falsche Slave-Adresse verwendet oder im Slave eingestellt (hex/dez verwechselt?), eventuell antworten manche Slaves auch nicht bei falscher CRC oder unzulässigen Modbus-Adressparametern (zu viele oder falsche Anzahl Register (bei Doppelregistern), oder über Register-Lücken hinweg, oder unzulässige erste Register-Nummer). Oder schon die Busparameter sind falsch (Baudrate, 7/8 Datenbits, Parity). Oder A/B-Adern vertauscht oder nur Tx anstatt Rx+Tx angeschlossen oder Kurzschluss oder falsche Terminierung (Busabschlusswiderstände). Oder falsches CM1241: RS232 anstatt RS485
 
1. Schritt: Modbus_Comm_load muss bei done 0 liefern. Ist das so?
 
Hallo PN/DP,
leider finde ich immer noch keine CRC-Prüfsumme. Oder meinst Du den Error-Code der ausgegeben wird? Der wäre 80C8, aber der sagt ja lediglich das der Master mit Timeout abgebrochen hat weil der Slave nicht geantwortet hat.
Im Kommunikationsmonitor des Modbus-Slave Programms wird mir folgendes angezeigt:
Rx:6-11:03:47.115-7F DF FB FF EF 5F E7 00
was auch immer das aussagt?!?

Ich habe das ganze nun noch einmal auf einer ganz eigenständigen CPU nachgebaut. Leider ist das Ergebnis exakt das gleiche.
Wer mag kann sich das Archiv gerne mal ansehen...vielleicht ist ja jemand dabei der sagt ... ach ist doch klar was Du da falsch machst.
Leitungsabschluss, Parität und Co. habe ich in jeder erdenklichen Kombination bereits getestet ... nix funktioniert.
Mein Standard ist: mit 120 Ohm Abschlusswiederstand auf jeder Seite; Baudrate 9600; Datenbits 8; Parity: none; CM 1241 ist übgrigens das 6ESS7 241-1CH32-0XB0 (und ja, das Modebit für Duplex habe ich auf 4 gestellt). Die aktuelle CPU ist eine 1212C DC/DC/DC (die originale wäre eine 1214C).

Für jede Hilfe und Idee dankbar....

Gruß
RoHa
 

Anhänge

  • Modbus_testCPU.zip
    991,3 KB · Aufrufe: 2
Allen die hier Tips gegeben haben nochmals einen herzlichen Dank, aber .....
es läuft!

Das Problem war am Ende das Kabel. Ich hatte ein Profibuskabel mit Siemens Stecker gewählt und dachte dies wäre eine gute Idee...war es aber nicht.
Ich habe dann heute ein altes 0-Modem-Kabel RS232 abgeschnitten und die Pins 3=A und 8=B aufgelegt.
Und siehe da ... KOMMUNIKATION !!
Übrigens nur ohne Abschlusswiederstand, mit geht auch nix.

Jetzt kämpfe ich nur noch damit die Register nicht nur zu lesen sondern auch zu beschreiben. Das funzt noch nicht. Ich nehme an, weil ich zur Zeit noch 2 verschiedene IDB an den Master-Bausteinen habe und der Loader nur einen verträgt. Aber das kriegen wir schon auch noch hin.
(Sollte da natürlich noch jemand einen Tip haben, nehm ich den auch noch gerne ;-).)

Danke nochmal und Gruß
RoHa
 
Was anderes macht der Profibusstecker eigentlich auch nicht (3 = B (RxD/TxD-P), 8 = A (RxD/TxD-N)). Ich hätte gedacht, dass die RS485-Schnittstellenbelegung des CM 1241 extra so gewählt wurde, damit Profibus-Kabel ohne nachdenken funktionieren ... ich hätte vermutet, der Fehler war am anderen Ende des Kabels beim Modbus-Gerät. Oder was genau für ein "Profibuskabel" hattest du verwendet? Etwas, wo mehr als 2 Adern drin sind?

Übrigens nur ohne Abschlusswiederstand, mit geht auch nix.
Ominös. Hast du in dem verwerteten "RS232"-Kabel noch Brücken oder Kurzschlüsse?
 
Das hätte ich auch gedacht. Und nein, es handelte sich um das ganz normale lilane Profibuskabel mit 2 Adern.
Das 0-Modem Kabel ist voll beschaltet und hat weder Abzweigen noch Brücken. Ich hab halt nur die zwei Adern der Pinne 3+8 benutzt.
Hauptsache es funzt Jetzt!!
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…