LibNodave mit Routing usw...

Jochen Kühner

Level-3
Beiträge
4.291
Reaktionspunkte
525
Zuviel Werbung?
-> Hier kostenlos registrieren
hab hier mal jetzt meine geupdatete libnodave und auch eine neue .net Bibliothek dafür. Auch mein Connection Lib habe Ich angepasst.

Routing wird jetzt bei S7online und TCP unterstützt. Nur Routing mit einem TCP/IP Zielnetz denke ich geht bei S7Online noch nicht (da Ich noch nicht weis in welches Feld Rack/Slot der Routing Ziel CPU gehört).

Auch geht jetzt über S7Online eine TCP/IP Verbindung.

Download ab jetzt immer hier:
http://jochensserver.dyndns.org/wordpress/?page_id=55
 
Zuletzt bearbeitet:
hab hier mal jetzt meine geupdatete libnodave und auch eine neue .net Bibliothek dafür. Auch mein Connection Lib habe Ich angepasst.

Routing wird jetzt bei S7online und TCP unterstützt. Nur Routing mit einem TCP/IP Zielnetz denke ich geht bei S7Online noch nicht (da Ich noch nicht weis in welches Feld Rack/Slot der Routing Ziel CPU gehört).

Auch geht jetzt über S7Online eine TCP/IP Verbindung.

hab grade eben mal die libnodave.dll in mein Projekt übernommen und die libnodave.net.cs aus Deiner Connection Library in die für mein VB.NET Projekt nötige libnodave.net.dll compiliert.
Sobald ich nun eine Verbindung zur SPS (sowohl ISO als auch S7Online)aufbauen möchte kommt jedoch folgende Exception:

01.06.2010 01:50:53:269 Opening Connection to PLC failed. Exception message: Die DLL "libnodave.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.

Es scheint wieder das alte Problem zu sein, welches wir schon mal mit dem compilieren der libnodave.dll hatten. weisst Du noch wie Du sie damals compiliert hast damit sie danach auch bei mir mit meinem VB.NET Projekt ging?

 
Zuviel Werbung?
-> Hier kostenlos registrieren
hab grade eben mal die libnodave.dll in mein Projekt übernommen und die libnodave.net.cs aus Deiner Connection Library in die für mein VB.NET Projekt nötige libnodave.net.dll compiliert.
Sobald ich nun eine Verbindung zur SPS (sowohl ISO als auch S7Online)aufbauen möchte kommt jedoch folgende Exception:

01.06.2010 01:50:53:269 Opening Connection to PLC failed. Exception message: Die DLL "libnodave.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.

Es scheint wieder das alte Problem zu sein, welches wir schon mal mit dem compilieren der libnodave.dll hatten. weisst Du noch wie Du sie damals compiliert hast damit sie danach auch bei mir mit meinem VB.NET Projekt ging?




Nicht das du noch ne andere libnodave.dll im System32 Verzeichnis hast?
 
Nicht das du noch ne andere libnodave.dll im System32 Verzeichnis hast?

...hab grad nochmal den Einsatz der DLL überprüft.
Die dlls habe ich nur im Projekt-, Debug- und Releaseverzeichnis liegen.
Ich habe die libnodave.dll und libnodave.net.dll in allen drei Verzeichnissen ausgetauscht, dann den Verweis auf die libnodave.net.dll neu verbunden, die Releaseversion neu erstellt und ausgeführt... leider wieder die selbe Fehlermeldung. Sobald ich dann nur die eine libnodave.dll im Releaseverzeichnis wieder gegen meine (Deine) alte dll vom 12.05.2010 (147kB) austausche funktioniert der Kommunikationsaufbau zur SPS wieder.
 
Jo, hab gemerkt das meine libnodave noch eine abhänigkeit von msvcrt100d.dll hat ( oder ähnlich). Muss mal sehen was ich in vs2010 ändern muss, das dies nicht der fall ist! Fahr aber grad auf montage, also frühstens heut abend...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jo, hab gemerkt das meine libnodave noch eine abhänigkeit von msvcrt100d.dll hat ( oder ähnlich). Muss mal sehen was ich in vs2010 ändern muss, das dies nicht der fall ist! Fahr aber grad auf montage, also frühstens heut abend...

ok, super. Ich bin auf jeden Fall schon mal froh, dass es nicht an mir gelegen hat, da ich Hochsprachen technisch noch nicht so der Hirsch bin und ich mich erst in die Materie einarbeite.

Danke auf jeden Fall schon mal fürs Nachsehen und die Info.

Gruss,

bool
 
ok, super. Ich bin auf jeden Fall schon mal froh, dass es nicht an mir gelegen hat, da ich Hochsprachen technisch noch nicht so der Hirsch bin und ich mich erst in die Materie einarbeite.

