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

Ergebnis 1 bis 3 von 3

Thema: C#: Variablen Polling vs. AddDeviceNotification

  1. #1
    Registriert seit
    07.05.2010
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!
    Ich mach mir schon seit Tagen Gedanken was besser ist, bzw. wie es eventuell von Beckhoff vorgesehen ist.

    Bisher habe ich immer mit Strukturen und Notification-Handels gearbeitet und bin dabei auch gut gefahren, weil ich dadurch relativ wenige Handles hatte (stcEingaenge beinhaltetet z.B. Alle 100 Eingangsmerker).

    Jetzt hab ich ein Programm vorliegen von anno 2003 bei dem die Variablen diskret angelegt sind. (Also 100 einzelne Bools). Das Programm bleibt bestehen, kommt nur ein bissle was dazu, aber die HMI wird komplett neu in C# gemacht.

    So, da kommt mein Problem: Der Rechner ist auch von 2003 (733Mhz und 128Mb Ram....mein CX1020 hat mehr unter der Haube...).

    Wenn ich nun so arbeite wie immer heisst das 100 Vars-->100 Notification Handles->100 Calback-Aufrufe ==> Da ist mächtig was los.

    Hier stellte sich mir die Frage: Was ist eigendlich prinzipiell besser:
    1. Alle Variablen beim Notification Handler anzumelden
    oder
    2. Eine Extra Polling-Thread aufzumachen, der dann alles von der SPS per AdsRead einliest und dann selbstständig auf Änderungen prüft


    Hab 1. schon umgesetzt mit ca 800 Notifcation Handles, und es geht recht lange (15-20s) bis alle Handles angemeldet sind, bzw. noch etwas länger bis beim Beenden alle wieder freigegeben sind. Die warscheinlich auftretende NotificationEvent-Schlacht hab ich noch gar nicht untersucht...

    Was mein ihr? Wäre Pollen eine Alternative?

    Gruß
    Kauabunga
    Zitieren Zitieren C#: Variablen Polling vs. AddDeviceNotification  

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

    Standard

    Hallo Kauabunga, (Ninja-Turtles? )

    ich würde dazu tendieren, die 100 boolsche Variablen in eine Struktur oder Array zusammenzufassen und dies dann jeweils mit einem einzigem Handle und einer einzigen Notification (OnChange) abzurufen. Damit solltest du nurnoch 8 Handles und 8 Notification zu je 100 Byte benötigen. Wenn du die Boolean sogar noch in Words zusammenfasst würdest du auf 8 x 13 Byte runter kommen.

    Die Lösung Handle+Notification ist vom Handling etwas aufwendiger, da Handles erzeugt, dann Notification angemeldet werden müssen. Dafür hast du es später sehr einfach und der Server schickt dir immer bei Änderung die neuen Daten zu. Beim Polling würdest du zyklisch die Daten abrufen, auch wenn sich nichts geändert hat und du würdest mit jedem Polling 2 Telegramme versenden. Die Notification benötigt nur ein einziges Telegram.

    Bei sehr vielen Notifications solltest du versuchen das OnNotification-Event nicht zu blockieren indem du möglich schnell in einen anderen Thread wechseln.
    Zum Anlegen der vielen Handles gibt es noch das Sum-Command. Damit kannst du mehrere Commands zusammen packen und in einem Telegramm versenden.

    Gruß, Neals

  3. #3
    Kauabunga ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.05.2010
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Neals!
    (Ninja-Turtles? )
    <-- ja, eingedeutscht

    Die 100 Bools waren nur beispielhaft. Es handelt sich eher um ca. 850 Variablen, hauptsächlich real und bool, teilweise kreuz und quer. Dazu kommen dann noch ca. 300 weitere die geschrieben werden, die laufen aber über normale Handles.

    Den Ansatz von dir hatte ich bisher bei meinen Projekten verfolgt, da habe ich aber bereits vor dem erstellen des SPS Programmes an die HMI gedacht und alles in anständige Structs gepackt. (Thematisch orientiert: Alles vom Roboter in ein Struct, usw).
    Nur jetzt steht das Programm ja von 2003 und es soll so bleiben und "never touch a running system".
    Somit wäre eine Lösung alle 850 Schnittstellen Variablen in eine Struktur umzuladen, was aber auf die CPU Leistung geht. Bei der Annahme das 50% Real sind kopieren wir dann 425*4Bytes +425*1 Byte = 2125 Bytes umher. Die zwei vorhandenen array[1..100] of Real mal gar nicht mitgerechnet, die bekommen direkt ein eigenes NotificationHandle.

    Versteht mich bitte nicht falsch, ich will hier nicht mein Projekt gelöst haben.

    Vielmehr Zweifel ich an meiner bisherigen Auffassung:
    • Polling--> unnötig viel Daten, hoher Traffic ==> Blöd
    • Notification --> Daten nur wenn sie sich geändert haben, Traffic verteilt sich ==> DIE Lösung.

    Meines Erachtens trifft das nur zu, wenn ich Structs/Arrays einlese. Wenn die Daten diskret abgefragt werden steigt der Traffic mit der Notification.
    z.B. Pro SPS-Zyklus ändern sich 1000 Variablen. Hat beim Pollen zwar 1000 Lesetelegramme zur Folge, aber sonst nichts. Bei Notification kommen auch 1000 Telegramme raus, aber die HMI muss dazu noch 1000 Events verarbeiten.
    Liegen die 1000 Var in einem Struct hat das nur eine Notification pro SPS-Zyklus zur Folge, d.h. Eine Eventverarbeitung in der HMI --> Weniger Stress, besser.

    Nur wie gesagt müsste ich dazu alle Vars in der SPS umladen. Adressmapping ist zwar auch ne Lösung, mach ich aber nicht so gern. Die Nachverfolgbarkeit der Variablen sinkt gewaltig, hohes Fehlerrisiko beim Adressverteilen bezüglich Speicherüberlappung. Und dann lass da mal einen anderen ran...

    Hab ich da irgendwo nen Denkfehler drin?


    Zum Anlegen der vielen Handles gibt es noch das Sum-Command.
    Das hatte ich mir diese Woche schon angeschaut, aber noch nie eingesetzt.
    Aus diesem Grund kam ich auch ins Grübeln, weil ich ja per Summenkommando eigendlich ein performantes Pollen hinbekommen sollte. Ich pack dann alle Leseanfragen in zwei Summenkommando und hol dann die Daten rein.
    Darum der Gedanke: Ist eventuell Pollen mit Summenkommando DIE Lösung?!? Keine Events. Einfach zyklisch reinlesen und dann in der HMI auf Änderung überprüfen.

    Mal davon abgesehen, dass auf meiner Runtime von 2003 TwinCat V2.9 läuft und die das Summenkommando noch nicht kann. Aber eventuell kann man ja updaten.

    Immer diese Grundsatzfragen...

    Vielen Dank schon mal für eurere Anregungen.
    Gruß
    Kauabunga

Ähnliche Themen

  1. ANY Variablen
    Von rsu76 im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 31.08.2010, 14:18
  2. Variablen
    Von Anger im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.04.2010, 15:12
  3. Antworten: 5
    Letzter Beitrag: 30.11.2009, 10:27
  4. DB Variablen -> WinCC
    Von Insane im Forum HMI
    Antworten: 2
    Letzter Beitrag: 01.09.2009, 10:38
  5. IN-Out Variablen
    Von 1schilcher im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 10.07.2007, 12:03

Lesezeichen

Berechtigungen

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