都说搞PLC通讯头大,实则就是Modbus那几个最常见的坑没搞清楚。
这东西根本没那么玄乎,就是一套工业设备之间对话的“普通话”。

所谓主站从站,就是领导和员工。
PLC当领导(主站),发号施令;变频器、仪表当员工(从站),听指令干活、汇报数据。
接线用RS485双绞线,A对A,B对B,这谁都会。
但许多人死活连不上,就是忘了在通讯网络的最开始和最末端,给A、B线之间并上一个120欧的终端电阻。

距离一长或者设备一多,没这个电阻,信号反射回来就乱套了,数据全是错码,能让你调试到怀疑人生。
数据格式无脑选RTU,二进制传输,又快又稳。
那个ASCII码是把数据转成文本再传,纯属脱裤子放屁,速度慢一倍,除非老掉牙的设备指定要用,否则别碰。
最坑、最劝退新手的,就是寄存器地址。

设备手册上写着地址是40001,你照着往PLC程序里填,保准没反应。
记住,这个“4”开头只是个区域代号,代表“保持寄存器”,不是真地址!
实际发指令的时候,地址要填“0”。
同理,手册写40002,你程序里就填“1”。
3开头的输入寄存器也是一个道理。

多少人在这儿卡了几天都找不到北。
功能码也别只会用03(读)和06(写)。
想一次性改好几个连续的参数,列如同时设定频率、加减速时间,直接用16(0x10,写多个寄存器)啊,一条指令搞定,效率高多了。
老是用06一个一个写,不嫌麻烦吗?

同理,读多个用03,读单个也用03。
还有个不大不小但很烦人的问题,数据高低字节顺序。
列如你读一个温度值1000,十六进制是0x03E8。
结果PLC读回来是0xE803,变成一个超大的数。

别慌,这就是设备发出的数据和你PLC接收的字节顺序反了,叫大小端问题。
许多PLC的通讯指令里都有个选项让你交换一下高低字节,勾上就行。
目前更流行走网线了,叫Modbus TCP。
就是把上面那套规矩原封不动地搬到以太网上,用IP地址取代从站地址来找设备,速度更快,接线也更简单,道理完全一样。
所以说,Modbus就是个纸老虎。
把终端电阻、地址减一、字节顺序这三个坎迈过去,剩下的就是对着设备手册做填空题。
