Skalierung von (Analog-) Werten (Kompakt)

Beiträge
5.590
Reaktionspunkte
1.134
Zuviel Werbung?
-> Hier kostenlos registrieren
Einführung
Bei verschiedenen SPS-Projekten kann es aus verschiedenen Gründen erforderlich sein Werte eines Bereichs in einen anderen umzurechnen,
also zu skalieren, z.B. um wieder eine physikalische Größe (z.B. V, Bar, usw.) zu erhalten.
Dies ist ein sehr umfangreiches Thema, dass in diesem Forum in einer auf mehrere Beiträge aufgeteilten ausführlicheren Variante dieser FAQ behandelt wird.
Hier die Links zu den einzelnen Kapiteln dieser ausführlicheren FAQ:

Kapitel 1 (Einführung)
Kapitel 2 (Begriffsdefinition)
Kapitel 3 (Genauere Erläuterung anhand von Beispielen)
Kapitel 4 (Erläuterung der verschiedenen Auflösungen und Darstellungsformen analoger Eingangswerte)
Kapitel 5 (Umsetzung von Skalierungen in SPS-Programme)
Kapitel 6 (Tipps für Steuerungen ohne Fließkomma Unterstützung)

Begriffsdefinition
Der zu messende Wert (z.B. Temperatur, Position, usw.) wird in dieser FAQ als physikalische Größe bezeichnet.
Soweit ein Messwandler verwendet wird, wird dessen Ausgangssignal als Einheitssignal bezeichnet und der digitalisierte Wert
der analogen Eingangskarte oder der dezentralen Peripherie wird Digits oder Eingangswert genannt.

Genauere Erläuterung anhand von Beispielen
Im einfachsten Fall besteht die Formel für eine Skalierung aus einem einfachen Dreisatz, auf der einen Seite des Gleichheitszeichen
stehen die die Digits, auf der Anderen die physikalischen Größe, die dann nach der unbekannten Größe umgestellt werden muss.
Folgende Zahlenwerte benötigt man für die Berechnung:

- Digits des analogen Eingangs
- Bereich der Digits des analogen Eingangs (Bei Bereichen die bei 0 beginnen oder sich symmetrisch um 0 bewegen ist dies die größte darstellbare Zahl)
- Bereich der physikalischen Größe (z.B. bei 0-100% = 100)


Hier zunächst die Formel des (nicht umgestellten) Dreisatzes, die unbekannte Größe (Istwert physikalische Größe)
erhält bei den weiteren Formeln den Buchstaben x:


attachment.php


Soll z.B. die am Analogeingang (0-10V) anliegende Spannung, deren möglicher Maximalwert 32767 beträgt, ermittelt werden,
wobei der Eingangswert/Digits 4095 beträgt, sähe die Formel dafür so aus:


attachment.php


Als Ergebnis kommen rund 1,25V heraus. Diese Formel kann auch unverändert, vom Eingangswert mal abgesehen,
für einen Messbereich von -10V - 10V genutzt werden.

Wird an einen Messwandler ein PT100 angeschlossen, der bei einem Messbereich vom -20° - 50°C als Einheitswert
eine Spannung von 0 – 10V erzeugt muss, da der Messbereich nicht bei 0 beginnt, ein Offset eingerechnet werden.
Bei einem möglichen Maximalwert von 4095 und einem Digitwert von 2047 sähe die Formel so aus:

attachment.php


Das Ergebnis hier ist rund 15°C.


