利用SPCOMM与梅特勒8142PRO+通讯,本来以为很简单的通讯代码,结果在现场测试发现问题如下:设置1200波特率无数据返回,设置4800、9600波特率,每间隔6秒钟返回一批数据,数据包长度2048,每段数据18字节,返回的数据包格式是正确的,数据包前后衔接正常。显然是SPCOMM没有良好的分割数据帧,导致仅在输入缓冲区溢出前才引发ReceiveData事件。
不知道有什么良好的解决方法?实在不想用mscomm。

解决方案 »

  1.   

    设置一下SPCOMM 的ReadTimeOut  属性。
      

  2.   

    ReadIntervalTimeout 这个属性另外,波特率不能随便设啊。 上位机下位机要一致啊。
      

  3.   

    8142pro的波特率允许值是300、1200、2400、4800、9600,当设置1200(默认值)时候没有响应,4800、9600有数据接收。
    但是每6秒一次2048字节的数据包,根据计算,发现4800、9600模式下真正的数据传输量是一致的。
    实在是郁闷,6秒的反应速度没有人会接受的。
    PS:计算机和称重仪的串口参数设置是一致的。
      

  4.   

    现在以9600波特率,用SPCOMM连续发100组(每组18字节)模拟数据,用TCommPortDriver去接收,能收到31组数据包,每组56、70字节不等,效果比SPCOMM强了一些。
      

  5.   

    呵呵,所有设置应该匹配,而且超时应该进行设置,要有相应的协议,COM这东西就自己写也只有这么多的事情.
      

  6.   

    我以前也遇到过,所以spcomm控件不适合于连续发送数据的上微机软件开发,建议用pcomm.dll来做,只需要做一个接收的线程就OK.还有其他的串口控件,可以设置事件触发条件,也可以解决该问题.