SPCOMM 接收称重仪串口数据,ReceiveData每6秒返回2048字节数据

快乐老猫 2008-05-29 02:36:11
利用SPCOMM与梅特勒8142PRO+通讯,本来以为很简单的通讯代码,结果在现场测试发现问题如下:

设置1200波特率无数据返回,设置4800、9600波特率,每间隔6秒钟返回一批数据,数据包长度2048,每段数据18字节,返回的数据包格式是正确的,数据包前后衔接正常。

显然是SPCOMM没有良好的分割数据帧,导致仅在输入缓冲区溢出前才引发ReceiveData事件。
不知道有什么良好的解决方法?实在不想用mscomm。
...全文
177 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oushengfen 2008-05-31
  • 打赏
  • 举报
回复
呵呵,所有设置应该匹配,而且超时应该进行设置,要有相应的协议,COM这东西就自己写也只有这么多的事情.
大大怪老张 2008-05-31
  • 打赏
  • 举报
回复
嗯,也许是 控件实现机制的问题。
plax0850 2008-05-31
  • 打赏
  • 举报
回复
我以前也遇到过,所以spcomm控件不适合于连续发送数据的上微机软件开发,建议用pcomm.dll来做,只需要做一个接收的线程就OK.还有其他的串口控件,可以设置事件触发条件,也可以解决该问题.
xiesongwu126com 2008-05-31
  • 打赏
  • 举报
回复
学习下.........
快乐老猫 2008-05-30
  • 打赏
  • 举报
回复
8142pro的波特率允许值是300、1200、2400、4800、9600,当设置1200(默认值)时候没有响应,4800、9600有数据接收。
但是每6秒一次2048字节的数据包,根据计算,发现4800、9600模式下真正的数据传输量是一致的。
实在是郁闷,6秒的反应速度没有人会接受的。
PS:计算机和称重仪的串口参数设置是一致的。
快乐老猫 2008-05-30
  • 打赏
  • 举报
回复
现在以9600波特率,用SPCOMM连续发100组(每组18字节)模拟数据,用TCommPortDriver去接收,能收到31组数据包,每组56、70字节不等,效果比SPCOMM强了一些。
ChinaOk 2008-05-29
  • 打赏
  • 举报
回复
ReadIntervalTimeout 这个属性

另外,波特率不能随便设啊。 上位机下位机要一致啊。
ChinaOk 2008-05-29
  • 打赏
  • 举报
回复
设置一下SPCOMM 的ReadTimeOut 属性。
iamduo 2008-05-29
  • 打赏
  • 举报
回复
波特率再设置大一点呢?
快乐老猫 2008-05-29
  • 打赏
  • 举报
回复
补充一下:测重仪的参数已经设置过,而且用网上下载的测重软件测试良好,能够连续的显示变化数据。

1,593

社区成员

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

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