Analogwert skalieren und ausgeben bei einer SABO Steuerung ?

mikekb

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
folgendes Problem.

Steuerung: SABO PLM 701.1 mit Erweiterung EWB 730.10

Die Steuerung wird mit Codesys Version 2.3 programmiert.

Am Analogeingang ( 12 Bit ) liegt ein 0 - 10 Volt Signal an was einem Temperaturwert von -50 bis + 100 Grad entspricht.

Mein Problem ist nun das Umwandeln vom Eingangssignal in einen realen Ausgangswert, z.B. Eingang 1995 entspricht 21,6 Grad.

Analogbausteine sind bei SABO offensichtlich nicht vorhanden ( Im Target bzw. der Libary ) und andere wie Oscat funktionieren zwar in der Simulation aber nicht in der Steuerung.

Ich nehme an das ein FB programmiert werden muss.

Vielleicht kann mir jemand der sich mit Analogverarbeitung auskennt ein Denkanstoß geben wie das umgesetzt wird. Funktionieren tut das mit SABO schon öfter in Steuerungen gesehen.

Danke im voraus.

cu
Michael
 
Probier es mal damit:

Code:
Y = (((Y2-Y1)/(X2-X1))*(X-X1))+Y1

Für dein Beispiel gilt dann folgendes:
Y1:-500
Y2: 1000
X1: minimaler Rohwert bei SABO - vermutlich 0
X2: maximaler Rohwert bei SABO - evtl. 32767

X: aktueller Rohwert - z.B. 1995

Y: skalierter Istwert - z.B. 216

Die letzte Stelle 21(6) ist dann die Kommastelle.

Am besten den INT-Wert dann noch in eine Gleitkommazahl (REAL) wandeln, und durch 10 teilen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
danke für Antwort, aber so richtig funktioniert das nicht möglich das ich auch was falsch mache. Ich beschäftige mich normalerweise nicht mit Codesys.

Daher würde ich das Programm gerne in Auftrag geben es ist nix großes der digitale Bereich ist soweit fertig es geht noch um 4 Analogwerte die rein programmiert werden müssen.

Sollte jemand Interesse haben bitte melden per PM oder Mail.

LG
Michael
 
Hallo Michael,

uncle_tom hat Dir schon die richtige Formel gegeben. Aber 12 Bit sind 4096.

Anbei meine Lösung:


VAR


Y: REAL; (* Messwert Skaliert *)
Y2: REAL := 1000; (* Max Messbereich vom Fühler *)
Y1: REAL := -500; (* Min Messbereich vom Fühler *)
X2: REAL := 4096; (* Auflösung 12 Bit *)
X1: REAL := 0 ; (* Auflösung 12 Bit *)
X: REAL; (* Eingang in real *)
Rohwert: WORD; (* Analoger Eingang von der Klemme *)
END_VAR


PRG dazu:

X := WORD_TO_REAL(Rohwert);

Y := ((((Y2-Y1)/(X2-X1))*(X-X1))+Y1)/10;


Sollte so gehen.

Wolfgang
 
Zurück
Oben