Wie rechne ich eigentlich einen 4 – 20 mA–Wert um?


Eine technische Frage, die uns häufig erreicht ist: Wie rechne ich eigentlich ein 4 – 20 mA Signal in der SPS um? Die kurze Antwort ist: gar nicht. Die lange Antwort findet ihr hier:

Die 4 – 20 mA sind eigentlich uninteressant

Das 4 bis 20 mA-Signal (oder das alternative 0 – 10 V-Signal) wird in der Automatisierung häufig für die Übertragung von analogen Werten genutzt, also zum Beispiel für die Übertragung von Messwerten eines Drucksensors. Der Messwert wird vom Sensor in ein elektrisches Signal umgewandelt, dessen Stromstärke abhängig vom Messwert zwischen 4 und 20 mA eingestellt wird. Ist der Messwert also am unteren Ende seiner Skala zum Beispiel 0 bar wird das Signal auf 4 mA gestellt. Ist der Messwert am oberen Ende, also vielleicht 10 bar, dann wird das Signal vom Sensor auf 20 mA gestellt. Werte niedriger 4 mA und größer 20 mA sind ungültig. Messwerte dazwischen erzeugen entsprechend ein Signal irgendwo zwischen 4 und 20 mA.

Das Empfängergerät, zum Beispiel ein Analogeingang einer SPS, nimmt dieses Signal auf und rechnet es intern um. Und zwar in einem eigenen Wertebereich, der direkt gar nichts mit den Werten 4 bis 20 zu tun hat. Das bedeutet, die 4 bis 20 mA sind nur das Trägersignal. Welchen Wert sie in mA genau haben ist für die Anwendung völlig uninteressant. Nur im Fall von Abweichungen und Problemen lohnt es sich, die Stromstärke des Sensors auch direkt zu messen. Für die Anwendung kann man das gedanklich ausblenden.

Die Auflösung des Analogeingangsmoduls ist entscheidend

Wovon hängt denn dann der Wertebereich des Eingangswerts in der SPS ab? Es ist also kein Wert zwischen 4 – 20 mA und auch noch nicht der Messwert des Sensors, 0 – 10 bar in unserem Beispiel. Den Messbereich des Sensors kennt die SPS ja noch nicht.

Die richtige Antwort auf die Frage nach dem Wertebereich lautet: Es kommt drauf an. Und zwar auf die digitale Auflösung des Eingangs zum Beispiel in der SPS. Die SPS rechnet das elektrische Signal ja in einen eigenen Digitalwert um. Je nachdem welche Auflösung in Bit für diese Umrechnung zur Verfügung stehen, ändert sich der Wertebereich. Die analogen Eingangsmodule der Thinget SPS haben zum Beispiel 14 Bit an Auflösung. Das bedeutet, der Wert kann 2^14 verschiedene Zustände haben, also 16.384. Der Wertebereich des Signals liegt also irgendwo zwischen 0 und 16.383 (Achtung, der Wertebereich beginnt bei 0 und endet damit bei 2^14 - 1.) 0 entspricht dann 4 mA oder 0 bar und 16.383 dem Maximalwert also 20 mA oder 10 bar in unserem Beispiel. Wieder spielen die 4 – 20 mA als Zahl keine Rolle. 0 entspricht dem niedrigsten Messwert und 16.383 dem höchsten Messwert. Ist die Auflösung des verarbeitenden Moduls nur 12 Bit, dann beträgt der Wertebereich entsprechend 0 – 4.095 also 0 bis 2^12 -1.

Die Umrechnungsformel

Wie rechne ich dann diesen Wert in der SPS, also 0 bis 16.383 wieder in den eigentlichen Messwert um? Ganz einfach. Jede Änderung des Wertes um 1 entspricht dem 16.384ten Teil des Wertebereichs. In unserem Beispiel liegt der Wertebereich zwischen 0 und 10 bar, die Spanne beträgt also genau 10 bar. Eine Änderung des empfangenen Wertes in der SPS um 1 bedeutet also eine Änderung des Messwertes um 1 / 16.384 des Wertebereichs also 10 bar / 16.384 und damit 0,0006103515625 bar. Das ist also unsere Einheit für die Änderung des Digitalwertes in der SPS. Ändert sich der Wert in der SPS um 100 so entspricht das einer Messwertänderung von 100 Mal der der Änderung des Wertebereichs von 10 bar / 16.384 also 0,0006103515625 bar * 100, also 0,06103… etwa 61 mbar.

Die Formel für die Umrechnung des digitalen Wertes in der SPS zurück in den Messwert ist also in unserem Beispiel:
100 * (10 bar / 16.384) = 0,061035… bar = 61,035… mbar

Wert in der SPS * (Spanne des Messwerts / Auflösung des Eingangsmoduls in Anzahl möglicher Werte) = Messwert in der Einheit des Messwerts

Was wenn der Wertebereich nicht bei 0 beginnt?

Dann wird es etwas komplizierter, ist aber eigentlich genauso einfach. Nehmen wir an, unser Messbereich liegt jetzt zwischen 1 und 10 bar. Dann ist Spanne des Messbereichs genau 9 bar groß (10 bar – 1 bar). Unsere Auflösung von 16.384 verschiedenen Werten deckt nun also einen Bereich von 9 bar ab. Eine Änderung des Wertes in der SPS um 1 entspricht nun also einer Änderung des Messwertes um 9 bar / 16.384 also 0,00054931640625. Gleichzeitig entspricht der Wert 0 in der SPS nun nicht mehr 0 bar sondern 1 bar. Ihr müsst also zu 1 bar, dem Ausgangswert bei 0 in der SPS, den berechneten Wert hinzufügen.

