摘要:话说那个时候,自动化还没这么火,Modbus RTU,那可是个宝贝,谁要是会用,大家都会觉得,这个人,不得了,感觉啥都能搞定,现在想想,也挺有意思的,那时候做项目,就靠它了,协议这东西,说简单也简单,说难也难,得慢慢琢磨。
Modbus RTU工业通讯:那些年,我们一起搞过的自动化
话说那个时候,自动化还没这么火,Modbus RTU,那可是个宝贝,谁要是会用,大家都会觉得,这个人,不得了,感觉啥都能搞定,现在想想,也挺有意思的,那时候做项目,就靠它了,协议这东西,说简单也简单,说难也难,得慢慢琢磨。
Modbus RTU,传输数据,主机问,从机答,挺像相声,一个逗哏,一个捧哏,主机先说话,发个指令,从机听到,看看是不是叫自己,是自己,就回应,不是自己,就当没听见,特别像古代的传令兵,效率还挺高,有点像西门子PPI,还有那个DL/T645-2007,都是类似的套路,大家都在用。
通讯格式,有点复杂,十六进制,听着就头大,信息帧,一堆数字,地址码,功能码,数据区,CRC校验码,一个都不能少,地址码,一字节,1到247,0是广播,大家一起听,功能码,也是一字节,干啥用的,读写数据,都在这里面,数据区,就比较灵活了,参数组合,寄存器地址,数量,地址,数据,各种各样,CRC校验码,两字节,保证数据没错,不然,就白忙活了。
地址冲突,是个大问题,总线上,每个从机,地址都得不一样,不然,就吵起来了,谁也说不清楚,就像一个班级,有两个同名的,老师点名,谁也不知道叫谁,想想都乱,一定要注意,规划好地址,才能好好干活。
功能码,那是Modbus RTU的核心,八种常见操作,得搞明白,01H,读线圈状态,开关量,看看是开是关,02H,读离散量输入,也是开关量,但是是外部输入的,03H,读保持寄存器数据,存储一些参数,温度,压力,啥都有,04H,读输入寄存器数据,也是外部输入的参数。
写入操作,也很重要,05H,写单个线圈状态,控制一个开关,06H,写单个保持寄存器数据,改一个参数,0FH,写多个线圈状态,一次控制多个开关,10H,写多个保持寄存器数据,一次改多个参数,这些功能码,得熟记于心,不然,就会出错。
错误码,也是个麻烦事,校验错误,地址错误,直接不响应,啥也不说,其他错误,会返回错误码,告诉你,哪里出错了,错误帧格式,地址码,功能码加0x80,错误码,CRC校验码,一看就知道错了,01H,非法功能码,不支持这个操作,02H,非法寄存器地址,没有这个地址,03H,非法数据值,数据不对,04H,从机故障,从机坏了。
实际应用,是这样的,主机发命令,从机收到,地址对了,校验对了,就执行,然后返回结果,地址码,功能码,数据,CRC校验码,都有,地址不对,或者校验错误,就当没看见,啥也不说,挺傲娇的,这在工业现场,是常有的事。
咱们来个仿真案例,详细说说,01H,读线圈,主机发指令,地址码,功能码是01,寄存器起始地址,数量,CRC校验码,从机返回,地址码,功能码是01,字节计数,数据,CRC校验码,数据就是线圈的状态,0或者1,05H,写单个线圈,主机发指令,地址码,功能码是05,寄存器地址,写入的值,0或者0xFF00,CRC校验码,从机返回,地址码,功能码是05,寄存器地址,写入的值,CRC校验码,确认一下。
0FH,写多个线圈,主机发指令,地址码,功能码是0F,寄存器起始地址,数量,字节计数,数据,CRC校验码,数据就是多个线圈的状态,0或者1,从机返回,地址码,功能码是0F,寄存器起始地址,数量,CRC校验码,确认一下,02H,读离散量输入,跟读线圈差不多,只是功能码不一样,04H,读输入寄存器,跟读保持寄存器差不多,也是功能码不一样。
03H,读保持寄存器,主机发指令,地址码,功能码是03,寄存器起始地址,数量,CRC校验码,从机返回,地址码,功能码是03,字节计数,数据,CRC校验码,数据就是寄存器的值,16位的,或者32位的,06H,写单个保持寄存器,主机发指令,地址码,功能码是06,寄存器地址,写入的值,CRC校验码,从机返回,地址码,功能码是06,寄存器地址,写入的值,CRC校验码,确认一下。
10H,写多个保持寄存器,主机发指令,地址码,功能码是10,寄存器起始地址,数量,字节计数,数据,CRC校验码,数据就是多个寄存器的值,从机返回,地址码,功能码是10,寄存器起始地址,数量,CRC校验码,确认一下,这些操作,都要结合仿真软件,才能看得更清楚,Modbus RTU,说起来简单,用起来,还是有很多细节要注意的,大家都在想,这到底是怎么一回事,其实,就是熟能生巧,多练练,就明白了。
很多年过去了,现在自动化技术,越来越先进了,Modbus RTU,好像有点过时了,但是,它还是很多老设备的基础,还是有很多地方在用,不得不说,那些年,它确实帮了我们很多忙,它也见证了自动化行业的发展,很多人看完这个故事,都会去想,技术在进步,但是基础还是很重要的,Modbus RTU,就是一个很好的例子,大家都得学会它,才能更好地理解现在的技术,这就是Modbus RTU的故事,一个关于过去,现在和未来的故事,也算是那些年,我们一起奋斗的青春吧。
来源:电子小课堂一点号