TIA CM 1241 Modbus RTU Protokoll einstellen in Hardwarekonfiguration?

IndustryChick

Level-1
Beiträge
58
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mir kürzlich eine CM 1241 Karte gekauft für meine 1200erter CPU, da ich damit eine Wetterstation mit RS485 betreiben will. Die Wetterstation arbeitet mit dem MODBUS RTU Protokoll. Jetzt kann ich aber in der Hardwarekonfiguration meiner CM 1241 Karte nur Freeport und 3964(R) als Protokoll einstellen. MODBUS RTU wird in dem Menü nicht angeboten.

Kann mir vielleicht einer sagen warum das so ist? Die Karte ist die 6ES7241-1CH32-0XB0 und das Firmwareupdate auf die aktuelle Version 2.2 habe ich bereits durchgeführt.


MODBUS_RTU.jpg
 
Ich würde Freeport nehmen und dann das Protokoll so einstellen wie es in der Doku des Herstellers angegeben ist.

In der TIA Hilfe steht für den "Modbus_Comm_Load" das der Baustein Baustein das Protocol auf Modbus RTU stellt.


Gruß

Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie immer hattest du natürlich Recht Jens ;-) Ich habe im der Hardwarekonfiguration alles auf Standard gelassen, und mit dem Baustein MB_COMM_LOAD den Port definiert, und mit MB_MASTER lese ich die Wetterstation aus :)

Was ich allerdings garnicht verstehe: Wieso funktioniert bei mir nur der MB_COMM_LOAD und nicht der MODBUS_COMM_LOAD Baustein?! Der MODBUS_COMM_LOAD Baustein quittiert bei mir immer mit dem Status 7000 was "Baustein im Leerlauf" bedeutet?! Somit bekomme ich natürlich auch keine logische 1 bei Done. Der MB_COMM_LOAD Baustein arbeitete auf Anhieb korrekt und mit Status 0000 und Done auf logisch 1.


Ich habe es so verstanden, dass der MODBUS_COMM_LOAD genau das gleiche kann wie MB_COMM_LOAD nur das dieser ein paar Zusatzfeatures hat, oder hab ich da was falsch verstanden? Hab mal querbeet gegoogelt und da hatten wohl schon einige dieses Problem. Worin die Lösung lag hab ich allerdings bisher noch nicht verstanden :-/
 
Wie immer hattest du natürlich Recht Jens ;-) Ich habe im der Hardwarekonfiguration alles auf Standard gelassen, und mit dem Baustein MB_COMM_LOAD den Port definiert, und mit MB_MASTER lese ich die Wetterstation aus :)

Was ich allerdings garnicht verstehe: Wieso funktioniert bei mir nur der MB_COMM_LOAD und nicht der MODBUS_COMM_LOAD Baustein?! Der MODBUS_COMM_LOAD Baustein quittiert bei mir immer mit dem Status 7000 was "Baustein im Leerlauf" bedeutet?! Somit bekomme ich natürlich auch keine logische 1 bei Done. Der MB_COMM_LOAD Baustein arbeitete auf Anhieb korrekt und mit Status 0000 und Done auf logisch 1.


Ich habe es so verstanden, dass der MODBUS_COMM_LOAD genau das gleiche kann wie MB_COMM_LOAD nur das dieser ein paar Zusatzfeatures hat, oder hab ich da was falsch verstanden? Hab mal querbeet gegoogelt und da hatten wohl schon einige dieses Problem. Worin die Lösung lag hab ich allerdings bisher noch nicht verstanden :-/

Siehe mal hier die Einstellungen im Datenbaustein das war mal mein Problem warum nichts funktioniert hat.
Unter Mode eine 4 für Halbdublex (RS485) weil Werkseinstellung ist 0 für Volldublex (RS232)


Anhang anzeigen 35502
 
Hmm ich habe deinen Tip mal versucht und tatsächlich vergessen dort den Mode auf 4 zu schalten für RS485 halbduplex. Allerdings bleibt der Baustein bei mir weiterhin in Status 7000. Er geht wenn das True an REQ kommt lediglich kurz auf 7002 und dann sofort zurück auf 7000 also wieder Leerlauf. Und das Done bleibt auf False. Auch Error bleibt auf False.

Ich habe keine Ahnung was ich da falsch mache?!

modbus.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm ich habe deinen Tip mal versucht und tatsächlich vergessen dort den Mode auf 4 zu schalten für RS485 halbduplex. Allerdings bleibt der Baustein bei mir weiterhin in Status 7000. Er geht wenn das True an REQ kommt lediglich kurz auf 7002 und dann sofort zurück auf 7000 also wieder Leerlauf. Und das Done bleibt auf False. Auch Error bleibt auf False.

