# Mehrfachverbindung von LibNoDave nutzen



## GvOdin (7 Februar 2007)

Hi

Ich habe ein Programm geschrieben, welches ich jetzt verbessern will. Das Programm ist eine Art WinCC nur nicht so umfangreich. Es gibt ein paar Buttons und Ausgabefelder. Die Zustände der Buttons werden per libnodave writeBytes an die SPS gesendet und dort in einen DB geschrieben. Der Maschinenzustand wird aus einem DB gelesen (logisch).  

Mein Anliegen: Ein Aktualisierungzyklus dauert ca. 500ms, welchen ich gerne beschleunigen würde. 

Meine Idee: Zwei getrennte Verbindungen zum lesen und schreiben zur Zeit verbinde ich einmal am Anfang des Programms und die Verbindung bleidt dann bis zum Ende der Laufzeit des Progs. bestehen. Das, dass geht weis ich es sollen wohl je nach CPU bis zu 30 Verbindungen mgl. sein.

Mein Problem: Wie kann ich das programmieren (Sprache ist erstma Wurscht). Eine Verbindung habe ich ja schon geschrieben und da habe ich einen Namen für das DaveInterface vergeben. Kann man die Verbindun darüber unterscheiden? Kann ich auswählen über welches DaveInterface ich dann die Daten sende bzw. empfange??? Oder managed das LibNoDave von selbst so nach dem Motto je mehr Verbindungen, desto schneller die Übertragung? Und was für eine Netzbelastung ensteht dabei?

Fragen über Fragen, wäre echt Klasse wenn jemand dise Teilweise beantworten könnte. Danke schonmal im Vorraus.


----------



## mordillo (25 Februar 2009)

Eigentlich sollte das ganz einfach sein.

Du schreibst dir eine eigenständige Klasse, z.B.: libndRead
Du schreibst dir eine eigenständige Klasse, z.B.: libndWrite


Diese Klassen handlen den Auf- und Abbau der Verbindung, mit Übergabe der Verbindungsparameter.

In deinem Anwenderprogramm werden die Klassen dann jeweils mit 'New' instanziert und das wars schon.

Ich hab das auch schon gemacht, allerdings lasse ich eine Verbindung offen, bis ich Sie explizit schliesse, zumindest für das lesen.
Aber aufpassen. Mit jeder einzeln geöffneten Verbindung nimmst du deiner Steuerung eine Verbindungsresource weg.

Was eigentlich eleganter ist ( so mach ich das derzeit ): 
Ich öffne eine Verbindung in einem eigenständigen Thread. Nach dem lesen wird geprüft ob sich Daten zum schreiben im Puffer befinden und die werden dann (einmalig, solange keine neuen Daten anliegen) geschrieben. Ausserdem wirds mit 2 Parallelverbindungen nicht schneller, da mit jeder geöffneten SPS Verbindung die Antwortzeiten der SPS ebenso langsameer werden (muss ja auch mehr ackern).


Hoffe konnte helfen.


----------



## Ralle (25 Februar 2009)

mordillo schrieb:


> Hoffe konnte helfen.



Na gut, GvOdin vielleicht nicht mehr, nach knapp 2 Jahren, aber es könnte ja nochmal jemand ein ähnliches Problem haben.


----------



## mordillo (26 Februar 2009)

*ROFL*Ich hab nur auf den 07.02. geachtet, aber nicht auf das Jahr ....


----------



## GvOdin (28 Februar 2009)

Ja danke für die Antwort ... musste aber selber alles nochmal lesen, da es schon lange her ist. 

Letzendlich habe ich es genauso gelöst und es funktionierte auch prima.


----------

