modbus rtu vc++ mscomm串口调试助手

malloc_love_ 2012-12-07 09:55:47
看了一些资料,对modbus还是没理解透彻,例如01 01 00 80 00 04 3c 21
其中01代表从设备地址,第二个01代表读线圈状态的命令,00 80代表起始地址,00 04代表要读的寄存器个数,也就是从0080开始读连续的四个,3c 21是CRC校验码
我上面的理解正确么?如果正确,直接使用串口调试助手,以16进制发送01 01 00 80 00 04 3c 21这种序列就可以了吗?为啥没返回信息呢,是我发错了么,理解错误了么?很纠结,请求帮助,万分感谢!!
...全文
394 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个卡卡 2013-12-03
  • 打赏
  • 举报
回复
这个我明白楼主意思,问题是现在想实现:只输入01 01 00 80 00 04到输入框,能自动加上高低crc校验位再发出去,等待rtu返回的数据,毕竟我没法知道所有输出帧的crc校验位?求大神解答,如何在简单的串口mfc通讯里加上这样功能?
RealInfo2012 2013-01-08
  • 打赏
  • 举报
回复
需要确定这么几个问题: 1.通讯协议时ModBus RTU的,不是ASCII的 2.串口设置与硬件一致,比如波特率、奇偶校验等 3.硬件本身支持1号命令。
schlafenhamster 2012-12-09
  • 打赏
  • 举报
回复
对 rtu 协议,即使 数据 没 错,也不一定 发送成功。 因为 rtu 要求 2个 发送 字节 间的 间隔 时间 小于 1.5T (?)。 也就是说 一旦 发送 中间是 不能 干 别的 事的。 ASCII 协议 就 没 这个 问题。
malloc_love_ 2012-12-07
  • 打赏
  • 举报
回复
换句话说,我用VC++ MFC里加mscomm组件自己写的话,应该如何弄?以前写过被动接受数据的,往外发的没试过
malloc_love_ 2012-12-07
  • 打赏
  • 举报
回复
引用 2 楼 w_xei 的回复:
1楼说得正确,应该是校验码和主从设置的问题,我用过没有问题
能说详细点么,我对modbus的东西部熟悉,看了一堆资料都太官方,一点不亲民,搞不懂。
malloc_love_ 2012-12-07
  • 打赏
  • 举报
回复
引用 1 楼 hdg3707 的回复:
01 01 00 80 00 04 3c 21 你械确保3c 21这个CRC码是正确的才能让下位机返回数据,另个还得是下位机是从机,上位机是主机,不然下位机也是不会收数据的
我就是用电脑上的串口调试助手给一个设备发的命令,串口调试助手(丁丁)那个软件,以16进制发送01 01 00 80 00 04 3c 21,CRC是设备厂商给的,应该错不了,我疑问的是直接用串口调试软件发数据对么,是不是有别的设置啥的
w_xei 2012-12-07
  • 打赏
  • 举报
回复
1楼说得正确,应该是校验码和主从设置的问题,我用过没有问题
hdg3707 2012-12-07
  • 打赏
  • 举报
回复
01 01 00 80 00 04 3c 21 你械确保3c 21这个CRC码是正确的才能让下位机返回数据,另个还得是下位机是从机,上位机是主机,不然下位机也是不会收数据的
pig357 2012-12-07
  • 打赏
  • 举报
回复
要先查看波特率什么的设置是否正确,再查看是否是通讯命令出错
hdg3707 2012-12-07
  • 打赏
  • 举报
回复
你看设备的通信方式,是不是多机格式,如果是多机格式,那么,发地址先把把校验位设成EVEN(表明是地址帧),然后发完地址后再把校验位设成SPACE(表明是数据帧),再发数据
水瓶座雨夕 2012-12-07
  • 打赏
  • 举报
回复

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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