Visual C# / Visual Basic .NET und OMRON CX Server Lite

JoRu1407

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen liebe Community,

ich beschäftige mich momentan mit dem OMRON CX Server Lite, um eine Anwendung in Visual C# zu entwickeln,
die das zentrale Steuern unserer Maschinen ermöglicht.


Folgendes Problem beschäftigt mich nun seit 2 Tagen:


Um Daten wie die Bahngeschwindigkeit und Schläge/Sek in Echtzeit anzuzeigen, möchte ich eigentlich keine unsaubere Endlosschleife zum auslesen starten (das funktioniert).

Hierzu bietet Omron die Methode "GetData()" mit der sich das überwachen spezieller Datenpunkte starten lässt.
Sobald sich ein Wert ändert, soll dieser an das "OnDataChange" Event übergeben werden. Genau das passiert aber leider nicht :/

Dokumentation:
http://omronkft.hu/nostree/pdfs/software/cx-server_light/cx-s-lite_net_doc.pdf


Anbei findet Ihr mein aktuelles Visual Studio 2010 Projekt.
Anhang anzeigen Demoprogramm.zip


Vielleicht gibt es hier ja jemanden, der ein paar Erfahrungen mit dem CX Server Lite besitzt und mir evtl. weiterhelfen kann?
Ich wäre euch wirklich sehr dankbar :)

Viele Grüße,
Joshua Rupp
 
Zuletzt bearbeitet:
Hi!

Ich öffne leider keine Zip Dateien die ich öffentlich in Foren finde, daher muss ich einmal so nachfragen. Bekommst du leere Daten bei OnDataChange oder kommt da nix. Eventuell kannst du den Code bzw. das Stück hier einmal posten. Ich gehe auch davon aus, dass GetData in einem Thread auch ständig die Daten prüft, z.B. mit einer while schleife.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo HrWechler,

nachfolgend mein Programmcode.
Das CX Server Lite Control heißt "cxsLite" und die Werte sollen bei Änderung in das Label "label_lineSpeed" geschrieben werden.

Code:
        // SETUP
        string serverPath = "Server.cdm";
        string spsName = "spsLocher";
        double updateRate = 0.1;
        
        // INITIALIZE
        public Monitor()
        {
            InitializeComponent();
        }

        // CONNECT
        private bool Connect()
        {
            // Refresh StatusStrip
            statusStripLabel.Text = "Verbinden";
            statusStrip.BackColor = Color.Yellow;
            statusStrip.ForeColor = Color.Black;
            
            // Load CX Server Project
            bool connectedOK = cxsLite.Connect(serverPath);

            // Open PLC Connection
            bool openedOK = cxsLite.OpenDevice(spsName);

            // Check Availability
            if (!connectedOK || !openedOK)
            {
                // Refresh StatusStrip
                statusStripLabel.Text = "Fehler";
                statusStrip.BackColor = Color.Red;
                statusStrip.ForeColor = Color.White;
                
                // Show Error Message
                MessageBox.Show("Die Verbindung zur SPS konnte nicht hergestellt werden!", "Verbindungsproblem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
                // Return Method Value
                return false;
            }
            else
            {
                // Refresh StatusStrip
                statusStripLabel.Text = "Verbunden";
                statusStrip.BackColor = Color.Green;
                statusStrip.ForeColor = Color.White;

                // Return Method Value
                return true;
            }
        }

        // DISCONNECT
        private void Disconnect()
        {
            // Close PLC Connection
            bool Closed = cxsLite.CloseDevice("spsLocher");
        }

        [COLOR=#008000]// GET DATA
        private void GetData()
        {
            // Required Data Points
            cxsLite.GetData("spsLocher", "lineSpeed", updateRate);
        }[/COLOR]

        // STOP DATA
        private void StopData()
        {
            // Required Data Points
            cxsLite.StopData("spsLocher", "lineSpeed");
        }

       [COLOR=#ff0000] // DATA CHANGED
        private void cxsLite_OnDataChange(object sender, CXSLite.CXSLiteCtrl.DataChangeArgs e)
        {
            // Write Value to Label
            label_lineSpeed.Text = e.Value.ToString();
        }[/COLOR]

        // FORM SHOWN
        private void Monitor_Shown(object sender, EventArgs e)
        {
            if (Connect())
            {
                // Start Getting Data
                GetData();
            }

        }

        // FORM CLOSE
        private void Monitor_FormClosing(object sender, FormClosingEventArgs e)
        {
            StopData();
            Disconnect();
        }

Das Grün Markierte GetData funktioniert laut meiner Debugging Konsole.
Allerdings wird das Event "OnDataChange()" und damit die Rot markierte Methode nie aufgerufen :/
 
Zuletzt bearbeitet:
Ich gehe davon aus, dass label_lineSpeed vorhanden ist, ich es in diesem Codestück nicht sehen kann ?! Warnungen werden beim übersetzen nicht ausgegeben ?
 
Ja, das Label ist natürlich vorhanden und es werden keine Fehler ausgegeben. Das Programm läuft so gesehen "fehlerfrei" - Es wird nur leider kein Event ausgelöst :/
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist bestimmt irgendwas total einfaches. Ich versuche mal am Wochenende die Datei zu testen. Ich bin hier nur mit dem Notebook unterwegs und da habe ich nicht alles installiert. Ich melde mich und gebe dann Feedback ob es klappt oder ob ich auch Fehler bekomme.
 
Zurück
Oben