# libnodave Reconnect Problem



## fLaVa (30 Mai 2011)

Hallo liebe Community,

ich beschäftige mich seit einiger Zeit mit der libnodave-Bibliothek und habe sie nun für meine Studienarbeit über JNI in Java eingebunden.
Vorrangig ist hier die Nutzung der MPI-Schnittstelle, wo auch mein Problem besteht.

Zwar ist es mir möglich die Bibliothek zu initialisieren und auch Daten zu erfassen, jedoch habe ich das Problem, dass kein reconnect mehr möglich ist, wenn die Verbindung unterbrochen wurde.
Eine erneute Verbindung kann erst aufgebaut werden, wenn das ausführende Java-Programm neu gestartet wurde.

Um sicher zu stellen, dass es nicht an meiner Java-Implementierung liegt habe ich versucht das ganze mit einem Programm in C zu realisieren, wo jedoch der gleiche Fehler wieder auftritt, sogar wenn ich einen Disconnect mit "davefree" & "daveDiscconect*" mache. Sobald ein Disconnect durchgeführt wurde lässt sich keine neue Verbindung aufbauen, erst nach einem Neustart des Programms.

Ich hoffe, ihr könnt mir helfen. Ich bin für jede Hilfe sehr dankbar!

MfG fLaVa


----------



## MW (30 Mai 2011)

kannst du mal einen Codeausschnitt von deinem Programm hier reinstellen ? 
(von interesse ist da der Code vom Verbindungsaufbau und abbau)


----------



## Jochen Kühner (30 Mai 2011)

Was für ein Adapter nutzt du denn?

Und ha, stell mal code rein, dann kann man mehr zu sagen!


----------



## fLaVa (31 Mai 2011)

guten Morgen...

Hier wie gewünscht ein Code-Ausschnitt... der erste Teil wird für den Connect benutzt, der zweite für den Disconnect...
Den Aufbau hierfür habe ich auch der TestMPI.c, welche mit der libnodave mitgeliefert wird. Diese hab ich von oben nach unten durchgearbeitet und alles weggelassen, was für mich meines Erachtens nach irrelevant war.

Wie gesagt, bei einer einmaligen Verbindung funktioniert alles wunderbar, nur danach nicht mehr.

So, hier mal der erste Teil:

```
int connectMPI(char *comport)
{
    int i;

    _daveOSserialType otype;
    otype.rfd = setPort(comport,"38400",'O');
    otype.wfd = otype.rfd;


    di = daveNewInterface(otype, "IF1", 0, daveProtoMPI2, daveSpeed187k);
    dc = daveNewConnection(di, 2, 0, 0);
    for (i=0; i<3; i++) {
        if (0==daveInitAdapter(di)) {
        //initSuccess=1;    
        //a= daveListReachablePartners(di,buf1);
        //printf("daveListReachablePartners List length: %d\n",a);
        //if (a>0) {
        //    for (j=0;j<a;j++) {
        //    if (buf1[j]==daveMPIReachable) printf("Device at address:%d\n",j);
        //    }    
        //}
        break;    
        } else daveDisconnectAdapter(di);   
    }

    //daveNewConnection(daveinterface, MPI, rack, slot)

    printf("%d\n", daveConnectPLC(dc));
    printf("ConnectPLC\n");
    if (0==daveConnectPLC(dc)){    
        //if(1) {
        //    a=1;
        //    //daveWriteBits(daveConnection *dc, int area, int DB, int start, int len, char[] buffer)
        //    res=daveWriteBits(dc, daveFlags, 0, 10, 1,&a);
        //}
    }
    return 0;
}
```
Und hier der zweite:

```
int disconnectMPI()
{
    printf("Now disconnecting\n");    
    daveDisconnectPLC(dc);
    daveFree(dc);
    daveDisconnectAdapter(di);
    daveFree(di);
    return 0;
}
```
Danke und Gruß fLaVa


----------



## fLaVa (31 Mai 2011)

soo, hat sich schon erledigt... hab den Fehler gerade selber gefunden.

habe ein "closePort" in der Disconnect-Methode vergessen :icon_redface:.... jetzt funktioniert alles.

Trotzdem vielen Dank für eure Hilfsbereitschaft!

Gruß fLaVa


----------

