Datentyp Problem

Jazz11
2009-05-29
2009-06-02
  • Jazz11 - 2009-05-29

    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?

     
  • Uwe - 2009-06-02

    Versuch mal folgende Funktion

    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, 4
    End Function
    Sub Example()
        Dim result As Single
        
        Rem convert 16#1234_3FC0 to Single 1.500556
        result = ConvertToSingle(&H12, &H34, &H3F, &HC0)
        
    End Sub
    

    Uwe

     

Log in to post a comment.