Sensor Skalierung

Kemo_Delight

Level-1
Beiträge
50
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe ein problem beim Skalieren eines sensors im TwinCat 2 ...

Ich nutze einen Sensor 4-20mA mit dem ich Temperaturen von -50 bis 150 Grad Celsius messen will.

Mit einem anderen Sensor Messe ich den Druck 4-20mA 0-1000mbar

Da würde ich einfach die 32767 : 1000 nehmen wäre das richtig?

Entschuldigt falls ich ein paar Informationen vergessen habe oder mein bespiel schlecht ist, bin ein Neuling im gebiet PLC/SPS

kann mir jemand dafür den Quellcode eventuell zusammenschreiben.?

herzlichen dank im Vorraus


Gesendet von iPhone mit Tapatalk
 
Hallo Kemo_Delight,
erstmal willkommen im Forum.
Zum Thema Skalierung gibt es hier im Forum so viele Beiträge, dass diese Deine Fragen eigentlich beantworten sollten, such einfach mal selber ein wenig. Um Dir etwas Arbeit abzunehmen hier mal auf die Schnelle Beiträge zum Thema Skalierung an denen ich beteiligt war.
Fehler in Skalierungsformel
Gradanzeige in Codesys Webvisu von Messung eines PT100
0-10V Eingang an Crouzet Millenium 3

