# Analogwerte in der CoDeSys skalieren



## lafu31 (17 Oktober 2010)

Hallo zusammen,

ich habe hier schon einiges über Analogwertskalierung gelesen, aber die ulitivmative Antwort für mein Problem, war da noch nicht dabei.

Also: ich habe mehrere Drucksensoren gleichen Typs. Deren Werte gelangen mittels 4-20mA Signal in eine WAGO-Steuerung, also CoDeSys Programmierung. Diese IntegerWerte sollen dann als bar-Wert visualisiert werden.

Das Problem: bei 4mA bekomm ich Integerwerte um die 4000 (4088, 4058, 4060, 3570,...ist von Sensor zu Sensor unterschiedlich). Einige schwanken auch ständig zwischen z.B. 4088 und 4048
Wenn ich die Werte nun mit dem AI-Skalierbaustein in einem Bereich von 0 bis 50bar skalieren will, denkt der Baustein der Wert bei Null bar wäre schon irgendein Druck von z.B. 5bar.
Wie kann ich dass Problem einfach und schnell lösen? Einfach vom Aktualwert denn 4000er-Wert bei Null subtrahieren? oder gibts da noch eine bessere Lösung?

Gruß Lars


----------



## Znarf (17 Oktober 2010)

Hallo
Ich denke, dass dein Geber 4-20mA ausgibt, aber dein Analogeingang 0-20mA wandelt. Prüf doch mal die Parametrierung deiner Hardware.

Gruß
Andreas


----------



## lafu31 (17 Oktober 2010)

Hallo,

hab ich schon geprüft. Die Karten sind alle auf 4-20mA eingestellt. Konnte vorhin noch in Erfahrung bringen, dass die AI-Karten die genutzt werden bei 4mA eigentlich 4096 als Integerwert haben müssten und nicht Null, wie ich ursprünglich angenommen habe (WAGO 750-473).

Gruß


----------



## Bjornf (17 Oktober 2010)

Gemäss meine Buch heisst es "Gleichung der Geraden"  auf Deutsch , währe dass eine Lösung ? 
Ich habe diese Beispiel Gefunden.
(*****************************************************************************************************)
FUNCTION StraightLineEqv : REAL
VAR_INPUT
 rInputValue: REAL;
 rMinInputValue:  REAL;
 rMaxInputValue:  REAL;
 rMinOutputValue: REAL;
 rMaxOutputValue: REAL;
END_VAR
VAR
 rSlope:     REAL;
 rOffset:    REAL;
END_VAR
_______________________________________________________
 rSlope:=(rMaxOutputValue-rMinOutputValue)/(rMaxInputValue -rMinInputValue);
 rOffset:=rMaxOutputValue-(rSlope*rMaxInputValue);
 StraightLineEqv:=rSlope * rInputValue+rOffset;
(******************************************************)
__PROGRAM MAIN
VAR
 rMaxInputValue: REAL := 32767;(* Max Out to PLC*)
 rMinInputValue: REAL := 0;
 rMaxOutputValue: REAL := 20.00;(* 20.00 mA*)
 rMinOutputValue: REAL:=4.00; (*4 mA*)
 rInputValue: REAL;
 rScaledValue: REAL;
 KL3021_1_In AT %I*: INT; (*Globale Var*)
END_VAR
____________________________________________________________________________
IF KL3021_1_In =0  THEN
rScaledValue:=0.00;
RETURN;
END_IF
rScaledValue :=StraightLineEqv(
 rInputValue:=INT_TO_REAL(KL3021_1_In),
 rMinInputValue,
 rMaxInputValue,
 rMinOutputValue,
 rMaxOutputValue);
(***********************************************************************************************************)
BjornF


----------



## Markus Rupp (18 Oktober 2010)

die karte für 0-20mA gibt bei param4-20mA 4096 als 0-Wert aus, wenn die Karte trotzdem 0 ausgibt ist das Erdungskonzept/Potenzialsystem evtl. nicht ausreichend umgesetzt


----------



## eNDe (18 Oktober 2010)

*Analogwert scalieren*

Hallo lafu31,
die Karte 750-473 liefert bei 4mA die INT-Zahl 4096 und bei 20 mA die Zahl 20480.
Mit diesen Werten ergibt sich (wenn 20mA bei dir 50bar entsprechen!) als Formel:
P = 0,003051757 * EWx -12,5
MfG
eNDe


----------

