DELPHI用mscomm写的程序读数不完整的问题 20

代码如下:procedureTForm1.FormCreate(Sender:TObject);beginwithMSComm1dobeginCommPort:=3;//... 代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
with MSComm1 do
begin
CommPort:=3; //使用Com1
Settings:='9600,n,8,1'; //设置通信口参数
InputLen:=22; //设置Input一次从接受缓冲区读取全部字节
InBufferCount:=0; //清除接受缓冲区
OutBufferCount:=0; //清除发送缓冲区
InBufferSize:=512; //设置接受缓冲区为50字节
//设置发送缓冲区为2字节
RThreshold:=1; //设置接受一个字节就产生OnComm事件
InputMode:=comInputModeBinary; // 设置接受数据模式为二进制方式
//判断通信口是否打开
PortOpen:=True ;
end;

end;
procedure TForm1.btn2Click(Sender: TObject);
begin
MSComm1.Output:='O(00,02,1)E';
sleep(500);
edt2.Text:=MSComm1.input;
mscomm1.OutBufferCount:=0;
end;

procedure TForm1.MSComm1Comm(Sender: TObject);
begin
sleep(2);
edt1.Text:=MSComm1.input;
MSComm1.InBufferCount:=0; //清除接受缓冲区
mscomm1.OutBufferCount:=0; //清除发送缓冲区
end;
在使用过程中返回值都是11个字符为一组,在快速信号反回时遇到取值不完整的问题(只取到部分值),但是用sscomm,不管怎么取值都是正确的,请问是哪里出了问题?
展开
 我来答
lizhongjian05
2016-11-21 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:171
采纳率:75%
帮助的人:61.6万
展开全部
可能是延迟,或者本次还没有传输完毕就执行下一次的传输了,建议你在接受的时候设置一个等待
更多追问追答
追问
或者本次还没有传输完毕就执行下一次的传输了   是这样的没,因为在以毫秒为单位的情情况下同时会有好几个信号进来,每个信号都是11个字符长度,这样的话长度就不完整了,请问能不能对他们进行区分?
追答
要是多个信号同时传来应该设置排队,或者线程会好一点
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式