基于Modbus_TCP协议的S7-1200与JX-300 DCS系统间的数据通讯与实现
2024-01-08张志娟
张志娟
(河南化工技师学院 自动化学院 河南 开封:475000)
化工生产工况复杂,所用设备的厂家和型号也很多,在不同厂家的设备之间安全地实现信号互相通信显得极其重要。DCS和PLC是当今工业生产过程的两大重要控制设备,在生产过程中实现两者之间的信号通信将是不可避免需要解决的问题。浙江中控使用PLC来采集化工生产过程中的现场仪表信号,然后将信号传输给中控DCS进行信息及集中监控。本文以Modbus_TCP协议在浙江中控JX-300DCS和S7-1200PLC之间的应用为例,详细介绍了通过采用Modbus_TCP 协议在 S7-1200PLC编程软件中创建服务器程序与JX-300DCS进行通信的方法。
1 主控JX-300DCS和S7-1200PLC硬件网络拓扑结构
浙江中控JX-300DCS的主控卡型号是XP243X,PLC采用的CPU模块的型号为CPU 1212C DC/DC/DC,增加一个型号为SM 1231 AI8模拟量输入模块。现场的流量、温度等信号有直接接到PLC模拟量输入模块上的,也有接到分布式I/O模块(IO-Link)上。DCS和PLC之间通过S7子网(PROFINET)连接,通信采用Modbus_TCP开放式通信协议,每个设备都设有IP地址,它们需要处于同一个网段内且设备的IP地址不能冲突,各设备的地址及设备间的网络拓扑结构如图1所示。
图1 网络拓扑图
2 PLC硬件组态及程序编写
2.1 硬件设备组态
S7-1200PLC使用的软件是西门子TIA Portal软件,该软件是一款统一工程组态和软件项目环境的自动化软件[1]。本例对PLC的CPU模块、SM1331模拟量输入模块、IFM的IO-Link 模块进行硬件组态。
打开TIA Portal软件,添加“CPU1212CDC/DC/DC”模块。添加AI模块的方法是:进入PLC的设备视图,找到对应订货号的AI模块,双击进行添加,如图2所示。不论是CPU集成的模拟量通道,还是添加的模拟量模块,采集数据过程中所需要的硬件组态设置方法和编程方法是类似的。以AI模块采集数据时所使用的硬件设置方法为例,现场仪表是热电阻传感器,输出信号是4~20mA电流信号,在进行硬件组态设置时,该信号输入通道的测量类型设置为电流,电流范围设置为4~20mA,如图3所示。
图2 PLC设备视图
IO-Link可以将传感器输出的模拟信号转换成数字信号,从而避免转换过程中精度的损失[2]。AL1102自带Profinet接口及8 Port信号接入口,这里选择了一个温度变送器和一个流量变送器,分别接在port1口和port7口。
先添加IO-Link模块的GSD文件,然后进入网络视图,添加“AL1102”,需要分配的设备选择为“PLC_1”,如图4所示,PLC的IP地址设为128.128.1.6,IO-Link的IP地址设为128.128.1.10。进入AL1102的“设备视图”,在对应PORT口位置添加PQI(循环数据),温度信号为2BYTE,流量信号为8BYTE,系统会自动分配输入I区地址。如图5所示。
图4 PLC网络视图硬件组态
图5 AL1102端口组态
2.2 编写程序,完成数据的读取
新建DB数据块,取名为“Hold”,将数据块属性中的“(优化的访问”的“√”去掉,取消其优化访问设置,将每个数据的地址固定化。建立的数据块中添加静态数据,数据类型为实型数组,数据编号为0~9,因为取消了优化访问设置,所以每个数据的偏移量都是固定的。Hold 数据块主要用于存储需要通过Modbus_TCP协议传输给DCS的数据。
2.2.1 IO-Link数据读取
在主程序OB1中,对信号进行程序的编写,使用“CONV”指令将IO-Link的PORT1和PORT7传送过来的整型数据转化为实型数据,使用“MUL”指令乘以各自系数就可得到实际工程值,存储在地址“hold.hold[0]”和地址“hold.hold[1]”中。其中,温度系数为0.1,流量系数为0.01,程序如图6所示。
图6 IO-LINK信号转换程序
2.2.2 模拟量输入模块的信号读取
同样,在主程序OB1中对信号进行程序编写,通过AI模块采集到的现场信号存储在IW146,使用“NORM_X”标准化模块将采集信号的值映射到0-1之间对其进行标准化。使用“SCALE_X”缩放指令将映射后的信号值转换为工程值,此处采集的信号为温度信号,温度传感器输出信号为4-20MA的电流信号,对应-50~150℃。故缩放指令的最小值设置为-50,最大值设置为150。缩放后的值就是我们熟悉的温度值了,存储在地址“hold.hold[2]”中,程序如图7所示。
图7 模拟量模块信号转换程序
2.3 在TIA-PORTAL软件中编写Modbus_TCP通信程序
MB_SERVER是Modbus_TCP通信的用户程序指令,该指令处理客户端的连接请求,接受处理Modbus请求并发送响应。系统数据类型“TCON_IP_V4”用于保存建立连接的参数,由系统提供且结构不可更改。我们需要手动创建类型为“TCON_IP_V4”的数据块并为其分配参数,然后将数据块直接写入MB_SERVER指令中[3]。此处,S7-1200PLC作为服务器使用,通过用户程序建立Modbus_TCP连接,用户程序指令使用MB_SERVER,在程序编辑器为指令分配参数。
首先需要建立一个数据块,取名为“TCON”,将数据块属性中的“(优化的访问”的“√”去掉,取消其优化访问设置,将每个数据的地址固定化。建立的数据块中添加静态变量,取名为“TCON”,数据类型为“TCON_IP_V4”,Interfaceid硬件标识符为64;ID为1;ActiveEstablished设置为FALSE,建立被动连接;ADDR地址为你需要建立通信连接的设备的IP地址(此处选择为工程师站的PC机IP),本地端口号为502,设置界面如图8所示。
图8 TCON数据块参数设置
然后,在主程序OB1中编写通信程序,在“通信”→“其它”→“Modbus_TCP”中,选择“MB_SERVER”功能块,拖放到OB1程序段中。DISCONNECT端设置为“false”,无通信连接时建立被动连接;MB_HOLD_REG指向服务器可读取的数据区,这里是数据块HOLD;CONNECT指向建立连接的结构参数,此处为TCON数据块的首地址,“TCON”数据块中有建立连接的地址参数。MB_SERVER功能块建立后,就可以将数据转发出去了。建好的通信程序如图9所示。
图9 MB_SERVER服务器模块程序
3 JX-300DCS组态及编辑
3.1 在AdvMBLink内建立数据连接
AdvMBLink是Modbus协议的外部数据组态软件,可以与其它支持MODBUS串口通信协议的设备进行数据通信,同时与控制系统进行数据交互。软件本身包括了组态和运行两部分。通过对ModBus设备进行位号组态后可直接与设备进行通信测试;运行时AdvMBLink作为后台程序员负责数据流的流入和流出。组态的方法步骤如下:
(1)双击打开“AdvMBLink”软件,添加设备,进行设备参数设置,如图10。地址为1(与PLC内的ID保持一致),通讯方式选择为TCP,网址与S7-1200CPU的网络地址一致,数据排列方式选择为高字节在前。
(2)添加数据组,创建变量,位号类型选择为保持寄存器,数据类型为浮点型,如图11所示。变量的顺序要与TIA PORTAL 软件里数据块HOLD中的变量顺序保持一致。上下限与现场采集信号的量程保持一致。
图10 设备参数设置图
图11 位号参数设置图
(3)将创建好的变量保存为后缀名为.cmb的文件,并且存放到DCS的config文件夹下面。外部数据组态软件AdvMBLink中的组态就完成了,可以连接设备进入通信测试了,通信正常,即可接入AdvanTrol的SCTask软件里了。
3.2 在二次计算软件SCTask中引入外部数据组态软件AdvMBLink的位号
二次计算组态软件SCTask是中控AdvanTrol-pro组态软件包的重要组成部分之一,可以组态上位机的任务、位号、事件等,在控制系统中实现二次计算功能、支持数据的输入输出。在SCTask(二次计算组态软件)中引入AdvMBLink(外部数据组态软件)中组态的位号,位号数据源选择为Modbus数据源,组态自定义变量,定义扫描时间和循环任务,完成对二次计算的组态,从而实现与PLC的通信。具体步骤如下:
在系统组态界面的工具栏中点击命令按钮img id="73c2d71bd1c041b140729748376ffd87" class="inparagraph" src="images/73c2d71bd1c041b140729748376ffd87.jpg" width="33" height="25" title="width=33,height=25,dpi=110" />,进入“操作站设置”界面,此时界面存在文件名称为:Recompute.SUT,取一个页标题名,点击“编辑”按钮,进入二次计算组态界面。
3.2.1 组态上位机位号
3.2.2 在控制站添加自定义变量
这些自定义变量相当于中间变量,或是虚拟的位号。这里主要是为了读取通过二次计算引导过来的AdvMBLink的数据,也就是PLC数据,如图13所示。
图12 二次计算位号组态界面
3.2.3 设置任务
在二次计算中,选择“任务->循环类”选项卡,新建循环类任务,相关事件选择为“TRUE”,事件在每个执行周期下必然发生。任务设置中的表达式:手动输入TI303(2JHJ主控卡下的自定义变量)=_TI303(默认分组数据分区内位号),点击添加;其他变量类似,见图14。建立好此变量后,控制站的自定义变量就与PLC的数据建立起了连接[5]。
3.3 通讯效果及演示
组态完成后,可以通过AdvMBLink的监视功能查看数据通讯是否正常,如图15所示,状态栏显示为正常,表示数据传送成功。
DCS的监控画面进行数据查看,正常情况下,监控画面通讯正常会显示为数值,异常会显示为“???”,如图16所示,数据通讯正常。
图15 AdvMBLink的数据通讯画面
图16 DCS监控画面
4 小结
该通讯方法基本步骤主要有三点:
(1)在S7-1200PLC中建立Modbus_TCP通信模块,设置通讯参数;
(2)在AdvMBLink软件中建立与PLC的数据连接,并保存为CMB文件;
(3)在AdvanTrol的SCTask软件中通过二次计算循环的进行数据采集。
需要注意的是三个软件中建立的数据变量范围需保持一致。使用AdvMBLink软件建立的CMB文件需要拷贝到AdvanTrol的Config目录下。
经过验证,该组态方法能够正常实现信息的交互。通过PLC将现场的检测信号采集汇总,再通过Modbus_TCP通信协议传输给DCS,完成了信号的交互应用。为工业自动化的实现提供了可行的方案,将来会给工业生产提供更大便利。