[摘 要] 本文以西门子公司S7-300和S7-200系列PLC为例,使用其CPU集成的通信端口实现MPI网络和Modbus网络的透明通信,为新建现场总线和现有现场总线的升级提供一种可靠且成本极低的方案,也为Profibus-DP网络和Modbus网络在同一系统中的集成提供一种思路。WWcW_PLCJS_COM-PLC-技.术_网
[关键词] S7-300 S7-200 MPI Modbus 现场总线WWW_PLC※JS_COM-PmLC-技.术_网
1 引言——可——编——程——控-制-器-技——术——门——户
Modbus 现场总线自1979年诞生以来,已经经历了二十多年市场的洗礼。由于其兼容的设备广泛,通用性和易用性好,构成网络的成本低廉,在中小型系统中占据着大壁江山。MPI网络是西门子公司主导的一种网络,在S7-300,S7-400系列PLC中做为一种标准配置集成于CPU本体上,也可以将S7-200系列 PLC方便的纳入MPI网络中。对于一个正在使用西门子S7系列控制器的系统来说,如何将已有的Modbus总线集成到S7控制系统中来,是一个头痛的问题,虽然可以使用S7-300/400的CP通信模板来实现,但繁琐的编程和用于购买软硬件的额外支出也是一个问题。本文以S7-200 CPU为网关,实现了S7-300/400和Modbus从站的透明通信,为解决这些问题提供一种可靠且成本极低的方案,也为Profibus-DP网络和Modbus网络在同一系统中的集成提供一种思路。WWW_PLCJS@_COM%-PLC-技.术_网
2 设计方法WWW_PLC※JS_COM-PmLC-技.术_网
2.1硬件构成WWW.PLCJS.COM——可编程控制器技术门户
本文旨在建立一个由 S7-300(CPU312)和一个S7-200(CPU224XP或CPU226),若干个支持MODBUS RTU协议的温度表构成的混合MPI和MODBUS RTU两种现场总线的通信网络。由于S7-200/300/400全系列CPU均支持MPI协议,且使用CPU模块上集成的通信口即可完成MPI通信,所以硬件方面不需要额外增加任何其它设备。在这个混合通信网络中,我们使用S7-200作为网桥,实现MPI和MODBUS RTU两种协议间的互相转换。系统的网络构成如图1所示:WWcW_PLCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WW.W_PLC※JS_C,OM-PL,C-技.术_网
温度表WW.W_PLC※JS_C,OM-PL,C-技.术_网
图1 网络构成图P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
图 1中红色线条表示MPI网络,蓝色线条表示MODBUS网络,PC仅作为编程器(PG)使用。在MPI网络中,S7-200作为MPI从站和作为主站的 S7-300或PG通信,但在MODBUS网络中,S7-200却是作为主站和温度表等从站通信,这是通过在S7-200的通信口0上加载MODBUS通信协议,在通信口1上加载MPI通信协议来实现的。WWW_P※LCJS_CO※M-PLC-技-.术_网
2.2 通信链路详解WW.W_PLC※JS_C,OM-PL,C-技.术_网
(1)PG与PLC间的通信:编程器PG仅可以通过 MPI总线与S7-200,S7-300,TP270进行通信。除了上载/下载程序外,还可以在PG上运行Winccflexible Runtime运行系统来实现对系统的监控。注意:此处只能使用PC Adapter来实现上述链接。示意图如图2:WWW_PLCJS_COM-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
WW.W_PLCJS_COM-PLC-技.术_网
图2 PG与PLC间的通信WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
(2)MPI 通信链路:在MPI通信链路中,S7-300作为主站,既可以与从站S7-200通信,又可以接受来自操作员站TP270的控制。TP270既可以和 S7-300通信,也可以和S7-200通信,通过操作员的输入,控制S7-300和S7-200。作为MPI从站的S7-200,除了接受TP270的控制,更主要的是将I,Q,V区域的变量与S7-300共享,以便S7-300进行读写操作,从而实现对MODBUS网络数据的读写。示意图如图3:WW.W_PLCJS_COM-PLC-技.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
图3:MPI通信链路示意图WWW_PLCJS@_COM%-PLC-技.术_网
(3)MODBUS 通信链路:在MODBUS通信链路中,S7-200作为MODBUS主站直接对MODBUS从站进行读写,S7-300和TP270并不直接参与通信。作为从站的温度表也仅仅回应S7-200的通讯请求。当然,受MODBUS RTU的限制,各温度表从站之间不能互相通信,而只是回应来自主站S7-200的通讯请求。示意图如图4:WW.W_PLC※JS_C,OM-PL,C-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
——可——编——程——控-制-器-技——术——门——户
图4:MODBUS通信链路W1WW_P4LCJS_COM-PLC-技.术_网
2.3 软件设计WWcW_PLCJS_COM-PLC-技.术_网
(1)MODBUS 通信程序:为了在S7-200的通信口0加载MODBUS通信协议,需要使用通信口0的自由口通信模式,通过在STEP7-Micro/Win中编写通信程序,实现该目的。这里我们使用MODBUS协议库来实现该功能。以读取温度表从站的当前值和设定值,并写设定值为例,保持寄存器40001和40002 分别为温度当前值和设定值。我们将程序分为两部分,一部分是读写温度表的子程序(后文称为加热控制子程序),另一部分是主程序。WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
(A) 首先需要在主程序中使用SM0.0调用加热控制子程序SBR(Heating_Control),如图5所示:WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
图5:在主程序中调用加热控制子程序WWW_P※LCJS_CO※M-PLC-技-.术_网
(B) 其次在加热控制子程序中使用MBUS_CTRL对S7-200的通信口0进行通信初始化,设置通信参数等,如图6所示:P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
plcjs.技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
图6:对通信口0进行初始化的程序WWW_P※LCJS_CO※M-PLC-技-.术_网
MBUS_CTRL的几个主要变量设置意义如下: WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
Mode: 该变量的数据类型为BOOL型,当BOOL值为1时,通信口0用于MODBUS通信, 当BOOL值为0时,通信口0用于PPI通信。P.L.C.技.术.网——可编程控制器技术门户
Baud:该变量的数据类型为DWORD型,用来设置MODBUS网络的通信速率,可设置范围为1200bps到115200bps。WWW.PLCJS.COM——可编程控制器技术门户
Parity:该变量类型为BYTE型,用来设置奇偶校验的类型,可设置为0,1或2。0表示无奇偶校验,1表示奇校验,2表示偶校验。plcjs.技.术_网
Timeout:该变量为INT型,表示通信超时的时间值,单位为毫秒。WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
Done:该变量为BOOL型,指示初始化完成,正常完成后会一直置位。WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
Error:错误状态,指示通信初始化时的状态。该变量类型为BYTE型。WWW_PLC※JS_COM-PmLC-技.术_网
由于Mode变量使用了SM0.0,所以当S7-200处于运行状态时,通信口0将一直用于MODBUS通信,不能用于和STEP 7-Micro/Win通信,即不能用于上载/下载程序,但通信口1不受影响,可用于和STEP 7-Micro/Win通信。WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
(C) 最后在加热控制子程序中使用MBUS_MSG实现对MODBUS从站的读写。以读取4号温度表从站的当前值和设定值为例,程序如图7所示:plcjs.技.术_网
P.L.C.技.术.网——可编程控制器技术门户
WWW_P※LCJS_CO※M-PLC-技-.术_网
图7:读取4号从站的当前值和设定值WWW_PL※CJS_COM-PLC-技.术_网
MBUS_CTRL的几个主要变量设置意义如下: WWW_PLCJS@_COM%-PLC-技.术_网
First:BOOL型变量。表示消息类型。为1时表示是新消息,为0时表示是重复的消息。WWW_PLCJS@_COM%-PLC-技.术_网
Slave:从站地址号。因为我们要读取4号温度表的值,所以这里设定为4,其设置范围为0——247(在MODBUS规约中,地址0表示广播地址)。该变量的数据类型为BYTE型。WWW_PLCJS@_COM%-PLC-技.术_网
RW:BYTE型变量。为0时表示该消息是读取从站寄存器的请求,为1时表示该消息是写从站寄存器的请求。因为是读取4号从站的寄存器,所以此处设置为0。WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
Addr:DWORD型变量。表示要读/写的从站寄存器的开始地址。因为保持寄存器40001和40002分别为温度当前值和设定值,所以此处设置为40001。WWW_PLC※JS_COM-PmLC-技.术_网
Count:INT型变量。表示要读/写的寄存器数量。温度当前值和设定值占用了两个连续的寄存器,所以此处设置为2。其设置范围为:1到120个WORD或1到1920个BIT。WWW.PLCJS.COM——可编程控制器技术门户
DataPtr:DWORD 型变量。对于读从站寄存器的操作,该参数表示将读取出来的参数存放在哪里;对于写从站寄存器的操作,该参数表示将哪里的数据写入到从站寄存器。如果读取的从站寄存器是两个或更多个,则从DataPtr指定的连续个内存区域将被占用。对于本例中DataPtr=&VB304,Count=2的设置,表示从站的40001中的值将被存放到S7-200的VW304,40002中的值将被存放到S7-200的VW306。WWW_PLC※JS_COM-PmLC-技.术_网