Timer und RS232
-
Hi
I würde im Forum suchen, aber die Suche funktioniert momentan ja nicht...
Ich möchte einen Timer in einer MFC-Andwendung brauchen... Wie initialisiere ich diesen beim Standarttimer brauche ich ein hwnd aber das habe ich ja nich in der MFC oder?
mein 2. Problem ist:
Kann ich paralell (im Timer und in sonst in einer Schlauf) ein Zeichen über die RS232-Schnitstelle empfangen?Bitte helft mir...
-
-
addict schrieb:
Hi
mein 2. Problem ist:
Kann ich paralell (im Timer und in sonst in einer Schlauf) ein Zeichen über die RS232-Schnitstelle empfangen?Bitte helft mir...
Ja natürlich. Du startest einen Thread ( AfxBeginThread(...) ) und wartest dort auf andere Aktivitäten...
-
Das ist für mich nicht das Problem... Meine Bedenken liegen darin, dass wenn ich ein Zeichen empfangen will, der PC wartet bis der z.B 1 Zeichen bekommt...
Was ist aber nun, wenn ich in einer Schlaufe auf ein Zeichen warte und gliechzeitig wird der Timer aufgerufen und wartet auch auf 1 Zeichen.... Ist dies so überhaupt möglich? Wenn ja, welcher Programmteil empfängt das Zeichen dann????Wie kann ich sonst mehrere Threds starten und managen? Kann mir jemand dazu ein Beispiel geben?
Die Timerfunktion habe ich bereits begriffen...
Ich möchte aber nun eine Klasse machen, wo ich die wichtigsten Timer-Funktionen reinpacken möchte... Mein Problem ist, dass ich eine MFC-Anwendung und eine DirectX-Anwendung habe.. (Möchte diese Klasse in beiden Nützen) MFC ruft die Timer funktion aber anders auf, als eine DirectX-Anwendung...
Das Problem besteht bereits wenn ich eine neue Klasse anlege (nicht eine MFC-Klasse) Bereits dann funktioniert der Start des Timers nicht mehr, da man noch das Fenster-Handle mitgeben muss....Kann mir jemand bei diesen 2 Problemen helfen?
Vielen Dank!
-
Was ist aber nun, wenn ich in einer Schlaufe auf ein Zeichen warte und gliechzeitig wird der Timer aufgerufen und wartet auch auf 1 Zeichen.... Ist dies so überhaupt möglich? Wenn ja, welcher Programmteil empfängt das Zeichen dann????
Der, der als erstes anfragt ob ein neues Zeichen da ist (beide Thread müssen ja die ganze zeit warten-gucken-warten-gucken.. esw). Du musst dich da schon entscheiden wie du das machst. Ist halt nen syncronisiation-problem, aber schonmal gut das du das festgestellt hast
Brauchst du das Zeichen in beiden Funktionen? Dann könntest du vielleicht eine Schleife machen die guckt ob es was neues anliegt und dieses dann den beiden anderen Funktionen übergibt (oder diese aufruft). Aber zwei durcheinander lauschende Threads sind bestimmt keine gute Sache
Dein zweites Problem ist, das der Timer in der MFC-Klasse eine Funktion von CWnd ist, und wenn deine Klasse nicht von CWnd abgeleitet ist, dann hast du auch nicht den CWnd::Timer sondern "nur" den Timer von Windows, und der ist halt nen bischen komplizierter zu bedienen, kannst dem aber auch relativ einfach ne Funktion übergeben die bei jedem fälligen "Tick" aufgerufen wird..
-
Ok... Hier meine Idee hinter dem ganzen...
Ich brauche diese 2 Abfragen für folgendes:
Ich sende an einen Mikrokontroller einen Befehl. Danach wartet die Appl. bis der Kontroller die Rückmeldung gibt, dass der Befehl abgearbeitet wurde. (kann zwischen 1s und 10min dauern... den Timer brauche ich für eine Überprüfung ob die Funkverbindung zum Mikrokontroller noch stehet. Dazu wird jede Sekunde ein Zeichen gesendet, welches der Kontroller gleich zurücksendet...
Wie könnte ich es sonst lösen, dass die Applikation wartet, bis der Kontroller den Befehl abgearbeitet hat und zudem permanent die Funkverbindung testet?Ich muss die Verbidnung testen, da sich der Kontroller bewegt. Sollte der Kontroller die Reichweite verlassen muss dies dem Benutzer angezeigt werden...
Also wie löse ich dieses Problem am Besten???
-
Ich würde vorschlagen, auf jeden Fall nur EINEN Task zu implementieren, der auf der seriellen Schnittstelle lauscht. die Timerfunktion sollte nur das Testzeichen senden und eventuell einen 2. (Timeout-)Timer starten. Wenn der Lausch-Task das Testzeichen empfängt, dann löscht er den Timer wieder. Wird das Testzeichen nicht empfangen, dann schlägt der Timer zu und Du kannst den Anwender benachrichtigen.
Wenn der Lausch-Task ein anderes Zeichen empfängt, dann kanst Du es an die behandelnde Funktion weitergeben. Für sowas eignen sich Statusmaschinen recht gut.
Grüße, jokey
-
Diese Variante tönt nicht schlecht... Ich sehe aber ein Problem...
Die Funkverbindung (test) hat nur ein Zeichen. Die Rückmeldung vom Kontroller hat aber 11 Zeichen....
Weiter ist noch das Problem, wie ich die Applikation (schlaufe) zum Stehen bekomme, wenn ich nur im Timer die Zeichen empfange...Wie löse ich diese 2 Probleme?
-
addict schrieb:
Die Funkverbindung (test) hat nur ein Zeichen. Die Rückmeldung vom Kontroller hat aber 11 Zeichen....
das kommt ganz darauf an, wie der datenstrom von der rs232 aussehen kann. kann das einzelne zeichen auch in dem 11er-block auftauchen? gibt es trennzeichen zwischen den nachrichten? zeitverhalten?
äääh du schreibst was von einer funkverbindung. ist das was selbstgebasteltes? was gekauftes (wenn ja, poste bitte den link zur website). danke...
-
nei die Zeichen kommen nicht durcheinander!
Die Funkverbindung spielt für die Programmierung keine Rolle, da man diese einfach wie ein Kabel benützen kann.
Hier aber trotzdem der Link:http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=76&products_id=78Zwischen den Nachrichten gibt es kein Trennzeichen. Das einzige was noch bekannt ist ist, dass das Einzelne Zeichen im Sekundentackt gesendet und empangen werden soll (sovern die Funkverbindung besteht)
Die 11 Zeichen kommen unabhängig von dem einzelnen Zeichen zurück!
Die 11 Zeichen kommen in verschiedenen Abständen (ca. 2sek-10min für eine Rückmeldung) in dieser Zeit soll aber das einzelne Zeichen weiter geschickt und empangen werden...Hat jemand einen Lösungsvorschlag... Wie viele Zeichen haben im Buffer der RS232-Schnittstelle platz?