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.

[Delphi] Comport4 Odczyt ciagu bajtów z bufora.

dex 06 Wrz 2010 23:47 2119 5
  • #1 06 Wrz 2010 23:47
    dex
    Poziom 27  

    W jakis sposób w comport4 odczytać, ciag bajtów z bufora jako typu bajtowego?

    Instrukcja

    comport1.readstr(dane,count)
    oraz z tego co sprawdziłem, także polecenie comport1.read(dane,count) , czyta kolejne bajty jako znaki.

    Kompilator wymusza zadeklarowanie wcześniej zmienną dane jako ansistring, shortstring jest niemożliwy.
    To stwarza problem, bo później wyświetlając taki kazdy odczytany bajt za pomocą labl1.caption:=strtohex(dane) otrzymuje na labelu liczbę(dla np pojedynczego bajtu) większa niż 1 bajtową. Zdaje się ma to miejsce od znaków większych decymalnie od 127.
    Przykład odebrana ramka binarnie i hex:

    Code:
       01011000   00000001   00000010   11010000   01100001   11011010

    Code:
    58 01 02 110 61 DA
    Czwarty bajt jest źle wyświetlony 110hex, zamiast D0 hex. Nie wiem może problem jest w konwersji str to hex??


    Code:
    function StrToHex(sString: string): string;
    
    var
    i,z : word;
    y:integer;

    begin
    for i:=1 to length(sString) do
      begin
        z:=ord(sString[i]);
        result:=result+' '+IntToHex( z , 2);
        end;
    end;


    -----------
    I głupie pytanie czy parametr count, jest zwracany przez funkcje jako ilość danych odczytanych z bufora, czy to parametr mówiący ile trzeba bajtów odczytać?

    0 5
  • Pomocny post
    #2 07 Wrz 2010 23:50
    190175
    Użytkownik usunął konto  
  • #3 08 Wrz 2010 00:14
    dex
    Poziom 27  

    Dzięi za odzew przemysle to, doszedłem że bład mam w funkcji strtohex. Muszę to obczaić.

    Pytanie odnośnie comaporta. Komenda comport.readstr oczytuje cały bufor. Wykorzystuje sie ją w procedurze wywołanej zdarzeniem /zazwyczaj/ OnCharRx.

    Skąd comport wie, że do bufora wpadl 1 bajt albo np 10 ? Jeśli zdarzenie OnRxChar aktywowane jest pierwszym bajtem, skąd wie ze cała ramka danych została już przesłana?

    Inaczej mówiąc jak rozpoznaje, że np gdy wysyłam z terminala z drugiego kompa 1 znak, ReadStr zwraca mi jeden znak, natomiat gdy mikrokontroler przesyła mi 6 bajtów ReadStr zwraca 6 znaków. Oba przypadki aktywowane są OnCharRx.

    Co w przypadku gdy kolejne bajty nie beda przesłane idealnie 'jeden za drugim' gdy np będą miedzy nimi jakies przerwy, niejednakowe.

    0
  • Pomocny post
    #4 08 Wrz 2010 00:43
    190175
    Użytkownik usunął konto  
  • #5 08 Wrz 2010 00:50
    dex
    Poziom 27  

    ComPort1.Readstr(znaki, count);
    Hehe, Parametr Count mam niezdefiniowany, nigdzie nie zadeklarowany, no i to działa..Myslałem że on zawsze czyta cały bufor. Czy jesli zdefiniuje parametr Count jako powiedzmy 6. I odczytam bufor przez ReadStr. w którym zostało wpisane tylko 2 bajty. Zostaną zwrócone mi 6 znaki czy dwa? Pytanie stąd gdyż czasami w ramce jest 1,5 a max 6 bajtów.

    0
  • Pomocny post
    #6 08 Wrz 2010 01:01
    190175
    Użytkownik usunął konto