基于S7-400H PLC与上位机双机双网Modbus TCP冗余通信
2018-09-20金星
金星
(上海市政养护管理有限公司,上海 201105)
0 引 言
城市地铁具有快速、安全、运载能力强的优点,是解决城市交通拥堵最有效的手段之一[1]。地铁的环境与设备监控系统(BAS)主要对车站及区间隧道内的空调通风、给排水、照明和电梯扶梯等机电设备进行全面的运行管理与控制[2]。地铁环境与设备监控系统在特殊工况下须承担一定的防灾任务,因此对地铁的正常运营和乘客人身安全至关重要,属于安全系统,因此《地铁设计规范》对系统的可靠性提出要求[3]。地铁运行要求BAS系统具有极高的可靠性,特别是选择具有支持冗余技术的高可靠系统,通过冗余设计进一步提高系统的可靠性[4]。其中对于PLC及上位机系统通信的冗余度要求也较高,某些情况下要求支持PLC与上位机双机双网冗余通信。
西门子S7-400H系列冗余PLC提供使用以太网CP443-1模块的开放式Modbus/TCP进行冗余通信的功能。但该功能基于单CPU配置一块以太网CP443-1模块的方式,只支持上位机双机单网的通信方式,无法支持上位机双机双网冗余通信的方式。在西门子S7-400H系列冗余PLC提供使用以太网CP443-1模块的开放式Modbus/TCP进行冗余通信功能的基础上,通过与上位机通信标志位的判断进行内部DB数据块的切换,实现单CPU配置两块以太网卡与上位机双机双网冗余通信的方式。
1 系统结构
图1 双机单网冗余通信示意图
地铁地下车站两端的冗余PLC控制器采用西门子的S7-400H型,以靠近车控室端为主端, 远离车控室端为从端[5]。在主端西门子S7-400H系列冗余PLC中,通过CP443-1以太网模块基于开放式Modbus TCP冗余通信的方式与上位机进行双机单网的冗余通信,如图1所示。但在地铁项目中,由于对系统的冗余度与稳定性要求较高,提出PLC与上位机应采用双机双网冗余通信的方式,如图2所示。
图2 双机双网冗余通信示意图
在双机单网冗余通信系统中,PLC的以太网CP443-1模块及上位机均处于一个网段中。S7-400H在同一时刻只有通过其中一个连接与通信伙伴建立通信,但正在通信的连接中断时,功能块库会使CPU自动切换到其他通信链路而无须用户手动切换。
而在双机双网冗余通信系统中,PLC中一块CPU下挂载的两块以太网CP443-1模块处于不同的网段中,而一台上位机也安装了两块以太网卡,处于两个网段中。
2 双机单网冗余通信结构分析
西门子对于使用以太网CP443-1模块的开放式Modbus TCP进行冗余通信的功能,提供“Modbus TCP CP Redundant V1.0”安装包,里面提供了相应的安装软件及使用说明。
双机单网Modbus TCP冗余通信系统中,对PLC的以太网CP443-1模块及上位机的网卡进行配置,使之处于同一个网段中,见图1。图3给出了对系统功能块FB1733"MODB4H"背景数据块数据的配置。
图3 双机单网FB1733"MODB4H"的背景数据块数据配置
按图3配置后,将上位机需读取的PLC数据存放在地址为4****的Input Register中,用上位机使用功能码04进行读取。而上位机对相应设备进行遥控或遥信的PLC地址则在3****的Holding Register中。具体相应DB块对应的Modbus地址如图4所示。
通过该配置,上位机通过图1中1A、1B、2A、2B这4条链路对冗余PLC进行数据读写操作,所进行读写的均为对DB1*数据块的操作。
图4 DB1*块数据对应Modbus地址
3 双机双网冗余通信结构设计
为实现双机双网冗余通信结构,应按西门子所提供的以太网CP443-1模块的开放式Modbus TCP冗余通信链路,重复配置两个Modbus TCP通信链路。图5给出了对系统功能块FB1733"MODB4H"的背景数据块数据的配置。
图5 双机双网FB1733"MODB4H"的背景数据块数据配置
图5中Sever1部分的配置对应图2中从10.101.3.50、51这两张网卡读写的PLC数据块DB3*。图5中Sever2部分的配置对应图2中从10.1.3.50、51这两张网卡读写的PLC数据块DB4*。
图6为Sever1对应的数据块DB3*和Sever2对应的数据块DB4*,分别对应Modbus地址。
图6 DB3*、 DB4*块数据对应Modbus地址
如图6所示,虽然Modbus地址相同,但是从10.101.3.50、51这两张网卡进行读写操作对应的DB数据块和从10.1.3.50、51这两张网卡进行读写操作对应的DB数据块是不同的,无法直接实现双机双网冗余通信功能。要上位机通过图2中1A、1B、2C、2D、3A、3B、4C、4D这八条链路实现双机双网冗余通信的功能,还需进行以下功能设计。
3.1 上位机与冗余PLC通信检测机制设计
对于上位机和PLC之间的通信要先进行通信链路的选择与判断。
上位机采用轮询机制,按照1A、1B、2C、2D、3A、3B、4C、4D的顺序,对这八个链路通道进行轮询。如先对链路1A状态进行检测,如果通道状态正常,则只通过链路1A对相应10.101.3.50网卡进行读写操作。如链路1A状态监测不响应或返回错误,则对链路1B进行检测,如链路1B检测通道状态正常,则通过链路1B对相应10.101.3.51网卡进行读写操作,以此类推。
在上位机与冗余PLC建立相应通信链路后,上位机在每次读写操作前发心跳下去,以便PLC确定激活的通信链路。具体办法为:上位机在每次读写操作前,向双方约定的一个Mobus地址写入1,而PLC通过在每次运行程序时检测该地址对应的DB3*或DB4*数据块地址哪个为1,来确认上位机是通过1A、1B、3A、3B链路进行读写,还是通过2C、2D、4C、4D链路进行读写操作的。PLC程序判断过后,然后对约定的Mobus地址进行复位,以便每次运行时判断上位机进行读写操作建立的链接。
如确定上位机与PLC约定发送心跳的Modbus地址为40002,发送数值为1。冗余PLC中编写程序在每次执行前,先检测DB31.DBX3.0和DB41.DBX3.0。如果DB31.DBX3.0值为1,判断上位机是通过1A、1B、3A、3B链路对PLC进行读写操作。如果DB41.DBX3.0值为1,则判断上位机是通过2C、2D、4C、4D链路对PLC进行读写操作。
3.2 上位机对冗余PLC读取数据机制
在上位机与冗余PLC通信链路检测后,上位机对冗余PLC进行读写操作。如图6所示,上位机通过链路1A、1B、3A、3B所读取数据对应的内部数据块为DB36、37数据块,通过链路2C、2D、4C、4D所读取的数据对应内部数据块为DB46、47数据块。对于上位机读取PLC内数据,无需判断通信链路,只需将上位机所需读取数据同时复制到DB36、37和DB46、47相同的地址即可。
如上位机需读取PLC中DI点I0.0~I99.7的值,可在程序中将DI点I0.0~I99.9复制到DB36.DBX0.0~DB36.DBX99.7,并同时在程序中将DI点I0.0~I99.9复制到DB46.DBX0.0~DB46.DBX99.7。上位机读取DI点I0.0~I99.7的值Modbus地址为30001~30050,无论上位机与PLC的通信链路走哪条链路,读取的数值均相同且为DI点I0.0~I99.7的值。
3.3 上位机对冗余PLC写入数据机制
在上位机与冗余PLC通信链路检测后,上位机对冗余PLC进行写入操作。首先根据DB3*和DB4*的格式、大小,设置相同格式、大小的DB11、12、13数据块,作为上位机写入数据的转存地址。
如图6所示,上位机通过链路1A、1B、3A、3B所读取数据对应的内部数据块为DB31、32、33数据块,通过链路2C、2D、4C、4D所读取数据对应的内部数据块为DB41、42、43数据块。由于上位机在同一时间只可能通过1A、1B、2C、2D、3A、3B、4C、4D这八条链路中的一条链路向PLC写入数据,这就需要通过3.1章节中的上位机与冗余PLC通信检测机制来判断具体建立的是哪条通信链路,并以此判断被上位机写入数据的是DB31、32、33数据块还是DB41、42、43数据块。最后根据判断结果将DB31~33或DB41~33数据块使用SFC20(BLKMOV)系统功能块复制到DB11~13数据块,程序将根据DB11~13数据块中的遥控、遥调数据执行相应程序。
4 结束语
通过基于西门子冗余PLC“OPEN Modbus TCP CP Redundant V1.0”软件包,在此基础上通过PLC内部程序的开发,并与上位机通信软件的配合,实现了西门子冗余PLC本身并不支持的PLC与上位机双机双网Modbus/TCP冗余通信功能。系统冗余的目的主要是让系统具有高可靠性[6],该功能明显达到了增加PLC与上位机通信可靠性的目的。该功能在南京地铁项目中投入实际使用,使用效果达到设计目标,运行情况良好。