MODBUS的RTU程序怎样编写 点击:602 | 回复:2



流之江

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 42回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2014年3月07日
发表于:2014-03-16 17:01:16
楼主

请教一下,我现在练习编写RTU程序,看了产品的说明书对程序实例的解释,但没有想明白最后结尾的CRC那段怎么写,或依据哪里写。有经验的老师请帮忙推荐一些有直观实例的书,或者程序实例计算解释的程序资料给我一份。谢谢!




yishenbiao1

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 22回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2013年9月16日
发表于:2014-03-16 17:19:27
1楼

MODBUS说白了就是让你按照规定的格式来凑一段ASCII字符串。

他的格式定义如下:


第一个ASCII 是“:”这个符号。他的ASCII是0x3A  (0x在VC中是16进制的意思)

第二个ASCII是个地址,站号(也就是说,你这个上位机要发给哪个机器):比方我们发给“01”这个地址:0x30 0x31

第三个是功能码,也就是说你要通讯实现什么功能?读 啊,还是写啊?读的话读几个啊?写的话写几个啊?写哪啊?针对不同的功能,有不同的功能吗与其对应。。。。比方,我们要读 读的功能码是“0x01"  所以,0x30 0x31


我们要读哪个地址呢?你通讯的下位机会有MODBUS地址表给你的,查一下你要通讯的物品的手册,就找到了。。。比方我们要对0x4000这个地址读取  那么对应的ASCII就是 0x34 0x30 0x30 0x30


完事了之后,就是我们的CRC效验码了。。。(RTU的是CRC效验,ASCII的是LRC效验相对来说,LRC的容易一些。)

CRC效验的有一段程序  百度直接COPY之。。。


BYTE CRC(BYTE *PVOID)

{

}

这个会返回一个字节,比方返回了0x45   那么对应的ASCII就是  0x34  0x35


然后就是两个符号  VC里面是“\r\n” 对应的ASCII是0x13 0x10


也就是说我们这一串ASCII 是:“0x3A 0x30 0x31 0x30 0x31 0x34 0x30 0x30 0x30 0x34  0x35 0x13 0x10” 讲这一串ASCII用你的串口发出去,就是MODBUS RTU通讯了。

流之江

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 42回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2014年3月07日
发表于:2014-03-16 19:39:02
2楼

谢谢!受教了,前面的我都理解了,就是后面的校验这块不能理解怎样操作或理解转换,有点乱。呵呵


热门招聘
相关主题

官方公众号

智造工程师