Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Twincat 3 Ads Notification Handler Event Handler - Ereignisgesteuertes Lesen

  1. #21
    Neuling2014 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.08.2014
    Beiträge
    20
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die TwincatADS Implementierung möchte ich in einem Project Class Library einbauen.
    In der weder Consolenausgaben noch UI Elemente enthalten ist. Daher ist die Frage, wie man aus diesem Project Notifications abfangen kann von der Beckhoff....

  2. #22
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Naja ... so richtig viel schlauer bin ich nun immer noch nicht.
    In der Bibliothek selber kannst du es gar nicht anwenden (siehe Beitrag #14). Allerdings wird doch deine Bibliothek letztendlich wieder von einer Applikation benutzt - und damit hast du doch dann wieder deine Anbindung. Oder habe ich da jetzt etwas komplett falsch verstanden ?

    Wie auch immer ... gib doch bitte mal ein konkretes Beispiel, was sich in der Lib befinden soll und wofür das wo eingesetzt werden soll ...

    Gruß
    Larry

  3. #23
    Neuling2014 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.08.2014
    Beiträge
    20
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Naja, die Twincat ADS Implementierung muß in einer eigenen Library Project drin sein, weil dort alle Gerätetreiber implementiert werden.
    So aktuell die Architektur.
    Die Gerätetreiber haben auch eigene Unit Tests, die ebenfalls ohne UI getestet werden. (Daher die Frage, wie kann man das ohne UI testen.)

    Die UI an sich entwickelt jemand anders, d.h. sie steht mir nicht zur Verfügung und daher kann und darf ich keine Element von der UI verwenden.
    Die Implementierung von der Twincat ADS muß in sich abgeschlossen sein.

    Ist das so verständlich?

    Code:
    public class Notification
        {
    
            private TcAdsClient _tcClient = null;
            private AdsStream _adsStream = null;
            private BinaryReader _binRead = null;
            private int _notificationHandle = 0;
    
            public Notification()
            {
                System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(() => Load());
                task.Start();
            }
    
            private void Load()
            {
                try
                {
                    _tcClient = new TcAdsClient();
    
                    /* connect the client to the local PLC */
                    _tcClient.Connect(851);
    
                    _adsStream = new AdsStream(2);                /* stream storing the ADS state of the PLC */
                    _binRead = new BinaryReader(_adsStream);    /* reader to read the state data */
    
                    /* register callback to react on state changes of the local AMS router */
                    _tcClient.AmsRouterNotification +=
                                            new AmsRouterNotificationEventHandler(AmsRouterNotificationCallback);
    
    
                    _notificationHandle = _tcClient.AddDeviceNotification(
                                                (int)AdsReservedIndexGroups.DeviceData,    /* index group of the device state*/
                                                (int)AdsReservedIndexOffsets.DeviceDataAdsState, /*index offsset of the device state */
                                                _adsStream,    /* stream to store the state */
                                                AdsTransMode.OnChange,    /* transfer mode: transmit ste on change */
                                                0,    /* transmit changes immediately */
                                                0,
                                                null);
    
                    /* register callback to react on state changes of the local PLC */
                    _tcClient.AdsNotification += new AdsNotificationEventHandler(OnAdsNotification);
                }
                catch (AdsErrorException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
    
            /* callback function called on state changes of the PLC */
            void OnAdsNotification(object sender, AdsNotificationEventArgs e)
            {
                if (e.NotificationHandle == _notificationHandle)
                {
                    AdsState plcState = (AdsState)_binRead.ReadInt16(); /* state was written to the stream */
                    Console.WriteLine(plcState.ToString());
                }
            }
    
            /* callback function called on state changes of the local AMS router */
            void AmsRouterNotificationCallback(object sender, AmsRouterNotificationEventArgs e)
            {
                Console.WriteLine(e.State.ToString());
            }

  4. #24
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Ich würde mir ein Develop-Projekt erstellen, dass die DLL einbindet und sie so verwendet, wie sie der andere verwendet (oder wie du erwartest, dass er sie verwendet).
    Sonst kannst du m.E. auch keinen Unit-Test machen ...

  5. #25
    Neuling2014 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.08.2014
    Beiträge
    20
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das ist auch alles schon geschehen, sonst hätte ich erst gar nicht die Klassen von der Twincat ADS verwenden können...

  6. #26
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... dann verstehe ich dein Problem gerade nicht.
    Deine Methode / Klasse funktioniert doch anscheinend in einer Applikation - und woanders wird sie doch nie zum Einsatz kommen.

  7. #27
    Neuling2014 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.08.2014
    Beiträge
    20
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Doch doch ... meine Implementierung wird in einem großen Projekt eingebunden. Wobei die Twincat ADS Implementierung nur ein kleiner Teil des ganzen ist.
    Dieser Teil kann aufgerufen und verwendet werden. Aber die Implementierung muß in sich abgeschlossen sein, d.h. incl. Notification Benachrichtigung.
    D.h. nur innerhalb dieser Twincat-Klasse muß es möglich sein, den Status der Beckhoff abzufragen und falls Fehler auftreten, muß ich diese Weitergeben.
    Es soll nichts von UI direkt aufgerufen werden. Dieser Programmcode läuft im Hintergrund. Unsichtbar für den Benutzer.

  8. #28
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das muss doch auch gar nicht.
    Deine eigenen Events stehen natürlich ggf. auch nach Aussen zur Verfügung - aber deine Anbindungen bleiben doch in deiner Klasse und deine Eventhandler doch auch.
    In dem Moment, wo du es instanzierst (also irgendwo in der Applikation verwendest) und initialisierst (und das könntest du auch noch an den Konstruktor packen), fängt es sofort an zu leben - solange die Applikation responsiv ist (also nicht durch irgendwelche Funktionen geblockt wird).

Ähnliche Themen

  1. ADS Notification C# und EventHandler delegate
    Von Lexang im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 13.03.2014, 19:28
  2. Antworten: 6
    Letzter Beitrag: 06.01.2013, 14:49
  3. VB.Net Beckhoff ADS Notification Bool & Int
    Von L.T. im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 26.04.2010, 19:54
  4. Antworten: 8
    Letzter Beitrag: 25.08.2008, 11:34

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •