ich möchte aus einem SPS Programm (CoDeSys) Variablen über Modbus nach EXCEL auslesen, die Übertragung ist kein Problem sondern die Aufbereitung der ausgelesenen Werte! Bei SPS Variablen des Datetyps INT oder DINT funktioniert die Nachbereitung auch bestens wenn ich in VBA folgende umrechnung mit den empfangenen Daten durchführe:
Public Declare Sub memcpy Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)Function ConvertToSingle(D0 As Byte, D1 As Byte, D2 As Byte, D3 As Byte) As Single  Dim dword As Long    dword = (D2 * &H1000000) Or (D3 * &H10000) Or (D0 * &H100) Or (D1)  memcpy ConvertToSingle, dword, 4End FunctionSub Example()  Dim result As Single    Rem convert 16#1234_3FC0 to Single 1.500556  result = ConvertToSingle(&H12, &H34, &H3F, &HC0)  End Sub
Uwe
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich möchte aus einem SPS Programm (CoDeSys) Variablen über Modbus nach EXCEL auslesen, die Übertragung ist kein Problem sondern die Aufbereitung der ausgelesenen Werte! Bei SPS Variablen des Datetyps INT oder DINT funktioniert die Nachbereitung auch bestens wenn ich in VBA folgende umrechnung mit den empfangenen Daten durchführe:
For i = 0 To f_ReadCount - 1
f_WordData(i) = (CSng(f_ReadBuffer(i * 2 + 0)) * 256) Or _
(CSng(f_ReadBuffer(i * 2 + 1)))
Next i
Diese Konvertierung von BigEndian nach LittleEndian funktioniert allerdings nicht für SPS Variablen des Datentyps REAL!
Kann mir vielleicht jemand sagen wie bei REAL Variablen diese Konvertierung funktioniert?
Versuch mal folgende Funktion
Uwe