[西门子] Modbus RTU通信是什么?真的要学报文吗?

[复制链接]
查看137 | 回复0 | 2024-8-27 10:56:34 | 显示全部楼层 |阅读模式
导读:我们作为一个自动化从业人员,一路走来从基本的逻辑指令再到功能指令,然后再到通信功能的应用。谈到了通信大部分人还是觉得比较难,特别是初学者听到了一些譬如“轮询”“报文”这些概念更是一头雾水。其实,我刚开始也觉得Modbus通信这玩意儿挺难的,特别想搞懂,那时候也迫于没人指导,也走了很多弯路,现在我分享一些经验,希望能帮助到大家!
01通信功能的意义
首先还是明确一下通信的功能是为了读写数据,比如在实际的现场需要读取水表或者电表的的数据,都可以通过通信的方式。比如用通信的方式控制变频器,这样的话比接线这种方式更方便,因为只需要2根线就可以控制变频器的频率、正反转、读取变频器的电流、电压等,如果采取硬接线的方式就比较难实现。

所以通信就是交互数据的功能,否则通信则没有意义。


02为什么要轮询
其实轮询很简单,比如上图有一个1200的PLC需要控制两台变频器,当PLC往1#变频器发送数据让变频器启动时,不能往2#变频器中发数据,因为它是半双工的方式,同一时间只能访问一个变频器。
所以我们要采用轮流询问的方式控制两台变频器,而轮询的方式有好几种,但是最终的目的还是错开时间读写设备的数据。
常用的轮询方式一:使用上一个站点设备的完成位和错误位去轮询下一个设备。在图中可以看到第一个“Mater”指令的完成位和错误位去触发第二个“Mater”指令。这样采用接力的方式去轮询的好处就是当设备第一时间发送完了数据就可以很快的触发第二个指令,时效性非常高,不浪费时间。

而很多朋友的疑问是,利用完成位触发可以理解,为什么还要并联错误位,是因为如果有两个设备,那访问设备时出错了(比如断电了),也要保证下一个设备的数据正常读取。


常用的轮询方式二:使用时间方式错开,然后轮询。这个方法更加简单易懂,假如说有两个“Mater”指令,然后利用定时器错开时间,比如0-500MS的时候触发第一个“Mater”指令,501-1000ms的时候触发第二个“Mater”指令。这样就错开了两个指令的时间。
但是这种方式的轮询是程序简单,但是时效性不能保证,因为也许你发送数据根本就不需要500ms时间,而你却通通采用500ms时间间隔轮询。
03报文是什么,什么时候要用到报文?
报文这个东西听起来很玄乎,对初学者确实不好理解,而越是不好理解东西初学者就越想着去专研。而这个东西,我的建议是如果是初学者,你可以先不用去理解报文这玩意儿,而在文章的前面的篇幅中也没介绍报文,是因为西门子的PLC把报文这玩意已经用指令封装好了,咱们只需要会用指令即可。
比如有的人会给我们讲功能码的作用啥的,因为报文中就包含了各种功能码,其实这些功能码我们基本上用不到,我们只需要用40001-49999这种地址,当然还有00001-09999,10001-19999等这种地址,但是至少80%的情况我们都是使用40001-49999地址写程序。

所以最终咱们看到的程序就是调用库指令,也看不到我们所谓的功能码,报文等,最终程序就是这样子的。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则