全国热线电话:
18390808297
![]() |
|
湖南嘉普云自动化设备有限公司
一.简述:
软件冗余又称软冗余,和S7-400 H硬件冗余系统相对应,顾名思义是用户使用程序来完成 PLC 系统的冗余功能,可以应用于对主备系统切换时间为秒级的控制系统中,硬件平台一般是S7-300/400, 是Siemens 实现提高系统可用性的一种低成本解决方案,这种PLC软冗余方案已在国内外很多行业和项目中使用。而WinAC RXT 从版本2008起,也开始支持软冗余功能,其原理和编程方式与S7-300/400的软冗余方式基本相同。它不仅能有效提升系统的可用性,又可借助主流PC实现高性能多任务运算,同时具有良好的开放性,是一种高性价比的方案。
WinAC RTX 软冗余系统结构示意图:
系统构成:
A. 两台装有WinAC RTX 2008 的PC作为冗余的控制器(对于较恶略的运行环境,可以使用嵌入式Windows XP作为操作系统,使用无风扇、无硬盘采用电子盘的工业PC硬件平台,实现抗震防尘,比如西门子 MicroBox 427B等)。若其中一台PC可以作为编程设备,也可以使用第三台PC作为PG;
B. 使用 CP5611/5613作为Profibus主站的通讯接口;
C. 作为从站,每个ET200M从站上插有两个IM153-2接口模块,分别与两台WinAC RTX控制器的Profibus相连;
D. 可以选用以太网连接实现两台控制器间的快速数据同步,用户需要在初始化程序(OB100)中定义冗余数据同步区,包括:M区,DB块,过程映像区,IEC定时器/IEC计数器。
该系统结构可以实现:
A. 控制器(PC)冗余;
B. Profibus总线系统冗余(包括:通讯接口,总线接头,总线电缆等)
C. IM153-2冗余
软冗余的基本原理:
本文的实验中所使用的实验设备:
西门子工控机Simatic PC840 V2 配置:
A. 计算机名:CHN840
B. WinXP SP2
C. WinAC RTX 2008 SP1
D. Simatic Net 2008
E. Step7 5.4 SP4
F. 软冗余软件包 V1.2
G. CP5611
H. 板载以太网卡
兼容PC配置 :
A. 计算机名:chnd
B. WinXP SP2
C. WinAC RTX 2008 SP1
D. Simatic Net 2008
E. 板载以太网卡
F. CP5613
ET200M从站:
A. 6ES7-153-2BA02-0XB0
B. BM IM153/IM153 (6ES7-195-7HD10-0XA0)
C. BM 2X40(6ES7-195-7HB00-0XA0)
D. 8DI/DO SM374 (6ES7-374-2XH01-0AA0)
关于软冗余原理和ET200M更多信息请参考:下载中心A0039 文档《软冗余的原理、调试和例程》,不再复述,本文档只关注用WinAC RTX实现软冗余的过程。
二.组态步骤:
1. 建立项目
使用PC840 为编程设备,打开Simatic Manager,插入两个PC station,分别是CHN840 和chnd,并在组态计算机上设置“PG/PC interface”, S7ONLINE(STEP7)指向“PC internal(local)”。
2. 硬件组态
分别组态两个站的硬件配置:
从硬件目录中分别找到“SIMATIC PC Station”->“Controller”->“ WinLC RTX”->“6ES7 611-4SB00-0YB7”->“V4.4” “V4.4”目录下找到“CP5611/CP5612”和 “CP Industrial Ethernet”->“IE General”,插入PC机架,如下图:
注:V4.4版本的WinLC RTX需要单独安装
CP5611地址为2,为其添加主站系统,并插入ET200M站(6ES7-153-2BA02-0XB0)和IO模块。
两个PC站做相似的硬件配置,此例中:
两个PC站的Profibus站址都为2,ET200M站的站址为5;
在两个PC站的硬件组态中该ET200M站都要存在,并且组态参数相同;
两个PC站的IE General的IP地址分别为192.168.10.222和192.168.10.12,并将它们接入相同的子网(Ethernet1)。
3. 建立连接
进入 NetPro, 为两个PC Station建立S7 连接:
右键点击选中其中一个站的WinLC RTX,在弹出菜单中选择“Insert New Connection”
在弹出对话框中选择通讯伙伴,并选择连接类型为:“S7 connection”。
点击OK确认。弹出S7连接属性对话框,确认连接接口和 Local ID号。该ID号在程序中会使用到。
点击OK确认,退出。
保存编译。通过菜单View -> With DP-Slaves/IO Devices,可以查看系统的网络结构图:
4. 编写软冗余程序
在两个PC Station中添加冗余程序块:
在Step7中打开Soft Redundancy V1.2的例子程序:“SWR_400_MIN”,或从函数库中找到功能块:FB101,FB105,FC100,FC102,拷贝到Step7 项目中。
FC100 “SWR_START”:初始化程序块,定义系统运行的参数;
FB101“SWR_ZYK”:循环调用同步块,将主系统的冗余数据复制到备用系统;
FC102“SWR_DIAG”:诊断功能块,在OB86中调用,将得到的诊断数据提供给FB101使用;
FB105“SWR_SFBCOM”:在该块内部调用SFB12“BSEND”和SFB13“BRCV”功能块,实现数据同步。
分别在两台PC中插入OB100,其中调用冗余初始化程序:
上图中,分别显示了两台PC中各自OB100调用FC100的参数分配情况。关于FC100参数的说明请参考下表:
分别在两台PC中的OB35中实现冗余数据同步:
西门子6ES79538LL310AA0
添加相应的故障处理块:OB80, OB82,OB83,OB85,OB86,OB122等。在OB86中调用FC102“SWR_DIAG”
1.应用概述
SIMOTION通信函数_xsend与_xreceive适合SIMOTION之间通过MPI-MPI接口、PROFIBUS-PROFIBUS间的数据交换,通信数据大为200个字节,SIMOTION也可以通过调用通信函数_xsend与_xreceive实现与S7-300/400 PLC(在PLC中调用SFC65 X_SEND与SFC66 X-REV)MPI接口间的数据交换,由于受到PLC通信区的限制,大通信数据为64个字节。
2.MPI与PROFIBUS网络介绍
MPI是S7-300/400,SIMOTION的编程接口,对通信数据及实时性要求不高的应用可以利用编程接口进行通信, MPI的通信速率为19.2K~12Mbit/s, 只有可以设置为PROFIBUS接口的MPI口才支持12M的通信速率,例如S7-300中CPU318-2DP及所有的S7-400CPU 、SIMOTION MPI口都可以设定为PROFIBUS接口,所以它们的MPI接口通信速率都可以设置为12M。MPI接口通信速率缺省设置为187.5Kbit/s,无中继情况下大通信通讯距离为50米,通过中继器可以扩展网络长度,扩展的方式有两种,*种,两个站点中间没有其它站,如图1
图1:MPI网络扩展
控制器站点到中继器长为50米,两个中继器之间的距离为1000米,多可以增加10个,所以两个站点之间的长距离为9100米。
第二种,如果在两个中继器中间有MPI站点,那么每个中继器只能扩展50米,在组态时要考虑这两种连接方式。
MPI接口为RS485接口,连接电缆为PROFIBUS电缆(屏蔽双绞线),接头为PROFIBUS接头并带有终端电阻,如果用其它电缆和接头不能保证通信距离。在MPI网络上多可以有32个站,中继器,WINCC站,操作面板OP/TP也要算一个站点。MPI的站号及通讯速率可以在STEP7或SCOUT硬件组态时修改,下载组态信息到CPU后,站号及通讯速率将改变。
PROFIBUS总线符合EIA RS485[8]标准,PROFIBUS RS485 的传输程序是以半双工、异步、无间隙同步为基础的。传输介质可以是光缆或屏蔽双绞线,电气传输时,每一个RS485传输段为32个站点包括有源网络元件(RS485中间器,OLM等),在总线的两端为终端电阻,结构如图2:
图2:PROFIBUS网络结构
西门子总线终端一般都配有终端电阻,PROFIBUS使用9针D型连接器,D型连接器插座连接总线站,D型连接器插头与总线电缆相连。总线终端和针脚定义如表1:
表1 总线终端管脚定义
针脚号 | 信号名称 | 设计含义 |
1 | SHIELD | 屏蔽或功能地 |
2 | M24 | 24V输出电压地(辅助电源) |
3 | RXD/TXD-P | 接收和发送数据-正 B线 |
4 | CNTR-P | 方向控制信号P |
5 | DGND | 数据基准电位(地) |
6 | VP | 供电电压-正 |
7 | P24 | 正24V输出电压(辅助电源) |
8 | RXD/TXD-N | 接收和发送数据-负 A线 |
9 | CNTR-N | 方向控制信号N |
PROFIBUS总线的传输速率为9.6Kbit/s ~12Mbit/s,总线长度与传输速率相关,总的规律是传输速率越高总线长度越短,越容易受到电磁干扰,基于传输速率的大网段长度参考表2:
表2 传输速率与通信长度
波特率(K Bit/s) | 9.6~187.5 | 500 | 1500 | 3000~12000 |
总线长度(米) | 1000 | 400 | 200 | 100 |
总线终端的电阻与PROFIBUS总线相匹配,并配有轴向电感以消除电容性负载而引起的导线反射,选择普通的屏蔽双绞线不能保证总线的段长度。
如果需要扩展总线的长度或者PROFIBUS从站数大于32个时,就要加入RS485中继器,例如,PROFIBUS的长度为500米,而波特率要求达到1.5MBIT/S,对照表2波特率为1.5MBIT/S使大的长度为200米,要扩展到500米,就需要加入两个RS485中继器,拓扑图如图3所示:
图3:PROFIBUS网络扩展
西门子RS485中继器具有信号放大和再生功能,在一条PROFIBUS总线上多可以安装9个RS485中继器,其它厂商的产品要查看其产品规范以确定安装个数。
一个PROFIBUS网段多可有32个站点,如果一条PROFIBUS网上超过32个站点,也需要用RS485中继器隔开,例如一条PROFIBUS总线上有80个站点,那么就需要两个RS485中继器分成3个网段。RS485中继器是一个有源的网络元件,本身也要算一个站点。除了以上两个功能,RS485中继器的还可以使网段之间相互隔离。
3.网络设置
下面以SIMOTION D435与S7-300 PLC 通过MPI网络通信为例介绍通信函数_xsend与_xreceive的使用。首先打开SCOUT软件插入D435,点击D435使用右键进入硬件配置界面如图4所示:
图4:SIMOTION MPI接口设置
双击X136接口(只有X136接口可以设置为MPI接口),将该接口设置为MPI接口,选择MPI站地址,如图5所示:
图5: MPI接口参数配置
注意MPI站地址与通信方的站地址不能冲突,同样在STEP7中设置S7-300 PLC的站地址,本例中SIMOTION的MPI地址为2,PLC的站地址为4。
4.编程
4.1 SIMOTION侧编程
在D435中的“PROGRAM”中插入编程单元“LAD/FBD UNIT”,如MPI,在“UNIT”中插入程序如“SEND”和“RECEIVE”编写发送和接收程序如图6所示,也可以将通信程序编写在同一个程序中。
图6: SIMOTION 程序的创建
本例中在“SEND”程序中编写发送程序,在“RECEIVE”程序中编写接收程序,发送和接收函数可以在函数库中的位置如图7所示:
图7: 函数块的位置
? 调用_xsend函数
在程序SEND中调用_xsend函数发送数据,与PLC编写方式相似,将发送函数_xsend拖曳到LAD网络中,如图8所示:
图8: _xsend函数块
给所有的参数赋值,变量可以任意定义,如“COMMODE”变量,键入后选择变量类型如图9所示:
图9: 配置参数类型
数据类型自动定义,在变量类型中选择变量存储的类型,如全局变量或区域变量,如图9中变量类型只能在一个“UNIT”中使用,如果需要在其它“UNIT”或HMI中使用,将在“INTERFACE”中创建变量。
_xsend函数参数含义如下:
COMMUNICATIONMODE:
枚举数据类型,元素中包括“ABORT_CONNECTION ”和“HOLD_CONNECTION”,
“ABORT_CONNECTION ”:通信完成之后释放连接资源。
“HOLD_CONNECTION”:通信完成之后占用连接资源。
枚举类型变量的赋值可以使用MOVE指令,如图10所示:
图10: 参数赋值
ADDRESS:
结构体数据类型,结构体元素参考表3:
表3 _xsend函数ADRESS参数结构体数据
结构体元素 | 名称 | 数据类型 | 单元 |
deviceId | 元素 ID | USINT | - |
remoteSubnetIdLength | 通信方subnet ID占用字节的长度 | USINT | - |
remoteStaddrLength | 通信方站地址占用字节的长度 | USINT | - |
nextStaddrLength | 路由器占用字节的长度 | USINT | - |
remoteSubnetId | 通信方subnet ID | ARRAY [0..5] OF USINT | - |
remoteStaddr | 通信方站地址 | ARRAY [0..5] OF USINT | - |
nextStaddr | 路由器地址 | ARRAY [0..5] OF USINT | - |
deviceId:使用的接口,1表示D435 X126接口,2表示D435 X136接口,本例中选择2。
remoteSubnetIdLength:预留参数,MPI通信中无意义,缺省为0,设置为0。
remoteStaddrLength:MPI、PROFIBUS通信设置为1。
nextStaddrLength:预留参数,MPI通信中无意义,,缺省为0,设置为0。
remoteSubnetId:预留参数,MPI通信中无意义,缺省为0。
remoteStaddr:数组类型,在remoteStaddr[0]中赋值通信方的MPI地址,其它元素无意义,本例中S7-300 MPI地址为4,可以使用MOVE(LAD)指令赋值。
nextStaddr:预留参数,MPI通信中无意义,缺省为0。
MESSAGEID:
UDINT数据类型,定义发送报文的标识符,本例中定义为6,在PLC接收块参数REQ_ID可以读出。
NEXTCOMMAND:
枚举数据类型,元素中包括“IMMEDIATELY ”和“WHEN_COMMAND_DONE”,
“IMMEDIATELY”:下一个命令同步执行。
“WHEN_COMMAND_DONE”:命令执行或失败后执行下一个命令,异步执行。
例子程序中使用“WHEN_COMMAND_DONE”。
COMMANDID:
COMMANDID数据类型,可以跟踪命令的状态。
DATA:
数组数据类型,发送数据缓存区,必须为200个字节。
DATALENGTH:
UDINT数据类型,发送数据的长度,本例中发送为10个字节。
OUT:
DINT数据类型,函数调用返回值,包含通信状态。
在程序receive中调用_xreceive函数接收数据,与PLC编写方式相似,将接收函数_xreceive拖曳到LAD网络中,如图11所示:
图11: _xreceive函数块
调用_xreceive函数
函数_xreceive的输入参数MESSAGEID、COMMANDID和NEXTCOMMAND与_xsend函数输入参数意义相同,发送与接收函数的参数MESSAGEID必须相同,本例中_xreceive输入参数定义的数据包标识符为8,与PLC发送块参数REQ_ID定义的标识符必须相同。
_xreceive函数的输出变量 “OUT”为结构体数据类型,元素参考表4:
表4 _xreceive函数OUT参数结构体数据
结构体元素 | 名称 | 数据类型 | 单元 |
functionResult | 函数调用的返回值 | DINT | - |
dataLength | 接收数据的长度(字节数) | UDINT | - |
data | 接收数据区 | ARRAY [0..199] OF BYTE | - |
functionResult:
函数调用的返回值,可以判断接收状态,数据类型为 DINT。
dataLength:
接收数据的长度(字节数),大长度为200个字节,数据类型为 UDINT。
Data:
数据接收区,大长度为200个字节,在编程中定义的接收区必须大于数据发送区,数据类型为数组。
通信参数赋值完成之后,将整个程序进行编译,如果需要在线监控通信程序,必须在编译程序之前进行配置,如图12所示,点击程序单元,本例中为“MPI”,右键进入属性界面,点击菜单“Compiler”选择“Permit program status”选项,这样经过编译之后,程序可以在线监控。
图12: 配置程序在线监控
通信程序编写和编译完成后,将程序放置到D435的执行系统中调用(程序只有被调用才能执行),如图13所示:
图13: 调用通信程序
本例中将通信程序放置于“BackgroundTask”运行(循环运行)。将整个项目编译后,联机下传通信程序。
4.2 PLC侧编程
调用发送程序块
PLC侧调用SFC65用于数据发送,发送程序参考图14程序:
图14: PLC中调用发送程序
SFC65的参考解释如下,
REQ:
发送请求,为1时发送。
CONT:
相当于SIMOTION发送函数_xsend 参数“COMMUNICATIONMODE”,为0时通信完成之后释放连接资源,为1时通信完成之后占用连接资源。
DEST_ID:
通信方的MPI地址,本例中SIMOTION的MPI地址为2。
REQ_ID:
相当于SIMOTION发送函数_xsend 参数“MESSAGEID”,定义发送报文的标识符,在接收块中除接收到数据外,本例中与函数_xreceive中参数MESSAGEID定义必须相同。
SD :
发送区,以指针的格式,本例中将DB1中DBB0 以后10个字节作为发送区,大为76个字节。
RET_VAL:
发送块返回值。
BUSY :
为1时,端口占用,发送中止。
PLC侧调用发送块,在SIMOTION中需要调用函数_xreceive接收。
调用接收程序块
PLC侧调用SFC66用于接收数据,接收程序参考图15程序:
图15: PLC中调用接收程序
SFC65的参考解释如下,
EN_DT:
为1使能接收功能。
RET_VAL :
接收块返回值。
REQ_ID:
接收数据包的标识符,本例中接收SIMOTION _xsend函数MESSAGEID参数定义的报文的标识符6。在SIMOTION中,接收、发送函数MESSAGEID参数为输
入参数,发送和接收的报文标识符必须提前定义,在PLC中发送块REQ_ID参数为输入参数,接收块REQ_ID参数为输出参数,识别接收数据包的标识符。
NDA :
接收到新的数据包时产生脉冲信号。
RD:
接收区,本例中接收SIMOTION发送的10个字节,并将接收的数据存储于DB2中DBB0以后的10个字节中。
将PLC中的通信程序编译下传到PLC中,通信建立。
5.状态监控
在SCOUT联机状态中,点击程序单元如“MPI”,然后点击“Symbol browser”标签,可以监控“MPI”程序单元中定义的全局变量,如发送数据区、接收区等。如图16所示:
图16: 监控SIMOTION侧通信变量
在STEP7中打开变量监控表同样可以对数据发送区、接收区进行监控,如图17所示:
图17: 监控PLC侧通信变量
6.示例程序
示例程序参考文档附件程序,名称为Mpitest.rar。(示例程序使用STEP7 V5.4和SCOUT V4.0编写)
西门子6ES79538LL310AA0
上一篇:西门子S7-200PLC模块