eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDo tych co tu piszą w C++ Re: Do tych co tu piszą w C++
  • Data: 2012-01-26 18:25:55
    Temat: Re: Do tych co tu piszą w C++
    Od: Robert Zemła <m...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 25-01-2012 14:15, 4CX250 pisze:
    > W C++ piszę taki mały programik do odczytywania pomiarów z miernika RLC.
    >
    > Wszystko w WinApi.
    >
    > Najpierw muszę to urządzenie zainicjować i robię to tak:
    >
    > strcpy ( Buffer_write, "//\x1B""2\x0A" ); // polecenie ESC2 - przejście
    > urządzenia w tryb REMOTE
    > WriteFile( hPort, Buffer_write, strlen ( Buffer_write ), &ile, 0 );
    >
    > strcpy ( Buffer_write, "*CLS;ese 255\x0A" ); // Wyzerowanie urządzenia
    > WriteFile ( hPort, Buffer_write, strlen ( Buffer_write ), &ile, 0 );
    >
    > Następnie chcę sprawdzić czy komunikacja z urządzeniem jest prawidłowa.
    > Robię to pytaniem o identyfikator urządzenia.
    >
    > strcpy ( Buffer_write, "*idn?\x0A" ); // Niech się urządzenie teraz
    > przedstawi
    > WriteFile ( hPort, Buffer_write, strlen ( Buffer_write ), &ile, 0 );
    >
    >
    > W następnej części programu mam problem. Nie bardzo wiem, co zrobić aby
    > program odczekał skutecznie tylko tyle czasu ile jest niezbędne, aż w
    > buforze odbiorczym COM pojawią się wszystkie dane wysłane przez urządzenie.
    >
    > Narazie robię to w bardzo nieelegancki sposób za pomocą opóźnienia
    >
    > Sleep (1000);
    >
    > Jest coś skuteczniejszego?
    >
    > Dalej w programie jest tak.
    > Po odczekaniu 1000ms program przystępuje do odczytania bufora.
    > Najpierw sprawdzam ile jest znaków w buforze COM do odczytania
    >
    > Result = ClearCommError( hPort, &Errors, &ComStatus );
    > Buffer_lenght = ComStatus.cbInQue; // Sprawdzenie ile bajtów oczekuje w
    > buforze wejściowym COM
    >
    > Następnie czyszczę bufor odbiorczy ale nie wiem czy to jest właściwy
    > sposób.
    > Gdy tego nie robiłem to były w nuforze śmieci z poprzednich odczytów
    >
    > strcpy(Buffer_read, " "); // Wyzerowanie bufora odbiorczego
    >
    > Ostatecznie odczutuję zawartośc bufora
    >
    > Result = ReadFile( hPort, Buffer_read, Buffer_lenght, &ile, NULL );
    >
    > Wynik trafia do okienka na ekranie
    >
    > SetWindowText( g_hText1, Buffer_read );
    >
    > Pominąłem polecenia if oraz while które pilnują aby nie próbować czekać
    > w nieskończoność aż coś się pojawi w buforze.
    > W analogiczny sposób odpytuję urządzenie o wyniki konkretnych pomiarów
    > wartości RLC i tam też mam taki sam problem.
    >
    >
    > Marek

    Żeby było elegancko powinieneś powołać osobny wątek do samej komunikacji
    z COM'em a do synchronizacji z GUI powinieneś użyć zdarzeń. Co do samej
    obsługi COM'a, powinieneś ustawić jeszcze time'outy. Przy okazji
    poczytaj o trybie overlapped i sam zdecyduj co ma największy sens w
    Twojej aplikacji.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: