Hintergrundinfo:
Alle Datentypen sind im tiefsten Kern nichts anderes als eine Aneinandereihung von Bytes. Bei INT sind es 2, bei REAL sind es 4 etc. Der Datentyp gibt lediglich an, wie die Ansammlung von Bytes zu interpretieren ist. Die in
CoDeSys zur Verfügung stehenden Funktionen erlauben meist nur eine Konvertierung auf der "bereits interpretierten" Ebene. So kann man aus einem REAL mit Wert 21.4 einen INT mit Wert 21 machen. Was nicht so ohne weiteres geht, ist die Neuinterpretation der Bytes, d.h. man kann nicht aus 2 Worten (4 Bytes) einen REAL (ebenfalls 4 Bytes) erschaffen. Schön wäre ja eine Funktion, die ich mit 2 Worten füttere und hinten kommt ein REAL heraus. So etwas muss man sich selbst schreiben, nachdem man verstanden hat, wie das geht.
Auf die schnelle gibt es aber folgende Lösung:
Du nagelst dein Wert-Array an eine feste Adresse im Speicher, z.B.:
Code:
Wert AT %MD0: ARRAY[0..124] OF WORD;
Dann nagelst du auch deine Temperatur-Variable an die gleiche Adresse im Speicher, z.B.:
Code:
Temperatur AT %MD0: REAL;
Damit stehen die Daten aus der RESPONSE einerseits als WORD-Array zur Verfügung. Andererseits werden die ersten beiden Worte dieses Array aber auch über die Variable Temperatur als REAL interpretiert. Das wäre eine vorläufige, halbwegs elegante Typkonvertierung.
Eine zweite Lösung:
Du definierst dir im lokalen Variablenteil (oberes Fenster) eine Variable vom Typ "Zeiger auf REAL" und eine REAL-Variable Temperatur:
Code:
pTemperatur: POINTER TO REAL;
Temperatur: REAL;
Im Programmteil schreibst du zwei Zuweisungen:
1. Adresse von Wert[0] (Baustein "Eingang") auf den Zeiger pTemperatur (Baustein "Ausgang")
2. Inhalt von pTemperatur (Baustein "Eingang") auf Temperatur (Baustein "Ausgang")
[ ADR(Wert[0]) ]-----[ pTemperatur ]
[ pTemperatur^ ]-----[ Temperatur ]
Wichtig ist der Inhaltsoperator "^" hinter pTemperatur. Er gibt an, auf welchen Wert der Zeiger pTemperatur zeigt. Er ist das Gegenstück zu "ADR()".
Beide Varianten funktionieren nur dann richtig, wenn die Reihenfolge der beiden Worte, die den REAL-Wert beschreiben, korrekt ist. Ist das nicht der Fall, muss die oben bereits erwähnte eigene Funkton her. Dazu mehr, wenn es nötig wird.