Danke auf jeden Fall schon mal fürs Nachsehen und die Info.

Gruss,

bool

So, hiermit sollte es gehen...
 

Anhänge

  • libnodave.zip
    67,9 KB · Aufrufe: 47
Zuviel Werbung?
-> Hier kostenlos registrieren
@bool

Und hat beine Lib Jetzt was bei deinen Problemen gebracht?

Hi, habs leider nur kurz antesten können, da ich momentan auch grad uwegs bin. Die S7Online Freigabe nach Verbindungsabbau ohne Beenden des Programms hat bei meinen gestrigen Tests leider nicht funktioniert.
Morgen oder spät. am Samstag hoffe ich dass ich wieder etwas mehr Zeit finden werde und würde dann auch mal das TCP/IP über S7Online ausprobieren wollen. Wenn ich das richtig verstanden habe ist dies mit der neuen Version auch schon möglich, richtig? Muss ich beim Verbindungsaufbau irgend was spezielles (z.B. anderen Funktionen aufrufen o.ä.) beachten?

Gruss,

bool
 
Hi, habs leider nur kurz antesten können, da ich momentan auch grad uwegs bin. Die S7Online Freigabe nach Verbindungsabbau ohne Beenden des Programms hat bei meinen gestrigen Tests leider nicht funktioniert.
Morgen oder spät. am Samstag hoffe ich dass ich wieder etwas mehr Zeit finden werde und würde dann auch mal das TCP/IP über S7Online ausprobieren wollen. Wenn ich das richtig verstanden habe ist dies mit der neuen Version auch schon möglich, richtig? Muss ich beim Verbindungsaufbau irgend was spezielles (z.B. anderen Funktionen aufrufen o.ä.) beachten?

Gruss,

bool

Rufst du denn disconnectPLC auf?

Ja, für die tcp ip verbindung musst du die verbindung mit libnodave.daveConnection aufbauen, aber mit dem 2ten konstruktor mit mehr parametern!
 
Rufst du denn disconnectPLC auf?

Ja, für die tcp ip verbindung musst du die verbindung mit libnodave.daveConnection aufbauen, aber mit dem 2ten konstruktor mit mehr parametern!

So nachdem ich dieses Wochenende der Gartenarbeit und Familie gewidmet hatte, habe ich nun noch ein bischen Zeit um mich wieder um das libnodave Projekt zu kümmern.

Der Test mit Deiner neusten libnodave.dll (01.06. 23:44 mit 147kB) und libnodave.net.dll (compilierte libnodave.net.cs vom 28.05.2010 22:43) brachten bei mir leider das Ergebnis, dass selbst beim ersten Verbindungsaufbau (direkt nach Applikationsstart) via S7Online sich die Funktion dc.connectPLC mit dem Ergebnis -1 "no message defined" verabschiedet. Nach Wechseln der libnodave.dll zur älteren Version vom 12.05.2010 geht dann die S7Online Verbindung auch wieder.
Interessanterweise hatte die Funktion diListReachablePartners() vor dem dc.connectPLC() auch bei der neuen dll die richtigen MPI Teilnehmer zurückgegeben.

Die ISO on TCP und auch die MPI Verbindung via RS232 Adapter funktionierten übrigens auch mit der neuen dll weiterhin, die S7Verbindung wie beschrieben jedoch leider nicht.

Um zu Deiner Frage zurück zu kommen, ja ich rufe die Funktion
dc.disconnectPLC() beim Verbindungabbau auf, danach
di.disconnectAdapter() und im Anschluss
libnodave.closeS7online(fds.rfd) wenn es sich um eine S7Online Verbindung gehandelt hat.

Ich hoffe Du hast noch eine Idee an was das liegen könnte.
Wie bereits erwähnt, habe ich die dlls nicht im Systemverzeichnis, sondern nur im Projektverzeichnis liegen.


Gruss,

bool

 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So nachdem ich dieses Wochenende der Gartenarbeit und Familie gewidmet hatte, habe ich nun noch ein bischen Zeit um mich wieder um das libnodave Projekt zu kümmern.

Der Test mit Deiner neusten libnodave.dll und libnodave.net.dll brachten bei mir leider das Ergebnis, dass selbst beim ersten Verbindungsaufbau (direkt nach Applikationsstart) via S7Online sich die Funktion dc.connectPLC mit dem Ergebnis -1 "no message defined" verabschiedet. Nach Wechseln der libnodave.dll zur älteren Version vom 12.05.2010 geht dann die S7Online Verbindung auch wieder.
Interessanterweise hatte die Funktion diListReachablePartners() vor dem dc.connectPLC() auch bei der neuen dll die richtigen MPI Teilnehmer zurückgegeben.

