Libnodave Überwachung von Daten

steggo.

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community!

Ich bin gerade am Programmieren einer Krananlage (Modell) und möchte mittels Libnodave Daten aus dem DB ständig lesen (also überwachen)
Ich programmiere in C#, habe eine eigene Klasse "PLC" angelegt mit den Methoden Read() und Write()

Ich gehe mit folgendem Prinzip vor.. ich öffne eine Verbindung - verbinde zur SPS - Lese die Daten - schließe die Verbindung

Eingebaut hab ich das dann in einem System.Timers.Timer aus C#, der dann diesen Zyklus zyklisch ausführt.

Programmcode:
Code:
        public void Read()
        {
           fds.rfd = libnodave.openSocket(102, "172.16.22.170");
            fds.wfd = fds.rfd;

            if (fds.rfd > 0)
            {
                                di = new libnodave.daveInterface(fds, "Test", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
                di.setTimeout(10000000);

                dc = new libnodave.daveConnection(di, 0, rack, slot);

                if (0 == dc.connectPLC())
                {
                                        res = dc.readBytes(libnodave.daveDB, 1, 0, 2, null);

                   
                    if (res == 0)
                    {
                        
                        txt = Convert.ToString(dc.getU16());
                    }
                    else
                                               Fehlercode = "error" + res + " " + libnodave.daveStrerror(res);
                    return;
                }
                
                dc.disconnectPLC();
                
                libnodave.closeSocket(fds.rfd);
            }
            else
            {
                                ConnectError = "Kann keine Verbindung herstellen!";
                return;
            }
            return;
        }

Die Verbindung und das Lesen funktionieren prima!

Doch wenn sich nun ein Wert im DB ändert (in diesem Fall DB1DBW0), dann wird dieser neue Wert nicht übernommen..
Auf der Ausgabe im Label steht noch immer der alte Wert..

Was mache ich hier falsch?
Meineserachtens müsste es doch so funktionieren, wenn der Wert sich ändert und die Read-Methode ausgeführt wird, dann muss doch wohl auch
die Variable txt mittels get den neuen Wert bekommen.. oder?

Timer-Code:
Code:
        void T1_Elapsed(object sender, ElapsedEventArgs e)
        {
            Portalkran.Read();

            Invoke((MethodInvoker)delegate { lblOutput.Text = Portalkran.txt; });
        }

Liebe Grüße
steggo.
 
Zurück
Oben