TIA Skalierung eines nicht linearen Analogwerts

Krümi

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Hat jemand eine Ahnung (oder gar ein Projektbeispiel) wie ich mit Step7 einen nicht linearen Analogwert - in meinem Fall den Widerstandswert eines Lichtsensors - Skalieren und "sinnvoll" für diverse Schaltaufgaben auswerten könnte?
Meines wissens müsste es eine Lösung sein, in welche ich mehrere Messpunkte meiner Widerstandskurve eintragen kann.
Die sollte möglichts mit einer S7-1200 realisierbar sein.

Besten Dank an alle!
Gruß Sebastian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde die Messpunkte in Excel eingeben und eine Näherungsformel suchen lassen.
Falls die Näherungsformel zu komplex oder ungenau wird kann man immer noch die Interpolations-Tabelle verwenden.

Harald
 
Hi Krümi

wie "nicht linear" ist er denn? quadratisch, kubisch, logarithmisch ... es gibt ja so viele Möglichkeiten.

Wenn man gar nix weiß, dann braucht man vier Tabellen und dann kann man das abschnittsweise durch SCALE_X linear hin biegen.

also in etwa so (ohne Rücksicht auf die konkreten Parameternamen und Positionen

Code:
for #i := 0 to #tablesize by 1[INDENT]if inmintab[#i] < #invalue and #invalue < inmaxtab[#i] then[/INDENT]
[INDENT=2]outvalue := SCALE_X( outmintab[#i], NORM_X( inmintab[#i], invalue, inmaxtab[#i] ), outmaxtab[#i]);[/INDENT]
[INDENT]end_if[/INDENT]
end_if

Man kann das auch mit zwei Tabellen machen, dann muss man für die Ränder Ausnahmen machen.

Code:
for #i := 0 to #tablesize-1 by 1[INDENT]if intab[#i] < #invalue and #invalue < intab[#i+1] then[/INDENT]
[INDENT=2]outvalue := SCALE_X( outtab[#i], NORM_X( intab[#i], invalue, intab[#i+1] ), outab[#i+1]);[/INDENT]
[INDENT]end_if[/INDENT]
end_if


Also das setzt sich jetzt aus linearen Stückchen zusammen. Wenn du besser weißt, wie "nicht linear" dein Input ist, dann ist PN/DP Vorschlag bestimmt besser.

'n schön' Tach auch
HB
 
Oder man könnts auch mit einem Polynom lösen. Ich hab das mal so gemacht.

Code:
FUNCTION AI_scal: Void(*Umwandlungsoperation*)
TITLE = 'REAL scalierung von Rohwert nach Out'
VERSION : '1.0'
AUTHOR  : vor
NAME    : AI_scal
FAMILY  : data


(*Scaliert den Eingangswert mithilfe eines Polynomes*)
(*Eignet sich z.B. zur Skallierung nichtlinearter Temperaturfühler*)
{S7_tasklist:='false';
 S7_blockview:='small'}


VAR_INPUT
       a0: REAL; // Offset
       a1: REAL; // Gain
       a2: REAL; // x^2
       a3: REAL; // x^3
      Raw: REAL; //
 LIM_X_UG: REAL; // Unteres Limit des Ausgangswertes
 LIM_X_OG: REAL; // Oberes Limit des Ausgangswertes


END_VAR


VAR_TEMP
 Act: REAL;
 END_VAR




VAR_OUTPUT
 out: REAL;
END_VAR    
    
    
(*Eingang Raw umgerechnet*)
 BEGIN
Act:= a0 + (a1 * Raw) + (a2 * Raw ** 2) + (a3 * Raw ** 3);


(*Ausgang wird limitiert*)
out:=LIMIT(Mn:=LIM_X_UG, IN:=Act, Mx:=LIM_X_OG); 


END_FUNCTION

mfG René
 
Zurück
Oben