01 01 00 80 00 04 3c 21
你械确保3c 21这个CRC码是正确的才能让下位机返回数据,另个还得是下位机是从机,上位机是主机,不然下位机也是不会收数据的

解决方案 »

  1.   

    我就是用电脑上的串口调试助手给一个设备发的命令,串口调试助手(丁丁)那个软件,以16进制发送01 01 00 80 00 04 3c 21,CRC是设备厂商给的,应该错不了,我疑问的是直接用串口调试软件发数据对么,是不是有别的设置啥的
      

  2.   

    能说详细点么,我对modbus的东西部熟悉,看了一堆资料都太官方,一点不亲民,搞不懂。
      

  3.   

    换句话说,我用VC++ MFC里加mscomm组件自己写的话,应该如何弄?以前写过被动接受数据的,往外发的没试过
      

  4.   

    http://blog.csdn.net/firy_lau1982/article/details/1416409这个会对你有帮助吧 
      

  5.   

    你看设备的通信方式,是不是多机格式,如果是多机格式,那么,发地址先把把校验位设成EVEN(表明是地址帧),然后发完地址后再把校验位设成SPACE(表明是数据帧),再发数据
      

  6.   

    对 rtu 协议,即使 数据 没 错,也不一定 发送成功。
    因为 rtu 要求 2个 发送 字节 间的 间隔 时间 小于 1.5T (?)。
    也就是说 一旦 发送 中间是 不能 干 别的 事的。ASCII 协议 就 没 这个 问题。
      

  7.   

    需要确定这么几个问题:
    1.通讯协议时ModBus RTU的,不是ASCII的
    2.串口设置与硬件一致,比如波特率、奇偶校验等
    3.硬件本身支持1号命令。
      

  8.   

    这个我明白楼主意思,问题是现在想实现:只输入01 01 00 80 00 04到输入框,能自动加上高低crc校验位再发出去,等待rtu返回的数据,毕竟我没法知道所有输出帧的crc校验位?求大神解答,如何在简单的串口mfc通讯里加上这样功能?