涂 雷 (长江大学电子与信息学院,湖北荆州434023)
周秀红 (中国石油吐哈油田分公司技术监测中心,新疆鄯善838202)
随着网络时代的到来,工业控制器联网已成为趋势,工业控制从点对点的单机控制走向分布式多点网络控制。开放的Modbus协议作为工业通信网络协议之一,使得符合该协议的西门子、Honeywell和ABB等厂商生产的控制设备和驱动产品可以快速联接形成网络,以便进行分布式控制和集中管理[1]。为此,笔者针对S7-200PLC与ACS550变频器的Modbus通讯进行探讨。
Modbus协议[2]由Modicon公司开发,现已成为工业领域全球最流行的串口通信协议。该协议支持传统的RS-232、RS-422、RS-485和以太网设备,许多工业设备包括PLC、DCS和智能仪表等都使用Modbus协议作为其通讯标准。
Modbus通信使用主-从协议、半双工传输模式,即主设备能进行初始化传输和查询,从设备根据主设备查询提供的数据作出相应反应。Modbus网络定义了2种传输模式,即ASCII和RTU(远程终端单元),ABB公司生产的ACS550变频器仅支持RTU模式。在RTU通信模式下主站发送消息帧的内容和顺序依次为从站地址、功能码、数据域 (数据起始地址、数据量、数据内容)及CRC校验码。每个RT U的消息帧必须连续传输,不能有间断。RT U模式中每个字节由1个起始位、8个数据位 (最小的有效位先发送)、1个奇偶校验位 (无校验则无)、1个停止位 (有校验时)或2个停止位 (无校验时)等10个位组成。RTU模式的错误检验域使用CRC(循环冗余校验),CRC校验域附加在消息帧中构成消息帧的最后一个域,CRC校验位低字节先传输,之后传输高字节,CRC校验的高字节是Modbus消息帧的最后一个字节。
Modbus系统间的数据交换类型由功能号 (FCS)控制,如表1所示。
表1 Modbus规约下的功能指定
ABS550支持的功能号是03和16。
西门子SIMATIC S7-200PLC是模块化中小型PLC系统,其中CPU224XPCN上有Port0和Port1通信口,且都支持Modbus RTU协议,即既可以通过自由口通信模式编写Modbus通信程序完成通信,也可以直接调用STEP7-Micro/WIN指令库中的程序块完成通信[2]。在自由端口通讯模式下通过发送XM T(transmit)与接收指令 RCV(receive)来完成数据帧的传输,完成上述过程需要编写复杂冗长的初始化程序、CRC校验程序、发送/接收程序等。STEP 7-MicroWin指令库包含有专门为Modbus通信设计的预先定义的子程序和中断服务程序,使得S7-200PLC与其他Modbus设备的通信简单易行。使用Modbus主站协议指令,可以将S7-200PLC组态作为Modbus RT U主站与Modbus从站 (变频器)通信。主站指令分如下2组 (见图1):①MBUS_CTRL、MBUS_MSG(Port0)用于端口0的初始化和通信。②MBUS_CTRL_P1、MBUS_MSG_P1(Port1),用于端口1。
图1 指令库
MBUS_CTRL指令用于初始化、监控或禁用Modbus通讯 (见图2),每次扫描都必须调用MBUS_CTRL指令,否则主站协议将不能正常工作,读写指令MBUS_MSG也将无效。
Mode输入值选择通讯协议,即输入值1将CPU端口分配给Modbus协议并启用协议,输入值0将CPU端口分配给PPI系统协议并禁用Modbus协议。
Parity参数的奇偶性设置必须与Modbus从站设备的相匹配,所有设置均使用一个起始位和一个停止位。允许值为0(无校验)、1(奇校验)和2(偶校验)。
读写指令MBUS_MSG用于启动PLC到Modbus从站的请求,并处理响应 (见图3)。当EN输入和First输入均为接通时,MBUS_MSG指令启动到Modbus从站的请求。发送请求、等待响应和处理响应通常要求多个扫描。EN输入必须接通才能启用发送请求,并应在Done位置位之前保持接通。一次只能有一个MBUS_MSG指令处于活动状态。如果启用了一个以上MBUS_MSG指令,则将处理第一个MBUS_MSG指令,所有后续MBUS_MSG指令将被中止,并输出错误代码6。这样一条读写指令可对应Modbus规约下的功能03和16,即RW为0时对应功能码03,RW为1时对应功能码16,据此可以完成电机的启停、调速和运行参数访问。
图2 调用主站初始化与端口控制子程序
图3 调用主站初始化与端口控制子程序
Slave是Modbus从站设备的站地址。Addr是从站设备上的要读写的寄存器起始地址。DataPtr指主站上用于接收或发送的数据域的首地址。Count指明离散输入、输出的点数,或需要读、写的寄存器数目。
对于Addr,Modbus有相关要约 (见表2)。
调用库指令时必须为其分配存储区,且该存储区不能和其他数据重叠,否则在运行时会产生错误,导致不能正常通讯。
表2 从站寄存器地址映射关系
首先进行变频器通讯参数的设置,默认设置如表3所示,其中参数5304规定了奇偶校验的类型和停止位的个数,必须选择1个停止位[3]。
表3 ACS550变频器用于Modbus通讯的参数设置
根据文献 [4]进行命令源的选择,Modbus通讯模式下要求总线设置给定值1,即参数1102赋值为0,选择外部1;参数1103赋值为8,给定值来自串行通讯。
编写PLC程序改写变频器控制字 (保持寄存器40001)、给定值1(寄存器40002)和给定值2(寄存器40003),这样连接S7-200PLC的RS485通讯口PorTo到ACS550变频器DB9的通信端口,运行PLC,就可以控制电机的启停和速度大小。此外,可将变频器上的状态字和运行参数读上来,用于故障的检测和诊断。
相比于端子控制启停、模拟量调速的传统方式,通过Modbus通讯方式控制变频器,其数值化给定提高了系统控制精度,大大简化了外部接线,提高了系统稳定性,也为人机交互界面的引入和复杂算法的实现提供了条件。
[1]刘新华,王伸东,黄剑.基于MODBUS协议PLC通信的模块化实现 [J].电气自动化,2001(1):44-47.
[2]西门子 (中国)有限公司自动化与驱动集团.深入浅出西门子S7-200PLC[M].北京:北京航空航天大学出版社,2003.
[3]龚俊,黄锐,戴涛.ACS550与S7-226P LC自由口通讯 [J/OL].http://www.paper.edu.cn/index.php/default/releasepaper/content/201004-619,2010-04-17.
[4]ABB(中国)有限公司.ACS550变频器手册 [M/OL].http://www.abb.com/,2006-01-19.