# IBH-Netlink und libnodave



## Sir_Mortimer (6 März 2011)

Hallo Leute,

ich habe ein Problem mit der Verbindung zu einer Simatic C7-623 über IBH-Netlink. Firma IBHsoft, Bezeichnung IBH LINK, ETHERNET MPI-PPI PROFIBUS.


So wie ich es verstanden habe, habe ich alle Parameter richtig eingetragen, aber ich bekomme keine verbindung mir der C7.

Der Code zum Verbinden ist:

ph = 0
di = 0
dc = 0

Rem uncomment the daveSetDebug... line, save your sheet
Rem run excel from dos box with: excel yoursheet >debugout.txt
Rem send me the file debugout.txt if you have trouble.
Rem call daveSetDebug(daveDebugAll)
TCP_Init = -1
ph = openSocket(1099, peer$) ' for IBH NetLink

If (ph > 0) Then
di = daveNewInterface(ph, ph, "IF1", 2, daveProtoMPI_IBH, daveSpeed187k)

'
'You can set longer timeout here, if you have  a slow connection
'    Call daveSetTimeout(di, 500000)
    res = daveInitAdapter(di)
    If res = 0 Then
'
' with ISO over TCP, set correct values for rack and slot of the CPU
'
        dc = daveNewConnection(di, 2, 0, 2)

        res = daveConnectPLC(dc)
e$ = daveStrError(res)
        If res = 0 Then
            TCP_Init = 0
        End If
    End If
End If


Die Funktion läuft auch gut bis zur Funktion "res = daveConnectPLC(dc)". An der Stelle bekomme ich den Fehlercode -5 "no messages defined!"

Ich konnte bisher keinen eintrag finden, der mir einen Hinweis auf die Ursache brachte.

Mit der IBH-Software bekomme ich eine Verbindung zur C7, mit den Testprogrammen aus der libnodave-Bibliothek bekomme ich nur die Fehlermeldung, daß keine Verbuindung zum PLC erstellt werden konnte.

Da ich schon mehrmals gelesen habe, daß die Verbindung funktioniert und geprüft ist, liegt der Fehler wohl bei mir - ich find ihn nur nicht!!

Vielen Dank für Eure Mühen, Holger


----------



## Zottel (6 März 2011)

Wenn testIBH.exe nicht funktioniert, brauchst du es aus EXCEL heraus nicht zu probieren.

Gewöhnlich funktioniert testIBH aber! Auf der Kommandozeile eingeben:
testIBH <IP-Adresse>
Falls deine CPU eine andere MPI(Profibus)-Adresse als 2 hat, die Adresse angeben:
testIBH --mpi=<MPI-Adresse> <IP-Adresse>

Falls testIBH nicht funktioniert, den Debug-Modus einschalten: 
testIBH -d --mpi=<MPI-Adresse> <IP-Adresse>

Das Ergebnis dann hier nochmal veröffentlichen.


----------



## Jochen Kühner (6 März 2011)

Was für ein Netlink ist es denn? Lite oder Pro?


----------



## Rainer Hönle (7 März 2011)

Ist der IBH-Link richtig parametriert? 
Ist er mit ping an der eingestellten Adresse erreichbar? 
Liefert die C7 die Versorgungsspannung am MPI?

@Jochen:
Der IBH-Link entspricht dem Lite


----------



## Jochen Kühner (7 März 2011)

Rainer Hönle schrieb:


> @Jochen:
> Der IBH-Link entspricht dem Lite



Es gibt ja aber auch den Ibh-Link S7++, ist dieser dann nicht baugleich mit dem Pro?


----------



## Rainer Hönle (7 März 2011)

Jochen Kühner schrieb:


> Es gibt ja aber auch den Ibh-Link S7++, ist dieser dann nicht baugleich mit dem Pro?



Nein, ist er nicht, der ++ kommt wie der normale IBH-Link auch von Hilscher. 
Aber es steht janur IBH-Link drauf (wenn das ++ nicht verschluckt wurde)


----------



## Jochen Kühner (7 März 2011)

Ah, alles klar! Dachte es nur, da die Bauform dem neuen Pro ja sehr ähnlich ist! D.h. dieser läuft unter libnodave immer noch mit dem Lite Protokoll?


----------



## Rainer Hönle (7 März 2011)

Jochen Kühner schrieb:


> Ah, alles klar! Dachte es nur, da die Bauform dem neuen Pro ja sehr ähnlich ist! D.h. dieser läuft unter libnodave immer noch mit dem Lite Protokoll?



