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.

Borland C++ Builder + RS232 odbieranie z potwierdzeniem

piti___ 10 Lip 2006 16:29 4398 5
  • #1 10 Lip 2006 16:29
    piti___
    Poziom 23  

    Pisze aplikacje ktora ma odbierac stringi dlugosci 11 - 20 znakow z COMa, po odebraniu takiego stringu ma wyslac do mikrokontrolera 'a' jako potwierdzenie i odebrac nastepny string...

    Ilosc stringow jest w granicach od 4 do 8000 i zawsze calosc konczy sie znakiem 'X'

    Odebrane dane maja byc zapisane bez zmian na dysk.
    ...
    85 20180.00 tutaj wysylam potwierdzenie 'a' i otrzymuje kolejny string
    86 20160.00
    87 20160.00
    88 20140.00
    89 20160.00
    ...
    itp


    Probowalem odczytywac znak po znaku calosc bez potwierdzen ale przy wiekszej ilosci danych okolo 5kB program sie zawieszal.

    Probuje aktualnie z czyms takim:

    Code:

    do
                    {
                            Sleep(20);

                            //FlushFileBuffers(hCommDev);
                            Read_Comm(hCommDev, &Buffer_I[0], &Number_Bytes_Read, sizeof(&Buffer_I[0]));
                            FlushFileBuffers(hCommDev);

                            if(Number_Bytes_Read == 0)
                                    break;

                            if(Number_Bytes_Read > 0)
                            {
                                    fprintf(pstream,"%s",&Buffer_I);
                                    FlushFileBuffers(&pstream);
                                    Write_Comm(hCommDev, "a",1);
                                    //sprintf(buf,"%d",licznik_odebranych);
                                    ProgressBar1->StepIt();
                            }
                     }while(1);


    ale nadal nie dziala jak powinno.

    Czy ktos moglby podpowiedziec jak powinien wygladac taki program ? Korzystalem z przykladow w RS232C programowanie praktyczne.

    0 5
  • #2 15 Lip 2006 09:39
    kloszi
    Poziom 19  

    Najlepiej uzyj Xmodem-u.Xmodem zapewnia w wiekszosci przypadkow bezproblemowa trnsmisje danych. Standardowy Xmodem mozesz znalez w hyperterminalu Windowas (o ile sie nie myle to Start->Programy->...->Komunikacja->Hyperterminal)

    Ja uzywam
    http://www.menie.org/georges/embedded/index.html

    0
  • #3 25 Lip 2006 18:09
    Marianekk
    Poziom 13  

    Witam, musze zrobić komunikację AVRa z kompem przez RS232. Program na kompa chcę napisać w Borland C++ Builder ale narazie nie wiem jak się za to zabrać. Byłbym wdzięczny gdybyście podesłąli jakieś linki, tytuły książek oraz wszelkie inne materiały na ten temat.
    za pomoc z góry Wielkie dzięki.

    0
  • #5 31 Lip 2006 16:07
    duzamasa
    Poziom 14  

    Po pierwsze to nie widzę żadnego wyjścia z pętli. Ona jest nieskończona:

    Code:
    do
    
    {
    // ...
    } while ( 1 );

    Po drugie odradzałbym jednoczesne odbieranie i wysyłanie danych przez COM. Po trzecie, to w książce autor podał, że należy jeszcze odczytywać liczbę danych w buforze przy pomocy funkcji ClearCommError(...) i wówczas odczytywać dane.

    0
  • #6 15 Sie 2006 15:55
    dr_zygfryd
    Poziom 1  

    Wydaje mi sie ze jest blad w ostatnim parametrze funkcji Read_Comm.

    Jest:
    Read_Comm(hCommDev, &Buffer_I[0], &Number_Bytes_Read, sizeof(&Buffer_I[0]));

    Powinno byc:
    Read_Comm(hCommDev, &Buffer_I[0], &Number_Bytes_Read, sizeof(Buffer_I));

    0