【技术课堂】UN 200 SMART Modbus RTU快速入门
一、硬件连线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-232RS-485两条通讯线即可完成通讯链路。如图2所示,多台设备的A短接为一条线路,B短接为另一条线路。同一时间只能发送或者接受,此为半双工。多台设备可以挂载同一链路,可实现一台主站、多台从站之间进行通信。此应用场景最为多见。图2 RS-485UN 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;亿维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.000002 Q0.100003 Q0.2... ...00127 Q15.600128 Q15.710001 I0.010002 I0.110003 I0.2... ...10127 I15.610128 I15.730001 AIW030002 AIW230003 AIW4... ...30032 AIW6240001 Hold Start40002 HoldStart+240003 HoldStart+4... ...4xxxx HoldStart+2 x (xxxx-1)对于亿维HMI,地址对应如表7:表7 HMI modbus地址及功能码三、报文对不同的Modbus地址进行读或写操作,需要不同的功能码,如上表7。常见用的功能码有FC03、FC06,在此以功能码03对报文进行说明。功能码03,对寄存器006BH开始的三个寄存器进行读操作,主站报文示例如下:表8 主站03报文从站报文响应报文如下:表9 从站03报文其他报文格式不再说明,有兴趣的可以到官网查询https://modbus.org/四. UN 200 SMART ModbusRTU 从站编程图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倍的超时时间。所以,在全员在线的情况下,通讯周期和语速,即波特率有关,人数,即从站数量有关;不在线,通讯周期不可控。如此,要确保有优质的通讯链路和正常在线的从站,才能保证通讯周期的稳定。