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

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.