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?
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?