CP600核电机组模拟机接口系统选型和通信程序设计
2015-10-29文树林中核运行管理有限公司浙江嘉兴314300
文树林(中核运行管理有限公司,浙江嘉兴 314300)
CP600核电机组模拟机接口系统选型和通信程序设计
文树林
(中核运行管理有限公司,浙江嘉兴314300)
接口系统是模拟机仿真服务器和盘台设备之间进行通信的纽带。接口系统的选择和通讯程序的设计关系到整个模拟机系统的性能。研华ADAM-5000/TCP接口系统和与之对应的通讯程序,在中核运行管理有限公司CP600机组模拟机上已经得成功应用。其接口系统的选型和通信程序的功能、流程、技术特点等都对今后核电厂模拟机建造具有参考价值。
接口系统通讯程序数据传输
1 概述
模拟机接口系统是模拟机仿真服务器和模拟机盘台设备之间进行通信的纽带。其主要功能是将模拟机盘台设备的操作信号(比如开关、按钮动作、控制器调节信号等)及时传送到模拟机仿真服务器,同时将经过仿真服务器运算处理后的信息发送到盘台设备进行显示(比如报警、指示灯的闪烁,指示仪表、记录仪的显示等等),即在整个模拟机中起着上通下达的作用。接口系统的选择和通讯程序的设计关系到整个模拟机系统的性能。
2 背景
中核运行管理有限公司CP600机组现有两台模拟机。因培养操纵员的需要,于2006年决定建第二台CP600机组的模拟机。第二台模拟机的建造方案是对第一台模拟机进行复制和改进。原1#模拟机接口系统采用的美国RTP公司的EIOBC接口系统,由于该接口系统已经停产,所以需要对接口系统进行重新选择和设计。
3 接口系统选型
核电站的计算机仿真涉及动力系统、控制系统、各大辅助系统等,与一般计算机控制系统相比,其I/O点多、数据通信量特别大,系统仿真涉及静态和动态、正常态和故障态全过程。所以能否保证仿真机的实时性与可靠性成为选用何种接口设备的重要参考依据。经深入调研、综合分析及实践验证,我们对新的模拟机接口系统有着如下要求:
响应速度快、采集精度高——模拟机在事故工况下需要演绎一些瞬间的物理过程,要求I/O接口系统可获得大量的动态信息,所以接口系统采样速度的快慢与精度的高低是模拟机实时性与逼真度的重要保证。
结构紧凑、维修方便——由于模拟机主服务器位于仿真机房,而开关按钮和仪表设备分散在各功能盘,所以出于接线灵活、维修方便等原因考虑,所有的I/O信号必须通过放置于就地控制盘柜的采集板卡采集。所以,新的接口系统采集模块体积不能过大,以安装维修方便为原则。
表1 接口系统设备名称和功能
图1 共享内存区盘台信息的存放形式
设备造价低、维护成本低——在保证设备性能的前提下,以设备造价低为原则。
当时我们通过市场调查,初步选择了三家公司的接口系统产品:美国RTP公司EIOBC的升级产品,台湾研华公司ADAM-5000/ TCP接口系统,和亚仿公司的耐博接口系统。模拟机维护人员对这三家产品进行了深入的测试研究和对比,研华ADAM-5000/TCP接口系统有如下优势:
研华公司是专业生产接口系统的公司,科技实力雄厚,接口系统广泛应用于各种大型工业和火电厂的仿真产品上,性能能够满足核电厂模拟机的要求。
研华接口系统采用分布式结构,硬件还带有自诊断功能,使用和维修方便。
图2 主程序流程
价格相对比较实惠,维护成本较低,研华公司在杭州和上海都设有代理点,购买产品和备品备件比较方便。
最终我们选择了研华ADAM-5000/TCP接口系统作为2#模拟机的接口系统。
国产接口系统在2号模拟机上成功应用后,1号模拟机在后来的改造过程中也换成了研华ADAM-5000/TCP接口系统。
4 接口系统的体系结构
模拟机接口系统采用研华ADAM-5000/TCP系列产品,接口系统所包含的设备型号和功能见表1。接口系统详细的配置图见图6,系统共由10个UNO-2668及各自连接的若干个ADAM-5000/ TCP组成。数据输入/输出模块安装在ADAM-5000/TCP底座上,ADAM-5000/TCP通过以太网与UNO-2668进行实时通信,UNO-2668连接到仿真服务器,构成服务器-UNO2668-ADAM-5000/ TCP的三层网络结构(表1)。
除了硬件的组合之外,还要开发与之相适应的通信软件,这样才能使接口系统良好地运行起来。通信软件的软件的质量和功能直接关系到规模如此庞大的ADAM-5000/TCP的系统能否稳定运行以及维护是否方便等等。为此,模拟机维护人员对这套接口系统进行了细致深入的研究,在研华技术工程师的支持下,开发了用于模拟机的接口通信软件,该通信软件实际运行良好。
5 模拟机接口通信程序设计
按照通信程序的工作过程,接口通信的基本功能可以划分为两个方面:第一是建立TCP连接;第二是连接建立好之后进行数据通信。
图3 与服务器进行通信的线程流程图
图4 与ADAM-5000/TCP的通信线程流程
第一步建立连接,包括与服务器建立连接和与各ADAM5000 TCP建立连接。与服务器建立连接只要具备一定socket通信编程方面的知识很快就能顺利完成;与ADAM5000TCP建立连接则按照产品供货商都提供的产品开发说明书的指导,也能很顺利地实现。
第二步连接建立后的数据接收和发送即数据传输,这是通信程序的关键,数据的传输又包括两个方面,UNO与服务器的数据传输以及UNO与ADAM5000TCP的数据传输。这两方面的数据传输关系到如何保证服务器上的数据准确地对应到盘台上面的设备上(接口模块相应的端口上),因此,确定数据传输格式是开发接口通信程序之前要解决的首要问题。而要确定数据传输格式,则先要理解对模拟机上的数据映射原理。在此我们不妨简要介绍一下接口模拟机上的数据映射原理。在仿真服务器上开辟有一个共享数据区,该数据区中存放有整个接口系统的所有AI/AO/DI/DO模块的数据,其数据存放方式见图1;图中,iox_ptr地址指针指向共享内存区起始地址,start[DO]、 start[AO]、 start[DI]、 start[AI]为相应信息相对于iox_ptr的偏移量。DO、DI板为16位,在内存中每个模块(板卡)占用两个字节;AO、AI每个端口占用两个字节。
以上是整套模拟机接口系统所有的接口模块数据在服务器的共享内存中的存放方式,要想获得某一条链路的某种类型的接口模块数据,则首先要统计出该条链路之前所有链路上的这种模块的数量,然后根据这个数量计算出本条链路上模块数据的偏移地址。比如说,我们想获得第三条链路上的所有DO数据(假定为5个DO模块),则首先要统计出前两条链路的上的DO模块数(假定为20),那么第三条链路的DO数据的开始地址为:iox_ptr + start[DO]+20× 2,从该地址开始的10个字节(5个DO模块共占10个字节)为第三条链路的所有DO模块数据。AO/DI/AI模块数据依此类推。由上可见,UNO从服务器上获取数据以整条链路的数据为单位、且同种模块的类型数据放在一起进行传输较为方便。所以仿真服务器和UNO之间的数据通信方式确定为UNO接收到的数据:DO+AO;UNO发送出去的数据为DI+AI。在此要特别说明的是,仿真服务器和UNO上都有相同的整条链路的模块配置信息,所以传输的字节数可通过配置信息计算出来。
图5 通信程序的数据流示意
图6 接口系统配置图
以整条链路为单位接收到数据后,还要对数据进行分解,对应到相应的ADAM5000TCP上。程序中的处理方法为UNO从仿真服务器上接收到DO/AO数据后,存放在指定的内存区,然后,各个ADAM5000TCP对应的通信线程计算各自模块的偏移地址,从内存区的特定位置读取所需数据进行发送,这个过程只需细心防止偏移地址计算错误,在此不再赘述。DI/AI的过程则刚好相反,从各个ADAM5000TCP上采集到数据后,计算好偏移量之后存放到指定内存区,最后整条链路的数据一起发送到仿真服务器。
6 程序流程及技术说明
6.1程序基本流程
程序的流程分三部分,主程序流程、与服务器进行通信的线程流程、与ADAM-5000/TCP进行通信的线程流程。
主程序流程见图2,主程序的主要功能包括:
(1)根据配置信息完成程序所必须的数据初始化;
(2)进行内存分配,建立公共数据区;
(3)创建并启动与服务器进行通信的线程;
(4)创建并启动与ADAM-5000/TCP进行通信的线程。
与服务器进行通信的线程流程见图3,该线程的主要功能是建立与服务器的连接并与服务器进行实时数据交换,从服务器获取本链路内的输出数据并写入公共数据区,同时从公共数据区读取本链路内采集到的输入数据并发送到服务器。
与ADAM-5000/TCP进行通信的线程流程见图4,这类线程的个数为UNO2668实际连接的ADAM-5000/TCP个数,即每个ADAM-5000/TCP都对应一个线程进行通信。该线程的主要功能是建立与ADAM-5000/TCP的连接,从公共数据区读取和写入数据,向ADAM-5000/TCP发送命令字和输出数据同时接收ADAM-5000/TCP的响应数据。
程序的数据流见图5。与服务器进行通信的线程将输出数据写入共享数据区的输出部分供各个ADAM-5000/TCP通信线程读取。输入数据则相反。
6.2程序主要技术说明
对于每一个ADAM-5000/TCP通信都对应一个线程,各ADAM-5000/TCP通信线程以及与服务器的通信线程逻辑上都是并行运行的,尽可能地利用了CPU的能力,运行效率高。
在与ADAM-5000/TCP的通信线程内采用命令字方式编程而不是调用动态链接库的方式,提高了程序的执行速度,因为如果采用调用动态链接库方式则程序运行时存在函数调用的开销。
每个ADAM-5000/TCP上安装的卡件类型和数目都各不相同,在最初构建程序结构时,对每个ADAM-5000/TCP根据其上安装的卡件类型和数量编写特定的发送和接收的指令,这样编程每个线程内的程序代码都不同,编程工作量很大,而且后期的维护工作也很困难。针对该问题,笔者经过深入研究,找到一种解决办法,该方法通过读取配置信息来自动判断各5000TCP底座上的采集卡件类型和数量以及卡件的安装位置,各ADAM-5000/TCP的通信线程根据获取的信息来发送和接收数据,这样程序实现了高度的自动化,而且所有的通信线程的程序代码是完全一样的,这样即大大减少了开发工作量,同时以后的维护工作也变得相对简单,当底座上所安装的卡件类型或数量、位置等发生变更时只需更改相应的配置信息即可。
通信程序要求各ADAM5000TCP底座上的板卡必须按照AI、AO、DI、DO模块的顺序排列,而且要求连续排列(卡与卡之间不能有空槽,最后一块卡后可以有空槽),这样设计一方面简化了程序的开发,另一方面规范了硬件安装,便于维护。
为保证实时性,在通信程序中进行了数据发送和接收的时间测试,测试结果表明硬件性能能满足要求。
7 结语
研华ADAM-5000/TCP接口系统和通讯程序已成功应用在中核运行管理有限公司CP600机组的两台模拟机上。对今后核电厂模拟机建造具有参考价值。