REAL Werte mit Libnodave

Bytes

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hoffe ich bin hier im richtigen Forum denn ich bin mit meiner Weisheit langsam am Ende

Ich versuche via Libnodave mehrere Real Werte aus meiner CPU auf den Rechner zu bekommen.
Programmiert wird in VB.NET

Vorab hier schonmal mein Code:

Code:
Public Class Form1

    Dim localMPI As Integer = 0, plcMPI As Integer = 2
    Dim fds As libnodave.daveOSserialType
    Dim di As libnodave.daveInterface
    Dim dc As libnodave.daveConnection
    Dim res As Integer = 1
    Private Declare Function daveGetU8from Lib "libnodave.dll" (ByRef buf As Byte) As Byte
    Private Declare Function daveGetS8from Lib "libnodave.dll" (ByRef buf As Byte) As Short
    Private Declare Function daveGetS16from Lib "libnodave.dll" (ByRef buf As Byte) As Short
    Private Declare Function daveGetS32from Lib "libnodave.dll" (ByRef buf As Byte) As Integer
    Private Declare Function daveGetFloatfrom Lib "libnodave.dll" (ByRef buf As Byte) As Single
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Select Case fds.rfd  'Portstatus - lesen
            Case 0
                txtFDS.Text = "Verbindung: Nicht verbunden"
                txtFDS.BackColor = Color.Yellow
                Timer2.Enabled = False
            Case Is > 0
                txtFDS.Text = "Verbindung: OK"
                txtFDS.BackColor = Color.Green
                Timer2.Enabled = True
            Case Is < 0
                txtFDS.Text = "Verbindung: Fehler"
                Timer2.Enabled = False
                txtFDS.BackColor = Color.Red
        End Select
        Select Case res
            Case 0
                txtRES.Text = "SPS Antwort: OK"
                txtRES.BackColor = Color.Green
            Case Is < 0
                txtRES.Text = "SPS Antwort: Kann angegebene CPU nicht finden"
                txtRES.BackColor = Color.Red
            Case Is > 0
                txtRES.Text = "SPS Antwort: Keine Verbindung"
                txtRES.BackColor = Color.Yellow
        End Select
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim IP As String
        IP = "192.168.0.100"

        fds.rfd = libnodave.openSocket(102, IP) 'Portstatus - lesen
        fds.wfd = fds.rfd 'Portstatus schreiben = Portstatus - lesen
        di = New libnodave.daveInterface(fds, "Mein Interface", localMPI, _
        libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
        di.setTimeout(1000000)
        res = di.initAdapter
        If res = 0 Then       'initAdapter OK
            ' Rack und Slot spielen keine Rolle bei diesem Protokoll
            dc = New libnodave.daveConnection(di, plcMPI, 0, 2)
            res = dc.connectPLC()
        End If
    End Sub
    
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim buf(52) As Byte
        res = dc.readBytes(libnodave.daveFlags, 183, 18, 52, buf)
        ListBox2.Items.Clear()
        ListBox2.Items.Add(daveGetFloatfrom(buf(0)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(4)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(8)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(12)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(16)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(20)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(24)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(28)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(32)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(36)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(40)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(44)))
        ListBox2.Items.Add(daveGetFloatfrom(buf(48)))
    End Sub
End Class

Die benötigten werte stehen im DB183 von 18 - 70

Der Code liefert zwar keine Fehler aber dafür komplett falsche Werte

zb.:

Laut Simatic Manager sollte bei 18.0 2730,0 stehen
Mein Code Liefert 8,922067E-42
Bei 22.0 Sollte 0 stehen
Zurückgegeben wird -1,70172337E+38

Ich verstehe den Fehler einfach nicht bin mir aber das ich den richtigen DB aufrufe und an den richtigen Positionen lese.
Vielleicht findet ihr einen Fehler

danke schonmal
Bytes
 
Zurück
Oben