Entwickler-Ecke

Basistechnologien - CAN Nachrichten senden mittels Timer


freilicht - Do 29.01.09 18:17
Titel: CAN Nachrichten senden mittels Timer
Guten Tag liebe Entwickler,

ich schreibe gerade ein Programm in C#, das CAN Werte an eine Bremseinheit sendet.
Der CAN-Adapter ist von Peak Systems und Dank C# DLL ist das Ansprechen dieses Dongle ein Leichtes.

Um den zeitlichen Abstand zwischen 2 Nachrichten einzustellen, verwende ich das Timer-Objekt.
Das funktioniert auch ganz gut, jedoch kommt das Programm teilweise ins Schwanken und hält den Abstand nicht mehr (z.B. wenn ein anderes Programm, z.B. MS Office Ressourcen verbraucht).

Gibt es eine Möglichkeit die Priorität meiner Applikation zu erhöhen oder könnte ich anstatt dem Timer auch eine andere Funktion nutzen, um den Abstand zwischen den CAN-Nachrichten zu definieren?

Ich habe nämlich festgestellt, dass wenn ich zwei oder mehrere Timer laufen lasse, die CPU-Last dramatisch steigt.

Ich bedanke mich schon einmal für eure Hilfe und wünsche noch einen schönen Feierabend.

freundliche Grüße
Jan


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Do 29.01.2009 um 17:21


Kha - Do 29.01.09 20:43

:welcome:

System.Windows.Forms.Timer, nehme ich an? Versuch es mal mit einem System.Threading.Timer, der sollte genauer sein.
Da den Flaschenhals wohl die Kontextwechsel darstellen, könntest du auch mit Thread.Priority experimentieren. Oder du gibst mit Thread.SpinWait in einer Schleife die Zeitscheibe gar nicht mehr vorzeitig ab, dann hast du allerdings 100% CPU-Auslastung.


freilicht - Fr 30.01.09 09:24

Vielen Dank!

Ja, ich verwende derzeit den Windows.Forms.Timer.
Ich werde Anfang kommender Woche mit dem Threading.Timer experimentieren und meine Erfolge oder auch Misserfolge hier berichten :)