Autor Beitrag
C#David
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Mi 25.07.18 09:06 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4052
Erhaltene Danke: 839

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4052
Erhaltene Danke: 839

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mi 25.07.18 13:28 
Lies dir mal unter "Lösung: ..." / "2. Ereignisse" in meinem Artikel Kommunikation von 2 Forms 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).