# libnodave - serielle Verbindung trennen



## waschtl (22 Dezember 2010)

Hi,
wie ich schon in einem anderen Thread geschrieben habe verwende ich libnodave.so und libnodave.dll unter Python. Da ich vorhabe mein Programm später als Dienst im Hintergrund laufen zu lassen mache ich mich momentan auf die Suche nach möglichen Fehlerquellen damit es stabil läuft. 

Mein System: 
SIMATIC S5 101U
PC mit Ubuntu 9.10 (Physikalischer Rechner)
virtuelle Maschine mit WinXP
Verbindung mit USB to TTY Adapter

Verbindungsaufbau und Datenaustausch funktioniert unter XP zufriedenstellend.
Ich würde gerne eine Verbindung die funktioniert physikalisch trennen können (Kabel für tty-Schnittstelle abziehen) und die Verbindung automatisiert wieder neu initialisieren können. Nur irgendwie scheine ich mich ein wenig dumm anzustellen. 

Eine Verbindung stelle ich folgendermaßen her:

```
self.fds.rfd = self.dave.setPort(port, baud, parity)
self.fds.wfd = self.fds.rfd

self.di = self.dave.daveNewInterface(self.fds, name, localMPI, protocol, speed)
self.dave.daveSetTimeout(self.di, time)
self.dave.daveInitAdapter(self.di)

self.dc = self.dave.daveNewConnection(self.di, mpi, rack, slot)
self.dave.daveConnectPLC(self.dc)
```
hierbei ist ``self.dave`` jeweils die library libnodave.

Ich habe mir das Beispielprogramm ``testAS511.c`` angesehen. Wenn ich jetzt feststelle das die Verbindung nicht mehr funktioniert trenne die Verbindung indem ich die gleichen Funktionen wie im Testprogramm aufrufe:


```
daveDisconnectPLC(dc);
    daveFree(dc);
    daveDisconnectAdapter(di);
    daveFree(di);
```
Beim neu verbinden bekomme ich den Fehler

```
COM8 - Verbindung *** Error in Exchange.ReqTrans request.
COM8 - Verbindung *** Error in ReadS5Bytes.Exchange sequence.
```
und ``daveConnectPLC()`` gibt mir als Rückgabewert nicht mehr 0 sondern -21.

Momentan tappe ich noch ein Wenig im Dunkeln warum ich nicht einfach die Verbindung schließen und wieder neu herstellen kann. Evtl. hat ja mal jemand einen Hinweis für mich?

Sebastian


----------



## MW (22 Dezember 2010)

Ich arbeite zwar nicht mit den seriellen Verbindungen, aber ruf mal beim Verbindungsabbau noch die Funktion "closeport" auf um den Seriellen Port zuschließen, dann könnte das funktionieren.


----------



## waschtl (23 Dezember 2010)

Super, genau das wars. Ich hatte schon die Datei nodave.h mehrmals überflogen, aber die Beschreibung der Funktion versteckt sich logischerweise in setport.h. Da hätte ich mich noch dumm und dämlich gesucht. 
Vielen Dank noch mal und schöne Feiertage - ich kann mich noch ein bisschen mit meiner SPS beschäftigen 

Sebastian


----------

