B&R ModbusTCP

KarlMeier

Level-2
Beiträge
206
Reaktionspunkte
31
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein eigenartiges Problem beim Datenaustausch zwischen einer Siemens S7 1511 (6ES7511-1AK02-0AB0) und einer B&R CP1484 via ModbusTCP.

Die Siemens ist mein Modbus-Server und stellt das Halteregister zur Verfügung. Die B&R ist der Client und liest das Ganze aus. Der Server läuft auf der Siemens ohne Fehler.
Bei der CP1484 hab ich mir einen ModbusTCP_any auf die Ethernet-Schnittstelle gezogen und das Ganze konfiguriert. Testhalber hab ich mir 3 Datenpunkte angelegt und es funktionierte auf Anhieb. Die Verbindung steht und ich bekomme die Werte flüssig in Echtzeit angezeigt.

Nun kommen wir zu meinem Problem, ich wollte den Modbus-Datenpunkten Variablen zuordnen, damit ich in nem kleinen Programm die Dateiformate umwandeln und vorteilhafter anzeigen lassen kann. DINT_to_real, den Wert geteilt durch 10 usw.
Doch wenn ich dem Datenpunkt eine Prozessvariable zuordne, dann wird mir zwar weiterhin am Datenpunkt der sich verändernde Echtzeitwert angezeigt, auf die Variable wird aber nur einmal ein Wert geschrieben und der verändert sich dann auch nicht mehr.
Im Programm wird das Ganze auch komplett ignoriert und es wird nichts abgearbeitet. Es funktioniert noch nichtmal eine einfache If-Anweisung wie (wenn Wert > als 100 dann Ausgang1 ist True) Da wird nichts auf True gesetzt obwohl der Wert über 100 ist. Dieses Phänomen tritt unabhängig davon auf, ob ich Globale oder lokale Variablen verwende. Da fehlt doch bestimmt nur irgendwo ein Haken oder sowas? Kann mir da evtl. jemand weiterhelfen?
 

Anhänge

  • 32103257-9465-47D1-9F6B-4404E6B8B85F.jpeg
    32103257-9465-47D1-9F6B-4404E6B8B85F.jpeg
    4,3 MB · Aufrufe: 44
  • 98080B22-5E07-45D2-AB0E-5202F4664120.jpeg
    98080B22-5E07-45D2-AB0E-5202F4664120.jpeg
    5,1 MB · Aufrufe: 45
Wird die PV im Programm verwendet, bzw. im INIT eines Tasks auf einen Wert gesetzt?

Bei C Tasks zum Beispiel optimiert der Compiler diese PVs weg.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wird die PV im Programm verwendet, bzw. im INIT eines Tasks auf einen Wert gesetzt?

Bei C Tasks zum Beispiel optimiert der Compiler diese PVs weg.
Ich verstehe nicht so recht was Du meinst. Die PV habe ich in einem ST-Programm genutzt, aber dort wurde sie irgendwie überhaupt nicht wahrgenommen.
 
Vielleicht noch was zur Ergänzung, das Ganze ist ein reines Testprojekt. Ich habe in diesem Projekt nichts eingestellt oder irgendwie verändert. Neues Projekt erstellt, CPU hinzugefügt, IP-Adresse vergeben, Modbus aktiviert, ModbusTCP_any auf den ETH-Port gezogen, dort konfiguriert und meine Datenpunkte angelegt. Anschließend hab ich alles auf die CPU geladen.
Es hat sofort funktioniert.
Als zweiten Schritt habe ich versucht die gewonnenen Daten zu verarbeiten und habe ein ST-Programm angelegt, die PV einmal als DINT und einmal als Real angelegt, weil ich ja die Modbusdaten, welche ich als Dint bekomme, wieder in Real umwandeln will.

Aber wie gesagt, egal wie ich die PVs im St-Programm verwende, es passiert nichts. Und in der IO-Übersicht vom Modbus_any sehe ich links die originalen Daten die von der S7 kommen und rechts steht der Wert der auf die Variable geschrieben wird. Und genau da geht irgendwas schief.

Ansonsten passiert nichts was von den Standardeinstellungen abweicht.

PS: Auf dem einen Bild sieht man lediglich eine verknüpfte PV, hab das aber natürlich ursprünglich mit allen 3 Datenpunkten gemacht und diesem eine PV zugeordnet. Entweder stand dort dann ein nicht aktualisierter Wert oder es stand „Fehler“.
 
PS: Auf dem einen Bild sieht man lediglich eine verknüpfte PV, hab das aber natürlich ursprünglich mit allen 3 Datenpunkten gemacht und diesem eine PV zugeordnet. Entweder stand dort dann ein nicht aktualisierter Wert oder es stand „Fehler“.
Fehler kann kommen, wenn de PV auf der Steuerung nicht vorhanden ist. Mach mal win Watch auf den Task, der die PV verwendet und schau nach, ob sie da sichtbar ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fehler kann kommen, wenn de PV auf der Steuerung nicht vorhanden ist. Mach mal win Watch auf den Task, der die PV verwendet und schau nach, ob sie da sichtbar ist.
Muss die PV zwingend irgendwo in nem Programm verwendet werden oder reicht es, wenn sie deklariert wurde?
 
Jetzt wird die Sache immer mysteriöser…
Heute hab ich nach 2-tägiger Pause die B&R-CPU angesteckt, die S7 habe ich über PLCSim Advanced simuliert, weil ich zu faul war diese auszupacken und anzustecken und…. alles funktioniert!
Plötzlich wurde meine PV mit den Modbus-Werten beschrieben. Der Wert hat sich auch mitverändert. Habe dann die anderen beiden PVs noch erstellt und mit den Modbus-Punkten verknüpft und es stand dann bei Prozesswert „Fehler“.
Also hab ich die beiden PVs auch schnell in mein Programm reingeschmissen und einfach so umgewandelt (Dint_to_real) wie ich das ursprünglich vor hatte. Alles kompiliert und auf die CPU geladen und alles funktioniert einwandfrei. 😳

Ich verstehe das nicht. Bei meinem letzten Versuch am Montag hab ich die B&R-CPU bestimmt 20x neu gestartet, das Programm online übertragen, offline über die Flash-Karte installiert usw. Durch nichts hab ich es hinbekommen, dass es funktioniert. Und nachdem sie 2 Tage im Schrank lag, tut sie auf einmal genau das was sie soll, ohne dass jemand etwas verändert hätte. Verrückt….

Aber vielleicht nochmal als Hilfestellung für andere, welche über die Suche auf dieses Thema stoßen:

Die Projektvariablen müssen angelegt sein und es müssen die PVs auch irgendwo in einem Programm verwendet werden. Egal wie, es reicht wenn sie einmal irgendwo lesend aufgerufen werden.

Der Tipp mit dem komplett neu kompilieren ist vermutlich auch interessant, auch wenn es bei mir letztendlich ohne funktioniert hat. Es macht sicherlich Sinn wenn man das macht, nachdem man an den ganzen Hardware- und Verbindungs-Einstellungen rumgeschraubt hat.

Mehr gibts eigentlich nicht zu sagen, die ModbusTCP-Verbindung zwischen einer Siemens S7 1500 und einer B&R-Steuerung funktioniert tadellos und ist kinderleicht umzusetzen (wenn nicht gerade irgendein Elektronikwichtel Streiche spielt). 🙂
 
Nun gibt es nochmal ein Update, denn ich habe jetzt auch die Ursache gefunden…

Immer wenn ich eine Programmänderung gemacht hab, dann startete die CPU im Service-Modus. Manchmal wurde dieser selbstständig wieder verlassen, meistens blieb die CPU aber in diesem Zustand. Ich bin mit den ganzen LEDs nicht vertraut und auch die Statuszeile hab ich nie beachtet, darum hab ich das nie gesehen. Doch als ich es entdeckt hab war mir alles klar. Nach nem Kaltstart wechselte die CPU in den Run-Modus und alles funktionierte! Ende gut - alles gut. 🙂
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es reicht im Init-Teil der Task die Variable einfach aufzurufen:

Variable;

Dann wird sie mitcompiliert und ist z.B. auch in der Visu verwendbar (vorhanden ist sie schon durch die Deklaration).
 
Zurück
Oben