ComPort使用问题:怎么我丢失了数据?(会者不难耶咳) (50分)

  • 主题发起人 主题发起人 懒少爷
  • 开始时间 开始时间

懒少爷

Unregistered / Unconfirmed
GUEST, unregistred user!
用ComPort打开com口连接仪标,
发出工作命令:
// b 是BYTE型
b:=8; //start a job
ComPort1.Write(b,1);
然后会有数据不断进入,直到一个工作结束

读取:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
b:byte;
begin
ComPort1.read(b,1);
..... // 把b存我一个数据里
end;

检查数据发现总是丢失后半段数据,也就是在仪标上开始的数据被存到数据组,但后来的不见了!
请问我这样用comport对吗?如否,应如何用?
THANK YOU!
 
> 但后来的不见了
那么你贴 把b存一个数据里 这段代码吧
 
谢谢PiPi
原来是这样的,不可能在这里出问题 :
F1,F2,F等全局变量 为WORD型
数组是DOUBLE型
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
b:byte;
begin
ComPort1.read(b,1);

if isLow then //交替读两个数
begin
F1:=b;
isLow:=false;
exit;
end else
begin
F2:=b;
isLow:=true;
F:=F1+F2*256 //合成一个
end;
setlength(TestData,length(TestData)+1); //扩大数组
distance:=distance+length(TestData)/TPM; //不要考虑这一句

TestData[length(TestData)-1].Force :=F;
TestData[length(TestData)-1].Time :=distance;

end;
 
不懂通讯的东东 ~

提前!
 
> ComPort1RxChar(Sender: TObject; Count: Integer)
Count应该是等待读入的字节数吧,你一次才读入1个字节,不大好吧
应该 for i:=1 to Count do .........
这样一个事件就读入count次(每次一个字节)
或者一次把count字节读出来
 
高!的确是高!就是高!!分全是你的!
还有其他几位大虾也帮了我但没有进来,在此谢过.
 
后退
顶部