-> 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) 
	 
  
  
 
		 
 
		 
  
 
		