Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Commtimeouts w VC++ (WinAPI)

Beatles 03 Feb 2005 11:37 1220 1
  • #1
    Beatles
    Level 11  
    Witam.

    Pisze program, ktory komunikuje sie w Modbusie. W trybie RTU znak poczatku i konca ramki to 3xdlugosc trwania pojedynczego znaku. Ramka jest poprwana, jezeli pomiedzy kolejnymi odbieranymi znakami nie bedzie wiekszej przerwy niz 1.5xdlugosc trwania pojedynczego znaku.
    I tu lezy problem. Jak sprawdzac te odstepy. Standardowy timer ma za mala rozdzielczosc, wiec pozostaja timeouty.
    W MSDN'nie wyczytalem, ze po ustawieni SetcommTimeouts i wywolaniu instrukcji ReadFile, program powinienodczytywac tak dlugo, dopoki nie zostanie przekroczony timeout miedzy znakami (powinien tkwic w instruykcji ReadFile). Dla proby ustawilem timeout 1000ms (zebym mogl to kontrolowac), ale instrukcja ReadFile czyta natychmiast i konczy sie.
    Po ustawieniu Timeout 1000ms, chcialem wysylac pojedyncze znaki po kolei, ale on po odebraniu pierwszego konczy, pomimo iz timeout jest 1000ms (czyli powinien jeszcze tyle poczekac).
    Program pisze w Visual C++ (z elementami API).
    Ma ktos moze gotowa procedure na taki problem, fragment kodu lub inny pomysl jak to obejsc.

    Z gory dzieki

    Beatles

    Dodano po 10 [minuty]:

    Jeszcze jedno.

    Czy flaga FILE_FLAG_OVERLAPPED, ktora mam ustawiona ma z tym cos wspolnego?
  • #2
    Akane
    Level 27  
    jasne, FILE_FLAG_OVERLAPPED służy do niesynchronicznej transmisji, a sama funkcja odrazu powraca bez czekania
    hcom = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)