APP下载

基于FAO仿真测试系统应用的底层框架设计

2022-06-27袁重阳

铁路通信信号工程技术 2022年6期
关键词:收发器管理器代理

袁重阳

(通号城市轨道交通技术有限公司,北京 100070)

1 概述

全自动运行系统(Fully Automatic Operation,FAO)[1]以其安全性高、运营组织灵活、适应大客流量需求等优点,越来越受到关注。由于其在全周期成本经济和总和效益方面[2]都有不俗表现,FAO成为城市轨道交通列车运行控制系统的发展趋势。

FAO系统由多个子系统组成,如果全部进行现场试验,很难将其功能测试完备。一般来讲,信号系统是轨道交通建设过程中的后期工程[3],因而有必要在实验室搭建一套测试环境,提前对其全功能进行验证。对于信号系统测试而言,虽然被测对象是信号设备,但是轨旁设备也是系统不可或缺的重要组成部分[4]。由于实验室无法具备整个线路的轨旁实物设备,此时就可以通过仿真手段来进行模拟,从而搭建一套半实物的测试系统,对提高工程实施质量、缩短工期、降低成本有着重大意义[5]。

2 系统测试环境搭建

对于安全要求苛刻的信号系统,系统测试是进行系统确认、保证系统质量的重要手段之一[6]。FAO的信号系统包括区域控制器、行车综合自动化系统、联锁和车载4个子系统。在实验室中需对整体的功能进行系统测试,因此,需搭建一套系统测试环境,如图1所示。

图1 测试环境结构Fig.1 Structure of test environment

FAO系统测试环境分为半实物仿真系统和信号系统。其中,信号系统是被测对象,半实物仿真系统提供必要的轨旁设备、车辆设备等信息。

其中,半实物仿真系统主要由仿真子系统和接口机两部分组成。

仿真子系统:图1中虚线框以外部分。该部分基于本文提出的底层通信方法,进行设计与实现。主要包括以下部分。

1)运行图:主要是对站场中轨旁设备(计轴、道岔等)的状态、车辆位置等信息进行显示和设置;

2)模拟驾驶台:主要是对车辆的硬线输入/输出量、速度等信息进行控制;

3)仿真主机:统一管理各个部分间的网络通信、业务消息处理等流程;

4)数据库:预先存储计轴、道岔等设备特征参数、线路拓扑参数、车辆参数等。

接口机:图1中虚线框部分。信号系统与仿真系统并非通过以太网直接相连,如车载设备的I/O量需通过硬线实现信号采集,因此车载接口机(嵌入式系统)可将硬线的信号量转换为数据流,再发送至仿真系统。联锁接口机则装有Arcnet卡,作为联锁和仿真系统间信息传递的渠道。

3 仿真系统底层支撑框架

由图1可知,仿真系统由多个模块组成,既需要对整条线路各个轨旁设备状态进行处理,也需要对车辆相关信息进行维护,因而软件的运算量大,单个普通服务器已无法满足性能要求,且不便于管理。此时,在既有硬件配置不变的情况下,可以利用多台服务器共同完成测试任务,最小依赖于集中的程序、数据和硬件等资源[7],解决该问题。因而本章节提出了一种基于分布式通信的底层支撑框架,该框架在分布式技术的基础上,以消息机制封装,使底层通信和上层应用能够最大程度地解耦,开发者不必过多关注在模块间的通信程序设计(通常直接在传输层协议进行编程[8]),极大缩短了应用程序的开发周期。

3.1 基本概念

模块:可单独执行的一个应用程序进程。

消息:各个模块之间以消息响应的方式进行通信,消息的内容包含源地址、目的地址、类型、黑名单及应用信息等。

收发器:一个模块可以与其他多个模块同时建立连接,以进行消息的收发。为了便于管理,每个连接都设有一个收发器,对其来往的消息进行接收、发送和逻辑处理,即一个模块可以有多个收发器。

源地址:指消息发送方的收发器ID。

目的地址:指消息接收方的收发器ID。

黑名单:指消息被拒绝接收的收发器ID。

分拣器:当某模块收到其他多个模块发来的消息时,为了使每条消息能够分别映射至对应的收发器,分拣器以消息的源地址、消息的目的地址、消息的类型、黑名单等信息为筛选条件,对消息进行归类,并分别传递给各个收发器,且一个模块只需一个分拣器。

网络代理:每个模块需通过网络和其他模块进行消息交互,因而为各个模块分别设有网络代理,其作用一是向网络管理器进行注册,申请本模块通讯地址;二是本模块作为服务器或客户端,创建与其他模块的接口,以进行网络信息流和内部消息的转换。

接口:每个模块的网络代理需要和多个模块进行通信,因而为代理设有多个收发网络字节流的装置,称作接口。接口负责将网络中的字节流信息转为消息后传递到模块内部,以在模块内部进行消息的分拣、收发。同时将本模块对外发送的消息通过网络发送至指定模块。

网络管理器:当接收各模块的注册消息后,网络管理器会重新统一分配各模块的通讯地址,并将所有通讯地址通知到每个模块。

3.2 框架设计

将某个任务划分成多个模块,每个模块可单独执行,同时需要将其计算的结果与其他模块分享,此时需要建立模块之间的连接网络。框架设计如图2所示。

图2 框架设计Fig.2 Framework design

3.2.1 整体框架

将任务划分为多个功能模块,如图2中模块1、模块2和模块3。各个功能模块共用1个网络管理器。其中,模块1和模块3的输出结果会作为模块2的输入,同时模块2的输出也会影响模块1和模块3。3个模块间的信息交互通过以太网来实现。

对于每个模块而言,以模块2为例,由于需要与模块1、模块3进行通信,所以设计接口-1和接口-3来与之进行信息的转换。与此同时,内部处理消息时则设有收发器-1和收发器-3,以此分别对模块1、模块3进行消息队列的接收和发送。消息队列则由分拣器来管理,使所有消息能够有条不紊地到达目的地。

3.2.2 通信设计

为保证数据的准确性和时序性,模块间通信采用TCP协议,可以提供可靠性服务[9]。为便于操作,应用信息以消息的形式进行交互。

1) 网络管理器

由于各模块间采用TCP协议,因而在消息的发送和接收时需要知道各自的IP地址和端口。在实际应用中,一个任务有多个模块,那么每个模块就需要静态配置多个其他所有模块的IP和端口。为尽可能减少网络配置,方便应用程序设计,本文设计网络管理器。使用时只需配置IP和端口作为服务端,各个模块作为客户端向网络管理器进行注册。网络服务器会记录各模块ID,并统一分配端口,然后将所有的模块ID、IP和端口分发通知给各模块。具体流程如图3所示。

图3 网络管理器流程Fig.3 Network manager flowchart

2) 消息机制

各模块在执行过程中,不仅输出的结果会对其他模块有影响,而且过程变量也可能触发其他模块的运算逻辑,因而本文采用消息触发的方式进行模块间交互。对任一时间或任一条件下,由本模块产生的结果,直接以消息的形式进行封装,然后通过网络进行发送,如图4所示。

具体过程如下:

定义消息基类,包括源地址、目的地址、类型、黑名单等属性。

模块1在执行过程中,满足触发1(或触发2)的条件,则新建应用消息(继承消息基类),并对其各个成员变量进行赋值,然后立即发送。

模块2收到该应用消息后,可按照类型进行解析,并将其作为对应逻辑运算的输入。如果需要反馈,就对模块1发送消息反馈信息包。

需要注意的是,由于本设计实现是基于面向对象的,利用其多态特性[10],在传输过程中,以消息基类作为传递媒介,使用时再根据类型,转换为对应继承类的应用信息。如图4中,应用消息n继承于消息基类,而其成员m等则是模块所要传递的信息。

图4 消息机制Fig.4 Message mechanism

3.2.3 组件设计

每个模块使用的底层通信组件主要由分拣器、收发器和网络代理构成。

1) 分拣器

分拣器是整个模块的核心部分,不仅可以存储收发的消息队列,保证消息在多线程操作下能够被安全访问,而且可以将消息队列按照一定的规则分发至各个收发器或接口。其主要包含信息如图5所示。

图5 分拣器类图Fig.5 Sorter class diagram

2) 收发器

根据上文提到的消息机制,当收到来自其他模块的消息时,收发器一方面根据消息类型,解析分拣器发送来的应用消息,用于逻辑运算;另一方面将本模块的计算结果,以消息的方式添加至分拣器。其包含信息如图6所示。

图6 收发器类图Fig.6 Transceiver class diagram

3) 网络代理

网络代理是连接其他模块的“纽带”,是内部和外部的沟通渠道。本文采用TCP协议,因此当本模块作为服务端时,网络代理需要监听各客户端信息,并汇集发送来的消息,通过分拣器交给模块内部进行逻辑处理;作为客户端时,则需要把自身的产出准确地传达给各目的模块。其包含信息如图7所示。

图7 网络代理类图Fig.7 Network agent class diagram

3.3 应用程序设计

根据上文对底层支撑框架各组件的介绍,可按照如下流程进行程序设计。

1) 开启网络管理器

根据上文介绍,开启网络管理器服务端线程,并根据申请模块的信息,为所有模块统一分配端口,并将所有端口信息通知到各模块。在设计不同的应用程序时,网络管理器可以复用。

2) 新建模块对象

包括各成员变量,如分拣器、网络代理、收发器等。主要是对各组件所含属性进行初始化,填写各个组件所需处理应用消息的方法,并建立相互关联关系,并且一个模块只需一个分拣器,一个网络代理,若干收发器。当有新的应用消息需要发送时,则通过对应收发器先将消息交给分拣器进行存储;当新消息到来时,则通过分拣器分发至各个收发器。

3) 启动模块网络代理

首先将网络管理器发来的各模块的ID-IPPORT映射表进行存储,然后处理应用消息的过程如下:

当本模块作为客户端时,定义连接其他服务器模块的接口,每个接口分别负责取出由分拣器择出来的应用消息,先放到接口的消息缓冲区(防止在和其他模块建立TCP连接前,丢失应用消息),然后根据消息的目的ID,查询对应的网络地址,待网络连接成功后,再将缓冲区消息逐一取出,通过网络发出。

当本模块作为服务端时,开启监听客户端线程,若有客户端发起连接,就建立对应接口,由接口获取网络字节流信息,并转换为消息形式,最终存储到由分拣器发往其收发器的消息队列中。

4 仿真系统实现

根据上文所描述的底层支撑框架,设计并实现一套适用于地铁FAO系统测试的半实物仿真系统,并在天津FAO试验线的室内测试中得到应用,不仅可以满足测试过程对于机器性能的要求,而且极大程度上简化了程序的设计。其中驾驶台和运行图界面如图8所示。

图8 运行图和驾驶台Fig.8 Train graph and simulated cab

4.1 运行图

运行图模块按照章节3.3进行程序设计,主要具备以下功能:绘制图元,如信号机、轨道区段、应答器等;建车/删车,并实时跟踪列车的运行位置;提供大量的人机接口,可满足测试者操控各个设备状态。

4.2 模拟驾驶台

模拟驾驶台按照章节3.3进行程序设计,是车辆仿真的重要部分,如图8所示。其主要提供以下功能:方向手柄、牵引手柄提供车辆前进方向、级位;钥匙、确认等按钮提供车载ATP/ATO/AOM等必要的输入硬线信号输入;速度表盘、FAM模式灯等可显示速度、对应硬线信号等变化情况。

5 结语

本文详细介绍仿真系统底层支撑框架的原理和应用程序的设计步骤,结合应用软件实例,对半实物仿真测试系统进行设计实现。该方案已经在天津FAO试验线的室内系统测试中得到应用。通过对车辆、轨旁设备的仿真,能够为被测对象——信号设备提供必要的输入信息,同时也满足测试要求。

猜你喜欢

收发器管理器代理
某重型汽车方向盘LIN 开关故障分析
启动Windows11任务管理器的几种方法
应急状态启动磁盘管理器
《汽车维修技师》诚招代理
1号异星球餐馆·不可思议的代理老板
《航空模型》团体代理招募
Virtex5 FPGA GTP_DUAL硬核两个收发器独立使用的实现
用好Windows 10任务管理器
复仇代理乌龟君
光纤收发器常见故障原因