Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
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