Entwickler-Ecke

C# - Die Sprache - Funktion zyklisch aufrufen


C#David - Mi 25.07.18 09:06
Titel: Funktion zyklisch aufrufen
Hey Leute,

ich habe eine WindowsForms Anwendung geschrieben, in der ich zyklisch und in kürzestmöglichen Intervallen Daten aus einer SPS-Steuerung auslesen möchte und dementsprechend darauf reagieren möchte, z.B. die Hintergrundfarbe in einer der Forms je nach Wert der ausgelesen Daten, ändere. Welchen Ansatz/ Welche Funktionen sollte ich dazu verwenden? Wenn ich diese funktionalität in der Main-Fkt. unterbringe wird sie ja auch nur einmalig aufgerufen? Vielen Dank für eure schnelle Hilfe!


Th69 - Mi 25.07.18 09:30

Hallo,

die übliche Lösung dafür wäre ein Timer.
Du solltest aber die SPS-Kommunikation und die UI codetechnisch trennen, d.h. benutze einen der Timer aus dem System bzw. System.Threading Namensbereich (d.h. nicht den Windows.Forms.Timer). Per (eigenes) Ereignis (event) kannst du dann die Daten an die UI weiterreichen.

Je nachdem wie kurz deine Lese-Intervalle sind, macht es jedoch wenig Sinn, in kürzer als 250-500ms die UI zu aktualisieren (da du sonst damit die UI evtl. blockieren würdest). Und schon mal vorab: Aufrufe der UI aus einem anderen Thread (von dem System-Timer) mußt du dann per Invoke durchführen.


C#David - Mi 25.07.18 12:40

Okay...habe mir jetzt einen Überblick zu den tangierenden Themen, sprich Threads, Timer und Events verschafft. Und wie müsste das Event ausschauen, womit ich dann Daten an eine andere Form (UI) weiterleite?


Th69 - Mi 25.07.18 13:28

Lies dir mal unter "Lösung: ..." / "2. Ereignisse" in meinem Artikel Kommunikation von 2 Forms [http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] durch. Dort wird das Ereignis in SubForm definiert, welches dann aber analog zu deiner Klasse wäre (welche die Timer-Methode enthält).
Und du kannst dann einfach die entsprechend benötigten Daten als weitere Eigenschaften hinzufügen (und entsprechend den Konstruktor anpassen).