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

Ergebnis 1 bis 7 von 7

Thema: ADS C# AddDeviceNotification Parameter

  1. #1
    Registriert seit
    19.04.2013
    Beiträge
    30
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    Ich habe da mal wieder ne vielleicht auch ne dumme frage.

    Aber ich frag trotzdem


    Also ich versuche grade mich mit AddDeviceNotification zu beschäftigen, und das was ich nicht verstehen kann ist folgendes.


    Ich mache erst ein Handle zu der Variable Lampe

    WZ_Lampe = adsClient.CreateVariableHandle(".Lampe");

    und dann möchte ich das wenn sich die Variable ändert das es gemeldet wird also so >>>
    hConnect[0] = tcClient.AddDeviceNotification(".Lampe", dataStream, 0, 1,AdsTransMode.OnChange, 100, 0, tbBool);
    tcClient.AdsNotification += new AdsNotificationEventHandler(OnNotification);

    und das was ich hier nicht verstehen kann wozu die Variable tbBool (rot markiert) wenn es sowieso alles zu den EventHandler gesendet wird und da der Value zu einer textBox oder auch immer zugewiesen wird. also so>>>

    private void OnNotification(object sender, AdsNotificationEventArgs e)
    {
    e.DataStream.Position = e.Offset;
    string strValue = "";

    if (e.NotificationHandle == hConnect[0])
    strValue = binRead.ReadBoolean().ToString();

    Oder geht das alle viel einfacher ich verstehe auch nicht wenn ich schon ein Handle zu der Variable habe warum muss ich mit tcClient.AddDeviceNotification die variable als string übergeben??

    Ich hoffe ihr habt mich verstehen können.

    Danke

    Mit freundlichen Grusen
    J
    Zitieren Zitieren ADS C# AddDeviceNotification Parameter  

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

    Standard

    Dein Handle WZ_Lampe brauchst du nicht. Das wird ja auch in dem Beckhoff-Beispiel das du hier genommen hast nicht erzeugt.

    Die Variable tbBool ist keine Variable sondern ein TextBox Control (die Deklaration steht ja auch im Beckhoff Beispiel ganz oben im OnLoad Event des Forms).
    tbBool wird beim Erstellen der Notification als Userdata Object übergeben damit dort gleich beim feuern des OnNotification Events der Wert der überwachten Variable (MAIN.boolVal im Beispiel, .Lampe bei dir) übergeben werden kann.

    D.h. du hast eine TextBox mit dem Namen "tbBool" in der der Zustand deiner Variable angezeigt werden soll. Du erstellst eine DeviceNotification für die globale Bool Variable ".Lampe" und merkst dir den dazugehörigen Handle. Dann legst du fest, welche Methode aufgerufen werden soll wenn ".Lampe" einen neuen Wert hat (hier OnNotification). Da mehrere DeviceNotifications den Event auslösen können, musst du prüfen welche der "Zünder" war. Das machst du mit dem gemerkten Handle. Jetzt wird der Wert der Variable aus dem Stream gefischt und in dem temporären String gespeichert.
    Wenn du jetzt das Beispiel noch einen Tick weiter liest, siehst du am Ende von OnNotification das UserData-Object in eine TextBox gecastet wird (tbBool). Der Text Eigenschaft von tbBool wird dann der String mit dem Wert deiner Variablen übergeben, der dann im Form angezeigt wird.


    Einfach nochmal das ganze Beispiel in ruhe durchgehen.
    Geändert von MasterOhh (16.05.2013 um 15:15 Uhr)

  3. #3
    Registriert seit
    19.04.2013
    Beiträge
    30
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK Super

    Das habe ich auch fast genau so verstanden den Handle habe ich nur gemacht damit ich auch später über die Variable schreiben bzw lesen kann z.b adsClient.WriteAny(WZ_Lampe, int.Parse(tbDint1.Text));

    Und jetzt ne frage zu OnNotification Events, da ich aber den Wert der Variable nur abfragen (zur weiter Verarbeitung) möchte und nicht in die textbox schreiben, Was soll ich dann anstatt tbBool eingeben wenn ich es weglassen dann bekomme ich ne Fehlermeldung.

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

    Standard

    Du kannst in dem Event auch gleich eine Methode aufrufen die irgendetwas mit dem Wert deiner Variable anstellt. Wenn du das UserData Objekt nicht brauchst kannst da ja einfach null übergeben.
    Oder du übergibst eine Variable in welcher der Wert zwischengespeichert werden soll (Typecasting nicht vergessen). Du kannst auch Delegaten übergeben oder, oder, oder. UserData ist ein object, da geht also so ziehmlich alles rein (wenn man es denn braucht).

  5. #5
    Registriert seit
    19.04.2013
    Beiträge
    30
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke

    Ich bin C# nicht mächtig habe halt nur Grundlage aber das hilft mir schon sehr viel weiter.

  6. #6
    Registriert seit
    19.04.2013
    Beiträge
    30
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Leute

    Da bin ich wieder mit den nächsten Problem.
    Ich wollte jetzt die ganze Notification in eine Klasse packen, damit ich überblick behalten kann.
    Das Problem ist aber das wenn es in einen Eigene Klasse kommt, dann kann ich nicht mehr auf die Controller in XAML zugreifen, da man auf XAML nur über MainWindows zugreift. Oder wie kann ich das Ereignis von Notification zur MainWindows leiten ohne es immer aufzufordern.
    Ich weiß das ist bestimmt einfach aber ich kriegst nicht hin.

    Also wenn mal einer Lust und Zeit hat währe es Super wenn ihr mir ein Beispiel zeigen würdet.

  7. #7
    Registriert seit
    04.06.2013
    Beiträge
    23
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das sollte über WindowsMessages möglich sein:

    http://msdn.microsoft.com/de-de/libr...(v=vs.80).aspx

Ähnliche Themen

  1. C#: Variablen Polling vs. AddDeviceNotification
    Von Kauabunga im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 19.05.2012, 11:10
  2. TwinCat ADS
    Von Bigchaqy im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 08.10.2011, 23:46
  3. ADS: SDO lesen über ads ocx von Visualisierung
    Von traveler im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.01.2011, 11:00
  4. Twincat ads
    Von Simo im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 23.03.2009, 17:49
  5. Per ADS einen Nicht-ADS-fähigen Server ansprechen!
    Von Superfly im Forum CODESYS und IEC61131
    Antworten: 16
    Letzter Beitrag: 14.05.2008, 17:10

Lesezeichen

Berechtigungen

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