-> Hier kostenlos registrieren
Hallo liebe Community,
ich stehe vor einem Problem beim Versuch, Sensordaten aus einem IO-Link Sensor zu kombinieren und die Messdaten in eine Variable zu schreiben. Ich verwende dazu das TIA Portal V16, eine Siemens S7-1500 Steuerung und einen Balluff IO-Link Master.
Gemäß den Angaben des Sensorherstellers werden die aktuellen Daten des Sensors über die IO-Link-Schnittstelle zyklisch in 20 Bytes übertragen. Diese Bytes sind in fünf Slots mit jeweils 4 Bytes unterteilt, wobei jedes Byte eine Zahl vom Typ float32 enthält. Das Zahlenformat für Gleitkommazahlen mit 32-Bit-Auflösung ist in der Norm IEEE 754 definiert.
Die Daten werden erfolgreich an der Eingangsadresse des IO-Link Masters empfangen und dort als Byte definiert (z.B. %IB92). Um die 4 Bytes zusammenzusetzen und in eine Realzahl umzuwandeln, verwende ich im SCL folgenden Code:
Temperature := REAL_TO_INT(DINT_TO_REAL(BYTE_TO_DINT(InputBytes0) + BYTE_TO_DINT(InputBytes1 * 256 + BYTE_TO_DINT(InputBytes2) * 65536 + BYTE_TO_DINT(InputBytes3) * 16777216));
Ich habe die Reihenfolge der Bytes überprüft und sie scheint korrekt zu sein. Jedoch erhalte ich als Ergebnis nicht die erwarteten 25,456°C, sondern -25678. Obwohl ich die Skalierung möglicherweise mit einem Faktor korrigieren könnte, bleibt ein kleiner Abweichungsfehler und das negative Vorzeichen bestehen.
Ich vermute, dass ich bei der Konvertierung der Bytes in eine Realzahl einen Fehler gemacht habe. Leider komme ich nicht mehr weiter und wäre über jede Hilfe oder Anregung sehr dankbar.
Vielen Dank im Voraus!
ich stehe vor einem Problem beim Versuch, Sensordaten aus einem IO-Link Sensor zu kombinieren und die Messdaten in eine Variable zu schreiben. Ich verwende dazu das TIA Portal V16, eine Siemens S7-1500 Steuerung und einen Balluff IO-Link Master.
Gemäß den Angaben des Sensorherstellers werden die aktuellen Daten des Sensors über die IO-Link-Schnittstelle zyklisch in 20 Bytes übertragen. Diese Bytes sind in fünf Slots mit jeweils 4 Bytes unterteilt, wobei jedes Byte eine Zahl vom Typ float32 enthält. Das Zahlenformat für Gleitkommazahlen mit 32-Bit-Auflösung ist in der Norm IEEE 754 definiert.
Die Daten werden erfolgreich an der Eingangsadresse des IO-Link Masters empfangen und dort als Byte definiert (z.B. %IB92). Um die 4 Bytes zusammenzusetzen und in eine Realzahl umzuwandeln, verwende ich im SCL folgenden Code:
Temperature := REAL_TO_INT(DINT_TO_REAL(BYTE_TO_DINT(InputBytes0) + BYTE_TO_DINT(InputBytes1 * 256 + BYTE_TO_DINT(InputBytes2) * 65536 + BYTE_TO_DINT(InputBytes3) * 16777216));
Ich habe die Reihenfolge der Bytes überprüft und sie scheint korrekt zu sein. Jedoch erhalte ich als Ergebnis nicht die erwarteten 25,456°C, sondern -25678. Obwohl ich die Skalierung möglicherweise mit einem Faktor korrigieren könnte, bleibt ein kleiner Abweichungsfehler und das negative Vorzeichen bestehen.
Ich vermute, dass ich bei der Konvertierung der Bytes in eine Realzahl einen Fehler gemacht habe. Leider komme ich nicht mehr weiter und wäre über jede Hilfe oder Anregung sehr dankbar.
Vielen Dank im Voraus!