Interrupthandler für "Endschalter"



  • Hallo, ich brauche dringend Hilfe!
    Ich schreibe gerade meine Diplomarbeit, und diese wird in C++ implementiert.

    Und ich würde gerne einen Interrupt Handler schreiben, der reagieren soll,
    wenn Endschalter gedrückt werden.
    Ich hab das ganze zwar schon mit polling implementiert, aber das ganze
    verschlingt einfach zu viel performance.

    Ich hab zwar schon einiges probiert jedoch bin ich auf keine Lösung gekommen.

    Mein Betriebssystem: Microsoft Windows XP
    Entwicklungsumgebung: Microsoft Visual C++ 6.0

    Ich bitte euch um Hilfe! Danke im voraus!

    MFG Harry

    //Edit: Titel geändert



  • harry00018 schrieb:

    Mein Betriebssystem: Microsoft Windows XP
    Entwicklungsumgebung: Microsoft Visual C++ 6.0
    ...

    Dann solltest du am besten auch im "Microsoft-Subforum" = WINAPI nachfragen, denn
    mit Standard C++ geht da nix. 😉



  • Ich denke, dass das nichtmal mit der WinAPI geht. Interrupts können doch unter Windows nur im Kernelspace behandelt werden. Du müsstest also deinen eigenen Treiber schreiben. Ist es das wert? Unter Windows brauchst du dafür das Driver Development Kit. Such mal nach DDK auf den Microsoft Seiten.



  • ProgChild schrieb:

    Ich denke, dass das nichtmal mit der WinAPI geht. Interrupts können doch unter Windows nur im Kernelspace behandelt werden. Du müsstest also deinen eigenen Treiber schreiben. Ist es das wert? Unter Windows brauchst du dafür das Driver Development Kit. Such mal nach DDK auf den Microsoft Seiten.

    NACHFRAGEN im WINAPI-Forum dürfte aber sicher Ergebnisse bringen. 😉



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • wo haste denn den schalter angeschlossen?



  • Es ist eine Achse mit jeweils einem Endschaltern an den Enden.

    lg harry



  • harry00018 schrieb:

    Es ist eine Achse mit jeweils zwei Endschaltern an den Enden.

    lg harry

    Ich glaub er meinte, an welchem Anschluss hast du den Schalter angeschlossen?



  • Wie lange würde man für die Entwicklung eines solchen
    Treibers brauchen ??

    lg harry



  • Upps, hab mich verlesen.

    Mit den PINs der RS232. d.h. in diesem Fall mit den Eingängen DSR und CTS.

    lg harry



  • harry00018 schrieb:

    Mit den PINs der RS232. d.h. in diesem Fall mit den Eingängen DSR und CTS.

    dann brauchste keinen treiber. einfach in einem separaten thread mit 'WaitCommEvent' auf die pins warten (vor mit 'SetCommMask' die bits einschalten). eventuell musste's noch entprellen aber ich glaub' das geht auch ohne...



  • Muss ich das 'WaitCommEvent' bei meinem Thread in eine Schleife
    packen?

    lg harry



  • guckst du:
    ➡ Communications Events

    Greetz, Swordfish



  • Wenn ich mit WaitCommEvent die Eingänge DSR und CTS überwache,
    lässt sicher der Ausgang RTS nicht mehr schalten????

    lg



  • Windows ist kein Echtzeitbetriebssystem!!!
    Wenn es also wirklich zeitkritisch und deterministisch sein soll, dann lass die Finger Weg von Windows! Nimm eine SPS, damit bist Du besser bedient...



  • Naja, bei nur 2 Endlagenschaltern, die ein Signal produzieren sollen (RTS) reicht eine simple Logik z.B. mit Dioden und Widerstand.
    Deren Ergebnis kann man dann immer noch in den PC einlesen.

    Blackbird



  • Wenn ich mit WaitCommEvent die Eingänge DSR und CTS überwache,
    lässt sicher der Ausgang RTS nicht mehr schalten????

    doch, geht.
    Hast 4 Eingaenge und 3 Ausgaenge.

    Blackbird



  • Jochen Kalmbach schrieb:

    Nimm eine SPS, damit bist Du besser bedient...

    du hast schon mal bessere tips gegeben... 🙄



  • harry00018 schrieb:

    lässt sich der Ausgang RTS nicht mehr schalten????

    Meiner Erfahrung nach kannst du den RTS nicht schalten. Du kannst nur ständig auf den COM-Port schreiben um ihn gesetzt zu halten.

    Greetz, Swordfish



  • EscapeCommFunction (hPort, SETRTS); // RTS setzten Pin7
    EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten Pin7
    

    Blackbird


Log in to reply