# libnodave TCP/IP auf S7



## Franz (20 November 2009)

Hallo,

ich versuche mit hilfe libnodave-0.8.4.5 und Microsoft Visual Basic 2008 Express Edition auf eine S7 400 über eine TCP/IP Verbindung Daten zu lesen.

Gibt es ein Beispiel in VB?


----------



## tobl2002 (20 November 2009)

in dem Archiv von Libnodave ist doch ein beispiel dabei. Guck mal in dem Ordner libnodave-0.8.4.5\Excel And VB
Wobei das eher für excel gedacht ist. vielleicht einfach erst mal da testen und dann unter VB weitermachen.


Gruß
Tobl


----------



## MW (20 November 2009)

ich hatte mal ein kleines Beispiel für ein anderes Forenmitglied gemacht, dass war allerdings für MPI, ich hab das hier 
mal schnell auf TCP/IP umgeschreiben, kann also noch nen Fehler enthalten, sollte dir aber erstmal weiterhelfen.
Im Archiv von Libnodave findest du auch ein Beispiel in C#(im Dot.Net/CS Verzeichnis), dass sich leicht umschreiben lässt. ;-)



```
Public Class Form1
    Dim fds As libnodave.daveOSserialType
    Dim di As New libnodave.daveInterface(fds, "IF 1", Localmpi, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
    Dim dc As New libnodave.daveConnection(di, plcmpi, 0, 2)
    Dim Localmpi As Integer = 0
    Dim plcmpi As Integer = 2
    Dim buf(1000) As Byte
    Dim res As Integer = 0

    Private Sub Button_Connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Connect.Click
        fds.rfd = libnodave.openSocket(102, "127.0.0.1")
        fds.wfd = fds.rfd
        If fds.rfd > 0 Then       
            di = New libnodave.daveInterface(fds, "IF 1", Localmpi, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
            di.setTimeout(1000000)  
            res = di.initAdapter
            If res = 0 Then      
                dc = New libnodave.daveConnection(di, plcmpi, 0, 2)  
                res = dc.connectPLC()
                If res = 0 Then
                    Label_verbindung.Text = "Verbindung aufgebaut"
                    Label_verbindung.BackColor = Color.Lime
                    Button_Connect.Enabled = False
                    Button_Disconnect.Enabled = True
                    Timer_refresh.Enabled = True
                    Timer_refresh.Start()
                Else
                    TextBox_status.Text = "Fehler bei connect PLC " & res
                    di.disconnectAdapter()
                    libnodave.closesocket(fds.rfd)
                End If
            Else
                TextBox_status.Text = "Fehler bei init Adapter " & res
                libnodave.closesocket(fds.rfd)   
            End If
        Else
            TextBox_status.Text = "Fehler beim öffnen des Serielen Ports"
        End If
    End Sub

    Private Sub Button_Disconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Disconnect.Click
        
        dc.disconnectPLC()
        di.disconnectAdapter()  
        libnodave.closesocket(fds.rfd)

        Label_verbindung.Text = "Verbindung abgebaut"
        Label_verbindung.BackColor = Color.Transparent
        Button_Connect.Enabled = True
        Button_Disconnect.Enabled = False
        Timer_refresh.Stop()
        Timer_refresh.Enabled = False
    End Sub

    Private Sub Timer_refresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_refresh.Tick
         res = dc.readBytes(libnodave.daveFlags, 0, 0, 16, buf)
        If res = 0 Then
            TextBox1.Text = CInt(buf(0))
            TextBox2.Text = CInt(libnodave.getS16from(buf, 0))
        Else
            TextBox_status.Text = "Fehler beim Lesen " & res
        End If
    End Sub
End Class
```


----------



## Franz (21 November 2009)

Danke !

ich möchte in einen DB einen Wert schreiben habe mir folgende Funktion erstellt.

 dc.writeBytes(libnodave.daveDB, 4, 4, 4, buf)

aber wie schreibe ich der Wert in die Funktion.

dc.writeBytes(libnodave.daveDB, 4, 4, 4, buf) = wert ????

Ich arbeite mit VB. Das ist aber schon etwas länger her.


----------



## MW (22 November 2009)

Franz schrieb:


> ich möchte in einen DB einen Wert schreiben habe mir folgende Funktion erstellt.
> 
> dc.writeBytes(libnodave.daveDB, 4, 4, 4, buf)
> 
> ...



Deinen zuschreibenden Wert musst du bei "buf" reinschreiben bzw. "buf" vorher mit dem Wert füllen(Achtung: Byte Array !!!), dass könnte dann für einen Real Wert zb. so aussehen:


```
dc.writeBytes(libnodave.daveDB, 4, 4, 4, BitConverter.GetBytes(libnodave.daveToPLCfloat(CSng(neuer_Wert))))
```


----------

