-> Hier kostenlos registrieren
Hallo,
programmiere eine Visulaisierung auf einem PDA mit VB .NET.
Benutze zur Kommunikation mit der SPS den IBHLINK samt IBHNET Type Library.
Nun brauche ich eine Umrechnung vom Double-Format von VB .NET ins IEEE-Realformat, was Siemens benutzt.
Von Siemens nach VB.NET habe ich schon:
Private Function ConvertS7(ByVal Daten As Long) As Double
Dim Exp, Mant, Count As Integer 'von S7 ausgelesene Daten -> 4Byte aufaddiert zu IntZahl
Dim MantReal, pruefen, Datenreal As Double 'Umgewandelte Daten
Count = 1
MantReal = 0
Exp = ((Daten << 1) >> 24) - 127
Mant = (Daten << 9) >> 9
Do While Count < 23
pruefen = Mant And (1 << (23 - Count))
If pruefen > 0 Then
MantReal = MantReal + 2 ^ (-Count)
End If
Count = Count + 1
Loop
If ((Exp = -127) And (Mant = 0)) Then
MantReal = 0
Else
MantReal = MantReal + 1
End If
Datenreal = MantReal * 2 ^ Exp
ConvertS7 = Datenreal
End Function
Wie kriege ich das andersrum hin? Habe ja zwei unbekannte, muss also eine vorgeben. Was ist da sinvoll?
Gruß maccap
programmiere eine Visulaisierung auf einem PDA mit VB .NET.
Benutze zur Kommunikation mit der SPS den IBHLINK samt IBHNET Type Library.
Nun brauche ich eine Umrechnung vom Double-Format von VB .NET ins IEEE-Realformat, was Siemens benutzt.
Von Siemens nach VB.NET habe ich schon:
Private Function ConvertS7(ByVal Daten As Long) As Double
Dim Exp, Mant, Count As Integer 'von S7 ausgelesene Daten -> 4Byte aufaddiert zu IntZahl
Dim MantReal, pruefen, Datenreal As Double 'Umgewandelte Daten
Count = 1
MantReal = 0
Exp = ((Daten << 1) >> 24) - 127
Mant = (Daten << 9) >> 9
Do While Count < 23
pruefen = Mant And (1 << (23 - Count))
If pruefen > 0 Then
MantReal = MantReal + 2 ^ (-Count)
End If
Count = Count + 1
Loop
If ((Exp = -127) And (Mant = 0)) Then
MantReal = 0
Else
MantReal = MantReal + 1
End If
Datenreal = MantReal * 2 ^ Exp
ConvertS7 = Datenreal
End Function
Wie kriege ich das andersrum hin? Habe ja zwei unbekannte, muss also eine vorgeben. Was ist da sinvoll?
Gruß maccap