求助:关于spcomm 接收数据的问题..急...分不够可以再加.谢谢

CHUKAI 2006-03-04 09:38:41
最近在做医院一台Elec 2010 (电化学发光)仪器的数据接受..每次发接受的数据解码出来都不对...请各位帮忙指导一下...
procedure TTestComFrm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
viewstring:string;
rbuf:array[1..8] of byte;
begin
//=============================================
viewstring:='' ;
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+ inttohex(rbuf[i],2)+'' ;
viewstring:='接收:'+ viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
end;
//=========以下是我的测试记录
我设了断点跟踪
move(buffer^,pchar(@rbuf)^,bufferlength);
这时的值是 0,57,1,85,0,6,0
最后得到的viewstring的值 是'05'
仪器上的输出的结果是 105 1407 CA125 18.06
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jethill 2006-03-09
  • 打赏
  • 举报
回复
我比较同意楼上老兄的意见,我做的读卡程序也是如此,延时时间要注意一下他给的相关协议。有的有要求,比如间隔等。
luxuewei5214 2006-03-08
  • 打赏
  • 举报
回复
我直接move(buffer^,rbuf,bufferLength)也可以取到数据,你要了解传输协议,在对数据分析,接受时要在发送后的100-200ms后,要延时,防止数据丢失。从仪器上显示的内容看,数据不止六个字节吧
aiirii 2006-03-04
  • 打赏
  • 举报
回复
var
iLen:integer;
begin
iLen := bufferlength;

move(buffer^,pchar(@rbuf)^,iLen );
for i:=1 to iLen do



0,57,1,85,0,6,0

105 1407 CA125 18.06

我估计,得到的值,可能是一个偏差而已,所以,
你要多测几次,才能找出标准值
cuteant 2006-03-04
  • 打赏
  • 举报
回复
move(buffer^,pchar(@rbuf)^,bufferlength);
换成move(buffer^,rbuf[1],bufferlength);试试

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