Daten via Modbus abfragen - Illegale Zustände filtern

Hallo!

Ich habe seit neustem eine Beckhoff SPS am laufen, die von meiner Wetterstation alle Daten abfragt
und u.a. via Modbus IPS zu Verfügung stellt.

An der SPS sind verschiedene Sensoren angeschlossen mit mehreren Schnittstellen und Protokollen.

Ich möchte gerne die Daten graphisch in IPS anzeigen. Dazu logge ich die entsprechende Modbus-Variable
und zeige dazu den Graph an. Soweit alles kein Problem.

Das Problem ist aber, wenn ich z.B. die SPS starte, dann sind Initial die Modbus-Variablen in der SPS alle erstmal „Null“.
Da IPS die Daten regelmäßig von der SPS abfragt, übernimmt der auch die Initialen Nullwerte.
Wie gesagt, sind die IPS-Variablen geloggt => also habe ich plötzlich überall eine Null geloggt

Die Graphen sind natürlich dann unbrauchbar (z.B. beim Luftdruck, der nie Null sein kann).

Ich muss also verhindern, dass Illegale Werte nicht verarbeitet / geloggt werden.

Ideen?

Moin Michael!

Da ich weder ModBus verwende, noch genauer weiß, wie du was da bei dir machst, ist es eher schwer zu sagen.

Aber ich würde es irgendwie über ein Skript laufen lassen und einfach etwas dieser Art machen:

if ($Wert > 0) {
   SetValue($Variable, $Wert);
}

…dann wird nur etwas in die Variable geschrieben, wenn der Wert z.B. größer 0 ist, also wird kein Wert 0 geloggt.

Grüße,
Chris

Hallo Chris,

ja, sowas hatte ich mir auch schon gedacht, aber verworfen, da zu aufwendig (wir reden von ca. 30-50 Werten…).

Ich könnte die Werte aus der SPS via Modbus abfragen (Normal über Modbus Instanzen).
Nun könnte ich via getriggerten Script die ausgelesenen Werte in eine weitere Variable übertragen,
natürlich nur wenn diese „gültig“ sind. die 2. Variable wird dann geloggt.

Frage:

Gibt es Scriptbefehle um ein Wert über Modbus abzufragen?
Ich finde nur Befehle zum schreiben von Modbus Werten.
Hintergrund: Ich könnte ein Script schreiben, was alle Daten regelmäßig ausließt, bewertet und dann in die
entsprechenden Variablen schreibt.
Das erspart das anlegen von 30 Instanzen. Außerdem verringert es die Netzlast.

Lesen vom Modbus…quasi das hier? >> ModBus_RequestRead — IP-Symcon :: Automatisierungssoftware

Aber noch eine Idee > ich kenne die jeweiligen Werte nicht. Aber man könnte alle Werte durch eine Funktion schicken und dort prüfen, ob der aktuelle Werte der Variable sich zu sehr (müsste man definieren) vom alten Wert der Variable abweicht und dann „ablehnen“!? Oder man definiert halt einmal alle Wert-Bereiche und hat trotzdem dann nur eine Funktion wo alle Werte durch müssen.

Ooooder, vlt. schöner und einfacher > du musst erkennen wann SPS „frisch startet“ und in diesem Moment wird einfach alles an Werten ignoriert vom IPS und nichts in die Variablen geschrieben und erst dann wieder akzeptiert, wenn der SPS-Start X Sekunden/Minuten vorbei ist?!

Grüße,
Chris

Modbus_request braucht aber wieder eine Instanz je Modbus-Variable.

habe gerade so was gefunden:
http://code.google.com/p/phpmodbus/

Da kann ich in einem Block alle 30 Werte in einem Rutsch auslesen.