Der ++ oder NetLink 50 wie er bei Hilscher heißt hat schon ein paar Erweiterungen. Ich glaube, wenn diese nicht verwendet werden, dann läuft er auch mit dem alten Protokoll.


----------



## Sir_Mortimer (7 März 2011)

HAllo Zottel, Jochen und Rainer,

vielen Dank für Eure schnelle Antwort!

Was für ein NetLink es genau ist sehen ich nicht, es steht weder Lite noch Pro drauf

Der Netlink ist richtig parametriert, da ich ja mit der mitgelieferten SW von IBH auf die Steuerung zugreifen kann, und zwar als Beispielprg Basic sowohl in der kompilierten Form als auch im Rumtime Modus.

Wenn ich testibh -d --mpi=2 192.168.1.135 eingebe bekomme ich folgende Antwort:

setting MPI address of PLC to:2
openSocketw.c: enter OpenSocket
openSocketw.c: 1
openSocketw.c: 2 4B04
openSocketw.c: peer:192.168.1.135=-2029934400
openSocketw.c: 6
openSocketw.c: 7
openSocketw.c: socket is 1952
openSocketw.c: setsockopt No error 0
openSocketw.c: 8
openSocketw.c: bind Socket error: No error 
openSocketw.c: Connected to host: 192.168.1.135 
ConnectPLC
trying next ID:
_daveInitStepIBH before write.
writeIBH: : 
0:0x07,0xFF,0x06,0x01,0x00,0x00,0x97,0x00,0x14,0xFF,0xF0,0xF0,0xF0,0xF0,
_daveInitStepIBH write returned 14.
readIBHpacket: 10 bytes read, 10 needed
readIBHpacket: packet: 
0:0xFF,0x07,0x02,0x01,0x97,0x00,0x00,0x00,0x14,0x00,
*** Got response 10 20
_daveInitStepIBH 4:0
_daveInitStepIBH before write.
writeIBH: : 
0:0x07,0xFF,0x11,0x02,0x00,0x00,0x82,0x00,0x14,0x00,0x02,0x01,0x0C,0xE0,0x04,0x00,
10:0x80,0x00,0x02,0x00,0x02,0x01,0x00,0x01,0x00,
_daveInitStepIBH write returned 25.
readIBHpacket: 13 bytes read, 13 needed
readIBHpacket: packet: 
0:0xFF,0x07,0x05,0x02,0x82,0x00,0x00,0x00,0x14,0x00,0x02,0x01,0x09,
wrong! 3
readIBHpacket: 16 bytes read, 16 needed
readIBHpacket: packet: 
0:0xFF,0x07,0x08,0x00,0x00,0x00,0xC2,0x02,0x14,0x00,0x02,0x0A,0x00,0x22,0x01,0x80,
wrong! 3
timeout in ReadIBHPacket.
timeout in ReadIBHPacket.
timeout in ReadIBHPacket.
_daveInitStepIBH 5:5 connID: 0
Couldn't connect to PLC.


Ich kann leider nicht mit allem etwas anfangen.

Vielen Dank fürs angucken


----------



## Rainer Hönle (7 März 2011)

Ich vermute, dass die Rack/Slot-Angabe mit 0/0 nicht korrekt ist. Am besten ein wireshark-Log von der ibh-Software und libnodave machen und hier einstellen. Dann kann ich mehr dazu sagen.


----------



## Jochen Kühner (7 März 2011)

Rack/Slot ist doch nur bei TCP/IP Zugriff interessant, oder?


----------



## Rainer Hönle (8 März 2011)

Jochen Kühner schrieb:


> Rack/Slot ist doch nur bei TCP/IP Zugriff interessant, oder?



Natürlich nicht. Rack und Slot ist immer dann notwendig, wenn der Adapter nicht direkt mit der Baugruppe reden möchte, auf der er steckt. Dabei spielt es keine Rolle, ob es sich um eine Ethernet- oder Profibus-CP handelt. Im Gegenzug dazu kann Rack/Slot bei PN-CPUs auf 0 gesetzt werden.


----------



## Jochen Kühner (8 März 2011)

Rainer Hönle schrieb:


> Natürlich nicht. Rack und Slot ist immer dann notwendig, wenn der Adapter nicht direkt mit der Baugruppe reden möchte, auf der er steckt. Dabei spielt es keine Rolle, ob es sich um eine Ethernet- oder Profibus-CP handelt. Im Gegenzug dazu kann Rack/Slot bei PN-CPUs auf 0 gesetzt werden.



