Sonstiges libnodave & Logo8 & VB.Net

kiter20

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
meine Problem ist, dass ich aus VB keine Verbindung zu meiner Logo8 bekomme.

Das Thema http://www.sps-forum.de/simatic/77110-libnodave-vb2010-logo-3.html
habe ich schon durchgearbeitet.

Die libnodave ist libnodave-0.8.5.1.

Den VB Code habe ich erst einmal aus dem Beitrag übernommen:
Code:
  Private Sub ConnectPLC()

        'fds.rfd = openSocket(102, IP)
        fds.rfd = libnodave.openSocket(102, IP)
        fds.wfd = fds.rfd

        If fds.rfd > 0 Then       ' if step 1 is ok
            di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP243, libnodave.daveSpeed187k)

            di.setTimeout(1000000)
            res = di.initAdapter
            If res = 0 Then       ' init Adapter is ok
                ' rack amd slot don't matter in case of MPI
                dc = New libnodave.daveConnection(di, 2, rack, slot)
                res = dc.connectPLC()
                If res = 0 Then
                    Connection = True
                    txtConnectionIP.Text = "Connected " + IP
                End If
            End If
        End If
    End Sub

Anpingen kann ich die Logo auch.

Die Testverbindung spuckt mir folgendes aus:

C:\win>testiso_tcp --slot=0 -2 -d 192.168.1.10
openSocketw.c: enter OpenSocket
openSocketw.c: 1
openSocketw.c: 2 6600
openSocketw.c: peer:192.168.1.10=167880896
openSocketw.c: 6
openSocketw.c: 7
openSocketw.c: socket is 116
openSocketw.c: setsockopt No error 0
openSocketw.c: 8
openSocketw.c: Connected to host: 192.168.1.10
send packet: :
0:0x03,0x00,0x00,0x16,0x11,0xE0,0x00,0x00,0x00,0x01,
0x00,0xC1,0x02,0x4D,0x57,0xC2,
10:0x02,0x4D,0x57,0xC0,0x01,0x09,
IF1 daveConnectPLC() step 1. got packet: :
IF1 error in daveConnectPLC() step 1. retrying...IF1 daveConnectPLC() step 1. go
t packet: :
IF1 error in daveConnectPLC() step 1. retrying...IF1 daveConnectPLC() step 1. go
t packet: :
IF1 error in daveConnectPLC() step 1. retrying...Couldn't connect to PLC.
Please make sure you use the -2 option with a CP243 but not with CPs 343 or 443
.


Programme können mit der Logo Software übertragen werden.


Habt ihr da ev. eine Idee??

Kiter20
 
Hier ein screenshot meiner Konfiguration:


Es ist jetzt Server TSAP 02.00 und Client 01.00
 

Anhänge

  • Logo.jpg
    Logo.jpg
    176,7 KB · Aufrufe: 33
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Habt ihr irgendwelche Ideen, was ich noch kontrollieren kann?

Könnte ev. einer einen Lauffähigen Code zur verfügung stellen, mit dem der Eingang I1 ausgelesen wird und mir bei Zustand "1" ein true rausgibt?

thx

kiter20
 
Ich habe von der Logo-Soft zwar keine Ahnung, aber du könntest mal probieren den TSAP auf 01.00 umzustellen. Das sollte der TSAP sein mit dem sich libnodave versucht zu verbinden.
 
Die Server TSAP ist auf 02.00 geht auch nur so (2 oder 20) und die dezentrale steht auf 01.00

Kann mir denn einer grundlegend sagen, ob die libnodave-0.8.5.1 mit der Logo8 funktioniert?
Man ließt ja viele Sachen, wenn man so auf Fehlersuche ist.
Da werden irgendwelche Werte in der dll angepasst, damit sie mit der PLC funktioniert.

Könnt mir ev. mal jemand eine dll zukommen lassen bzw. ein link zu einer dll, welche definitv mit der Logo8 funktioniert.

DAS KANN DOCH NICHT SEIN, DASS DAS NICHT GEHT!
HILFEEEE
 
Hallo
Hab gerade vor 2 Wochen etwas ähnliches gemacht. Nur auf Analog Netzwerkeingänge geschrieben.
mit den Einstellungen von http://www.sps-forum.de/hochsprachen-opc/56582-libnodave-kompilieren-auf-raspberry-pi-6.html
hat es bei mir funktioniert. Hab den Fehler aber auch nicht genauer untersucht.
Code:
 dc =daveNewConnection(di,2,0,useSlot);  // insert your rack and slot here
    dc->communicationType = 2; // OP
    dc->maxPDUlength = 240; // hack for LOGO
hoffe das hilft dir
 
Der linke Teil vom TSAP ist der "Kommunikationstyp". Imho seit der 0.8.5.1 wird defaultmäßig PG (d.h. 01) verwendet. Wenn sich das in der Logo-Software nicht einstellen lässt, musst du libnodave mitteilen, dass er einen anderen TSAP verwenden soll.
In der nativen dll ist eine Funktion vorhanden um diesen anzupassen (daveSetCommunicationType()), ist aber nur nicht über die .net Schnittstelle exportiert. Müsste man dann eben ergänzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe gerade die libnodave-0.8.4.4 eingebunden.

Hier das neue Ergebnis:

C:\win>testiso_tcp 192.168.1.10
openSocketw.c: bind Socket error: No error
openSocketw.c: Connected to host: 192.168.1.10
Connected.
Trying to read 64 bytes (16 dwords) from data block 1.
Press return to continue.
DB1: W0: 0
DB1: W1: 0
...
DB1: W32: 0
Trying to read 16 bytes from FW0.
Press return to continue.
FD0: 0
FD4: 0
FD8: 0
FD12: 0.000000
Finished.


:p Sieht besser aus (Glaub ich zumindest)
 
Erst einmal danke für Eure Ideen.

Das ich jetzt die ältere DLL genommen habe war meine letzte Hoffnung und siehe da...

Danke
kiter20
 
Hallo zusammen,

bin neu hier, aber offenbar gibt es hier dieselben "Leidensgenossen" :)

Ich habe ebenso die ältere DLL genommen, bekomme mit testiso_tcp ebenso mehr oder weniger sinnvolle Werte, keine Fehler.

Ich möchte zuerst via Excel die Daten auslesen, wenn da dann alles klappt (Werte loggen, Graphiken machen u.s.w.) dann via .net. Das Beispielmodul für Excel habe ich drin, aber dort scheitere ich immer am selben Punkt:

Code:
res = daveConnectPLC(dc)

Da bekomme ich immer ein -1.

Bin für jeden Tipp dankbar.

Grüsse Markus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin für jeden Tipp dankbar.

Mit der Excel Sache kann ich dir nicht direkt weiterhelfen.
Ich habe mal einen Screenshot von der jetzigen Serverkonfiguration meiner Logo8 gemacht.
Konfiguration.jpg
Der VB Code dazu:
Code:
  Private Sub ConnectPLC()

        fds.rfd = openSocket(102, IP)
        fds.rfd = libnodave.openSocket(102, IP)
        fds.wfd = fds.rfd

        If fds.rfd > 0 Then       ' if step 1 is ok
            di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)

            di.setTimeout(1000000)
            res = di.initAdapter
            If res = 0 Then       ' init Adapter is ok
                ' rack amd slot don't matter in case of MPI
                dc = New libnodave.daveConnection(di, 0, 0, 2)
                res = dc.connectPLC()
                If res = 0 Then
                    Connection = True
                    txtConnectionIP.Text = "Connected " + IP
                End If
            End If
        End If
    End Sub
 
Hallo,

Mein Konfig-Fenster sieht etwas anders aus, habe Logosoft COmfort V.8.0.0:
SPS-1.png

Hier mein kompletter Init-Code, sieht ja ziemlich identisch aus wie deiner:

Code:
ph = openSocket(102, peer$)     ' for ISO over TCP

Cells(2, 1) = "port handle:"
Cells(2, 2) = ph
If (ph > 0) Then
    di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
    res = daveInitAdapter(di)
    Cells(3, 1) = "result from initAdapter:"
    Cells(3, 2) = res
    If res = 0 Then

        MpiPpi = 0
        Rack = 0
        Slot = 2
        dc = daveNewConnection(di, MpiPpi, Rack, Slot)
        res = daveConnectPLC(dc)
        Cells(4, 1) = "result from connectPLC:"
        Cells(4, 2) = res
        If res = 0 Then
            initialize = 0
        End If
    End If
End If

Bis zu DaveConnectPLC klappt alles, di und dc hat er bekommen, nur res ist immer -1 .

Testiso_tcp bringt das:
Code:
C:\Develop\LibNoDave\libnodave-0.8.4.6\win>testiso_tcp  192.168.0.220
openSocketw.c: Connected to host: 192.168.0.220
Connected.
Trying to read 64 bytes (16 dwords) from data block 1.
DB1:DW0: 0
DB1:DW1: 0
...
DB1:DW32: 0
Trying to read 16 bytes from FW0.
FD0: 16777216
FD4: 0
FD8: 0
FD12: 0.000000
Finished.

Ich denke ich schmeiss' den Excel-Code mal weg und probiere es auch gleich mit .net.

Gruss & Dank, Markus
 
Mein Konfig-Fenster sieht etwas anders aus, habe Logosoft COmfort V.8.0.0
Ich verwende auch LogoSoft Comfort 8.

So wie es aussieht hast du das ganze als Netzwerkprojekt gemacht.
Bei mir ist das alles im Diagramm Modus.

Netzwerk.jpg

Dort habe ich unter Ethernet-Verbindungen einen Server hinzugefügt.
Dort siet dann die Konfiguration auch wie auf meinem vorherigen screenshot aus.

So funktioniert es zumindest bei mir.
Aber jetzt wo ich das so sehe muss ich das ja auch noch irgendwann als Netzwerkprojekt machen.:shock:

Keine Ahnung ob das einen unterschied macht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Markus
Code:
 di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
Der Aufruf ist falsch.
Richtig währe:
Code:
di =daveNewInterface(fds, "IF1", localMPI, daveProtoXXX, daveSpeedYYY)
wobei fds ein Struct von folgendem Typ ist.
Code:
typedef struct {
    HANDLE rfd;
    HANDLE wfd;
} _daveOSserialType;

Holger
 
Hallo Holger,

ich denke der Aufruf ist schon korrekt so, er ist aus dem Excel-Beispiel von libNoDave (original), die Deklaration ist auch so:

Code:
' Setup a new interface structure using a handle to an open port or socket:
'
Private Declare Function daveNewInterface Lib "libnodave.dll" (ByVal fd1 As Long, ByVal fd2 As Long, ByVal name As String, ByVal localMPI As Long, ByVal protocol As Long, ByVal speed As Long) As Long

Ev. kennt Excel-VBA gar keine UDT's, weiss ich aber nicht.

Grüsse Markus
 
Du hast aber gelesen, das das Beispiel mit Excel 97 erstellt und getestet wurde.;)
Damals war ein Long noch 32bit lang. Eventuell musst du ja alle Definitionen anpassen:confused:
-1 ist jedenfalls eine Fehlermeldung aus der DLL und nicht von der PLC.
Holger
 
Zurück
Oben