k8055 Ereignis für Eingänge
-
Hallo zusammen:
Ich habe ein Problem bei dem ich nicht mehr weiter komme!
Ich habe eine I/O Interfacekarte (K8055 von Velleman). Ich programmiere mit dem CodeGear Boorland C++ Builder eine VCL-Formularanwendung:
Ich mochte folgendes erreichen:
Wenn ein TButton mit der Maus betätigt wird, soll auf der Interfacekarte der Ausgang 1 den Zustand "1" haben. Wenn der TButton mit der Maustaste wieder losgelassen wird, soll der Ausgang "0" sein. Außerdem soll der Ausgang wieder "0" werden, wenn während der TButton mit der Maus betätigt wird und der Eingang 1 den Zustand "1" hat.Das der Ausgang mit betätigtem Button aktiv wird, bzw. bei nicht betätigtem Button deaktiv wird, funktioniert soweit.
Ich weiß bloß nicht wie ich die Sache mit dem Eingang umsetzen soll.
Mein Problem ist, dass ich nicht weiß, welches Ereignis ich für die Abfrage des Einganges nehmen soll.Ich hoffe ihr könnt mir weiterhelfen !
Vielen Dank im Vorraus!
Gruß, Christian
-
da gibt es nur zwei prinzipielle Möglichkeiten:
1: Polling: Ständig den Eingang abfragen, z.B. in der Methode einer TTimer Komponente, oder besser
2: Interrupt/Nachricht...: Dazu müsste es irgenwie eine Möglichkeit geben z.B. eine CallBack Funktion für den Eingang 1 zu hinterlegen
-
Vielen Dank für die Antwort !
Da muss ich mal schauen ob ich das umgesetzt bekomme !
-
Ich habe es mit einem TTimer realisiert, funktioniert wunderbar,
vielen Dank !
-
Hi,
auch wenn es bereits gelöst ist, eine Frage hätte ich dazu.
Wie greifst Du auf das Board zu? Weil wenn Du die mitgelieferte DLL nutzt, musst Du Dir doch über sowas keine Gedanken machen, das macht doch die DLL für Dich.Gruß myerscola
-
Ich habe die K8055d_c.h und die K8055.dll in mein Projekt mit eingebunden. Somit stehen mir Befehle zur Verfügung mit denen ich u.a. auf die Ein- und Ausgänge zugreifen kann. Mein Problem war aber, dass wenn ich die Geschichte in der VCL-Formularanwendung programmiere, ich ein Ereignis brauche um z.B. die Eingänge abfragen zu können.
-
Ok, das hättest Du ja aus der CBuilder Beispiel Application fast 1:1 übernehmen können:
void __fastcall TForm1::Timer1Timer(TObject *Sender) { Timer1->Enabled = false; // long Data1; // long Data2; long i; // ReadAllAnalog(&Data1, &Data2); // AD1->Position = Data1; // AD2->Position = Data2; // Label4->Caption = IntToStr(Data1); // Label5->Caption = IntToStr(Data2); // Counter1->Text = IntToStr(ReadCounter(1)); // Counter2->Text = IntToStr(ReadCounter(2)); i = ReadAllDigital(); CheckBox3->Checked = (i & 1)>0; CheckBox4->Checked = (i & 2)>0; CheckBox5->Checked = (i & 4)>0; CheckBox6->Checked = (i & 8)>0; CheckBox7->Checked = (i & 16)>0; Timer1->Enabled = true; }
Der Timer im Beispiel ist auf 50ms eingestellt.