Analog Messwertaufnahme

clumsi

Level-1
Beiträge
137
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich verwende eine WAGO PFC200 SPS mit CODESYS Control for PFC200 SL (also ohne e!COCKPIT) und möchte einen Temperatursensor mit 4-20 mA Ausgangssignal auslesen.
Dazu im Anhang ein Screenshot aus der CODESYS Online-Konfiguration und das Prozessabbild der Wago-Klemme.

Ich sollte die Messwerte wohl nicht auswerten, wenn die ersten drei Bits (Diagnose) nicht 0 sind.
Bleiben also 12 Bit, auf die die 4-20 mA skaliert sind.

Wie schaffe ich es erst mal, den genauen Dezimalwert der Stromstärke in eine double-Variable zu mappen?
Die Skalierung in die Temperatur sollte dann kein Problem sein (4mA -> 0 °C, 20mA -> 100 °C).

Gibt es da fertige Codesys-Funktionen, oder wie wird das üblicherweise gemacht?

Viele Grüße und besten Dank im Voraus,
clumsi
 
Wo ist denn das Bild ;-)

Zum skalieren kannst Du den fertigen Baustein "Fu2Point aus der Building_HVAC_03.lib nehmen, oder Du baust Dir eine eigene Rechnung.

Gruß

Onno
 
Hallo,

Wie kann ich denn erstmal die ersten drei Bits "entfernen" und dur nie Messwertbits in eine int(?)-Variable zusammenfassen?

entweder mit shift right (SHR) um drei Bit nach rechts schieben oder mit bitweisem UND die letzen drei Bits auf 0 oder 1 setzen. Kannst aber auch mal ausrechnen, wie groß die Abweichungen sind wenn Du das einfach unberücksichtigt läßt.
32760->100°C
32763->100,09°C

Gruß
 
Leider funktioniert das nicht. Durch das Verschieben werden auch die anderen Wertigkeiten verschoben....... Ich weiß, dass der Fehler nicht groß ist, wenn man die ersten drei Bits nicht verschiebt, würde es aber trotzdem gerne richtig machen, um zu wissen, wie es geht ;)

codesys.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du könntest nach dem SHR wieder um 3 Bits nach links schieben - dann stimmt die Wertigkeit wieder, die niedrigsten 3 Bits sind aber garantiert 0.
Oder anstatt SHR setzt Du die niedrigsten 3 Bits auf 0 per AND-Wordverknüpfung mit dem Wert 16#FFF8
Nachtrag:
Oder nach dem SHR skalierst Du nicht mehr auf 0..32760 sondern auf 0..4095 ---> schreibe an den LIN_TRAFO bei IN_MAX: 4095

Harald
 
Zuletzt bearbeitet:
Danke. Aber irgendwie verstehe ich jetzt immernoch nicht, wie man dann den kleinsten Sprung auswerten kann. Was ist der zweitkleinste Messwert (4,0 mA ist binär 0000.0000.0000 der kleinste.) Hat das rechte Bit dann die wertigkeit 1 oder 8? Bei 12 Bit Messwertauflösung müsste ich als Maximum 4.095 haben. Muss ich also 0=4,0mA und 4.095=20,0mA rechnen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der eigentliche Meßwert springt doch sowieso immer um mindestens 3 oder 4 Bits.

Die Auflösung Deines ADU beträgt nur 12 Bit (also nur 4096 Stufen), die hat man linksbündig in ein 16-Bit-Word kopiert und die nicht durch den Meßwert belegten rechten/untersten Bits sind immer 0 (vielleicht sind die auch für Statusbits genutzt? - als unterste Bits stören die Statusbits am wenigsten, falls man die nicht entfernt).

Harald
 
Hi,

Sprünge um +-1 kannst du nur auswerten, wenn du die Statusbits wegstreichst.
Lässt du 3 Statusbits dran, dann ist dein kleinster Sprung eine 8.

Beispiel:
0000.0000.0000.0000 = 0
0000.0000.0000.1000 = 8
0000.0000.0001.0000 = 16
0000.0000.0001.1000 = 24

Schneidest du rechts aber ab, dann:

0000.0000.0000.0 = 0
0000.0000.0000.1 = 1
0000.0000.0001.0 = 2
0000.0000.0001.1 = 3

Es wird nicht ungenauer, die Auflösung bleiben 12 bit, nur ist dein Messergebnis durch das Wegschneiden der Statusbits leicht genauer am Ende.
 
nur ist dein Messergebnis durch das Wegschneiden der Statusbits leicht genauer am Ende.
Wie meinst Du das?

Da wird nichts genauer oder ungenauer, da sind nur alle Roh-Zahlenwerte vor der Skalierung 8-mal so groß. Auf die Zahlenwerte nach der Skalierung wirkt sich das nicht aus.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf die Zahlenwerte nach der Skalierung wirkt sich das nicht aus.

Mein Gedankengang war, dass er im Baustein natürlich einen max und min wert angibt.

Gibt er nun aber den Maxwert mit 32760 an oder mit 32763 denn beide FÄlle können ja eintreten.
Falls der Skalierungsbaustein in irgendeiner Form ein Problem mit zu hohen Werten hätte (was ich nicht weiß, da ich die DInger selbst selbst erstelle), müsste er die 32763 nehmen, um diesem Problem aus dem Weg zu gehen.
32763 hieße aber, dass alle Werte sehr leicht ungenau sind (nahezu verschwindend).

danke da aber vielleicht auch ein wenig zu kompliziert....

Gruß,
Flo
 
Zurück
Oben