Was ich Dir dann schon mal mitteilen kann ist, das Dein Rechnungsschnipsel falsch ist. Da es ein Eingang und kein Ausgang ist musst Du nicht wissen wie viele Digits einem mBar entsprechen, sondern um wie viel mBar sich der Druck ändern muss, damit sich der Eingang um 1 Bit ändert. Ob Du durch 32767 oder einen anderen Wert teilen musst ist von der Auflösung der Karte (Die Du leider verschweigst) und deren Darstellung abhängig. Die Analogkarten von Beckhoff trennen den Wert und den Status, ich habe jetzt im Handbuch jedoch leider nicht gefunden ob sie bei einer Auflösung von z.B. 12 Bit auch nur diese nutzen oder auf 15 Bit (ohne Vorzeichen) hochskalieren, bzw bei 12 Bit diese um 3 Bit nach links verschieben. Im ersten Fall wäre ein Teilen durch 32767 richtig im Zweiten Fall würde es zu leichten Ungenauigkeiten kommen, hier müsstest Du eigentlich durch 32760 teilen (Bit 0-2 sind immer 0 also 32767 - 7 = 32760). Soweit sie tatsächlich nur die 12Bit nutzen müsstest Du in dem Fall durch 4095 teilen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Im Datenblatt deiner SPS/des analogen Eingangsbausteins deiner SPS (welche ist das eigentlich?) steht, welcher Wert für 4mA geliefert wird und welcher für 20mA geliefert wird. Daran kannst du dich halten (Tipp hierzu: Oscat hat einen R_SCALE-Baustein, der dir basierend auf diesen Werten dann deinen Wert ausspuckt.
 
Im Datenblatt deiner SPS/des analogen Eingangsbausteins deiner SPS (welche ist das eigentlich?) ...
Die Frage welche SPS es ist hat der TE doch gleich im ersten Satz beantwortet,
... ich habe ein problem beim Skalieren eines sensors im TwinCat 2 ...
TwinCAT V2, also eine Beckhoff SPS, die entweder auf einem BC, einem CX oder einem PC (OK, der CX ist auch ein PC, aber ich es ist klar was gemeint ist) läuft. Was wichtig wäre ist, welche Eingangskarte er genommen hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für eure schnellen Antworten

ich nutze eine EL3152 Analoge Eingangsklemme für die Sensoren...

Oliver.tonn ich hab mir die anderen links mal angeschaut und auch weiter gestöbert aber mit dem Temperatursensor (-50 bis 150) komm ich absolut nicht weiter.
Wie könnte ich den Analogwert Skalieren ?

Herzlichen dank für eure Hilfe
 
Na dann kommt hier mal wieder ein wenig Nachhilfe in Skalierung.
Du hast einen Sensor der an einem Messwandler angeschlossen ist (evtl. im selben Gehäuse). Der Sensor misst von -50°C - 150°C und der Messwandler macht daraus 4 -20mA. Die von Dir verwendete Eingangskarte gibt, laut Handbuch, bei 4mA den Wert 16#0000 aus und bei 20mA den Wert 16#7FFF (32767Dez) aus. Damit haben wir schon mal zwei für die weitere Berechnung notwendige Bereiche und ein Offset. Der eine Bereich ist der der physikalischen Größe (°C) dieser geht von -50° - 150°C, hat also eine Größe von 200°C, der andere Bereich ist der der Digits (Maximaler Eingangswert der analogen Karte), dieser geht von 0 - 32767, hat also eine Größe von (Oh Wunder) 32767, das er bei 0 beginnt vereinfacht die Sache etwas. Der von mir erwähnte Offset beträgt -50°C, dieser wird benötigt, da der zu messende Temperaturbereich nicht bei 0°C beginnt, bzw. sich nicht symmetrisch um 0°C bewegt und der Eingangswert der anlogen Karte nur in positive Richtung geht. Die Formel für die Skalierung sieht also so aus:

(Temperaturbereich / Max. Digits * Gemessene Digits) + Offset

Angenommen Deine Karte gibt einen Wert von 8192 aus, dann würde die Formel ausgefüllt wie folgt aussehen:

(200°C / 32767 * 8192) + (-50°C)

Da käme dann ca. 0°C bei raus.
 
Zuletzt bearbeitet:
Herzlichen dank Oliver hab es soweit verstanden und heute versucht so umzusetzen , aber ich steh aufm Schlauch wie ich das in TwinCat umsetzen soll ;-/

entschuldigt bitte das ichso penetrant bin...


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kemo_Delight,
... hab es soweit verstanden und heute versucht so umzusetzen , aber ich steh aufm Schlauch wie ich das in TwinCat umsetzen soll
bitte entschuldige die Frage, aber hast Du Dich überhaupt schon mal mit TwinCAT beschäftigt? Das ist alles eigentlich relativ einfach und wie man einen Hardwareeingang im Programm anspricht und wie man Berechnungen durchführt gehört eigentlich zu den Grundlagen, aber na gut, ich will mal nicht so sein.
Du könntest Dir z.B. einen FB erstellen und in diesem eine Variable vom Typ INT deklarieren, die auf den Hardwareeingang gemappt ist und eine weitere für die errechnete Temperatur. Zum Beispiel so:
Code:
FUNCTION_BLOCK FB_TemperaturVAR_OUTPUT
	r32_Temperatur:REAL;
END_VAR
VAR
	i16_HardwareVal AT %I*:INT;
END_VAR

Im Code selber ist die Berechnung dann ein Einzeiler, wobei Du die festen Werte für den Temperaturbereich und des maximal möglichen Wertes der analogen Eingangskarte auch durch Variablen ersetzen kannst, dann wird das Ganze flexibler. TwinCAT beherrscht eigentlich auch die implizite Typkonvertierung, daher könntest Du die Funktion "INT_TO_REAL" eventuell auch weglassen. Auch die Klammern sind nicht notwendig, da TwinCAT selber die Regel "Punkt vor Strich" beachtet, aber so ist es am saubersten. Hier nun noch der Einzeiler:
Code:
r32_Temperatur := (200.0 / 32767.0 * INT_TO_REAL(i16_HardwareVal)) + -50.0;
Das ganze einmal übersetzen und dann die Variable "i16_HardwareVal" mit einem Eingang der analogen Karte verknüpfen, fertig. Dann kannst Du noch eine Variable vom Typ WORD als Hardwareeingang deklarieren die Du mit dem Status der Karte verknüpfst, so erhälst Du auch Infos über Fehler.
 
Zurück
Oben