作者:杨占录;王宗亮;刘海光
引言
上世纪九十年代以来,由于计算机技术、自动控制技术和仿真技术的飞速发展,训练模拟器在各个领域特别是航海、航天、军事领域得到了广泛的应用并取得了很好的应用成果。动力系统是舰艇的重要系统之一,其操作人员的操作水平对舰艇能否遂行各项战斗任务影响重大。因此,动力系统训练模拟器在我国海军已得到较广泛应用。这些训练模拟器大都采用半实物仿真的模式,模拟器在设备外观上与被仿真设备完全一致,但其内部为计算机控制,并没有真实设备。这种训练模式的优点是学员的操作手感与被仿真设备完全一致,学员完成训练后完全可以达到操作实际装备所需的操作技能,能显著提高军事训练的质量与速度。
半实物仿真设备面板上有各类操作与显示部件,必须用数据采集设备采集操作人员操作开关等部件产生的数据,同时还要驱动指示灯、仪表等显示部件将计算结果进行输出。因此,设计一套可靠工作的数据采集与控制系统是研制半实物训练模拟器的关键技术之一。
1 系统概述
动力系统设备多而且关系复杂,开发的模拟器包括37 台模拟设备,合计开关量输入点733 个,开关量输出点1115 个,模拟量输入点19 个,模拟量输出点149 个。系统的核心是仿真服务器(该服务器同时作为模拟器的教练员台)。服务器上运行SimuEngine 仿真引擎,系统中所有的数学模型都由仿真引擎调度。I/O 设备采集半实物设备上的操作,由通信程序将操作数据通过以太网上传至服务器上的实时数据库,服务器根据实时数据库对数学模型进行计算,计算结果也写入实时数据库。通信程序将最新计算结果发送给I/O 设备,I/O 设备驱动相应的指示灯或仪表进行显示。系统总体结构如图1 所示。
2 设备选型
接口系统的设计有四种方案可供选择:
(1)基于某种型号的微处理器或单片机设计专用的接口硬件。该方案的优点是成本低,但设计周期长,可靠性难以保证,且开发调试困难。
(2) 采用工业控制计算机以及配套的硬件接口。该方案的优点是成本较低,选型方便快捷、开发调试方便。但由于这种接口系统依赖于WINDOWS 操作系统运行,可靠性不高。
图 1 系统总体结构
(3)采用可编程序控制器PLC 作为接口。该方案的优点是可靠性高、开发调试方便、模块化结构、易于维护;缺点是成本高,而且传统的中低端PLC 没有以太网接口,不易构成较为复杂的网络系统,最新推出的带以太网接口的PLC 价格昂贵。
(4)采用可编程自动化控制器PAC(Programmable Automation Controller)。PAC 结合了PC 的处理器、RAM 和软件的优势,以及PLC 固有的可靠性和分布特性,是近年来在工控领域出现的新型控制器。 PAC 与传统PLC 的性能比较见表1。
表 1 PAC 与传统PLC 的性能比较
PAC 产品型号众多,经过多方比较,选择了ADAM5510-E/TCP。它采用模块化结构,其CPU 模块包括80188CPU、256KB FLASH ROM、256KB SRAM 和三个串行通讯口与一个10/100M 以太网接口。其底板有8 个扩展槽,可以安装不同类型的I/O 模块。系统内置ROM-DOS,与MS-DOS 操作系统兼容,提供了除BIOS 之外的基本MS-DOS 功能调用,允许运行用C 或C++等高级语言编译的应用程序。与PLC 相比,5510 运算能力和通讯能力更强,模拟量点价位低。与工控机相比,5510 系统更加紧凑,抗干扰能力更强,因此适合做模拟器的I/O 设备。
本系统*选择了四种 I/O 模块:16 通道隔离数字量输出模块ADAM5056S、16 通道隔离数字量输入模块ADAM5051S、4 通道模拟量输出模块ADAM5024、8 通道高速模拟量输入模块ADAM5017H 等。另外,在某些操作台上有数码管显示器件。由于数码管的位数较多,为了节约输出模块,不宜用5056 的输出口直接驱动数码管的各段,因此选用了MAX7219 作为数码管的驱动芯片。通常,使用单片机等微控制器通过7219 的DIN、CS 和CLK 三根信号线控制它进行数码管的显示。该项目中由5056 的三个输出口模拟微控制器的三个口线对7219 进行控制。
3 程序设计
5510 没有显示界面,首先在PC 机上编写应用程序,编译好之后再下载到5510 内。5510采用了DOS 类操作系统,不支持多线程编程,每台5510 的程序随I/O 模块配置不同略有不同,但程序的总体流程均如图2 所示。
图2 程序总体流程
3.1 初始化子程序
(1)启动看门狗。系统由于某种原因陷入死循环后能自动退出,使系统恢复正常。
(2)初始化5024、5017。该两种模拟量模块在使用之前需要通过软件进行设置。其中5024 设置为4“20mA 电流输出,5017 设置为0”10V 输入。
(3)启动网络心跳包检测定时器。网络心跳包用于确认网络连接是否正常。
3.2 网络连接子程序
控制器首先建立 socket,然后与服务器连接。网络连接子程序的主要部分为:
void ConnectServer()
{ //首先进行相关变量定义
if((SO_5510=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==
INVALID_SOCKET) //建立socket 并设置为TCP 方式
{//未能建立socket 的处理}
pulArgp = 1;
if(ioctlsocket(SO_5510, FIONBIO, &pulArgp)) //将socket 设置为非阻塞模式
{//未能设置socket 的处理}
he=gethostbyname(“172.18.55.1”); //server address
Server_addr.sin_family = AF_INET; //TCP/IP
Server_addr.sin_port = htons(Server_Port);
Server_addr.sin_addr =*((struct in_addr *)he-》h_addr);
memset(&(Server_addr.sin_zero), 0, 8);
ConnectReturnFlag = connect(SO_5510, (struct sockaddr *)&Server_addr,sizeof(struct
sockaddr));//建立连接
if( ConnectReturnFlag == 0)
{//建立连接成功的相应处理}
else
{//建立连接失败的相应处理}
}
3.3 接收数并处理子程序
5510 接收到数据包后首先分析数据包内的命令字。本系统中设计的命令字有开始采集、停止采集、检查连接、有效数据等。如果是前三种命令则立即执行,如果是“有效数据”命令则打开数据包后面的内容(可能包含多个子包),子包内包含开关量、模拟量等若干子命令,程序根据不同子命令执行相应子程序。程序主体示意如下。
void ReceiveAndProcess()
{ if ((numbytes = recv(SO_5510, (char *)&RECVITEMS, sizeof(RECVITEMS), 0))==
SOCKET_ERROR)
{//没有接收到数据的处理}
if(numbytes》0)//收到数据后的处理
{ switch(RECVITEMS.Command) //判断命令字
{ case Scollectstart: //开始采集命令
SendCommand(CReplyCollectStart);//表示收到开始采集命令
break;
case Ssendgroupdata: //有效数据指令
{ for(CircleNum=0;CircleNum
{ switch (RECVITEMS.Items[CircleNum].Command) //判断子命令
{ case SsendoneDOdata: //server 发送的开关量单字节指令
WriteOneDOChannel(RECVITEMS.Items[CircleNum]);
break;
case SsendoneAOdata: //server 发送的模拟量单字节指令
WriteOneAOChannel(RECVITEMS.Items[CircleNum]);
break;
default: break;
} } }
default: break;
} } }
3.3 数据采集发送子程序
为了降低网络传输的数据量,PAC 控制器只向服务器发送状态发生变化的数据,而状态没有发生变化的数据则不发送。同样,服务器通信程序SimuTrans 只向PAC 控制器发送模型计算后发生变化的数据。
为了保证数据不会丢失,针对不同种类的数据采用了不同的发送、回送方式。在该模拟器中,输入的模拟量为艇员操作面板上的旋钮时带动内部的电位器产生0“10V 的模拟电压信号,由于其操作是连续过程,操作过程会产生一系列变化数据,因此5017H 采集到的变化数据直接发送到服务器即可。对于操作按钮、多位开关等部件产生的开关量数据,为了避免数据丢失采用了重复发送,并且服务器收到数据后要做应答,确保了数据传输的可靠性。
4 结论
该模拟器2007 年9 月通过了验收、鉴定。在动力系统管理人员及在校学员的学习与训练过程中发挥了重要作用,获得了良好的军事和经济效益。该半实物仿真训练模拟器的成功研制实践说明,将新型PAC 控制器应用于模拟器代替传统的工控机或PLC 不仅能缩短开发周期、使系统运行稳定可靠,而且系统开放性好,可以方便地与其他系统的模拟器连接组成更大规模的模拟器进行训练,是模拟器研制的一种新思路。
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !