[Delphi] Problem z odbiorem danych z rs232

0

Witam.
Od kilku dni męczę się z pewnym programem w delphi.
Praca programu polega na tym, że otrzymuje on dane przez port rs232 i ładuje je do tablicy, a następnie wyświetla za pomocą komponentu VtChart na wykresie.
Odznaczona jest opcja 'build with runtime packages'.
Program używa komponentu ComPort i wykresu VtChart.

Utworzyłem plik exe, który instaluje wszystkie wymagane ( tak sądzę ) biblioteki oraz kontrolki ActiveX do system32.
Program uruchamia się już na każdym komputerze ( dodałem plik exe z bibliotekami i bat który rejestruje kontrolkę)

Program odpala się, można zmienić opcje ale nie pobiera/otrzymuje danych z portu rs232[COM].

Testowałem Hyper Terminalem i na komputerach z Delphi działa poprawnie.

Arkadiusz

0

wklej tu to co dostajesz w memo

0

Dane, które są odbierane w formie 32 bitowych ramek zakończonych znakiem entera ładowane są przez program do ListBoxa.

Załączam link do projektu:
http://www.przeklej.pl/plik/1-zip-0015ag6i240i

0

eeee
co to za tcomport??
weź sobie ściągnij normalny http://sourceforge.net/projects/comport/
a nie na jakiejś wersji płatnej, która dodatkowo nie działa

0

Program jest napisany w Delphi 7 Personal, teraz spróbuje napisać w Delphi 2010, ale nie wiem jak zainstalować na tej wersji ComPorta 4.

0

Napisałem program ponownie tym razem z ComPortem 3.0 w wersji FULL.

Sądzę, że mój problem wynika z tego że program nie rozpoznaje znaku 'enter'
Otrzymałem pół ramki i koniec danych.

Jaki znak odpowiada enterowi ?
Znalazłem w internecie różne wersje ( 6 )

  • #$0A
  • #$0D
  • #$0D#$0A
  • #10
  • #13
  • #10#13

//CZYTANIE DANYCH (BUFOR, PROCEDURY OBCINANIA KONWERSJI ORAZ RYSOWANIA)
Oto moja procedura odpowiedzialna za wykrywanie entera:

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
s:String;
begin
Comport1.ReadStr(s,32); //
if s=#$0D#$0A then
begin
ramka1:=Bufor;
ListBox1.Items.Add(Bufor);
Bufor:='';
s:='';
Obcinanie(Ramka1);
Konwertowanie;
Rysowanie;
end
else
begin
Bufor:=Bufor+s;
s:='';
end;

end;

0

to nie sa rozne wersje tylko roznie zapisane.
generalnie:
#10 - znak LF (znak sterujący powodujący wysunięcie papieru o jeden wiersz)
#13 - znak powrotu karetki (znak powrotu do początku linii).
na ogol te dwa znaki wystepuja razem w postaci #13#10

//nie jestem pewien bo dawno sie comportem nie zjamowalem ale...

  Comport1.ReadStr(s,32);
  if s=#$0D#$0A then

czemu czytasz stringa o dlugosci 32 znakow i sprawdzasz czy jest rowny stringowi o dlugosci dwoch znakow?
powinno bys chyba cos w stylu:

ComPort1.ReadStr(s, Count);
bufor := bufor + s;
//i tu sprawdzasz czy ostatnie 2 znaki bufora sa rowne #13#10
0

Dobrze sprawdzę jak będę miał dostęp do sprzętu.
Nurtuje mnie jedna sprawa :
na komputerze z zainstalowanym Delphi i ComPortem działa wszystko dobrze ( zarówno przez hyper terminal jak i bezpośrednio z układu ), natomiast na komputerze bez Delphi i ComPorta nie działa ( można odpalić plik exe, ustawić i otworzyć port i na tym koniec - program tak jakby nie pobierał danych ).

0

Skorzystałem z komponentu ComDataPacket i problem został rozwiązany.
Był problem z wykrywaniem znaku enter.

Dziekuję za pomoc.

Pozdrawiam Arkadiusz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1