• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphiSPCOMM接收数据不完整!该如何解决

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 
SPCOMM 接收数据不完整!
我作了一个 读取地磅数据的程序,是用spcomm接收的!

总共有五台地磅,其他4台地磅数据读取都正常。
但是有一台接收数据的时候,总是接收不到完整的数据,基本上小于100的数据都读不到,
比如:地磅上显示1234,但是接收到的数据是12。
  地磅上显示60,接收不到数据。
 有时地磅上什么东西都没有,但是显示接收到 5 。

这个地磅用原来硬件供应商提供的程序可以正常工作。
用我写的程序,偶尔也能正常读到数据(用程序测试了半天,有几次是正常的,但就是不知道什么原因)。


------解决方案--------------------
OutX_XonXOffFlow/InX_XonXoffFlow:这个属性是指进行发送/接收时的软件握手标志,两个握手信号之间的数据被认为是通讯数据,收到握手信号后,通讯就中止了。
在一般通讯中,硬件已经具备了握手功能,所以无须软件握手,请设置为:FALSE;
与之相关的属性为:  
XOffChar,XOnChar;这是指握手的字节,一般使用默认字节就可以了。 
------解决方案--------------------
不是spcomm数据没接到,而是数据迟到了而以,你接串口接收数据要注意一点是,先将接进来的数据存入一个Buf里,然后根据协议判断数据是否完整,如果完整进行数据处理,否则串口一直处于数据接收状态直到数据接收整,但然你可以在这里加个超时设定,如果在60秒内还没有接到完整的数据,你可以重发送命令向下位机要数据


------解决方案--------------------
我用spcomm控件对托利多T800表作过开发,用move函数试试看。请注意,spcomm有一个很特别的属性,如果你的
通讯协议的停止位为1,则在spcomm的stopbit属性中要设为0。
自己再试试看,不行给我发电邮:[email protected],我把源程序拷给你

------解决方案--------------------
你用下面的方法试试看
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
S1:string;
begin
SetLength(S1, BufferLength); 
Move(Buffer^,PChar(S1)^,BufferLength);
Memo1.Lines.Add(S1); //接收RS232的数据并显示Memo1上
end;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab-simulink-simscape的直流电动机模型仿真发布时间:2022-07-18
下一篇:
matlab gui背景图片掩盖axes的解决方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap