-> Hier kostenlos registrieren
Guten Tag allerseits
Seit kurzem befasse ich mich mit der Libnodave Bibliothek. Und möchte gleich mal ein grosses lob aussprechen.
Nun habe ich einige Tests mit der Kommunikation erstellt. Über TCP funktioniert auch alles einwandfrei.
Jedoch ist mir ein seltsames Symphtom aufgeallen, sobald die Verbindung über S7Online hergestellt wird.
Wen ich nur meine Applikation offen habe, funktioniert eine Verbindung einwandfrei. Öffnen und schliessen läst sich sich auch.
Öffne ich aber eine Verbindung mit Libnodave, und starte anschliessend, Step7 Variablentable und gehe online (über S7Online), Läst sich die verbindugn in Libnodave zwar schliessen, und öffnen, jedoch beim auslesen der Werte erhalte ich den Fehler "Unexpected function code in answer" war glaub ich ErrNr -128
Schliesse ich die Applikation und die Variablentabelle, funktioniert alles wieder einwandfrei.
Weis jemand an was dies liegenkönnte? Oder hatte schon wer dieses Problem?
PS: Noch mein Test Code
Seit kurzem befasse ich mich mit der Libnodave Bibliothek. Und möchte gleich mal ein grosses lob aussprechen.
Nun habe ich einige Tests mit der Kommunikation erstellt. Über TCP funktioniert auch alles einwandfrei.
Jedoch ist mir ein seltsames Symphtom aufgeallen, sobald die Verbindung über S7Online hergestellt wird.
Wen ich nur meine Applikation offen habe, funktioniert eine Verbindung einwandfrei. Öffnen und schliessen läst sich sich auch.
Öffne ich aber eine Verbindung mit Libnodave, und starte anschliessend, Step7 Variablentable und gehe online (über S7Online), Läst sich die verbindugn in Libnodave zwar schliessen, und öffnen, jedoch beim auslesen der Werte erhalte ich den Fehler "Unexpected function code in answer" war glaub ich ErrNr -128
Schliesse ich die Applikation und die Variablentabelle, funktioniert alles wieder einwandfrei.
Weis jemand an was dies liegenkönnte? Oder hatte schon wer dieses Problem?
PS: Noch mein Test Code
Code:
Class test
Public fds As libnodave.daveOSserialType
Public di As libnodave.daveInterface
Public dc As libnodave.daveConnection
Public Function LibnodaveOpenS7Online() As Boolean
Try
Dim localMPI As Integer = 0
Dim plcMPI As Integer = 2
Dim res As Integer
Dim str As String = "S7Online"
Dim intPartner As Integer
Dim buf1(libnodave.davePartnerListSize) As Byte
fds.rfd = libnodave.openS7online(str, Form1.Handle) 'S7Online)
fds.wfd = fds.rfd
If fds.rfd >= 0 Then ' if step 1 is ok
di = New libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoS7online, libnodave.daveSpeed187k)
di.setTimeout(5000000) ' Make this longer if you have a very long response time
If di.initAdapter = 0 Then
res = 0
intPartner = di.listReachablePartners(buf1)
Debug.Print("Anzahl Partner: " & intPartner)
If (intPartner > 0) Then
For j As Integer = 0 To intPartner - 1
If buf1(j) = libnodave.daveMPIReachable Then
Debug.Print("Device at Address: " & j)
End If
Next
End If
End If
'
If res = 0 Then ' init Adapter is ok
dc = New libnodave.daveConnection(di, plcMPI, 0, 0) ' rack amd slot don't matter in case of MPI
res = dc.connectPLC
If res = 0 Then
Return True
Else
Debug.Print("Error {0:d}={1:s} in connectPLC.", res, libnodave.daveStrerror(res))
End If
Else
Debug.Print(libnodave.daveStrerror(res))
End If
Else
MessageBox.Show("Couldn't open S7Online Connection", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If 'fds.rfd >0
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Function
Public Function LibnodaveCloseS7Online() As Boolean
Try
Dim res As Integer = 0
res = di.disconnectAdapter() ' End connection to adapter
res = libnodave.closeS7online(fds.rfd)
res = dc.disconnectPLC()
res = libnodave.closePort(fds.rfd) ' Clean up
If res = 0 Then
Return True
Else
Return False
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Function
'.......
'Lesen
res = dc.readBytes(libnodave.daveDB, 1, 0, 100, buf)
'Fehler meldung!
If res = 0 Then
a = dc.getU8At(0)