公司购回一模块,该模块采用标准RS232串口,协议是:4或6字节包(每字节8位),每20msec发送一次,前4字节(0-255)为波形信号,后2个字节偶尔发送,为参数值,波特率:9600,无效验位,数据位8,1个停止位,我用MSCOMM控件初始化串口,添加了串口消息处理函数OnCommMscomm(),但不知道怎么接收这种不固定长的字节包,请各位多帮忙,我是第一次编串口处理程序,在网上搜也没收到,有的说用sleep()延时;有的说设置RThreshold属性值为4,在OnComm事件中首先预读4字节,然后判断这4字节是不是完整的数据帧,若不是则设置InputLen为2,然后使用GetInput()读取缓冲区,该数据与前4个字节数据合为一帧,但我不知道怎么判断是否为一帧,谢谢各位,最好能给出接收该协议的代码,谢谢!!!!!!!

解决方案 »

  1.   

    我用串口助手十六进制显示,自动换行,得到以下显示,请各位帮忙看看:
    2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 802F 55 3C 80 2F 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 2F 55 3C 80 30 55 3C 80
    2F 55 3C 80 30 55 3C 80 2F 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80
    30 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 2F 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    2F 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 2F 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80
    30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 30 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80
    31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 32 55 3C 80 31 55 3C 80 31 55 3C 80 31 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 31 55 3C 80 32 55 3C 80 32 55 3C 80 31 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 31 55 3C 80 32 55 3C 80 32 55 3C 80 31 55 3C 80 32 55 3C 80 32 55 3C 80 31 55 3C 80 32 55 3C 80 32 55 3C 80
    31 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
    32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80 32 55 3C 80
      

  2.   

    协议中有没有说数据类型
    short?
    int?
      

  3.   

    不好意思,刚才的数据可双胞胎不正确,模块是先有波形值,后才有参数值,刚才的时间不够,我后来用的时间长了,发现了四字节和六字节,请大家看看:
    88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 A0 00 88 55 3C 80 00 44 88 55 3C 80 11 68 88 55 3C 80 20 00 88 55 3C 80 30 14
    88 55 3C 80 40 00 88 55 3C 80 50 00 88 55 3C 80 60 2A 88 55 3C 80 70 00 88 55 3C 80 80 00 88 4B 3C 80 90 00 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80
    88 55 3C 80 A0 00 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 4B 3C 80
    88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 88 55 3C 80 A0 00 88 55 3C 80 00 5D 88 55 3C 80 11 36 88 55 3C 80 20 00 88 55 3C 80 30 14
    第一行我这样看起来(88 55 3C 80) (88 55 3C 80) (88 55 3C 80) (88 55 3C 80) (88 55 3C 80) (88 55 3C 80 A0 00) (88 55 3C 80 00 44) (88 55 3C 80 11 68) (88 55 3C 80 20 00) (88 55 3C 80 30 14),再往下看有时间是四字节有时是六字节
      

  4.   

    既然是每隔20ms发送一次,你收到接收数据事件后,sleep(10),再读取数据就行了。
    一般情况下都会有帧尾,别人的模块你没法改只能这样了
      

  5.   

     我用了sleep(10)'调试后出现 'sleep(10)' : undeclared identifier,难道'sleep(10)'不是标准函数吗?还需要自己定义吗?
      

  6.   

    我用了' sleep(10)'调试后出现 'sleep(10)' : undeclared identifier,难道'sleep(10)'不是标准函数吗?还需要自己定义吗?