2. 中国核动力研究设计院,四川 成都 610041
2. Nuclear Power Institute of China, Chengdu 610041, China
核电厂仿真机是一个复杂的计算机实时应用系统[1],本文采用3KEYMASTER仿真平台作为核电厂仿真机。3KEYMASTER仿真平台是由美国Western Services Corporation公司开发的基于Microsoft Windows环境的面向对象的仿真平台,可以用于核电站系统的建模研究以及核电站事故安全分析等[2],能够比较方便地引入事故、进行远程控制及过程回放等功能,3KEYMASTER核电厂压水堆全范围仿真机的内核是系统程序RELAP5[3],部分建模工具需要用户通过3KEYMASTER的对象创建器和任务创建器应用程序进行修改,会出现繁琐复杂问题,导致容易出现人为错误,很难将核电站系统搭建出来,特别是新堆型控制系统设计与验证,需要方便地控制系统的开发。Simulink是MATLAB最重要的组件之一,Simulink本身提供了各种经常用到的功能模块,它们在提供直接使用的功能外,还提供了可以进行拓展的接口,在实际应用中可以根据需要进行接口开发,这样就可以完整地搭建起庞大复杂的核电站控制系统[4]。Simulink在模块编程时具有图形化的优点,使控制系统逻辑图和相应的模拟程序人机界面一致,Simulink的逻辑图更加清晰直观。
因此,采用共享内存的方法实现3KEYMASTER与Simulink数据的实时交互。Simulink本身具有C语言S函数程序,共享内存区及收发Windows消息的程序代码可以直接编写在程序中[5]。3KEYMASTER本身也提供了C语言TASK程序接口,共享内存区以及收发Windows消息的程序代码也可以直接编写在TASK程序中。在Simulink中建立控制系统,在3KEYMASTER中建立控制对象,实现了接口程序快速、正确地进行双向传递数据。
1 3KEYMASTER与Simulink程序开发对3KEYMASTER与Simulink程序进行开发,连接关系如图1所示。
![]() |
Download:
|
图 1 3KEYMASTER和Simulink连接关系 |
3KEYMASTER控制对象与Simulink控制系统是以共享内存的方式实现数据的同步交互。在3KEYMASTER控制对象与Simulink控制系统之间的动态交互中,Simulink的S函数是与外部交互的程序开发接口,通过在S函数中添加读写共享内存程序以及判断控制信号的程序代码。Simulink通过S函数向共享内存区写入仿真数据和控制指令,3KEYMASTER的TASK也是与外部交互的程序开发接口,TASK程序从共享内存区读取S函数写入共享内存区的仿真数据和控制指令。3KEYMASTER读取数据后送到平台计算,计算后的结果再通过TASK程序将数据写入共享内存区,Simulink通过S函数从共享内存区读取3KEYMASTER写入的数据。上述循环过程一直运行直到接收到暂停运行或仿真结束命令才停止。
1.1 S函数的应用S函数为扩展Simulink功能提供了一个非常有力的工具,S函数中包含许多具有特定名称函数的C语言源文件,可用S-Function方法自定义仿真模型[6]。
对Simulink模型的控制方法使用共享内存技术和S函数实现[7]。将Simulink的控制模型封装为子系统,采用C语言S函数编译模块,将输入模块和输出模块用封装子系统连接起来。Simulink模型开始是从S函数输入模块到封装子系统,再从封装子系统到S函数输出模块单线程执行的,因此在每个仿真步长中都遵守相同的运行顺序,它们之间是通过Mux模块进行连接。所以,Simulink的S函数输入模块从共享内存区读取3KEYMASTER写入共享内存区的数据后通过输入模块传递给封装模型,Simulink封装模型的计算结果通过S函数输出模块写入共享内存区,供3KEYMASTER读取。Simulink采用模块化编程的方式,能够采取自动索引的方式选择参数变量,可以方便地进行修改,如图2所示。
![]() |
Download:
|
图 2 使用S函数实现Simulink模型的控制和数据交互 |
3KEYMASTER控制对象与Simulink控制系统通过共享内存进行数据实时交互。3KEYMASTER的TASK首先创建共享内存区,并对共享内存区进行管理,设定内存区大小和数据格式。创建好的共享内存区由Simulink的输入模块访问,把存储在共享内存区中的数据读取出来,而仿真数据是由Simulink输出模块写入共享内存区。
共享内存区由3KEYMASTER的TASK程序创建,创建共享内存区需要运用Win32API里的CreateFileMapping函数和MapViewOfFile函数。当Simulink控制模型运行时就会在内存区寻找之前已经创建好的共享内存区。Simulink模型的开始端为输入模块,末尾端为输出模块,这两个模块都可以采用相应的函数与共享内存文件映射[8](file-mapping),输入模块从读取数据传输到Simulink控制系统,输出模块将Simulink控制系统计算的数据写入共享内存区,建立了3KEYMASTER控制对象与Simulink控制系统模型之间的共享内存区传输通道,如图3所示。
![]() |
Download:
|
图 3 系统仿真流程 |
当3KEYMASTER仿真平台首次启动时,共享内存即被创建,并对数据进行初始化,之后每次循环只需要打开首次创建完成的共享内存区。3KEYMASTER读取配置文件,配置文件内注明需要读取和写入共享内存的数据类型。3KEYMASTER将仿真数据和控制信号写入共享内存后,供Simulink读取,并对传输的命令信号进行判断,命令信号有执行、暂停、恢复循环以及保存数据,假如判断为继续循环,则进入下一步计算。3KEYMASTER在下一步中将从共享内存区读取Simulink上一步写入共享内存区的仿真数据和控制信号,读取完之后要对共享内存区进行清空。3KEYMASTER每完成一次上述步骤便通过共享内存区进行一次与Simulink的数据交互。系统仿真流程如图3所示。在C语言的S函数调用中,Simulink模型运行前自动调用初始化函数mdlInitializeConditions,内存文件映射在此函数中进行,映射应用到Win32 API的OpenFileMapping函数和MapViewOffile函数,这样Simulink模型运行后就可以寻找到之前创建的共享内存区,并能打开共享内存区。在控制系统运行计算过程中,mdlUpdate函数在每个仿真步长内都被S函数调用,mdlUpdate函数对离散系统的状态值进行更新,同时S函数从共享内存的读数据和向共享内存写数据操作也是在此函数中完成。
1.3 时间同步流程在每个步长内3KEYMASTER仿真平台和Simulink模型的仿真时间要保证一样,这样才能保证交互数据的实时性和正确性,满足同步交互数据的要求。图4是3KEYMASTER仿真平台运算速度小于Simulink模型运算速度时的同步时序图。
![]() |
Download:
|
图 4 3KEYMASTER和Simulink同步时序 |
在图4中,给出了2个仿真循环,第1个仿真循环从时刻1开始到时刻2结束,第2个仿真循环从时刻2开始到时刻3结束。因为3KEYMASTER仿真平台的计算速度比Simulink模型的计算速度慢,所以3KEYMASTER仿真平台用于数据处理的时间比Simulink模型数据处理的时间长。Simulink模型在每个循环内用Δt21的计算时间模拟物理过程之后进入等待状态,等待时间为Δt22,直到3KEYMASTER仿真平台用Δt1的计算时间处理完相应循环的数据为止。因此,在每个仿真循环内3KEYMASTER仿真平台只有数据运算时间,Simulink不仅有数据运算时间而且还有等待时间,三者时间之间有如下关系:
$\Delta {t_1} = \Delta {t_{21}} + \Delta {t_{22}}。$ |
在Windows中有事件、互斥器等多种实现进程间同步的方法[9]。采用Windows事件技术,通过3KEYMASTER和Simulink之间同时共享2个事件对象,实现了3KEYMASTER和Simulink模型的同步运行。设立2个全局事件对象,事件对象分别在3KEYMASTER的TASK程序和Simulink的S函数中设定,运用Win32 API里的SetEvent函数获得,运用Win32 API里的ResetEvent释放。如果在一个周期内没有收到事件对象信号,将执行等待状态(使用Win32 API中的WaitForSingleObject),等对方释放对象后,才能开始运行。因此Simulink模型在仿真循环开始时获取事件对象,在运算结束时释放该对象,进入阻塞等待状态。
2 压水堆仿真机接口程序验证采用某小型压水堆的直流蒸汽发生器作为控制对象模型,本模型是通过3KEYMASTER单独运行与3KEYMASTER-Simulink共同运行得到交互结果数据进行比较。3KEYMASTER单独运行时,控制对象和控制系统都建立在3KEYMASTER中。3KEYMASTER和Simulink共同运行时,控制对象建立在3KEYMASTER中,控制系统建立在Simulink中。
2.1 控制对象模型某小型压水堆的直流蒸汽发生器为套管式蒸汽发生管、单元结构、一体化布置的高效直流蒸汽发生器,共16台,每台直流蒸汽发生器结构完全相同,相互独立,均匀布置在反应堆压力容器和压紧圆筒之间的环腔内。直流蒸汽发生器由7个单元构成,共有915根传热管。反应堆冷却剂由上至下流经直流蒸汽发生器传热管一次侧。二次侧给水进入每台直流蒸汽发生器的给水联箱,由给水联箱分配后,由下而上流过直流蒸汽发生器的传热管,并在其中吸收反应堆冷却剂的热量而产生过热蒸汽。过热蒸汽向上流入蒸汽联箱,并经蒸汽接管进入二回路主蒸汽系统。
RELAP5节点图如图5所示。一次侧冷却剂经过时间控制体128和129后,进入套管式直流蒸汽发生器,经单管区(控制体160、162)流入套管区(控制体163、164),再进入另一个单管区(控制体165、167),将热量传递给二次侧给水后,进入另外一个时间控制体172和173边界。每组蒸汽发生器的模拟都考虑了单管区和套管区换热,需要指出的是,实际的套管区外管是直管,内管为螺旋管,本RELAP5模型中外管和内管都用直管模拟,在稳态调试中,会对换热面积进行微调,以使一回路和二回路参数与额定值相符。二次侧给水经时间控制体180和182,向下流入单管换热区(控制体186、190),流过套管环形空间(控制体192),在进入另一个单管换热区(控制体194、196)后进入蒸汽管道。控制体548/550/556/558模拟主蒸汽管道,阀门555模拟蒸汽调节阀,时间控制体567模拟二回路蒸汽出口边界。
![]() |
Download:
|
图 5 RELAP5节点 |
直流蒸汽发生器压力控制系统是由蒸汽压力、蒸汽流量和给水流量组成的三参量调节系统。控制系统以某小型压水堆直流蒸汽发生器的蒸汽压力、蒸汽流量和给水流量作为控制系统的输入参数,控制系统的输出参数为给水流量调节信号,蒸汽发生器的液位调节是通过控制进入蒸汽发生器的给水流量来实现的,给水流量是由调节主给水调节阀和旁路阀给水调节阀以及调节主给水泵转速实现的,二者相辅相成,如图6所示。
![]() |
Download:
|
图 6 直流蒸汽发生器压力控制系统原理 |
在3KEYMASTER和Simulink中建立相同的直流蒸汽发生器压力控制系统[10]。当3KEYMASTER单独运行时,3KEYMASTER控制系统模型的输入参数蒸汽压力、蒸汽流量和给水流量,输出参数为给水流量调节量。当3KEYMASTER-Simulink共同运行时,3KEYMASTER通过共享内存将输入参数蒸汽压力、蒸汽流量和给水流量传递给Simulink控制系统模型,Simulink模型输出参数通过共享内存传递给3KEYMASTER给水流量调节。3KEYMASTER模型与3KEYMASTER-Simulink模型分别将运行蒸汽发生器压力控制系统模型计算出的数据结果进行比较和分析,在蒸汽发生器压力控制系统有效的情况下,2种控制系统模型的计算结果见图7。控制系统的蒸汽压力设定值为4.0 MPa,蒸汽发生器阀门开度初始值设定为0.68,运行到稳态时,蒸汽温度为285.0 ℃,蒸汽压力为4.0 MPa,蒸汽流量为62.5 kg/s。在运行到100 s时阀门开度从0.68变为0.60,即调节负荷产生变化。由于阀门开度减小,蒸汽温度逐渐升高,蒸汽压力突然升高后逐渐减小,蒸汽流量逐渐减小,运行150 s时达到稳态,蒸汽温度为286.3 ℃,蒸汽压力为4.0 MPa,蒸汽流量为62.2 kg/s。
![]() |
Download:
|
图 7 |
![]() |
Download:
|
图 7 3KEYMASTER和3KEYMASTER-Simulink的仿真结果对比 |
通过比较图7的曲线可以很直观地看出,通过3KEYMASTER单独运行和3KEYMASTER-Simulink共同运行具有相同控制效果的控制系统,运行结果的数据曲线基本上是重合的,证明两者所描述的对象是一致的。采用3KEYMASTER-Simulink更加快捷、直观和方便,能够减少工作量并提高效率。
3 结论通过对3KEYMASTER和Simulink接口程序的研究,得出如下结论:
1)采用3KEYMASTER和Simulink的接口程序符合开发语言的规范和标准,采用模块化编程,接口数据的交互和同步保持稳定、可靠,符合实际情况,满足可靠性和正确性的要求。同时为其他软件接口开发提供了新的参考方法。
2)Simulink采用图形化建模的方式更加快捷、直观,不仅可以直接使用搭建复杂的控制系统,而且还可以根据实际的需要进行接口开发,在提高工作效率的同时还能提高精度。运用3KEYMASTER-Simulink共同运行核电站控制系统,计算数据既有3KEYMASTER的计算精确度,又有Simulink的高效快捷特点。
3)3KEYMASTER和3KEYMASTER-Simulink控制系统的仿真结果是一致的。这表明3KEYMASTER与Simulink的耦合具备了扩展3KEYMASTER控制系统的功能,提高了开发的灵活度,优化了系统的体系结构设计,具有可移植性强的特点。
[1] |
姚水永, 张彦, 王潜博, 等. 压水堆核电站给水泵转速控制系统仿真机的研发[J]. 机电工程, 2015, 32(2): 251-255. (![]() |
[2] |
裴宜星, 齐宏伟. 基于3KEYMASTER软件的核电站汽轮机数学模型与仿真[J]. 能源工程, 2010, 2(2): 20-23. (![]() |
[3] |
郑剑香, 倪星河, 谢珊, 等. 基于3KEYMASTER平台的压水堆核电站系统回路放射性仿真研究[J]. 核科学与工程, 2016, 36(2): 287-293. (![]() |
[4] |
管学良, 康凤举, 唐凯, 等. Simulink与Windows程序间实时交互的研究[J]. 计算机仿真, 2006, 23(3): 5-8. (![]() |
[5] |
候东, 林萌, 许志红, 等. 用Simulink扩展RELAP5的控制与保护系统仿真功能[J]. 核动力工程, 2007, 28(6): 112-116. (![]() |
[6] |
邹益民. 基于Simulink-s函数的铅酸电池动态模型仿真[J]. 电气自动化, 2015, 37(2): 33-34. (![]() |
[7] |
宋志安. MATLAB/Simulink机电系统建模与仿真 [M]. 北京: 国防工业出版社, 2015.
(![]() |
[8] |
高珂, 陈荔城, 范东睿, 等. 多核系统共享内存资源分配和管理研究[J]. 计算机学报, 2015, 38(5): 1020-1034. (![]() |
[9] |
李晓黎. Windows系统编程[M]. 北京: 人民邮电出版社, 2012: 200-241.
(![]() |
[10] |
张建民. 核反应堆控制[M]. 北京: 原子能出版社, 2009: 145-152.
(![]() |