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

Ergebnis 1 bis 8 von 8

Thema: ADS Notification C# und EventHandler delegate

  1. #1
    Registriert seit
    20.08.2012
    Beiträge
    14
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forenuser,
    ich erstelle zur Zeit ein Programm in Visual Studio um eine Beckhoff PLC auszulesen. Dabei möchte ich mit einem Event Handler eine PLC-Boolean-Variable überwachen. Wenn diese ihren Wert ändert soll ein Event gefeuert werden. Das klappte auch gut, solange bis ich alles was mit der PLC zu tun hat in eine neue Klasse ausgelagert habe.

    Diese Klasse PLC_Class enthält folgendes:
    Code:
    //A public event for listeners to subscribe to
    PubliceventEventHandler MessungIstFertig;
    
    public PLC_Class(string subsystem_name, string subsystem_adress)
    {
     ...
     tcClient = newTcAdsClient();
      tcClient.Connect(this.subsystem_adress, 851);
      hConnect = newint[1];
    
      hConnect[0] = tcClient.AddDeviceNotification(PLC_fertig, dataStream, 0, 1,
     AdsTransMode.OnChange, 100, 0, bPLC_fertig); 
      tcClient.AdsNotification += newAdsNotificationEventHandler(OnNotification);
     
     //Fire the event - notifying all subscribers
     if (MessungIstFertig != null)
        MessungIstFertig(his, null);
    }
    
    private void OnNotification(object sender, AdsNotificationEventArgs e)
    {
     if (e.NotificationHandle == hConnect[0])
      bPLC_fertig = binRead.ReadBoolean();
     MessageBox.Show(bPLC_fertig.ToString());
    }
    

    Zitieren Zitieren ADS Notification C# und EventHandler delegate  

  2. #2
    Lexang ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2012
    Beiträge
    14
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    In der Form Klasse für die Oberfläche soll dieses Event dann abgefangen und behandelt werden. Bzw je nach Event in der PLC_Class Instanz eine Methode ausgeführt werden
    Code:
    privatePLC_Class plc_measure_sub;
    public Form_Measure_Sub_vierleiter(string subsystem_name, string subsystem_adress)
    {
      ...
      //PLC Klasse erstellen für Kommunikation mit Beckhoff PLC/ADS
    plc_measure_sub = newPLC_Class(this.subsystem_name, this.subsystem_adress);
    //Notification der PLC in dieser Klasse abfangen
    plc_measure_sub.MessungIstFertig += MessungIstFertigHandler;
    }
    
    publicvoid MessungIstFertigHandler(object sender, EventArgs e)
    {
    MessageBox.Show("TEST");
    }
    
    
    Leider erscheint keine MessageBox bei Änderung der PLC-Variable. Habt ihr eine Rat? Ich dachte man könnte den AdsNotificationEventHandler in der PLC_Class abfangen und einen neues Event starten, sodass die Formklassen Instanz nichts mit ADS zu tun hat?

    Grüße Lex


    Geändert von Lexang (10.03.2014 um 15:14 Uhr)

  3. #3
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Du versuchst den Event "MessungIstFertig" im Konstruktor deiner PLC_Class zu feuern. Da sollte es noch keinen Abonenten des Ereignisses geben weil du es ja erst nach dem Aufruf des Konstruktors abonierst.

    Wenn du das OnNotification Ereigniss abfangen willst musst du MessungIstFertig auch aus dieser Methode heraus feuern, oder bin ich da auf dem Holzweg?

  4. #4
    Lexang ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2012
    Beiträge
    14
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey MasterOhh,
    auch wenn ich den Teil
    Code:
     MessungIstFertig(this, null);
    
    in die OnNotification Methode der PLC-Class schreibe erscheint nichts. Die OnNotification Methode in der PLC_Class wird gar nicht aufgerufen. iIch verstehe nicht warum. Der gleiche Quellcode in den Konstruktor der From-Klasse und die OnNotification als Methode der Form-Klasse funktioniert wunderbar.

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    ich bin jetzt nicht so fit mit der C#-Syntax ... aber sollte nicht der Event IN der Klasse, die ihn "feuert" deklariert sein - und nicht außerhalb davon ?

    Gruß
    Larry

  6. #6
    Lexang ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2012
    Beiträge
    14
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wenn ich das richtig verstehe ist dies auch der Fall. Der Event MessungIstFertig ist ein öffentliches Attribut der Klasse.
    Code:
    
    class PLC_Class
    {
    public event EventHandler MessungIstFertig;
    
    public PLC_Class(string subsystem_name, string subsystem_adress)
    { 
      //Konstruktor
    }
    
    private void OnNotification(object sender, AdsNotificationEventArgs e)
    {  
     if (MessungIstFertig != null)
      MessungIstFertig(this, null);
      ...
    }
    }
    
    Geändert von Lexang (11.03.2014 um 11:04 Uhr)

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    ... dann mußt du vielleicht doch mit etwas mehr Code und etwas mehr Zusammenhang (wie ist das aufgebaut) kommen.
    Aus den aktuellen Codeschnipseln sehe ich nicht so schrecklich viel.

    Gruß
    Larry

  8. #8
    Lexang ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2012
    Beiträge
    14
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hey Leute,
    danke für eure Hilfe, ich habe den Fehler gefunden. Habe vergessen in der Klasse den DataStream (AdsStream) Konstruktor "dataStream = new AdsStream(4)" aufzurufen. Es gab dann auch keine Fehlermeldung weil die Variable dataStream ja schon deklariert war.

    Grüße danke für die Tipps!

Ähnliche Themen

  1. Notification und Array C#
    Von Kapkan im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 30.10.2013, 20:13
  2. ADS: SDO lesen über ads ocx von Visualisierung
    Von traveler im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.01.2011, 11:00
  3. Notification auswerten mit Wago 750-841
    Von Nikro im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 23.11.2010, 12:19
  4. Reconnect mit C# und Notification Handles
    Von Kauabunga im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 11.05.2010, 19:21
  5. VB.Net Beckhoff ADS Notification Bool & Int
    Von L.T. im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 26.04.2010, 19:54

Lesezeichen

Berechtigungen

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