一、硬件连线
1 串口接口
Modbus通讯原理:Modbus通讯为主从通讯,即一问一答的方式进行通讯。主站发送响应的数据给某个从站,从站响应;主站没有数据发送时,从站不响应。
这个通讯机制,贯彻到编程思路,后文编程章节中会讲到。
Modbus协议是运行在串口接口上,常见的串口接口有RS-232,RS-485,RS-422。Modbus常用RS-485接口。
一般RS-232三条通讯线即可完成通讯链路。如图1所示,RS232的设备1的txd接到设备2的rxd,rxd接到txd,可以同时接受或发送,这是全双工模式。因RS-232特性限制,只能一对一连接,即一个主站连接一个从站。因此在Modbus通讯上RS-232接口不多见。
图一 RS-232
RS-485两条通讯线即可完成通讯链路。如图2所示,多台设备的A短接为一条线路,B短接为另一条线路。同一时间只能发送或者接受,此为半双工。多台设备可以挂载同一链路,可实现一台主站、多台从站之间进行通信。此应用场景最为多见。
图2 RS-485
UN 200 SMART串行接口为RS-485,引脚示意图如表3。
表3 UN 200 SMART DB9引脚定义
注意:RS-485的A\B信号线,通俗叫法有A\B;485+\485-。UN 200 SMART DB9引脚中的3号引脚,即RS-485 信号 B,为通俗叫法的A或485+;8号引脚,即RS-485 信号 A,为通俗叫法的B或485-。
2.总线连接器
在复杂的工业现场或长距离通讯的情况下,建议选择优质的总线连接器和电缆。总线连接器自带终端电阻和偏置电阻,在此情况下,可提高通讯的稳定和抗干扰能力。
总线连接器和电缆,订货号如表4。
表4 总线链接器&电缆
3.为什么选择总线连接器和总线电缆
众所周知,网线有超五类和超六类之分,超五类传输带宽可高达1000Mb/s,但一般只应用在100Mb/s的网络中;超六类主要应用在千兆网络中,在传输性能上远远高于超五类网线标准。超五类,超六类的电缆直观区别就是电缆铜芯线径不同,超六类铜芯明显粗于超五类。
同理推测,总线电缆,回路阻抗:<150R/KM,优于一般通讯电缆。线阻小,通讯距离长,抗干扰能力强。
总线连接器,自带终端电阻和偏置电阻,同样可以提高通讯的质量。
建议组网方式如图5:
图5总线接头
终端和偏置电阻如图6:
图6 终端和偏置电阻
4. 通讯距离
通讯波特率越高,通讯距离越短。在长距离通讯下,适当降低通讯速率。9600波特率的最长距离建议在1200米。
二. Modbus 地址
通讯的目的是对寄存器进行读写操作,因此需要了解Modbus地址的表示方式。
Modbus地址表示有多种方式,如40001,4x0001,0000H,此三个地址实为同一个地址。地址中有4标识的,为十进制表示方式,起始地址为1,即实际起始地址为40001;地址标识中有H的,为十六进制表示方式,起始地址为0。在SMART PLC中,地址表示为40001;
AG旗舰厅HMI或常见组态软件中,地址表示为4x1;在变频器或仪表中,地址常表示为0000H。
UN 200 SMART做从站,地址对应如下:
Modbus地址通常被写为包含数据类型和偏移量的5个字符的数值。第一个字符决定数据类型,最后四个字符在数据类型中选择适当的数值。然后,Modbus主设备将地址映射至正确的功能
Modbus从站指令支持下列地址:
00001至00128是映射至Q0.0 - Q15.7的离散输出
10001至10128是映射至I0.0 - I15.7的离散输入
30001至30032是映射至AIW0至AIW62的模拟输入寄存器
40001至4xxxx是映射至V存储器的保持寄存器。
所有Modbus地址均以1为基位。下表显示映射至UN-200地址的Modbus地址。
Modbus地址 UN-200地址
00001 Q0.0
00002 Q0.1
00003 Q0.2
... ...
00127 Q15.6
00128 Q15.7
10001 I0.0
10002 I0.1
10003 I0.2
... ...
10127 I15.6
10128 I15.7
30001 AIW0
30002 AIW2
30003 AIW4
... ...
30032 AIW62
40001 Hold Start
40002 HoldStart+2
40003 HoldStart+4
... ...
4xxxx HoldStart+2 x (xxxx-1)
对于AG旗舰厅HMI,地址对应如表7:
表7 HMI modbus地址及功能码
三、报文
对不同的Modbus地址进行读或写操作,需要不同的功能码,如上表7。
常见用的功能码有FC03、FC06,在此以功能码03对报文进行说明。
功能码03,对寄存器006BH开始的三个寄存器进行读操作,主站报文示例如下:
表8 主站03报文
从站报文响应报文如下:
表9 从站03报文
其他报文格式不再说明,有兴趣的可以到官网查询https://modbus.org/
四. UN 200 SMART Modbus RTU 从站编程
图10 从站程序
上面程序实现的功能:将CPU的0口设置为从站地址为1,波特率9600,偶校验的Modbus从站。
允许主站操作的IO数量为128个,模拟量32个,以VW0开始的1000个寄存器。CPU的VW0为Modbus地址40001,VW2为40002,依次类推。
参数说明:
“模式”(Mode) 输入的值用于选择通信协议:输入值为 1 时,分配 Modbus 协议并启用该协议;输入值为 0 时,分配 PPI 协议并禁用 Modbus 协议。
参数“地址”(Addr) 将地址设置为 1 至 247 之间(包括边界)的值。
参数“波特”(Baud) 将波特率设置为 1200、2400、4800、9600、19200、38400、57600 或 115200。
参数“奇偶校验”(Parity) 应设置为与 Modbus 主站的奇偶验校相匹配。所有设置使用一个停止位。接受的值如下:0(无奇偶校验)、1(奇校验)和 2(偶校验)。
参数“端口”(Port) 设置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可选信号板上的 RS-485 或 RS-232)。
参数“延时”(Delay) 通过使标准 Modbus 信息超时时间增加分配的毫秒数来延迟标准 Modbus 信息结束超时条件。在有线网络上运行时,该参数的典型值应为 0。如果使用具有纠错功能的调制解调器,则将延时设置为 50 至 100 ms 之间的值。如果使用扩频无线通信,则将延时设置为 10 至 100 ms 之间的值。“延时”(Delay) 值可以是 0 至 32767 ms。
参数 MaxIQ 用于设置 Modbus 地址 0xxxx 和 1xxxx 可用的 I 和 Q 点数,取值范围是 0 至 256。值为 0 时,将禁用所有对输入和输出的读写操作。建议将 MaxIQ 值设置为 256。
参数 MaxAI 用于设置 Modbus 地址 3xxxx 可用的字输入 (AI) 寄存器数,取值范围是 0 至 56。值为 0 时,将禁止读取模拟量输入。
参数 MaxHold 用于设置 Modbus 地址 4xxxx 或 4yyyyy 可访问的 V 存储器中的字保持寄存器数。例如,如果要允许 Modbus 主站访问 2000 个字节的 V 存储器,请将 MaxHold 的值设置为 1000 个字(保持寄存器)。
参数 HoldStart 是 V 存储器中保持寄存器的起始地址。该值通常设置为 VB0,因此参数 HoldStart 设置为 &VB0(地址 VB0)。也可将其它 V 存储器地址指定为保持寄存器的起始地址,以便在项目中的其它位置使用 VB0。Modbus 主站可访问起始地址为 HoldStart,字数为 MaxHold 的 V 存储器。
MBUS_INIT 指令完成时,“完成”(Done) 输出接通。
Error 输出字节包含指令的执行结果。仅当“完成”(Done) 接通时,该输出才有效。如果“完成”(Done) 关闭,则错误参数不会改变。
五、UN 200 SMART Modbus RTU 主站编程
上文讲到Modbus通讯机制,主站设备同一时间或当前时间只允许发送或接受,对于多个从站,或多次对寄存器进行操作,建议采用轮询机制,即同一时间只允许触发一次MSG指令。按照此编程思路,推荐两种轮询操作。
1. 主站初始化
将Modbus通讯波特率设为9600,偶校验,超时时间1000ms,使用本体DB9通讯。
图11 主站初始化
2..轮询模式一
思路:用C0寄存器的数值变化,触发MSG指令,确保同一时间只有一个MSG在执行。
图12 轮询1-1
程序功能:上电C0清零;主站初始完成后,C0为1;每MSG指令完成后,C0自加1;第三次完成后,再执行第一个MSG指令
轮询:
图13 轮询1-2
网络3程序功能:读取从站地址为1的412345开始的5个寄存器,存放在主站CPU VW100开始的5个字。
网络4程序功能:读取从站地址为2的40001开始的5个寄存器,存放在主站CPU VW110开始的5个字。
3.轮询模式二
图14 轮询2
程序功能:读取从站地址为1的40001开始的5个寄存器,存放在主站CPU VW100开始的5个字。
将CPU VW110开始的5个字写入从站地址为2的40001开始的5个寄存器。
也有习惯使用MSG指令的完成位置位一个内部继电器Mx.x,Mx.x触发下一条MSG指令,如此循环的;或固定时间的触发方式,等不同编程思路。不论哪种编程思路,都要确保同一时间只有一条MSG指令被触发。
六.注意事项
A. Modbus主站或从站初始化指令初始化后,PPI协议不可用。
B.同一个串口,只能用作Modbus主站、从站、PPI等其中的一种(程序控制初始化外)。
C.CPU做主站时,同一时间只能有一条MSG指令被触发(重要的事说N遍)。
D.UN 200 SMART 的DB9 RS485的A、B有别于通俗说法的A、B。
E. 认清从站寄存器地址表示方式,是十进制还是十六进制。
F.通讯顺利的情况下,可用跳过前四个章节。
七. 问题排查
通讯异常时,建议从以下几个方面排查:
A.确保通讯电缆连接正确。参考第一章节,重点关注1.1章节。
B.确保主从通讯参数一致。
C.确认从站的寄存器能被主站进行读写操作。某些变频器或仪表的寄存器只读或只写,或可读可写。某些变频器一次可读或可写的数据长度有限。
D.以上正常,监控PLC程序,检测某一个MSG指令是否一直触发,而没有跳转动作。
E.用电脑串口助手软件,监控通讯报文,定位是主站没有发出数据,还是从站没有响应数据,还是从站响应的报文有误。参考第三章节。
监控通讯报文:将电脑485的A、B并联在通讯链路上。
图15 电脑监听
八.通讯时效
从站数量越多,操作寄存器的次数越多,通讯周期越长。为快速通讯,批量读取或写入寄存器、或提高通讯波特率。若有从站不在线或异常,通讯周期不可控。
以远程会议为例,说明Modbus通讯机制:
5个人远程会议,5个人同时说话,大家都听不清,实现不了信息交流。
引入主持人机制,主持人即主站,主持人把另外4个人都排上序号,1、2、3、4,即4个从站。
主持人说话,即主站发送报文,该报文有固定格式,第一个字节为从站地址,即人员编号。
主持人不说话,其他四人不准说话,即便是说话也会被主持人屏蔽。即从站任意发送报文,主站接受的也认为是无效信息。
只有主持人点到谁,谁才能说话,且按照主持人规定的格式发言,即报文格式固定。
主持人说:1号xxxx。4个人都能听到,但只有1号可以响应,且要以正确的方式响应。响应错误,主持人也会将信息视为无效信息。
主持人在叫1号的时候,1号开小差,没有及时响应,超过预定的超时时间,主持人再叫一次,如此三次。
三次以后,1号仍没有响应,主持人放弃1号,继续叫2号、3号、4号,如此即为轮询机制。
正常情况下,一问一答,响应很快。如有一人开小差,通讯周期延长3倍的超时时间。
所以,在全员在线的情况下,通讯周期和语速,即波特率有关,人数,即从站数量有关;不在线,通讯周期不可控。
如此,要确保有优质的通讯链路和正常在线的从站,才能保证通讯周期的稳定。