eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDo tych co tu piszą w C++ Do tych co tu piszą w C++
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.n
    eostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    From: "4CX250" <t...@p...ornet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Do tych co tu piszą w C++
    Date: Wed, 25 Jan 2012 14:15:34 +0100
    MIME-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5512
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5512
    Lines: 63
    Message-ID: <4f200076$0$26710$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 80.55.236.85
    X-Trace: 1327497335 unt-rea-a-01.news.neostrada.pl 26710 80.55.236.85:65448
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:624323
    [ ukryj 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: