Signal aus analogem Multisensor auf die Teilsignale aufteilen

Alsen57

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

aktuell verwende ich einen Ölzustandssensor von Argo Hytos den Lubcos H20+II, welcher mehrere Messgrößen erfasst wie zb die Temperatur die relative Feuchte, die Permittivität und so weiter. Der Sensor ist ein analoger Sensor mit 4-20 mA Output. Entsprechend des Bildes werden die einzelnen Messgrößen in äquidistanten Abständen am selben Ausgang des Sensor ausgegeben. Sprich beginnend mit einem 20mA Signal als Startsequenz, folgt dann der Stromwert für die Temperatur nach 2 Sekunden für 2 Sekunden. Im Anschluss der Wert für die relative Feuchte und so weiter. Das Signal endet/ beginnt dann erneut ebenso mit einem 20mA Stromwert.

signal.png
Hat jemand schon mal so eine Logik programmiert oder könnte mir sagen, wie man so etwas angeht? Gerne mit einem Beispiel in einer spezifischen Sprache.
Die Programmierung wird auf einem Beckhoff IPC in TwinCat3 erfolgen, falls das eine Rolle spielt. Eine explizite SPS-Sprache ist dafür noch nicht ausgewählt worden.

Beste Grüße,
Alsen
 
Du detektierst das 20mA-Signal. Wenn es >=3s kontinuierlich ansteht, nimmst du ab genau diesen Zeitpunkt alle 4s den Messwert auf und speicherst ihn an entsprechender Stelle in einem DB. Die Wandlungszeit des Analogeingangs dürfte damit berücksichtigt sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du detektierst das 20mA-Signal. Wenn es >=3s kontinuierlich ansteht, nimmst du ab genau diesen Zeitpunkt alle 4s den Messwert auf und speicherst ihn an entsprechender Stelle in einem DB. Die Wandlungszeit des Analogeingangs dürfte damit berücksichtigt sein.
Vielen Dank für die schnelle Rückmeldung. Welche Funkionen wären denn dafür relevant? Kenne mich tatsächlich nur in klassischer Programmierung in Sprachen wie C++, Matlab und Python. Für mich klingt deine Lösung in Pseudo Code hiernach:

If signal>=20mA & tsignal>=3:
if tsignal==4:
ReadAndWriteToDB(signal=signal,DBVariable=DB1.DBD0)
else if tsignal== 8
ReadAndWriteToDB(signal=signal,DBVariable=DB1.DBD4)
else if tsignal== 12
ReadAndWriteToDB(signal=signal,DBVariable=DB1.DBD8)
...

Ist das so korrekt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht braucht das 20mA-Signal noch etwas Toleranz nach unten? Also z.B. > 19,8mA für >=3S
Zweifellos. Und, wenn nach unten, warum dann nicht auch nach oben?
Ich würde mir auch den Luxus erlauben, Min-, Max- und Mittelwert über die 3 s zu bilden, damit man mal schauen kann, ob man mit der gewählten "Bandbreite" gut bedient ist. Zu tolerant sollte man vermeiden, aber zu intolerant ebenso.
 
Als Pseudo Code sieht das schon mal ganz gut aus. Wie weit bist du denn gekommen?
PLC seitig habe ich noch gar nicht programmiert. Dafür kenne ich leider die ganzen PLC Befehle in AWL bspw. nicht. Die müsste ich mir raussuchen und dann testen. Kennt Ihr vllt. die Befehle dafür bereits oder könnte jemand den Code dafür in AWL bereitstellen, falls Er/ Sie es ohne größere Einwände kann?

Vielen Dank im Voraus aufjedenfall auch ohne den Code. Sehr coole und hilfreiche Community.
 
Vielleicht braucht das 20mA-Signal noch etwas Toleranz nach unten? Also z.B. > 19,8mA für >=3S
Man kann auch auf 50% des Wertebereiches detektieren. Das charakteristische Merkmal des Synch-Signals ist die Datenbreite von 4s. Die anderen Signalbreiten liegen alle bei 2s, daher liegt man mit der Abfrage von 3s sicher in der Mitte.

Alsen, wo sind denn derartige Sensoren verbaut? Kannst du den genauen Typ nennen? Was erledigt der IPC denn sonst noch so?
Ich kenne mich mit TwinCat bzw. CodeSys leider überhaupt nicht aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Onkel Dagobert, die Sensoren sind in der Getriebebox unteranderem verbaut und der Typ ist bspw. der LubCos h20+II von Argo Hytos. Das ist die genaue Bezeichnung. Der IPC hostet einen OPC UA Server und sendet halt Daten nach draussen zu anderen Servern, wo Mikroservices laufen. Beziehungsweise aktuell tut der das nicht sondern soll es in Zukunft können.
 
Zurück
Oben