Ja, das es bei Routing noch gebraucht wird ist mir auch klar. Aber doch nicht bei einer normalen MPI Verbindung, oder? Zumindest gibt es in AGLink Rack/Slot auch nur bei TCP/IP Verbindungen und bei Routing zum einstellen!


----------



## Rainer Hönle (8 März 2011)

Es geht hier nicht um Routing, da es hier keinen Busübergang gibt. 
Versuche doch einfach mal Folgendes: stecke den NetLink auf eine 342-5 und lese dann Daten von der SPS ohne dass beim CR Rack/Slot angegeben wurde.
Was meinst Du was passiert?

Und beim AGLink kann man Rack/Slot direkt beim CR angeben (in der AGL_PLCConnectEx-Funktion).


----------



## Jochen Kühner (8 März 2011)

Ok das hab Ich mir schon gedacht das du das so meinst, aber wie kann Ich den dies in AGLink lösen? Da kann man Rack/Slot bei Nutzung von Netlink ja auch nicht angeben! (Zumindest nicht im Config Tool)


----------



## Rainer Hönle (8 März 2011)

Jochen Kühner schrieb:


> Ok das hab Ich mir schon gedacht das du das so meinst, aber wie kann Ich den dies in AGLink lösen? Da kann man Rack/Slot bei Nutzung von Netlink ja auch nicht angeben! (Zumindest nicht im Config Tool)



Und beim AGLink kann man Rack/Slot direkt beim CR angeben (in der AGL_PLCConnectEx-Funktion).


----------



## Jochen Kühner (8 März 2011)

Hab libnoidave mal so geändrt das es Rack/Slot bei IBH Link und Netlink mitschickt (hoffe das die Rack/Slot Infos an der gleichen Stelle stehen wie bei TCP/IP, d.h. nach dem Verbindungstyp). Kann das leider erst testen wenn Ich wieder in der Firma bin. Aber vieleicht kannst du "Sir_Mortimer" das ja mal hiermit probieren, ob deine Verbindung dann klappt, wenn du Rack und Slot angibst! Testprogramm ist enthalten! Sobald Ich wieder in der Firma bin werde Ich schaun ob Ich die Rack/Slot Infos an die richtige Stelle gepackt habe!


----------



## Sir_Mortimer (8 März 2011)

Hallo Rainer, Hallo Jochen,

vielen Dank für Eure Beiträge, das waren neue Erkenntnisse für mich.

Vielen Dank Jochen für Dein Testprg.

Ich bin erst jetzt dazu gekommen es auszuprobieren. Mußt vorher noch .NET-Frame installieren.

Also, nach anfänglichem mucken läuft Dein Programm mit der Einstellung 

Net-Link lite
MPI 2
Rack 0
CPU-Slot 2
Local MPI 0
IP 192.168.1.135
Port 1099

Ich kann mich mit der SPS verbinden und Daten abfragen. Die sind zwar nicht das, was ich erwartet habe, sprich, das was drinstehen sollte, aber immerhin, ich kann was auslesen.

Nachtrag: Ich habe mit dem Testprg von IBH eien wert in das MB8 geschrieben, und konnte ihn mit Deinem testprg einwandfrei lesen!! Das ist schonmal Erfolgversprechend, finde ich.

Was ich nicht verstehe ist, daß es in meinem VB6 Programm nicht geht, obwohl ich da auch Rack und CPU-Slot eintrage (siehe ganz oben).

By the Way, welches ist die aktuelle Veresion von Libnodave? Ich habe 0.8.4.5

Was also mache ich anders als Du, wäre auch schön, wenns unter VB6 laufen würde.

Vielen Dank,   bis bald, Holger


----------



## Jochen Kühner (8 März 2011)

Sir_Mortimer schrieb:


> Hallo Rainer, Hallo Jochen,
> 
> vielen Dank für Eure Beiträge, das waren neue Erkenntnisse für mich.
> 
> ...



Bei einer MPI/DP Verbindung werden bei der orginalen libnodave Rack&Slot nicht benutzt (das ist ja das was ich mit Rainer diskutiert habe!). Probier dein VB6 Programm einfach mal mit meiner libnodave.dll!


----------



## Sir_Mortimer (8 März 2011)

Hallo Jochen,

Deine DLL ist genial: Ich habe sofort verbindung bekommen!!!

Ich habe zwar immer noch Datensalat, aber das werde ich schon hinbekommen.

Andererseitz wundert mich das, denn das selbe prg funktioniert (das Auslesen aus dem DB und "Aussortieren" in Variablen) mit einer Vipa Speed 7 und Ethernet-Anschluß ohzne Probleme. Muß ich auf was bestimmtes achten, wenn ich die Get-Funktionen benutze? oder kann ich sie so 1:1 übernehmen?