Das bedeutet für unseren Beispielwert 100 in der SPS:
1 bar + 100 * ( 9 bar / 16.384) = 1 bar + 100 * 0,000549… bar = 1,0549… bar

Messwert bei 0 + Wert in der SPS * (Spanne des Messwerts / Auflösung des Eingangsmoduls) = Messwert in der Einheit des Messwerts

So funktioniert die Skalierung in der SPS am Beispiel Thinget XC und Kinco K2

Wie die Berechnung in der SPS funktioniert, zeigen wir am Beispiel der Thinget XC und Kinco K2.

In der XC SPS von Thinget liegen die Analogeingänge des Analogen Erweiterungsmoduls im Adressbereich ID. Adresse ID100 ist dann Analogeingang CH0, wenn das Analogmodul an Erweiterungsplatz 1 steckt. Der 4 – 20 mA-Wert kommt nun als 14 Bit-Wert an Adresse ID100 an also mit einem Wert zwischen 0 und 16.383. Nehmen wir an, der übermittelte Wert beträgt 1.345. Wir wollen diesen nun in einen Wert in Millibar umrechnen. Der Wertebereich des Sensors liegt im Bereich 0 bis 2.000 Millibar.

Es gibt nun zwei Möglichkeiten diesen Wert in der Thinget XC-SPS umzurechnen. Entweder über Integer-Operationen oder Fließkomma-Operationen. Wir beginnen mit der Fließkomma-Variante.

Zuerst berechnen wir dazu den konstanten Faktor Messbereich Sensor / Wertebereich des Eingangs, also 2000 / 16.384. Da das Ergebnis eine Fließkomma-Zahl ist, benutzen wir die EDIV-Funktion (Fließkomma-Division). Das Ergebnis speichern wir im Speicherbereich D4000. Da das Ergebnis ein Doppelwort mit 32 Bit ist, sind damit D4000 und D4001 belegt.
EDIV K2000 K16384 D4000

K steht in der Thinget-Software für eine Konstante Zahl. Jetzt müssen wir nur noch den Wert ID100 mit dieser Zahl multiplizieren. Damit das funktioniert, müssen wir allerdings ID100 zuerst in eine Fließkomma-Zahl konvertieren. Der Befehl dafür lautet FLT, mit diesem Befehl übertragen wir den Wert von ID100 als Fließkomma-Zahl in Register D1000.

FLT ID100 D1000
Nun müssen wir nur noch unseren Faktor D4000 mit D1000 multiplizieren, das Ergebnis speichern wir direkt wieder in D1000, um den Speicher effizient zu nutzen:
EMUL D1000 D4000 D1000

In D1000 steht nun also der richtige Wert des Sensors in millibar als Fließkommazahl. Die Berechnung mit einem anderen Anfangswert als 0 erfolgt so, wie in der allgemeinen Berechnung beschrieben.
Wir haben für die Umrechnung von Analogwerten ein Beispielprogramm für die Thinget SPS erstellt. Darin ist die Umrechnung in Kontaktplan enthalten sowie auch zwei C-Bausteine zur Umrechnung.

In der Kinco-Software (Kinco Builder) für die K2 und K5 SPS steht direkt ein Baustein für die Umrechnung zur Verfügung. Dieser heißt LINCO für die lineare Skalierung. Als Eingangswerte hat der Baustein die Variablen IN_L für den niedrigsten Wert des Eingangsbereichs, also 0 im Fall eines Analogeingangs IN_H für den höchsten Wert also z.B. 4095 für einen 12 Bit-Eingang, wie die K2 ihn hat. Als OUT_L und OUT_H setzt ihr die minimalen und maximalen Werte des Ausgangsbereichs ein also zum Beispiel 1.000 mbar bis 3.000 mbar. Ratio ist ein Skalierungsfaktor zum Beispiel 2, um den Ausgangswert zu verdoppeln. IN ist schließlich der Eingangswert des Sensors also zum Beispiel %AIW0.

Auf der Ausgangsseite des Bausteins steht auch der skalierte Ausgangswert als Doppelwort (DOUT) und Fließkommazahl (ROUT) zur Verfügung.


Ihr könnt den Analogwert auch erst im HMI skalieren

Wenn ihr den Wert im SPS-Programm nicht weiter im Programmablauf benötigt, sondern erst im HMI anzeigen wollt, könnt ihr ihn auch im HMI skalieren. Dazu steht euch in Number Display und Number Input eine Skalierungsfunktion im Reiter „Numeric Data“ zur Verfügung. Dort tragt ihr für Min und Max den Wertebereich in der SPS ein also zum Beispiel 0 bis 4.095 für einen Eingang mit 12 Bit Auflösung. Unter „Proportion Conversion“ unten rechts tragt ihr dann den Wertebereich ein, der angezeigt werden soll, also zum Beispiel 0 – 10 bar. Die Werte Integer und Decimal beziehen sich dann auf die angezeigten Stellen vor und nach dem Komma für den skalierten Wert.

Euer spstiger

Zugehörige Produkte

Analogerweiterung für THINGET XD SPS in verschiedenen Konfigurationen

104,20 €*