Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] Odczyt wybranych danych z RS-232

stevie11 06 Wrz 2010 16:37 1278 9
  • #1 06 Wrz 2010 16:37
    stevie11
    Poziom 9  

    Witam,

    Z urządzenia odczytuję ciąg danych w postaci:

    $nazwa1,1234,abcd
    $nazwa2,1234,abcd
    $wazne,1234,abcd
    $nazwa3,1234,abcd

    Problem polega na tym, że nie wiem jak napisać program, aby w tym ciągu danych, program znajdował nazwę nagłówka: @wazne i odczytywał wartość z tej linijki.

    Z góry dzięki za porady i pomoc

    0 9
  • #2 06 Wrz 2010 16:46
    inventco.eu

    Poziom 29  

    Witam.
    Odbieraj ciąg do zmiennej i możesz użyć np. polecenia strncmp .
    Można też zmienne inkrementować po każdym znaku $ i dopiero później uzyć powyższego polecenia.

    Pozdrawiam
    Marek

    0
  • #3 06 Wrz 2010 17:20
    stevie11
    Poziom 9  

    Dziękuję, ale mam jeszcze jedno pytanie :)

    istnieje jakaś funkcja, która by zamieniała dane z bufora i wstawiała np do tablicy: buforowane[40] ?
    bo bym wtedy skorzystał z tego polecenia strncmp:

    np.
    static char buforowane[40];
    if(strncmp(buforowane,"$wazne",6)==0)

    0
  • #4 06 Wrz 2010 17:49
    Samuraj
    Poziom 35  

    Zna ktoś namiary na ciekawą klasę dzięki której nie będziemy musieli cały czas oczekiwać na dane.
    Coś podobnego jak CAsyncSocket.
    A może ktoś nakieruje w jaki sposób obsłużyć zdarzenie że nadeszły dane.

    0
  • #5 06 Wrz 2010 20:59
    maly_elektronik
    Poziom 23  

    Do tego czy nadeszły dane nadają się wątki :)

    A jak sprawdzić to czy one nadchodzą to kwestia systemu :)
    Pracujesz na unix'ie czy może na windowsie :?:

    0
  • #6 06 Wrz 2010 21:18
    Samuraj
    Poziom 35  

    Na tę chwile w Windowsie lecz końcowy produkt ma być na unix'a
    Na Windowsa piszę programy wspomagające gdyż jednocześnie pracuje nad hardware ja i oprogramowaniem. A w pracy mam Windowsa więc to wymusza taki a nie inny typ aplikacji.
    Tak myślałem nad wątkiem aby co jakiś czas sprawdzać czy nadeszły dane a aplikacji przekazać zdarzenie lecz jak na razie to dla mnie czarna magia :(

    0
  • #7 06 Wrz 2010 21:24
    stevie11
    Poziom 9  

    Wypad mi z tematu :P

    0
  • #8 07 Wrz 2010 17:01
    maly_elektronik
    Poziom 23  

    Jeśli windows to pamiętaj o WinAPI jeśli unix to struktura (niestety nie pamiętam jaka :( )
    W czym masz problem z wątkami (QT, Builder czy jakiś inny) :?:

    0
  • #9 08 Wrz 2010 10:07
    Samuraj
    Poziom 35  

    Z windowsem już sobie poradziłem, poszło łatwiej niż przypuszczałem - jak zawsze pomocne są przykłady takich rozwiązań. Problem był o tyle złożony iż nigdy nie miałem konieczności stosowania wątków i wszystkiego musiałem się nauczyć od początku.
    Muszę poszukać coś do unix'a gdyż tam dopiero stawiam pierwsze kroki.

    0
  • #10 08 Wrz 2010 13:17
    arkady25
    Poziom 16  

    Samuraj: czy mógłbyś podzielić się zdobytą wiedzą jak zorganizowałeś odczytywanie z portu szeregowego.
    Stoję przed problemem odbioru danych w paczce jak poniżej:

    Code:

    
    SR:00,0021ED0000071EEA,3231
    
    SDATA:0021ED0000071EEA,7E33,FFDC,FFDC,01,2727
    

    Każdy wiersz rozpoczyna się bajtem 0x02 i kończy 0x0d 0x0a 0x03.
    Interesujące mnie ciągi z drugiego wiersza to 7E33 i 2727.
    Generalnie gdybym miał całość w jakiejś tablicy, to wszystko co potrzebne powyciągam. Natomiast problemem jest fakt że dane te nie przychodzą jako odpowiedź na zapytanie, tylko w przypadkowym momencie (z punktu widzenia aplikacji na komputerze). Na obecną chwilę zastanawiam się nad metodologią odczytu portu gdyż przy "losowym" odczytywaniu bufora portu obawiam się trafienia w środek odbioru paczki. I nie wiem co wówczas zrobić.
    Pracuję na C++ Builder i korzystam z funkcji ReadFile.
    Myślę nad odczytywaniem wszystkiego co przyjdzie i składaniu w całość w osobnym buforze. Czy w ogóle zastanawiałeś się nad takim problemem ?

    Arkady25

    0