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

Ergebnis 1 bis 7 von 7

Thema: Beckhoff ADS.Net DLL und C#

  1. #1
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also, ich habe eine Frage zur Beckhoff ADS.Net DLL.

    Ich möchte ereignisgesteuert Lesen. Dazu verbinde ich mich mit der SPS und erzeuge dann mit AddDeviceNotification eine Notification auf die Variable.

    Diese ruft dann bei Änderung eine OnNotification-Methode auf.

    Darin gibt es einen Parameter vom Typ AdsNotificationEventArgs mit Namen e.

    Diesem wurde von der AddDeviceNotification ein Objekt übergeben, welches die Daten der Variable enthalten können soll.

    Ich möchte jetzt, dass ich das mehr oder weniger universell verwenden kann.
    Momentan caste ich das Ding passend:

    Code:
    ((RadioButton)e.UserData).Checked = binRead.ReadBoolean();
    ABER wie kann ich dafür sorgen, dass, egal welches Objekt ich übergebe, das richtige damit getan wird? Denn nur mit

    Code:
    e.UserData = binRead.ReadBoolean();
    kann ich nix tun, dann meckert der Compiler:

    Einer Eigenschaft oder einem Indexer
    "TwinCAT.Ads.AdsNotificationEventArgs.UserData" kann nichts zugewiesen werden -- sie sind schreibgeschützt.

    Wie kann ich C# dazu bringen, das Objekt korrekt zu behandeln?
    Ich kann ja schlecht für jeden Typ, den es haben kann, eine eigene Behandlungsvorschrift programmieren...zumal mir ganz lieb wäre, der AddDeviceNotification-Methode ein Objekt vom Typ Bool zu übergeben und dann so zu casten:

    Code:
    (bool)e.UserData = binRead.ReadBoolean();
    was aber zu einem neuen Fehler führt:

    Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein.

    Vielleicht kann mir jemand hier weiterhelfen. Danke schonmal im Voraus.
    Zitieren Zitieren Beckhoff ADS.Net DLL und C#  

  2. #2
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Übergebe doch einfach einen Delegate. Dann rufst du einfache den Delegate auf. Variabler kannst du das (glaube ich) nicht machen, denn darin kannst du alles umsetzten.

    Warum willst du überhaupt nachträglich das Objekt UserData nochmal ändern? Du möchstest doch einen Wert übergeben, den du später verwenden kannst. Im Event, welches auf die Notification reagiert, kannst du die UserData nicht nocheinmal wieder verändern.
    Geändert von Neals (04.12.2009 um 15:42 Uhr)

  3. #3
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Jo, auf den Gedanken bin ich, nachdem ich mit C# nun etwas weiter gekommen bin, auch schon gekommen.

    Ich übergebe also einfach ein Delegate als Object und in der On-Notification-Methode löse ich das Delegate auf?

  4. #4
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Code:
    // Callback auslesen
    AdsNotifyCallback callback = (AdsNotifyCallback) e.UserData;
    
    // Kein Callback gefunden
    if (callback == null)
    {
        throw new AdsException();
    }
    
    // Ausführen des Callbacks in einem extra Thread
    ThreadPool.QueueUserWorkItem(
        delegate
        {
            callback(sender, new AdsNotifyEventArgs(data /* Daten halt */));
        });
    So löse ich das meist.
    Denke daran, dass du so schnell wie möglich die Funktion, die das Notification-Event fängt, beendest. Die Funktionen blockiert nämlich den AdsRouter.

  5. #5
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Inwiefern korrespondiert das mit meinem AddDeviceNotification?

    Ergänzung: In meiner .Net-Dokumentation finde ich keinen Typ "AdsNotifyCallback"
    Geändert von Majestic_1987 (04.12.2009 um 22:39 Uhr)

  6. #6
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Die AdsNotifyCallback ist der Delegate, der im AddNotification als UserData übergeben wird. Den kannst du ja nach deinen Vorstellungen erstellen.

    Den Code den ich im Beitrag vorher dargestellt habe, ist in der Funktion nötig, die auf das Event gelegt wird.

  7. #7
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Neals Beitrag anzeigen
    Übergebe doch einfach einen Delegate. Dann rufst du einfache den Delegate auf. Variabler kannst du das (glaube ich) nicht machen, denn darin kannst du alles umsetzten.

    Warum willst du überhaupt nachträglich das Objekt UserData nochmal ändern? Du möchstest doch einen Wert übergeben, den du später verwenden kannst. Im Event, welches auf die Notification reagiert, kannst du die UserData nicht nocheinmal wieder verändern.
    Ich schreibe mir eine Klasse, mit welcher ich Objekte vom Typ "SPS-Variable" erstellen kann. Im Konstruktor bau ich die Verbindung auf. So spare ich mir pro Variable viel Code. Allerdings müsste ich meiner Klasse eine Funktion nennen, welche bei Änderung der Variable aufgerufen werden soll. Diese muss natürlich je nach Variable anders sein, damit ich z.b. bei Variable 1 deren Wert in eine Textbox schreibe, bei Variable 2 deren Wert nutze, um eine Check-Box zu checken, etc.

Ähnliche Themen

  1. Beckhoff K-Bus
    Von demmy86 im Forum Feldbusse
    Antworten: 5
    Letzter Beitrag: 28.06.2011, 18:07
  2. Beckhoff K-Bus
    Von cas im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 04.02.2009, 10:26
  3. Beckhoff - ADS.ocx
    Von phil87 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 29.09.2008, 23:04
  4. Beckhoff CX und SQL
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 06.03.2008, 11:21
  5. Beckhoff
    Von Wilhelm im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 06.09.2005, 00:17

Lesezeichen

Berechtigungen

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