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+ComPort+MOTECH MT 4090

LiutenetMaria 05 Kwi 2011 15:24 1333 2
  • #1 05 Kwi 2011 15:24
    LiutenetMaria
    Poziom 28  

    Witam,

    Robię obsługę po RS-ie miernika Motech MT 4090.

    Miernik Ustawiony na Tryb Remote.
    I teraz kilka dziwnych rzeczy.

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Tak teraz wygląda program.
    ComPOrrt 3.0.
    Na ComMemo wyświetla tak: " 53.145 5.1536".
    Zaś do pliku zapisuje w rożnych liniach te dwie dane.
    " 53.145
    5.1536".
    A np w Button1.Label wyświetla" 53.145||"

    Skąd bierze się ta różnica?

    W dodatku nie wiem co jest z RXChar. Licznik określa ile razy zostanie wywołane zdarzenie. Po naciśnięciu przycisku "Pomiar" TForm1.BtnPomiarClick, licznik zostaje zwiększony o 2. Z tego co odczytałem AccesPort-cie przychodzą dane:
    20 35 33 2E 31 35 20 35 2E 31 35 33 36 0D 0A.
    Wydaje m się, że początek danych to spacja- hex20 są, dwie stad 2 razy RXchar. Natomiast koniec obu liczb oznaczony przez CR+LF.

    Jak teraz rozdzielić obie liczby aby wpisać do 2 rożnych kolumn do elementu F1book1??Liczba przychodzących bajtów jest różna.
    jak to wszytko ma się do bufora?

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. - arnoldziq

    0 2
  • #2 06 Kwi 2011 21:07
    redie
    Poziom 15  

    Ja bym Cię poprosił o to by kod był umieszczony w znacznikach "Code" lub "Syntax".

    Dwa ostatnie bajty to 0D 0A a więc 13 i 10 co jest znakiem złamania linii.
    W Button.Label takie znaki są właśnie przedstawiane jako kreski albo prostokąty.
    Wygląda na to że jest tak jak piszesz, tzn. liczba poprzedzona jest spacją a po niej jest 13 i 10 (dec). Więc wystarczy podziabać stringa uznając za miejsce do rozdzielenia bajty 13 i 10.
    Jest taka funkcja Pos() co zwraca indeks szukanego ciągu wewnątrz innego ciągu:

    Code:
    var
    
      integer p;
      Liczba1, Liczba2: stringl
    begin
      // Odczytujemy indeks znaków końca linii
      p := Pos( #13#10, RevS );

      // sprawdzamy czy wogóle został znaleziony
      if p > 0 then
      begin
        // i dzielimy na dwie części
        Liczba1 := RevS;
        Liczba2 := RevS;
        Liczba1 := Delete( Liczba1, p, Length(Liczba1) );
        Liczba2 := Delete( Liczba2, 1, p+1 );
      end;
    end;

    0
  • #3 07 Kwi 2011 10:39
    LiutenetMaria
    Poziom 28  

    Robię tak, że z tego co przychodzi usuwam spacje z początku i zkońca, oraz znak CR i LF. W RxChar licznik liczy ilość wystąpienia zdarzenia. Jeśli licznik=1 wyświetlanie w memo1 jeśli licznik=2 w memo2.

    Natomiast mam inne pytanie.
    Jeśli w BtnPomiar.Click
    mam pętle:

    comPort1.WriteStr(czytaj);
    while
    do aa=false,

    a zmienna aaa jest ustawiana w Rxchar, to czy zdarzenie RXChar zostanie wogóle obsłużone? Czy działa to jak przerwanie, które wystąpi podczas, gdy program jest w pętli? Czy nie ma możliwości przerwać tej pętli?

    0