Erläuterung der verschiedenen Auflösungen und Darstellungsformen analoger Eingangswerte
Die Digitalisierung kann in verschiedenen Auflösungen erfolgen, z.B. in 16 Bit oder 12 Bit. Entsprechend der Auflösung ändert sich auch der Maximalwert der Digits.
Bei einer SPS wird eigentlich immer mit einer Intergerzahl mit Vorzeichen gearbeitet deren möglicher Maximilwert bei einer Auflösung von 16 Bit 32767 und bei 12 Bit 2047 beträgt. Einige Hersteller (z.B. Siemens oder Beckhoff) nutzen,
unabhängig von der Auflösung, einen festen Maximalwert (Siemens: 27648, Beckhoff: 32767) für die Digits, hier muss dann
dieser genutzt werden. Der niedregere Wert bei Siemens liegt daran, dass Siemens einen ständig aktiven Über- und Untersteuerungsbereich besitzt, also genaugenommen mehr messen kann als den eigentlichen Nennbereich (z.B. -10V - 10V).
Einige Hersteller nutzen den Umstand das nicht alle Bits (12 statt 16) genutzt werden um parallel noch Statusinformationen
in den niederwertigen Bits abzulegen. In diesem Fall rücken die Bits des Messwertes nach links. Bei jedem Sprung nach links
muss der Maximalwert der Digits entsprechend mit 2 multipliziert werden. Nutzt der Hersteller für die Messung 12 Bits und 4 Statusbits,
ergibt sich anstatt eines Wertes von 2047 der Wert 32752 für den Maximalwert der Digits. Mann kann der Einfachheit halber aber
auch mit 32767 rechnen, was zu einem minimalen Rechenfehler führen würde. Ein solcher Rechenfehler tritt auch auf, wenn bei
Verwendung des anderen Wertes nicht die Statusbits ausgefiltert werden.

Umsetzung von Skalierungen in SPS-Programme
Bei der Umsetzung der Skalierung in ein SPS-Programm muss darauf geachtet werden, dass nicht unbemerkt mit Ganzzahlen gerechnet wird,
was zu teilweise erheblichen Rechenfehlern führen kann. Entscheidend hierfür ist nicht in welchem Variablentyp das Endergebnis gespeichert
wird, sondern wie feste Zahlenwerte im Programmcode angegeben sind.
Bei Siemens Steuerungen oder Codesys basierten Steuerungen wird eine Zahl ohne Nachkommastelle als Ganzzahl interpretiert und eine
mit Nachkommastellen als Fließkommazahl, wobei diese auch 0 sein kann (z.B. 40.0).
Des Weiteren kann es zu Problemen bei der impliziten Typkonvertierung, also der automatischen Umwandlung von einem Datentyp
in einen anderen, kommen. Für Variablen sollte hier immer, soweit vorhanden, die entsprechende Konvertierungsfunktion genutzt werden
und bei ganzen Zahlen im Code ein .0 angehängt werden.
Hier mal ein Einzeiler, der richtig rechnet:
Code:
#r32_Drehzahl := INT_TO_REAL(#i16_Messwert) * 1000.0 / 32767.0;

Tipps für Steuerungen ohne Fließkomma Unterstützung
Verschiedene Kompaktsteuerungen können keine Fließkommazahlen verarbeiten.
Um auch hier Skalierungen mit ausreichender Genauigkeit realisieren zu können muss zu einem Trick gegriffen werden.
Die maximale physikalische Größe (z.B. 10V) wird mit einer Zahl multipliziert die so hoch ist (Bei UINT z.B. 6000),
dass es nicht zu einem Überlauf kommt. Anschließend wird durch den Maximalwert der Digits geteilt und dann
mit dem Eingangswert multipliziert. Anschließend wird das Ergebnis wieder geteilt, allerdings nicht durch die ursprüngliche Zahl,
sondern durch eine die ein paar Dekaden kleiner ist (Hier z.B. durch 6). Für die Messung einer Spannung von 0-10V sähe die Formel dann wie folgt aus:


attachment.php


Das Ergebnis wäre dann nicht in V, sondern in mV.
 

Anhänge

  • Formel_Dreisatz.png
    Formel_Dreisatz.png
    6,6 KB · Aufrufe: 2.220
  • Formel_Volt_Kompakt.png
    Formel_Volt_Kompakt.png
    1,8 KB · Aufrufe: 2.237
  • Formel_Temp_Kompakt.png
    Formel_Temp_Kompakt.png
    2,3 KB · Aufrufe: 2.152
  • Formel_Volt_Integer.png
    Formel_Volt_Integer.png
    2,6 KB · Aufrufe: 2.013
Zuletzt bearbeitet:
Zurück
Oben