Die ISO on TCP und auch die MPI Verbindung via RS232 Adapter funktionierten übrigens auch mit der neuen dll weiterhin, die S7Verbindung wie beschrieben jedoch leider nicht.

Um zu Deiner Frage zurück zu kommen, ja ich rufe die Funktion
dc.disconnectPLC() beim Verbindungabbau auf, danach
di.disconnectAdapter() und im Anschluss
libnodave.closeS7online(fds.rfd) wenn es sich um eine S7Online Verbindung gehandelt hat.

Ich hoffe Du hast noch eine Idee an was das liegen könnte.
Wie bereits erwähnt, habe ich die dlls nicht im Systemverzeichnis, sondern nur im Projektverzeichnis liegen.


Gruss,

bool


Das liegt nicht an der dll denke ich. Habe im Moment das Problem, das Ich Änderungen welche ich vornehme nur mit einem tcp/ip zugang über s7online testen kann, da ich nur einen netlink usb als mpi adapter habe, welcher unter win7 im moment nicht über .net anwendungen ansprechbar ist! Werd mal schauen was ich nächste woche noch weiter darn machen kann, melde mich...
 
Bitte prüfe doch kurz, ob ich Deine aktuellsten libnodave.dll und libnodave.net.cs (siehe Zeitstempel in meinem obigen Post) verwende oder ob es hier bereits neuere Versionen gibt welche zu testen es sich lohnen würde.

Danke und Gruss,

bool
 
Bitte prüfe doch kurz, ob ich Deine aktuellsten libnodave.dll und libnodave.net.cs (siehe Zeitstempel in meinem obigen Post) verwende oder ob es hier bereits neuere Versionen gibt welche zu testen es sich lohnen würde.

Danke und Gruss,

bool

Denke schon, wenn es die Versionen aus diesem Thread sind! (Kann das nicht vergleichen, da Ich die Versionen im Moment nicht vorhalte, da Ich laufend was ändere ;-) ). Hab aber noch was gefunden, was Ich bei S7Online noch falsch mache... Ich bin ab Donnerstag wieder im Büro, dann such Ich mal meinen alten Seriellen MPI Adapter und Versuchs nochmal...

Und danach mach Ich mich an's Routing von Netlink und Netlink lite...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, für die tcp ip verbindung musst du die verbindung mit libnodave.daveConnection aufbauen, aber mit dem 2ten konstruktor mit mehr parametern!


Habe ich das richtig verstanden?
Für die TCP/IP Verbindung über S7Online muss ich die "libnodave.openS7online()" Funktionsvariante aufrufen bei welcher ich als zweiten Parameter das Fensterhandle übergebe und danach muss ich dann die neue Funktion "libnodave.daveNewExtendedConnection()" aufrufen und entsprechend parametrieren? Ist dies so korrekt? Muss ich dann trotzdem für die MPI über S7Online Verbindung die herkommliche "daveConnection" aufrufen oder kann ich dann für alle möglichen Verbindungen (MPI/Prifibus/TCP) diese erweiterte Funktion verwenden? Geht eigentlich dann auch ISOonTCP über S7Online? Ist zwar eigentlich unnötig, da es ja auch so geht, aber interessant wäre es auf jeden Fall zu wissen, ob man diese Verbindung weiterhin abfangen/blockieren muss.
...

...
hab nun grad mal versucht die erweitere Funktion in meinem Programm aufyurufen, doch leider wird die Deklaration aus der libnodave.net.dll nicht erkannt.

Ausug aus der libnodave.net.cs welche ich als dll compiliert und als dll eingebunden habe. Die entsprechende libnodve.dll liegt im selben Verzeichnis.

[DllImport("libnodave.dll"/*, PreserveSig=false */ )]
protected static extern IntPtr daveNewExtendedConnection(
IntPtr di,
byte[] destination,
int DestinationIsIP,
int rack,
int slot,
int routing,
int routingSubnetFirst,
int routingSubnetSecond,
int routingRack,
int routingSlot,
byte[] routingDestination,
int routingDestinationIsIP
);

Kannst Du ggf. noch ein paar Worte dazu schreiben was die einzelnen Routing Parameter bedeuten, auch unter dem Parmeter "byte[] destination" kann mir noch nicht so wirklich viel vorstellen.



Danke und Gruss,

bool
 
