Skalierung Analogwert 4..20mA

DCDCDC

Level-3
Beiträge
1.784
Reaktionspunkte
369
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hab eine EL3052 Karte und ein Drucktransmitter von ifm, welcher 0..16bar in 4..20mA ausgibt.

Beckhoff bietet ja nicht wie Siemens fertige Funktionen zum normieren und skalieren.
Da Twincat meine Entwicklungsumgebungen nicht mag (die Runtime mag keine Virtualisierung) kann ich's leider nicht lokal testen.

Ich würde gerne den erhaltenen Integerwert als Realzahl in bar darstellen.

Aktuell sieht das ganze so aus, wenn ich die FAQ von @oliver.tonn richtig verstanden habe:
Code:
VAR
    ValueRaw : INT;
    ValueReal : REAL;
    ValueMax : REAL := 32767.0; // Max integer
    ValueDiff : REAL := 16.0; // Sensor range
END_VAR


ValueReal:= INT_TO_REAL(ValueRaw) * ValueDiff / ValueMax;

Passt das so? Wie bekomme ich jetzt die Skalierung hin?

Danke!
 
Current := INT_TO_REAL(ValueRaw)/32767.0 * 16.0mA + 4.0mA
ValueReal = INT_TO_REAL(ValueRaw)/32767.0 * 16bar

Damit die Zahlen nicht zu klein werden (ungenauigkeit), drehe ich gerne die Rechnung:
Current := INT_TO_REAL(ValueRaw)* 16.0mA/32767.0 + 4.0mA
ValueReal = INT_TO_REAL(ValueRaw)* 16bar/32767.0
 
Zum Verständnis:
Wieso addierst du noch mal die 4mA? Ich dachte man nimmt den Messbereich, bei 0-10V ist es ja 10 und bei 4-20mA ist es ja 16, oder übersehe ich etwas?
 
Der Meßbereich beginnt doch bei 4mA... Wenn ich also wissen möchte, wieviel mA fließen (um das nachzumessen), dann muß ich den Offset von 4mA draufrechnen: 4mA = 0.
 
Verfälsche ich hier nicht das Ergebnis, wenn ich mit einer festen Zahl in Fliesskommazahlen rechne?
Wie meinst du das? REAL-Literale mit bis zu 6 Ziffern vor dem Dezimalpunkt und 0 Ziffern nach dem Dezimalpunkt sind als REAL-Wert exakt darstellbar.
Oder meinst du, wenn der ST-Compiler den konstanten Ausdruck "16.0/32767.0" optimiert und zu ungefähr 4.88296e-4 zusammenfasst?

ValueReal = INT_TO_REAL(ValueRaw)* 16bar/32767.0
korrekterweise sollte der Code so lauten: ValueReal = INT_TO_REAL(ValueRaw)* 16.0/32767.0
(es sei denn, "16bar" ist eine Variable oder Konstante, falls ein Variablen/Konstantenname mit Ziffern anfangen darf)
 
Zuletzt bearbeitet:
(es sei denn, "16bar" ist eine Variable oder Konstante, falls ein Variablen/Konstantenname mit Ziffern anfangen darf)
Die Einheit hatte ich eingeführt, um klar zu machen, ob hier mit mA (4..20 = 16) oder in bar (0..16) gerechnet wird. Nicht, daß da jemand durcheinander kommt und falsche Schlüsse zieht. --> #2
Und ja, Du hast recht: Ich hab .0 vergessen ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine kleine Frage noch, da ich mich in er Beckhoff Welt nicht komplett auskenne.

Es gibt ja EL3052 für den Ethercat Bus und zB die EL3022 für den K-Bus.

Was ist denn der K-Bus und in welchem Falle würde ich eine EL3022 nehmen und keine EL3052? Unter Twincat 2 Steuerungen?
 
EL3022 | EtherCAT-Klemme, 2-Kanal-Analog-Eingang, Strom, 4…20 mA, 12 Bit, differentiell
EL3052 | EtherCAT-Klemme, 2-Kanal-Analog-Eingang, Strom, 4…20 mA, 12 Bit, single-ended
 
Zurück
Oben