# Libnodave + Verbindung CPU



## Proxy (19 März 2011)

Hi,

ich hätte mal wieder ein Problem.
Kurze Beschreibung von meinen Problem/Aufgabe. Ich möchte mit einen Programm eine Verbindung aufbauen oder nicht. Dazu benutze ich folgenden code.


```
public static Boolean Verbindung(bool aktiv)
    {
           if (dc != null && aktiv == false)
           {
               dc.disconnectPLC();
               libnodave.closeSocket(fds.rfd);
               return false;
           }

           if (aktiv == true)
           {
               fds.rfd = libnodave.openSocket(port, ipadress);
               fds.wfd = fds.rfd;
               if (fds.rfd > 0)
               {
                   di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
                   di.setTimeout(1000000);
                   dc = new libnodave.daveConnection(di, 0, rack, slot);
               }
               //Ausgabe ob Verbindung geklappt hat
               if (dc != null && dc.connectPLC() == 0) { return true; } else { return false; }
            }
            else
            {
                return false;
            }
    }
```

jetzt wird die Verbindung jedoch alle 3 Sek. über einen Timer aufgerufen, also sozusagen ob sie noch besteht oder ob ich sie aufbauen muss.

Das Problem ist jedoch jetzt was ist wenn die CPU mit der ich mich verbinden will "Aus" ist? Er wartet immer und das Programm lässt sich nicht mehr bedienen.
Jetzt wäre mein ansatz das Problem zu lösen, indem ich die Station anpinge und schaue ob sie aktiv ist. 

Oder gibts da eine einfachere Methode?


----------



## Jochen Kühner (19 März 2011)

Ich hab das in meiner Library so gelöst, das Ich das in einem extra Thread probiere, welchen Ich nach einer gewissen Zeit kille!

Bspcode (CSHARP)

```
void socketTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            socketTimer.Stop();
            socketThread.Abort();            
        }

        public void socket_Thread()
        {
            _fds.rfd = -999;
            _fds.rfd = libnodave.openSocket(_configuration.Port, _configuration.CpuIP);
        }


socketTimer = new System.Timers.Timer(_configuration.TimeoutIPConnect);
                    socketTimer.Elapsed += new ElapsedEventHandler(socketTimer_Elapsed);
                    socketTimer.Start();
                    socketThread = new Thread(new ThreadStart(this.socket_Thread));
                    socketThread.Start();
                    while (socketThread.ThreadState==ThreadState.Running)
                    { }
                    socketTimer.Stop();
                    socketThread.Abort();
                    socketTimer = null;
                    socketThread = null;
```


----------

