Ten wpis jest bardziej ku własnej pamięci, jako że libnodave nie jest zapewne zbyt często używaną biblioteką.
Używam libnodave do odczytu/zapisu danych ze sterownikami Simatic S7. Jakiś czas temu natrafiłem na pewien problem, otóż jeżeli tworzymy obiekt klasy odpowiedzialnej za połączenie ze sterownikiem i nawiązujemy połączenie wszystko działa ok. aż do momentu kiedy to połączenie nawiążemy po raz 7-my. Kolejne połączenie się nie udaje.
W Dispose mojej klasy używałem zawsze disconnectPLC na obiekcie klasylibnodave.DaveConnection oraz disconnectAdapter na obiekcie klasylibnodave.daveInterface.
Jak się okazuje to było zbyt mało, konieczne jest jeszcze zamknięcie portu komunikacyjnego przez
libnodave.closePort(fds.rdf)
, gdzie fds.rdf zawiera parametry otwartego wcześniej gniazda. Bez tej linijki libnodave uzupełniał kolejkę połączeń o kolejne nowo otwarte połączenie, a kolejka równoczesnych połączeń pozwala tylko na 7 równoczesnych połączeń.
Zaskakujące, że czasem rozwiązanie dręczącego od dawna problemu jest w jednej tylko linijce kodu …