eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDo tych co tu piszą w C++ Do tych co tu piszą w C++
  • Data: 2012-01-25 13:15:34
    Temat: Do tych co tu piszą w C++
    Od: "4CX250" <t...@p...ornet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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

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: