彭 浩,张 旭,蒋 维,章 雨
(中国核动力研究设计院 核反应堆系统设计技术重点实验室,成都 610213)
虚拟DCS能够在桌面操作系统再现实物DCS的系统架构、板卡功能、故障现象、手动硬逻辑等,并最终达到模拟实物DCS控制功能、性能的目的[1]。虚拟DCS能够实现工况保存与装入、快慢速调整、故障模拟等功能,应用于操纵人员培训、事故演练、组态测试等场景[2-3]。
采用虚拟实物(Emulation)技术路线的虚拟DCS能够高逼真度地实现实物DCS的移植,虚拟DCS的功能需求可由多种不同的软件体系结构实现[4-6]。一种具有“集中调度、异步运行、多机运行、一机多模”特点的虚拟DCS典型软件结构如图1所示。
图1 虚拟DCS软件架构图Fig.1 Virtual DCS software architecture diagram
其中,调度核心(DMS)是常驻的数据调度核心,运行于系统的任一服务器上。1个DMS可同时运行多个仿真项目,实现仿真项目管理、对外接口、IO数据缓存、仿真指令处理或中转等功能。
虚拟控制站(VCS)是实物DCS控制站的虚拟化表现形式,每个仿真主机上可同时启动多个VCS进程,1个工程项目的VCS可布置在多个仿真主机上。同时,VCS体现了实物DCS控制站异步运行的特点。
工程师站(Maintenance station)实现组态下装、算法监视、变量强制及其它维护功能。
另外,在系统初始化时,布置在与DMS不同仿真主机的VCS因尚未启动而无法接收到DMS的启动指令,可在每台仿真主机上配置仿真主机服务,设置为开机自启动,实现VCS启动指令的接收功能,并以命令行的方式启动VCS,从而实现VCS的远程启动功能。
虚拟DCS系统软件结构复杂,同时对响应时间等功能性能要求较高[7],因而需设计一套适合的指令转发处理机制,实现虚拟DCS高效准确的指令处理与结果反馈。同时,为提高计算机硬件资源利用率,一般会采用一机多模设计理念,同样需要考虑指令处理机制。本文分别针对上述需求,提出一套适合于虚拟DCS的指令分级交互机制,包括指令转发处理机制和多项目调度机制。
指令分为非转发指令与转发指令。不需要VCS处理的指令为非转发指令,仅由DMS处理并反馈即可,节约系统资源开销。
子模块之间指令发送与反馈的数据结构采用统一的格式,即指令包头加指令数据的形式。对于不同类型的指令与反馈,可能只用到结构体中的部分字段。指令包头包括用于校验指令的数据头、ID、项目标识、指令类型与参数、指令数据长度及指令数据。
图2 非转发指令处理流程图Fig.2 Non-forwarded instruction processing process diagram
反馈结构用于DMS给第三方系统的反馈和VCS给DMS的反馈。填充内容包含包头与反馈参数,包头包括指令类型、指令参数(错误码),针对反馈内容不止是成功与否的反馈类型,还应反馈数据,对于不定长度的反馈数据,需在包头中包括反馈数据长度。
非转发指令包括项目管理、变量监视、变量超控(Override)、获取仿真项目运行状态、当前工况查询等。上述指令访问或改变的是DMS中的信息,DMS自身可处理,因此不需要向VCS转发。非转发指令的处理流程是,第三方系统发出指令请求,DMS接收并处理该请求后对应返回一个反馈,反馈包括针对该指令的反馈信息与执行的结果。
以查询当前工况为例,指令只需指令包头即可,包括枚举类型的指令类型(SDS_COMMAND_GET_CURRENT_IC)、项目标识为查询的项目名。填充的具体结构见表1。
表1 查询当前工况指令结构Table 1 Querying the current operating instruction structure
以查询当前工况为例,反馈的包头包括枚举类型的指令类型(SDS_COMMAND_GET_CURRENT_IC)、错误码、指令数据长度、记录工况名字符串的指令数据。填充的具体结构见表2。
表2 查询当前工况反馈结构Table 2 Query ingress with the current operating feedback structure
转发指令包括保存工况、删除工况、设置故障、停止项目等需要每个VCS参与处理的指令。DMS收到第三方系统发来的请求后,转发给所有在线的VCS,并等待VCS反馈指令处理结果。每个VCS处理指令后形成反馈信息,返回DMS,DMS确认转发每个VCS的请求都收到反馈后,生成反馈信息回复第三方系统。
第三方系统发送的指令包括包头与指令数据,其中包头包括指令类型、项目标识、指令数据长度(针对带有指令数据的情况)及可能存在的指令数据。DMS解析该指令并生成转发给各VCS的指令结构。其转发对象根据指令类型不同,可转发单个VCS或所有在线的VCS。VCS处理并生成反馈数据包,向DMS反馈,当DMS等待各VCS反馈或判断VCS已处理超时后,向第三方系统反馈处理结果。
以删除工况指令为例,工况文件的存储位置包括DMS配置路径及每个VCS所在路径,DMS接收到删除工况指令后,先校验密码是否正确,再处理与转发该指令。删除工况指令与反馈填充的数据结构分别见表3、表4。
表3 删除工况指令结构Table 3 Delete the condition instruction structure
上述数据交互机制有多种实现形式,虚拟DCS作为独立的软件系统,应尽可能减少与第三方系统在交互机制上的耦合,增强通用性。同时,为实现一机多模功能,即单个仿真服务器可同时运行多个仿真项目的要求,设计一种多项目调度机制,如图4所示。
图3 转发指令处理流程图Fig.3 Forward ingresinstruction flowchart
表4 删除工况反馈结构Table 4 Removing the condition feedback structure
图4 多项目调度机制示意图Fig.4 Diagram of the multi-project scheduling mechanism
虚拟DCS提供动态链接库供第三方系统调用,加载该动态链接库的第三方系统即可作为虚拟DCS的客户端使用。客户端类中封装了连接以及发送各种仿真指令的方法,同时封装了通信库,通过Socket的方式与服务端通信。调度核心为实现一机多模,对每个仿真项目建立各自的服务端,该项目对应的虚拟控制站与该项目的服务端建立Socket通信。调度核心进程启动时,创建供第三方系统连接的服务端及仿真项目服务端。每个虚拟控制站进程启动时建立客户端,并试图连接对应仿真项目的服务端。
基于此方式,可实现多个第三方系统同时连接基于虚拟DCS的仿真项目,适用于多项目操纵人员培训以及多个机组同时调试等场景。
基于虚拟DCS的指令分级交互架构包括第三方系统、调度核心、虚拟控制站三层。第三方系统发送指令与等待反馈,调度核心区分不同指令分别进行转发或不转发处理,虚拟控制站执行指令与反馈。基于三层体系,建立的指令转发处理机制实现了虚拟DCS的有效调度,指令与反馈使用统一的数据结构,增强了系统的可维护性。为实现一机多模功能,虚拟DCS调度核心提供多项目调度接口,并分别为每个仿真项目建立服务端,供不同项目的虚拟控制站连接,形成多项目调度机制。指令转发处理和多项目调度机制构成一套完整的虚拟DCS指令分级交互机制,是实现虚拟DCS多任务处理、多项目调度功能的重要方法,具有工程应用价值。