Zuletzt bearbeitet:
Habe ich das richtig verstanden?
Für die TCP/IP Verbindung über S7Online muss ich die "libnodave.openS7online()" Funktionsvariante aufrufen bei welcher ich als zweiten Parameter das Fensterhandle übergebe und danach muss ich dann die neue Funktion "libnodave.daveNewExtendedConnection()" aufrufen und entsprechend parametrieren? Ist dies so korrekt? Muss ich dann trotzdem für die MPI über S7Online Verbindung die herkommliche "daveConnection" aufrufen oder kann ich dann für alle möglichen Verbindungen (MPI/Prifibus/TCP) diese erweiterte Funktion verwenden? Geht eigentlich dann auch ISOonTCP über S7Online? Ist zwar eigentlich unnötig, da es ja auch so geht, aber interessant wäre es auf jeden Fall zu wissen, ob man diese Verbindung weiterhin abfangen/blockieren muss.
...

...
hab nun grad mal versucht die erweitere Funktion in meinem Programm aufyurufen, doch leider wird die Deklaration aus der libnodave.net.dll nicht erkannt.

Ausug aus der libnodave.net.cs welche ich als dll compiliert und als dll eingebunden habe. Die entsprechende libnodve.dll liegt im selben Verzeichnis.

[DllImport("libnodave.dll"/*, PreserveSig=false */ )]
protected static extern IntPtr daveNewExtendedConnection(
IntPtr di,
byte[] destination,
int DestinationIsIP,
int rack,
int slot,
int routing,
int routingSubnetFirst,
int routingSubnetSecond,
int routingRack,
int routingSlot,
byte[] routingDestination,
int routingDestinationIsIP
);

Kannst Du ggf. noch ein paar Worte dazu schreiben was die einzelnen Routing Parameter bedeuten, auch unter dem Parmeter "byte[] destination" kann mir noch nicht so wirklich viel vorstellen.



Danke und Gruss,

bool

Die libnodave.daveNewExtendedConnection() muss verwendet werden, wenn ich S7Online mit Routing oder TCP/IP verwende, da Ich dort mehr Parameter brauche. Auch bei TCP/IP mit Routing musst du diese verwenden. Bei den anderen Verbindungstypen werden bisher die zusätzlichen Parameter einfach ignoriert!

byte[] destination ==> Vorhanden, da bei TCP/Ip über S7Online eine Ip übergeben werden muss (als Char array)
int DestinationIsIP ==> Ist das Ziel eine IP oder eine MPi Adresse
int routing ==>Routing Benutzen
int routingSubnetFirst ==>Subnetz ID wie in Netpro
int routingSubnetSecond ==> Subnetz ID wie in Netpro

Du kannst das ganze ja mit meiner Connection Library prüfen, da ist das ganze schon implementiert (Da ist ja auch ein Beispiel Programm dabei!)
 
Die libnodave.daveNewExtendedConnection() muss verwendet werden, wenn ich S7Online mit Routing oder TCP/IP verwende, da Ich dort mehr Parameter brauche. Auch bei TCP/IP mit Routing musst du diese verwenden. Bei den anderen Verbindungstypen werden bisher die zusätzlichen Parameter einfach ignoriert!

byte[] destination ==> Vorhanden, da bei TCP/Ip über S7Online eine Ip übergeben werden muss (als Char array)
int DestinationIsIP ==> Ist das Ziel eine IP oder eine MPi Adresse
int routing ==>Routing Benutzen
int routingSubnetFirst ==>Subnetz ID wie in Netpro
int routingSubnetSecond ==> Subnetz ID wie in Netpro

Du kannst das ganze ja mit meiner Connection Library prüfen, da ist das ganze schon implementiert (Da ist ja auch ein Beispiel Programm dabei!)

ok, Danke für die Info.

Werde ich mich gegen Ende der Woche damit beschäftigen.

Gruss,

bool
 
Soooo

So, nun hab Ich mal wieder was gemacht...

MPI Adapter sollten nun auch wieder über S7Online gehen (kann leider nur mit einem Seriellen testen, sobald NetlinkUSB auch unter Windows 7 richtig läuft teste Ich auch damit!)

Auch in meiner Connection Lib gibts ein bischen was neues:

auslesen der CPU Bausteine, auslesen CPU Status (noch fehlerhaft, geht heute oder morgen abend).

Download ab jetzt immer hier: http://jochensserver.dyndns.org/wordpress/?page_id=55
 
So, nun hab Ich mal wieder was gemacht...

MPI Adapter sollten nun auch wieder über S7Online gehen (kann leider nur mit einem Seriellen testen, sobald NetlinkUSB auch unter Windows 7 richtig läuft teste Ich auch damit!)

Hab grad mal schnell die neue libnodave.dll mit ner CP5611 getestet, die S7Online Verbindung geht wieder, nach Verbindungstrennung wird die CP aber leider noch immer nicht für eine erneute Verbindung freigegeben.

Gruss,

bool
 
Zurück
Oben