Wątek przeniesiony 2017-10-11 18:55 z Newbie przez furious programming. Powód: Niepoprawna kategoria forum

Odczyt danych przez port COM

Odpowiedz Nowy wątek
2017-10-11 11:01
xxzzzccc
0

Potrzebuję odczytać dane z urządzenia pomiarowego - jest to waga dla samochodów ciężarowych. Wysyłam co sekundę polecenie przez port COM:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  c: integer;
  str: string;
begin
  ComPort.WriteStr('<RN1>');
  c := Memo1.Lines.Count - 1;
  str := Memo1.Lines[c] + #13#10;
  WyslijDane(str);
  Memo1.Clear;
end;

W Memo dostaję odpowiedź taką:

<000011.10.1703:1021561       0       0       39540kg     1   32559>

Jak dobrać się do tych kilogramów? Używam komponentu ComPort 4.1. Próbowałem obrabiać to jako string - usuwałem niepotrzebne wartości z łańcucha, ale bez skutku - wyrzuca jakieś śmieci. Jak to zrobić?

W dokumentacji mam opis jak zbudowana jest odpowiedź z urządzenia:

[ < ] [ Kod błędu ] [ Dane ] [ > ] [ CR ] [ LF ]

Proszę o pomoc.

edytowany 1x, ostatnio: furious programming, 2017-10-11 18:55

Pozostało 580 znaków

2017-10-11 12:30
1

no przecież dostajesz otwartym tekstem wagę więc gdzie masz problem? Policzyć znaki, wyciąć tylko 39540kg, potem wywalić jednostkę i spacje i masz masę


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2017-10-11 12:44
xxzzzccc
0

Policzyłem, dane wysyłam do skryptu PHP na serwer. Coś się dzieje, że dostaje w ogóle jakieś inne wartości - losowe. Pobiera jakieś śmieci z Memo, czy coś w tym stylu.

Pozostało 580 znaków

2017-10-11 14:38
0

no ale to co mam ci wywróżyć co nie działa? Może tak jakiś kod byś pokazał


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2017-10-11 16:28
1

Tak poza konkursem napiszę, że korzystnie z jakiejkolwiek kontrolki wizualnej jako pojemnika do przechowywania danych jest bez sensu. Komponenty te służą do wyświetlania danych a nie ich przechowywania.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek, 2017-10-11 16:28
Problem w tym, że żadna standardowa (niebazodanowa) kontrolka w bibliotece nie jest przystosowana do podpinania zewnętrznych kontenerów, a przechowywanie danych w dwóch miejsach jest bez sensu. - furious programming 2017-10-11 20:53

Pozostało 580 znaków

2017-10-12 10:06
satq
0

Jaki to gokładnie model wagi ? Po ramce danych wygląda że zapis pomiaru jest staływystarczy copy...

Pozostało 580 znaków

2017-10-13 05:36
2

Nie copy bo nie wiadomo ile jest liczb ale jeżeli zawsze mamy w kg to może być pętla:

var
  sData: string;
  sWeight: string;
  i: Integer;
begin
  sData:= '<000011.10.1703:1021561       0       0       39540kg     1   32559>';
  i:= Pos('kg', sData) - 1;
  sWeight:= '';
  while sData[i] in ['0'..'9', ','] do
  begin
    sWeight:=  sData[i] + sWeight;
    Dec(i);
  end;
  ShowMessage(sWeight);
end;

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek, 2017-10-13 05:36

Pozostało 580 znaków

2017-10-13 11:15
Twardy stolec
0

lub jeśli rozmiar ramki jest stały

var
  sData: string;
  sWeight: string;
begin
  sData:= '<000011.10.1703:1021561       0       0       39540kg     1   32559>';
  sWeight:= Copy(sData,46,6);
  ShowMessage(sWeight);
end;
A jak będzie 1 kg? - kAzek 2017-10-13 12:14

Pozostało 580 znaków

2017-10-13 15:06
AntyKarakan
0
var
  sData: string;
  sWeight: string;
begin
  sData:= '<000011.10.1703:1021561       0       0           1kg     1   32559>';
  sWeight:= Copy(sData,46,6);
  ShowMessage(sWeight);
end;
edytowany 1x, ostatnio: furious programming, 2017-10-13 18:04

Pozostało 580 znaków

2017-10-16 08:00
0

Proponuje zajrzeć do dokumetacji wagi i opisu komunikacji
bo tak w ciemno to trudno powiedzieć jak to zrobić podział , czy zawsze ta sama pozycja czy lepiej separator.


Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność

Pozostało 580 znaków

2017-10-16 09:22
0

to jest stały ciąg, tzn. zawsze netto jest od pozycji a do b, brutto od c do d, tara od e do f, jednostka od g do h, itd. Dodatkowo na początku ciągu może być znak - natomiast puste miejsca uzupełniane są spacją. Nie pamiętam z której wagi jest to protokół ale po komendzie <RN1> coś mi się kojarzy, że kiedyś miałem z nim do czynienia i tam nie ma żadnej magii.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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