# Libnodave - Probleme beim Zugriff auf mehrere Geräte am MPI-Bus



## Shorkaa (7 November 2011)

Hallo, ich habe hier folgendes Problem: Ich habe 6 vernetzte SPSen (C313) und möchte diese per Libnodave ansteuern, was soweit auch ganz gut funktioniert. Als Protokoll verwende ich S7Online (hauptsächlich weil unser USB-Adapter sich nicht auf einen COM-Port mappen lässt) und möchte nun während meines Programms mehrere verschiedene SPSen ansteuern. Das Problem hierbei ist nur: es passiert immer alles auf der selben ersten SPS, also wenn ich eine zweite Verbindung per   dc2 =daveNewConnection(di, 6, 0, 0);   aufbaue und anschließend ein Byte lesen oder schreiben möchte, etwa mit   daveReadBytes(dc2,daveInputs,0,0,2,buffer2);    wird wieder auf die erste SPS zugegriffen, in unserem Falle also z.b. das entsprechende Byte in der falschen SPS gelesen.  Meine Frage nun: Woran liegt das? Mit den Testprogrammen konnte ich nicht genau verifizieren, ob diese richtig funktionieren, da auch die die gleichen Werte zurückgeben (alles 0), was aber natürlich auch in beiden SPSen richtig sein könnte. Bei dem ganzen Verbindungsaufbau hab ich mich nah an den Beispielcode der testS7online.c gehalten, hier http://pastebin.com/jwtv6AZp noch der komplette code meines Testprogramms.


----------



## Ralle (7 November 2011)

Der Libnodave-Code für S7Online ist recht experimentell, soweit ich mitbekommen habe. Bei Verwendung von S7Online habe ich das selbe Problem und auch nach Rückfrage bei Zottel, dem Ersteller von Libnodave, habe ich das damit nicht hinbekommen. Läßt sich wohl im Moment nicht ändern, denke ich.


----------



## funkey (7 November 2011)

Hast du schon probiert für jede Verbindung zu einer SPS einmal daveNewInterface aufzurufen?


----------



## Shorkaa (7 November 2011)

Ja, auch mit 2 eigenen Interfaces funktioniert es nicht, das einzige was geht - ist das gesamte libnodave-zeugs zu beenden und die      fds.rfd=openS7online("S7Online",0);     fds.wfd=fds.rfd; dll neu einzubinden und alles neu zu initialisieren, was aber bei dem Programm das wir hier entwickeln möchten, natürlich viel zu lange dauert wenn wir das beim Zugriff auf eine SPS jedes mal machen müssten


----------



## Ralle (7 November 2011)

Shorkaa schrieb:


> Ja, auch mit 2 eigenen Interfaces funktioniert es nicht, das einzige was geht - ist das gesamte libnodave-zeugs zu beenden und die      fds.rfd=openS7online("S7Online",0);     fds.wfd=fds.rfd; dll neu einzubinden und alles neu zu initialisieren, was aber bei dem Programm das wir hier entwickeln möchten, natürlich viel zu lange dauert wenn wir das beim Zugriff auf eine SPS jedes mal machen müssten



So kenn ich das auch. Mir hat das immer niemand so richtig glauben wollen (so mein Eindruck), wer hat schon mehrere SPS und Zeit das dann auch noch zu prüfen. Die SPS, zu der zuerst die Verbindung aufgebaut wird, liefert alle Daten, egal, welche SPS ansonsten noch angewählt wird. Ich hab schon an mir gezweifelt, du bestätigst gerade, dass ich richtig lag.
Wenn es nicht anders geht, wäre da noch die Lib von Deltalogic, die hat Treiber dabei, ist aber nicht kostenlos. Prodave von Siemens gibts auch noch.


----------



## Shorkaa (7 November 2011)

"Bei Verwendung von S7Online habe ich das selbe Problem"  Ok heißt das dann dass es mit "normaler" MPI-Verbindung funktionieren würde? Sprich wenn wir nen andren Adapter finden könnten?


----------



## Ralle (7 November 2011)

Shorkaa schrieb:


> "Bei Verwendung von S7Online habe ich das selbe Problem" Ok heißt das dann dass es mit "normaler" MPI-Verbindung funktionieren würde? Sprich wenn wir nen andren Adapter finden könnten?



Ich nutze einen NetlinkPro, der geht von Ethernet auf MPI/Profibus und läuft mit libnodave ohne Probleme mit mehreren SPS. (kein S7Online!)


----------



## Shorkaa (7 November 2011)

Ok gut, dann danke für die Infos, ich schätze wir werden uns einfach einen anderen Adapter von Kollegen ausleihen und es damit probieren / ggf halt einen anderen zulegen!


----------



## Ralle (7 November 2011)

Shorkaa schrieb:


> Ok gut, dann danke für die Infos, ich schätze wir werden uns einfach einen anderen Adapter von Kollegen ausleihen und es damit probieren / ggf halt einen anderen zulegen!



Es geht halt nur mit Adaptern, die Libnodave auch direkt unterstützt. CP5511/12 funktionieren mit libnodave nur über S7Online, mit den von dir festgestellten Einschränkungen.


----------



## Jochen Kühner (7 November 2011)

Kannst du mal mit meiner Variablentabelle probieren, ob damit das Problem auch besteht (http://jochensserver.dyndns.org/wordpress/?page_id=58). Ich hab in meiner geänderten Version von libnodave an der S7Online Verbindung ein paar sachen geändert...


----------