Wenn ich den Code posten soll sags mir.


Wie ist eigentlich das Copyright geregelt? Kann ich Deine DLL kommerziell nutzen?

Danke schonmal, Holger


----------



## Jochen Kühner (8 März 2011)

Ich hab nur ein paar Änderungen an der libnodave von Zottel vorgenommen! Die Lizenz ist immer noch die gleiche. Die vom mir gemachten Änderungen gibts auf meiner Codeplex Page (http://siemensplctoolboxlib.codeplex.com/). Bei Ethernet werden Rack und Slot auch schon mit der orginalen Dll verwendet! Und normalerweise gehts bei Mpi wohl meist mit Rack und Slot gleich 0!

Normalerweise solltest du nichts anpassen müssen!


----------



## Jochen Kühner (8 März 2011)

Achso, die heutigen Änderungen an libnodave hab Ich noch nicht Online, werd Ich aber spätestens am Donnerstag hochladen!


----------



## Sir_Mortimer (9 März 2011)

Hallo Jochen,

vielen Dank, ich werde dann mal Donnerstag "vorbeischauen". Aber mit Deiner DLL gehts ja auch.

Vielen Dank übrigens für Zurverfügungstellen!!!

Ich habe mir mal die Daten im Rohformat angeschaut, also es ist alles da, ich muß es mir nur nochmal sortieren, insbesondere die Strings werden wohl anders als bei der Vipa bzw. bei den 100.ter SPS abgespeichert.

Also nochmal vielen Dank an alle, Ihr habt mir sehr und vorallen schnell geholfen!!

Gruß Holger


----------



## Jochen Kühner (9 März 2011)

Also alles was Ich an LibNoDave geändert habe findest du unter Codeplex (http://siemensplctoolboxlib.codeplex.com/). Im Sourcecode unter "externalDlls\libnodave_patches". Aber meine libnodave enthält schon ein paar größere Änderungen als Zottels, da Ich Routing bei den Netlinks, S7Online und TCP eingebaut habe, von daher wirds komplizierter wenn du dir nur eine Dll bauen willst, in der nur der Rack/Slot patch enthalten ist


----------



## Sir_Mortimer (10 März 2011)

Hallo Jochen,

Vielen Dank für den Link. Ist das Projekt in .NET? Die Datei-Endungen sehen so aus. Da müste ich mir erst noch einen Compiler besorgen. Oder kann ich die DLL benutzen, die Du mir geschickt hast?

Das programm funktionier soweit jetzt ganz tadellos. Mir ist nur fogendes Anfgefallen:
Die Funktion "res = daveConnectPLC(dc)" braucht eine ganze Weile, ca. 1.5 - 2 sek.

Ist eigentlich nicht viel, aber für eine Aktualisierung alle 2 Sek wird es schon kritisch.

Spricht etwas dagegen, daß man die Verbindung am Anfang des Programms öffnet, dann soviele Zugriffe Lesen wie Schreiben macht wie nötig und am ende des Programms die Verbindung wieder schließt, wobei die Benutzung schon ein paar Stunden dauern kann.

Eigentlich habe ich ein ungutes Gefühl, eine Verbindung so lange offen zulassen. Anddrerseits geht mit dem Verbindungsaufbau auch eine Menge Zeit verloren.

Was meint ihr?

Danke für Eure Meinung, Holger


----------



## Jochen Kühner (10 März 2011)

Ja die DLL kannst du verwenden, wollte dir nur auch noch den geänderten Source zur Verfügung stellen. Und für libnodave brauchst du kein C#, aber in meinem Source ist ja nicht nur libnodave enthalten!

Also bei mir dauert die TCp Verbindung eigendlich nie so Lange, aber Ich würde Sie offen lassen. Ein Visu System ala WinCC Flexible oder auch die Siemens Software lässt ja die Verbindung offen, und schließt erst wieder beim beenden! Und so ein Visu System läuft ja auch mehre Stunden, wenn nicht Tage! Du musst halt abfangen ob die Verbindung unterbrochen war, und dann gegebenenfalls neu aufbauen!


----------



## Sir_Mortimer (10 März 2011)

Hallo Jochen,,

Vielen Dank für die Schnelle !!! Antwort.
Und Danke für den Sourcecode, Habe ihn mir auch schon runtergeladen. 

Guter Vergleich mit dem WinCC Flexible, Was die können mache ich dann wohl auch.

Also vielen Dank nochmal, bis bald, Holger


----------