Ich habe keine Ahnung was ich da falsch mache?!

Anhang anzeigen 35554

Na dann bist du einen Schritt weiter und wichtig die Hilfe aufmerksam lesen wenn nötig 5x

1. zum Done = Das Bit DONE ist einen Zyklus lang TRUE, nachdem die letzte Anforderung fehlerfrei ausgeführt wurde.
2. zum Error = Das Bit ERROR ist einen Zyklus lang TRUE, nachdem die letzte Anforderung mit Fehler beendet wurde

Das heißt wenn Du ein Bit haben willst was auf 1 bleibt dann mußt Du mit dem Done oder Error Dir ein anderes Bit setzen.

16#7000 Baustein im Leerlauf ist völlig OK
16#7002 Zwischenaufruf Datenübertragung läuft ist auch OK weil deine Ansteuerung mit REQ keine Flanke ist

Auch die Statusmeldungen sind nur für einen Zyklus vorhanden.
Hier muß man umkopieren per Flanke wenn man was sehen will

Das man diesen Baustein nur einmal beim Anlauf oder so Aufruft das weißt Du ???? Er ist nur zur Initialisierung der Schnittstelle mit deinen Einstellungen wie Baud, Parity usw.
Wenn das jetzt erst alles stimmt sollte man sich den Modbus_Master Baustein ansehen.
 
Zuletzt bearbeitet:
Also ich weiß natürlich, dass dieser Baustein einmalig aufgerufen werden muss zur Initialisierung. Ich hab das nur so geschrieben das ich den selbst initialisieren kann, ohne immer die Steuerung neuzustarten. Das die Statusmeldung nur einen Zyklus lang anliegt, wusste ich allerdings nicht. Aber das sollte auch verständlich sein, da es beim MB_Comm_Load auch nicht so ist! Dort bleibt das Done Bit dauerhaft anstehen! Was für mich eigentlich auch sinnvoll ist. Ich will ja wissen ob der Baustein einmal fehlerfrei durchlaufen wurde. Danach brauche ich den ja nicht mehr.

Dann werde ich jetzt prüfen ob bei diesem einmaligen Aufruf der Status einmal korrekt ist und das Done Bit einmalig kommt. Kommt es aber wohl nicht, sonst würde der Modbus_Master ja seinen Job machen.

Ich finde da den MB_Comm_Load auf jedenfall sinnvoller programmiert. Jeder muss ja wissen ob der Baustein mit Done durchlaufen wurde und fehlerfrei gearbeitet hat. Warum also den Baustein so erstellen, dass man diese Logik zum Sichern des einmaligen Durchlaufs selbst erstellen / anhängen muss?
 
Also hier wird explizit darauf hingewiesen das man mit der 1200erter CPU die MB_Comm_Load Bausteine nutzen soll?

Hello,Are you using S71200 or S71500 PLC?
If you have S71200 with it's own Communication module, then use the Modbus library V2.2 from Modbus folder not from modbus RTU folder.
You need to use library from Modbus RTU folder having version 3.0 is only when if you want to use CtP module of ET200SP with either S71200 or S71500 for modbus RTU application
That time you need to define the mode as 4 for RS485 interface with 2 wire output modbus.

Das liest sich für mich, als das es mit dem CM1241 Modul und der 1200erter garnicht geht mit der Modbus_Comm_Load V3??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich weiß natürlich, dass dieser Baustein einmalig aufgerufen werden muss zur Initialisierung. Ich hab das nur so geschrieben das ich den selbst initialisieren kann, ohne immer die Steuerung neuzustarten. Das die Statusmeldung nur einen Zyklus lang anliegt, wusste ich allerdings nicht. Aber das sollte auch verständlich sein, da es beim MB_Comm_Load auch nicht so ist! Dort bleibt das Done Bit dauerhaft anstehen! Was für mich eigentlich auch sinnvoll ist. Ich will ja wissen ob der Baustein einmal fehlerfrei durchlaufen wurde. Danach brauche ich den ja nicht mehr.

Dann werde ich jetzt prüfen ob bei diesem einmaligen Aufruf der Status einmal korrekt ist und das Done Bit einmalig kommt. Kommt es aber wohl nicht, sonst würde der Modbus_Master ja seinen Job machen.

