TComPort
使用该组件时,我在 Delphi 中访问我的串行端口时遇到问题。它不能完全发送数据,但是一些数据会随机丢失,比如这个例子:
061:1268:-108:16596:-462:239:-75:0.000000:0.000000
061:
061:1240:-84:16616:-425:235:-54:0.000000:0。
061:1220:-96:16620:-418:224:-69:0.000000:0.000000:0.0055
061:1220:-72:16676:-420:246:-72:0.0
061:1100:-176:16688:- 460:224:-45:0.000000:0.000000:0.0056
061:1164:-144:16676:-442:23
061:1272:-136:16456:-413:219:-84:0.000000:0.000000
:096 :0.0056 06 :-152:16616
061:1096:-140:16656:-427:235:-88:0.000000:0.000000:0.0056
061:1200:-1
061:1192:-84:16664:-447:228:-60: 0.000000:0.000000:0.0055
061
061:1208:-116:16576:-421:233:-56:0.000000:0.000000
061:1208:-128:16584:-427:226:-94:0.000000:05:0.
061:1172:-264:16560:-436:257:-72:0.000000:
061:1196:-200:16724:-428:234:-78:0.000000:0.000000:0.0056
正确的数据应该包含 10 个值,如下所示:
061:1196:-200:16724:-428:234:-78:0.000000:0.000000:0.0056
请帮我解决这个问题。我是德尔福的初学者。
这是我的代码:
procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: String);
begin
allData := allData + Str;
if Pos (#$A, allData) > 0 then
begin
awal := 1;
batas := Pos(':', allData);
Delete(allData, awal, batas);
//Data Gyroscope
awal := 1;
batas := Pos(':', allData);
gyroX := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label2.Caption := gyroX;
awal := 1;
batas := Pos(':', allData);
gyroY := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label3.Caption := gyroY;
awal := 1;
batas := Pos(':', allData);
gyroZ := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label4.Caption := gyroZ;
//Data Accelero
awal := 1;
batas := Pos(':', allData);
accX := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label6.Caption := accX;
awal := 1;
batas := Pos(':', allData);
accY := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label7.Caption := accY;
awal := 1;
batas := Pos(':', allData);
accZ := Copy(allData, awal, batas-1);
Delete(allData, 1, batas);
Label8.Caption := accZ;
//Data GPS
awal := 1;
batas := Pos(':', allData);
Lat := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label10.Caption := Lat;
awal := 1;
batas := Pos(':', allData);
Long := Copy(allData, awal, batas-1);
Delete(allData, awal, batas);
Label11.Caption := Long;
awal := 1;
palingAkhir := Pos(#$A, allData);
Alt := Copy(allData, awal, palingAkhir-1);
Delete(allData, awal, palingAkhir);
Label12.Caption := Alt;
//Showing to Memo
Memo1.Text := Memo1.Text + Str + #$D;
SendMessage(Memo1.Handle, EM_LINESCROLL, 0, Memo1.Lines.Count);
end