Timerfunktion bis zu 2 min?
-
Hallo
-----
Habe mich heute den ganzen Tag mit einem relativ kleinen Problem herum geärgert.
Selber hab ich es jedoch bis jetzt nicht hin bekommen. Daher bitte ich um eine kleine Hilfe.
Ich habe eine IO Karte in Visual C eingebunden, über welche ich 5V Ausgänge setzten möchte, um damit ein Gerät zu steuern.
Der Ausgang soll ca. 3 Sekunden - 2 min gesetzt bleiben bis er wieder abfällt. Diesen Wert würde ich gerne über ein kleines Fenster in Visual vorgeben können.
Dachte ich bekomme das über die Timer Funktion hin.
Leider war das jedoch nicht so !!!Die Ausgänge steuer ich mit folgender Einbindung an:
wasco_outportD(ID,TTL_OUT_A_32, 1);Mit folgender Einbindung setze ich den Ausgang wieder auf 0:
Praktisch wenn die Timer Vorgabe abgelaufen ist.
wasco_outportD(ID,TTL_OUT_A_32, 0);Wäre über jede Hilfe sehr dankbar.
Auch ein kleines Programmbeispiel wäre spitze.
MfG Tommy
-
sollte tun, zeig mal deinen code.
-
Dachte eigentlich das sollte so funktionieren.
Meine Laufzeit kann ich jedoch ner minimal verändern.
Bei mir als ca. 7-8 sek hängt sich das Programm auf, weil die Werte zu groß sind.
Kann mir vielleicht jemand erklären an was das hängt. Oder würdet Ihr den Timer komplett anderst programmieren? "DANKE"void CDialogzumAnsteuernDlg::OnClockwise //Zum Eingeben der Sollaufzeit
{
UpdateData(True);
float Berechnung;
Berechnung=60000;m_Anzahl=Berechnung * 1000/m_Zeit; //Um das ganze etwas zu vergrößern
wasco_outportD(ID,TTL_OUT_A_32,0); //Ausgang Board auf 0 setzten
SetTimer(1,m_Zeit,NULL);
}void CDialogzumAnsteuernDlg::OnTimer(UINT nIDEvent)
{
int timeout=0;
const int time_max=10;if (i<m_Anzahl)
{
do
{
wasco_outportD(ID,TTL_OUT_A_32,1); //Ausgang Board auf 1 setzten
timeout++, //Dieser soll nun bis zu 2 Minuten
} an bleiben
while(timeout<=time_max);
i++;
}else
{
KillTimer(1);
wasco_outportD(ID,TTL_OUT_A_32,); //Ausgang Board wieder auf 0 setzten
}CDialog::OnTimer(nIDEvent);
.
.
.
-
Welchen Wert hat m_Zeit?
-
BTW: In der Timerfunktion ne Schleife zu starten, die zwei Minuten lang rennt ist doof. Da solltest du besser nen extra Thread starten, dann hängt dein programm auch nicht.
-
Hallo
Ich möchte mit m_Zeit ne Zeit von 2sek - 2 min vorgeben können.
So lange sollte die IO Karte ein Ein-Signal am Ausgang bringen.
Nach dieser vorgegeben Zeit, soll die IO-Karte rückgesetzt werden.
Kannst Du mir vielleicht mal ein kleines Beispielprogramm schicken, wie man das hin bekommt?
Wäre Dir sehr dankbar!
Gruß Thomas
-
Wieso muss man
wasco_outportD(ID,TTL_OUT_A_32,1);so oft aufrufen?
Reicht es nicht, das einmal aufzurufen und dann nach zwei minuten wiederwasco_outportD(ID,TTL_OUT_A_32,0);?
-
Ja, das ist so wie Sie sagen.
Einmal aufgerufen bleibt die Karte aus ein.
Mit dem 2ten Befehl setzte ich Ihn dann erst wieder auf 0 zurück.
Bin recht "Neu" im Programmieren.
Wie würden Sie den Timer einsetzen?
Sollte doch so in der Art gehen, oder. -> Zumindest laut C++ Büchern
Gruß Tommy
-
Wenn ein Befehl reicht, dann würde ich es einfach so machen:
wasco_outportD(ID,TTL_OUT_A_32,1); SetTimer(0,Zeitzb2Minuten,NULL);und in OnTimer dann einfach wieder:
wasco_outportD(ID,TTL_OUT_A_32,0);P.S.: Wir duzen uns hier, ok?

-
Diesen Befehl kenne ich so noch gar nicht.
So einfach geht das mit der Zeit? Ist ja super!
Mein Timer läuft jedoch hier genau 2 min, oder?
Ich könnte aber doch auch inder 2ten Zeile ne Variable für 2Minuten einsetzen, oder? Ich bräuchte nämlich ein Eingabe Fenster, mit welchem ich ne Zeit wählwn bzw eingeben kann.
wasco_outportD(ID,TTL_OUT_A_32,1);
SetTimer(0,Zeitzb2Minuten,NULL);Kannst Du mir dazu vielleicht ein Beispiel schicken?
Das mit dem "Du" geht natürlich klar.
-
Der zweite Parameter von SetTimer ist die Zeit, nach der der Timer aufgerufen wird. In Millisekunden. Wo ist das Problem?
Ach ja:
http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/kap04.htm