Laden...

Konzept für regelmäßige Kommunikation mit USB Gerät, Master/Slave-Stil

Erstellt von sth_Weird vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.257 Views
S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 13 Jahren
Konzept für regelmäßige Kommunikation mit USB Gerät, Master/Slave-Stil

Hallo,

Nach längerer Pause bastel ich privat mal wieder mit C# rum 😃
Ich habe ein USB Gerät angeschlossen (so eine Art Bedienpanel. Kann prinzipiell ohne weitere Probleme mit dem Gerät kommunizieren, kenne die Protokolle etc.
Es ist so, dass der PC quasi der "Master" ist, der das Gerät ("Slave") fragen muss, "wie ist dein Tastenzustand?" Und das Gerät liefert ein Byte-Array zurück, in dem die Tastenbelegung drin steht.
Das ganze will ich nun in eine Klasse/Dll packen, die ich von außen verwenden kann. Ich erstelle dann quasi eine Instanz der Klasse und rufe eine Funktion "start" auf, und wenn Tasten gedrückt wurden, dann triggert die Klasse (je Taste) ein Event.
Die Frage ist nun, wie realisiere ich Regelmäßigkeit die Abfragen? Sie müssen ja 1.) sehr häufig hintereinander kommen aber 2.) sollen sie den PC nicht so auslasten, dass das Hauptprogramm sehr stark gebremst wird (und blockieren darf sie schon garnicht).
Einfacher Timer??? Thread/Background Worker (wo?)???
Welche Strategie würdet ihr vorschlagen?

gruß & danke
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo sth_Weird,

kann das Gerät selbst keinen "Interrupt" auslösen bzw. ein Event feuern, wenn eine Taste gedrückt wird. Die "Alternative" Polling ist ja generell nicht so günstig.

herbivore

S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 13 Jahren

Der Datenaustausch muss vom PC gesteuert und zyklisch erfolgen. Das ist leider so vorgegeben und kann nicht geändert werden (fertige Dll von AVR/Microcontroller).

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

K
44 Beiträge seit 2006
vor 13 Jahren

Hallo sth_Weird,

ich habe für meine Heizungssteuerung auch einige USB Geräte im Einsatz.
Die müssen teils auch in sehr kurzen Intervallen abgefragt werden, da auch Impulse von Wasseruhren oder Stromzähler gezählt werden.
Ich habe das mit einer Klasse gelöst die einen Thread für das jeweilige Gerät startet.
Änderungen gebe ich dann an eine "threadsichere Queue", herbivore sei nochmals Dank gesagt dafür, weiter. Diese Queue wird dann vom Hauptprogram über einen Timer ausgelesen und ausgewertet.

Gruß

kuppi