我现在练习485通讯,上面发送一端16进制数据,onComm事件能够触发,觉得应该有数据上传,因为下位仪表只有当接收到正确的上位机命令时,才开始发送数据。但我接收的数据怎么都是“??????????”啊,MSComm1.InBufferCount 显示长度也是21,和正确的长度不一样,这是为什么啊,请高手帮我指点一下啊

解决方案 »

  1.   

    但我接收的数据怎么都是“??????????”啊
    ---------------------------------------------------
    下位机既然发送的是16机制数据,上位机当然要使用16机制格式去接收了。如果你用文本方式接收,有可能就会得到乱码。
    MSComm1.InBufferCount 显示长度也是21,和正确的长度不一样
    -------------------------------------------------------
    MSComm1.InBufferCount=21表示串口接收缓冲区内收到了21字节长度的数据。你所谓的正确的长度是多少呢?下位机发送过来的字节数吗?
      

  2.   

    我的数据长度应该是53个字节啊,怎么显示是21了,是不是有些字节已经发送出去了啊,但是我设置的InputLen属性为0,应该是一次全部接受啊,数据格式为:
    7c 30 32 31 30 30 30 30 30 30 30 30 30 30 30 30 30 3a 34 38 3e 30 30 31 30 35 35 30 30 30 30 30 30 37 36 35 35 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 7d
      

  3.   

    刚才打错了,不好意思
    我的数据长度应该是36个字节啊,怎么显示是21了,是不是有些字节已经发送出去了啊,但是我设置的InputLen属性为0,应该是一次全部接受啊,数据格式为:
    cc 02 30 1c 00 20 06 03 07 07 56 08 00 00 00 00 00 00 0a 48 e0 01 05 50 00 00 07 65 53 00 a9 47 80 66 05 ee 
    这段接收数据是通过串口调试工具接收的,
      

  4.   

    上位机使用16机制格式去接收,怎么去做啊,那里有这个设置啊,各位高手们都是怎么处理十六进制发送和接收的问题的啊
    -----------------------------------------------
    MSComm1.InputMode=comInputModeBinary '=1你设置成二进制接收方式,然后再看看你的数据是否丢失!
      

  5.   

    下位机还没有发送完毕,OnComm 事件已经触发了。所谓全部接收是指进入缓冲区的数据全部转移到 Input 中。 如果你的数据包固定长度是 36 个字节,设置MSComm1.Rthreshold = 36。