-> Hier kostenlos registrieren
Hallo, ich schaffe es nicht in VB mit libdonave eine Verbidung zu meiner S7 CPU 224 (PPI Verbindung) zu öffnen. Als Basis habe ich das Progr. SimpleMPI aus dem Ordner dot.net / VB in Libnodave verwendet. Das geänderte Programm sieht wie folgt aus:
... wobei für mich momentan lediglich die Zeilen
Public Shared Function Main(ByVal args() As String) As Integer
.... und ....
fds.rfd = libnodave.setPort(args(0), "9600", AscW("0"))
von Bedeutung sind. So stellt sich beispielsweise die Frage wie rufe ich die Public Shared Function über einen Button (Start) richtig auf?
Mit ...
Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
Dim a As Integer
Dim b(1) As String
a = test.Main(b)
End Sub
...lässt sich die Funktion zwar aufrufen, liefert aber nicht das gewünschte Ergebniss, sprich eine Verbindung und das wahrscheinlich zu Recht. Welche Werte muss ich der Funktion beim Aufruf mit auf den Weg geben ?
Vielen Dank im Voraus,
Lan
Code:
Class test
Public Shared Function Main(ByVal args() As String) As Integer
Dim localPPI As Integer = 0, plcPPI As Integer = 2
Dim fds As libnodave.daveOSserialType
Dim di As libnodave.daveInterface
Dim dc As libnodave.daveConnection
Dim res As Integer
Dim a, b, c As Integer, d As Single
Dim buf(1000) As Byte
Dim s As String
MsgBox("Hello World!")
fds.rfd = libnodave.setPort(args(0), "9600", AscW("0")) ' step 1, open a connection
fds.wfd = fds.rfd
If fds.rfd > 0 Then ' if step 1 is ok
di = New libnodave.daveInterface(fds, "My Interface 1", localPPI, libnodave.daveProtoPPI, libnodave.daveSpeed187k)
di.setTimeout(1000000) ' Make this longer if you have a very long response time
res = di.initAdapter
'
If res = 0 Then ' init Adapter is ok
dc = New libnodave.daveConnection(di, plcPPI, 0, 0) ' rack amd slot don't matter in case of MPI
res = dc.connectPLC()
If res = 0 Then
res = dc.readBytes(libnodave.daveFlags, 0, 0, 16, buf)
If res = 0 Then
a = dc.getS32
b = dc.getS32
c = dc.getS32
d = dc.getFloat
MsgBox("FD0: {0:d}", a)
MsgBox("FD4: {0:d}", b)
MsgBox("FD8: {0:d}", c)
MsgBox("FD12: {0:f}", d)
Else
MsgBox("Error {0:d}={1:s} in readBytes.", res, libnodave.daveStrerror(res))
End If
dc.disconnectPLC()
Else
MsgBox("Error {0:d}={1:s} in connectPLC.", res, libnodave.daveStrerror(res))
End If
di.disconnectAdapter() ' End connection to adapter
Else
MsgBox("Error {0:d}={1:s} in initAdapter.", res, libnodave.daveStrerror(res))
End If
libnodave.closePort(fds.rfd) ' Clean up
Else
MsgBox("Couldn't open serial port {0:s}", args(0))
Return -1
End If 'fds.rfd >0
End Function 'Main
End Class
Public Shared Function Main(ByVal args() As String) As Integer
.... und ....
fds.rfd = libnodave.setPort(args(0), "9600", AscW("0"))
von Bedeutung sind. So stellt sich beispielsweise die Frage wie rufe ich die Public Shared Function über einen Button (Start) richtig auf?
Mit ...
Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
Dim a As Integer
Dim b(1) As String
a = test.Main(b)
End Sub
...lässt sich die Funktion zwar aufrufen, liefert aber nicht das gewünschte Ergebniss, sprich eine Verbindung und das wahrscheinlich zu Recht. Welche Werte muss ich der Funktion beim Aufruf mit auf den Weg geben ?
Vielen Dank im Voraus,
Lan