Ich finde da den MB_Comm_Load auf jedenfall sinnvoller programmiert. Jeder muss ja wissen ob der Baustein mit Done durchlaufen wurde und fehlerfrei gearbeitet hat. Warum also den Baustein so erstellen, dass man diese Logik zum Sichern des einmaligen Durchlaufs selbst erstellen / anhängen muss?

Das Done oder Error dir ein 1-Signal liefern hängt ja nur von dem Aufbau in deinem Programm ab. Ich habe das nur erwähnt weil man schnell in die Falle läuft.
Du brauchst ja nur vor dem REQ in Reihe UN Done UN Error hängen und schon bleibt das Error Bit oder das Done Bit auf 1 stehen soweit ich das jetzt aus dem Kopf weiß.

Und nicht vergessen der Done sagt dir nur das der Baustein Fehlerfrei durchlaufen wurde und nicht ob deine Einstellungen alle richtig sind.
Mach mal mehr Bilder wo man mehr sehen kann oder lad das Projekt hoch.
 
Bist du dir sicher, dass dieser Modbus_Comm_Load Baustein (V3) mit einer CM1241 und der 1214C CPU zusammenarbeitet siehe den Beitrag eins über dir?
 
Bist du dir sicher, dass dieser Modbus_Comm_Load Baustein (V3) mit einer CM1241 und der 1214C CPU zusammenarbeitet siehe den Beitrag eins über dir?

Soll das jetzt ein Test werden ?? Ja bin mir sicher

Modbus_Comm_Load ist für die 1200er und die 1500er
MB_COMM_LOAD ist nur für die 1200er

Ich habe zB. ein Projekt mit den neueren Bausteinen wo ich solche EDAM 5028 10 Stück Module benutze (RTU) die könnten auch TCP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kein Stress das war nicht böse gemeint ;-) Aber die im Siemens Forum schreiben da einfach was ganz anderes, daher frag ich doch ;-)

Der MB_Comm_Load funktioniert ja auch auf Anhieb und ohne Probleme und mehr als den Mode 4 einstellen kann ich ja auch nicht mehr machen. Muss mal gucken wie ich den Status einmalig weggesichert bekomme. Damit ich sehe was da beim "Firstscan" anstand. Der Master meckert atm. mit 8281, also das was mit dem Port nicht stimmt.
 
Das weiß ich doch das es nicht böse gemeint war.
Hast du nur einen Slave oder sollen da mal mehrere kommen ?
Stell doch mal mehr Bilder online vielleicht finden wir was.

An dem Modbus_Comm_Load der Eingang "Port" schreib da nicht einfach 273 dran sondern wähl das mal über
die Auswahl aus siehe Bild.

Anhang anzeigen 35573

gruss
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte bisher leider noch keine Zeit den Modbus_Comm_Load weiter zu testen. Ich melde mich sobald ich dazu gekommen bin :)

Ja es wäre mein einziger Slave.

Eine Frage habe ich allerdings: Gibt es dann eigentlich per z.B. Modbus TCP über die Ethernetschnittstelle der CPU diese Daten an z.B. einen Windows PC wieder auszulesen für die Weiterverabeitung? Oder wie bekomme ich auf einfachem Wege über die Ethernetschnittstelle wieder Daten raus? Dann könnte ich einen Datenlogger für die Wetterstation oder ähnliches zusammenschustern..
 
Hallo,

entweder mittels TSEND_C dann musst du dir aber auch eine Apllikation auf PC Seite erstellen.

Oder mit den Datalogging Bausteinen auf der SPS ablegen und dann mit dem PC abhlolen.


Gruß

Jens
 
Also ich habe das ganze jetzt mit MB_CLIENT gelöst. Ist eigentlich auch relativ simpel :)

Aber nun ein weiteres Problem. Wie kann ich denn nun mehrere Modbus Adressen auslesen, welche nicht zusammenhängend in den Registern liegen?
Ich lese jetzt mit einem MB_CLIENT Baustein den Adressbereich 40133 - 40140 aus. Ich möchte jetzt aber z.B. noch 40519-40522 auslesen. Gibt es da
eine Möglichkeit dem Baustein mehrere Bereiche zu geben? Dann bräuchte ich ja auch jedesmal bei MB_DATA_PTR nen neuen Datenbereich...

Wie löst ihr sowas? Den MB_CLIENT für jeden Modbus Bereich extra aufrufen?


EDIT: Der MB_CLIENT ist ein ganz schöner Arbeitsspeicherfresser :-( 17394 Byte für den einen Baustein :-(
 
Zuletzt bearbeitet:
Zurück
Oben