APP下载

基于xPC和CVI的实时仿真系统设计实现

2012-01-18陈怀民赵会超

电子设计工程 2012年24期
关键词:宿主机机上网卡

陈怀民,赵会超

(西北工业大学 无人机特种技术重点实验室,陕西 西安 710065)

如何建立界面友好、易于操作且实时性高的实时控制系统是一个日益受到广泛关注、值得深入探讨的问题。利用MATLAB的xPC平台,采用“双机模式”(宿主机—目标机)开发实时控制系统是一种可选的方式。其中,宿主机执行用户管理程序,提供用户界面保证了易用性。目标机执行实时应用程序,保证应用程序执行的实时性。但该方法无法脱离MATLAB环境形成独立的宿主机程序,且其用户界面单一难以满足用户的多样性需求,影响了在工程实践中的推广应用。

文中分析了xPC Target的应用程序接口(Application Programming Interface,API)和 LabWindows/CVI的外部程序接口。通过在LabWindows/CVI中加载xPC的动态链接库实现了对xPC的API的调用。基于底层API,在LabWindows/CVI环境下建立了可以在Windows平台上独立运行的应用程序作为xPC平台宿主机的人机接口。该方法不仅充分利用了xPC平台实时性高的优点,而且形成了不依赖MATLAB的独立的宿主机程序。同时,采用LabWindows/CVI提供的专业虚拟仪器控件编制宿主机程序,大大提供了程序设计效率,应用软件界面美观友好,操作简单灵活。

1 开发环境简介

xPCTarget是美国MathWorks公司提供和发行的一个基于RTW体系框架的附加产品,可将Intel80x86/Pentium计算机或PC兼容机转变为一个实时系统,而且支持多种类型的I/O设备板(包括ISA和PCI两种类型)[1]。xPCTarget采用宿主机-目标机的双机模式,宿主机用于运行控制台程序,目标机用于执行RTW生成的实时代码。xPCTarget提供了一个高度减缩的实时内核,运行在目标机上,该实时内核采用32位保护模式。xPCTarget通过以太网或串口实现宿主机和目标机直接之间的通信。

LabWindows/CVI是National Instrument公司开发的完全ANSI C开发环境,将功能强大、使用灵活的C语言平台与用于数据采集、分析和显示的测控专业工具有机结合起来。它的交互式开发平台、交互式编程方法,丰富的功能面板和函数库大大增强了C语言的功能,使设计者能以最快的速度设计,调试和开发实际的系统[2]。此外,LabWindows/CVI还具有强大的网络通信数据传输能力,它提供了基于UDP通信协议的网络数据传输API函数,实现了高效、可靠的网络数据通信。

2 系统搭建的基本原理

2.1 系统总体架构

该系统采用宿主机—目标机的双机模式。宿主机执行LabWindows/CVI建立的非实时用户界面,实现目标应用程序的下载与数据的处理和显示,通过调用xPC的API实现对目标应用程序的监测和控制。目标机实时执行目标应用程序,实现模型的实时解算,通过UDP回传目标应用程序的信号数据。在xPC平台下,宿主机和目标机可利用串口或网卡实现通信。同串口连接方式相比,网卡模式具有传输速度快、传输距离远的特点。另外,网卡模式还可连接到局域网上,使多台PC机加入到xPC实时仿真系统,故而通常采用网卡连接方式。系统架构如图1所示。

图1 系统架构Fig.1 System structure

2.2 xPC Target用户接口

xPCTarget提供了8种用于控制目标应用程序的用户接口方式,分别为:

1)Matlab命令行;

2)含目标机示波器的Simulink模式;

3)web浏览界面;

4)xPC目标管理器;

5)Simulink外部模式;

6)目标机命令行;

7)利用xPCTarget的API建立监控程序;

8)利用xPCTarget的COM API建立监控程序;

其中,方式 1)2)3)4)5)只能在 MATLAB 环境中运行,无法建立独立的宿主机应用程序。方式6)直接在目标机上进行控制和显示,易用性差且操作界面不友好。方式7)、8)可在其他设计平台上调用xPC的API设计独立的宿主机应用程序。xPC的API和COM API在完成对目标机的控制上并无本质区别,两者均是通过动态链接库的形式提供API函数以完成控制功能。文中采用使用xPC的API的方法实现宿主机监控程序。

2.3 LabWindows/CVI外部程序接口

LabWindows/CVI支持对兼容编译工具开发的外部模块的使用,也能够开发模块供外部编译工具使用。LabWindows/CVI开发环境支持的常见外部模块接口,包括以下几种:目标代码文件(*.obj)、静态库(*.lib)、动态链接库(*.dll)。 其中最常用的方法是以LabWindows/CVI编写主程序,使用其他开发工具编写DLL(Dynamic Link Library),再将DLL加入到LabWindows/CVI系统中使用[3]。文中通过加载xPC的动态链接库来实现对其API函数的调用。

2.4 LabWindows/CVI中调用xPC的API

为实现在LabWindows/CVI下对xPC Target的API的调用,首先在LabWindows/CVI环境下建立一个项目文件,然后在该项目文件根目录下添加xpcapi.dll,xpcapi.h,xpcapiconst.h,xpcinitfree.c 4个文件。其中 xpcapi.dll是xPCTarget提供的供其他程序调用的动态链接库,在调用API函数之前必须正确加载该动态链接库。xpcapi.h中定义了xPC Target的API函数库和所需的数据结构。xpcapiconst.h中定义了程序运行过程中的错误代号、可供使用的Scope数等常量。其中部分错误代码与LabWindows/CVI的错误代码冲突,需要更改xpcapiconst.h文件中相应的错误代码。xpcinitfree.c中定义了int xPCInitAPI(void)用于程序设计的初始化阶段显式加载xpcapi.dll,定义了 void xPCFreeAPI(void)用于程序结束时释放xpcapi.dll。

xPC Target的API包含了一系列可供C程序调用的函数。以下依据在程序设计中的顺序介绍这些API。

1) int xPCOpenTcpIpPort (const char*ipAddress, const char*ipPort); int xPCOpenSerialPort (int comPort, int baudRate)。建立目标机和宿主机之间的通信联系。xPC提供了两种通信方式:网卡通信和串口通信。前者用于建立网卡通信,后者用于建立串口通信。

2) void xPCLoadApp (int port, const char*pathstr, const char*filename)。下载目标应用程序到目标机上。在每次目标应用程序运行之前都需要从宿主机下载到目标机上。

3)void xPCStartApp(int port)。启动目标机上的目标应用程序。此函数使宿主机能够控制目标机上目标应用程序的启动时间。

4)void xPCStopApp(int port)。停止目标机上的目标应用程序。

5)void xPCUnloadApp(int port)。 卸载目标机上的目标应用程序。在运行void xPCStopApp(int port)后,目标应用程序依然驻留在目标机内存中,可通过void xPCStartApp(int port)重新启动应用程序。如果需要更换应用程序或结束仿真,则调用此函数以卸载目标应用程序。

6)void xPCClosePort(int port)。 关闭目标机和宿主机的通信联系。无论是网卡通信还是串口通信均使用此函数关闭通信连接。

3 系统实现

3.1 xPC目标应用程序

为了实现脱离MATLAB环境这一目的,需要预先生成可执行的xPC目标应用程序(一个后缀名为dlm的文件)。xPC目标应用程序是RTW从Simulink模型生成的,可实时地运行在无任何操作系统的普通PC机上。开发过程为:先创建Simulink模型,设置模块参数和采样速率等仿真参数,进行模型的非实时仿真,然后由RTW、xPC Target和C代码编译器生成可在目标机上运行的目标应用程序。xPC只支持定步长实时仿真,因此在设置仿真参数时,解算器类型应选择Fixed-step。

3.2 LabWindows/CVI程序设计

作为C语言编程环境,LabWindows/CVI可在程序中直接调用xPC Target提供的API函数。在创建工程后,可首先建立用户界面文件并放置各种控制和显示控件,包括command button,numeric,Graph 等控件。 借助 LabWindows/CVI提供的丰富的虚拟仪器控件可建立美观友好、易于操作的人机界面。完成用户界面设计后,LabWindows/CVI可自动生成程序框架和缺省消息处理函数,只要在这些函数中添加实现功能所需代码即可完成程序的设计。具体操作如下:在用户界面窗口菜单中,选择Code/Generate/All Code,点击OK即可生成程序框架,进入代码编辑窗口,添加代码完成程序设计。在2.4节中已经介绍了如何在LabWindows/CVI中加载xPC的动态链接库,加载动态链接库之后便可在LabWindows/CVI中直接调用xPC的API完成特定功能。部分程序代码示意如下。

xPCInitAPI();

port=xPCOpenTcpIpPort(ipAddress, ipPort);

xPCLoadApp(port, “.”, “x650_cld_nl_inc_OK”);

……

id_1=xPCGetParamIdx(port, “pilot/hcmd”,“Value”);

xPCSetParam(port, id_1, &value_1);

id_2=xPCGetSignalIdx(port,signal);

sig=xPCGetSignal(port, signalID);

……

xPCStopApp(port);

xPCUnloadApp(port);

xPCFreeAPI (void);

3.3 在线调参

进行实时仿真时,需要根据实验结果不断调整模型参数和初始仿真条件,这将造成源程序的重新编译和下载,带来不必要的工作量[4]。因此,实时调整和初始化目标应用程序的参数就具有重要意义。xPCTarget允许在目标应用程序运行时或两次运行之间改变模型参数并下载至目标机。这样就无需重新编译链接生成可执行的目标应用程序,便可以改变目标应用程序的参数[5]。

在xPC目标应用程序中为每一个可调参数分配唯一ID,要想修改某参数必须首先获得其ID。xPCTarget提供了获得参数 ID的 API函数,int xPCGetParamIdx (int port,const char*blockName,const char*paramName)。获得需调参数的ID后就可以调用void xPCSetParam (int port,int paramIdx,const double*paramValue)来完成目标应用程序参数调整。

文中通过解析XML文件的方式实现目标应用程序的初始化。具体方法为:预先将参数信息以特定格式写入XML文件,在目标应用程序加载完成后,解析XML文件得到参数信息,通过调用xPCSetParam实现参数的初始化。这样做的优点是提高程序的通用性,不必对源程序重新编译和下载,通过修改XML文件内相应参数信息便能完成不同初始化条件的程序加载。另外,在解析XML文件的同时,可使相应的参数信息显示在LabWindows/CVI建立的人机界面上,便于用户了解初始化的完成情况,而且用户可在程序运行时对参数进行实时调整。

另外还有一些设置、监控目标应用程序在目标机上运行参数的函数。主要有:设置目标应用程序采样时间的函数:void xPCSetSampleTime (int port, double ts);获取目标应用程序采样时间的函数:double xPCGetSampleTime (int port);设置目标应用程序停止时间的函数:void xPCSetStopTime(int port, double tfinal)。

3.4 信号跟踪

信号跟踪是指在目标应用程序实时运行中获取信号并使其可视化的过程。在xPC平台下,用户可通过以下3种方式实现对信号的跟踪[6]。

1)使用xPC的目标管理器实现信号跟踪;

2)使用MATLAB命令实现信号跟踪;

3)使用xPCTarget的示波器模块实现信号跟踪;

其中,前两种方法都无法脱离MATLAB环境实现对信号的跟踪显示。第三种方法可以脱离MATLAB环境,但只能在目标机上实现信号的跟踪显示。为此,文中提出了一种新的信号跟踪显示的方法。

首先,在建立目标应用程序的Simulink模型时将需要跟踪显示的信号连接至一个xpcudpbytesend模块,并设置相应参数(宿主机IP地址、宿主机端口号和采样频率)。此模块可通过UDP向指定的宿主机发送信号数据。

其次,在CVI主控程序[7]中调用UDP接收函数UDPRead,接受目标机通过UDP上传的信号数据。为了能够及时无误、不受用户操作干扰的接收信号数据,建议开辟一个独立线程来接收UDP数据。

最后,在用户界面上显示信号的实时曲线。为了能够准确连续地显示信号的实时曲线,在CVI中采用Graph控件实现示波器功能,同时利用异步定时器定时刷新示波器的显示。在LabWindows/CVI中,异步定时器是在独立的线程中工作,因此能够更好的保证曲线显示的连续性和准确性。

另外,xPC还提供了直接读取需监测信号在采样点的实时值的函数。和调整参数的方式类似,读取监测信号在采样点的实时值需要获得目标应用程序中需监测信号的ID,函数为:int xPCGetSignalIdx (int port, const char*sigName)。 获得需监测信号的ID后就可以调用 double xPCGetSignal(int port,int sigNum)获得该信号的当前值。

4 仿真结果

根据上述设计和实现方法,构建了基于xPC和LabWindows/CVI的实时仿真系统。为验证系统性能,对四旋翼无人机模型进行了实时仿真实验。宿主机采用Pentium4处理器的普通PC机,目标机采用研华Advantech610工控机。宿主机和目标机之间采用网卡通信,选用Intel82559网卡。仿真结果如图2、图3所示。

图2 LabWindows/CVI建立的人机交互界面Fig.2 User interface based on LabWindows/CVI

图3 目标机示波器显示的仿真结果Fig.3 Simulation results on xPCtarget’s scope

实验结果表明,该系统具备仿真步长1 ms,数据通讯周期20 ms,显示更新周期20 ms的实时仿真能力,同时可实现参数的在线调整和信号跟踪显示。

5 结束语

文中系统分析了xPC Target的用户接口和LabWindows/CVI的外部程序接口。通过在LabWindows/CVI中加载xPC的动态链接库实现了对xPC的API的调用。基于底层API函数开发主控台仿真控制软件,使宿主机可脱离MATLAB环境实现独立的控制台程序。该方法既能有效发挥xPCTarget的实时性优势,又能充分利用LabWindows/CVI丰富的专业虚拟仪器控件。同时该方法实现了目标应用程序的在线调参和信号的跟踪显示,为xPC平台下的实时控制策略在工程实践中推广应用提供了有益的参考。

[1]王先泽,刘志勤,陈怀民,等.基于xPC目标的飞控系统半实物实时仿真[J].科学技术与工程,2007(21):5609-5613.WANG Xian-ze,LIU Zhi-qin,CHEN Huai-min,et al.Realtime simulation of semi-hardware are in the loop with flight control system based on xPC target[J].Science Technology and Engineering,2007(21):5609-5613.

[2]王晓东,尚耀星,吴帅.基于LabWindows/CVI和RTX的实时测控软件设计[J].科技信息,2008(19):397-398.WANG Xiao-dong,SHANG Yao-xing,WU Shuai.Design of real-time control software with LabWindows/CVI and RTX[J].Science&Technology Information,2008(19):397-398.

[3]刘立月,谢昕,刘觉夫.基于LabWindows/CVI动态链接库的VC接口实现[J].微计算机信息,2006(10-1):190-192 LIU Li-yue,XIN Xin,LIU Jue-fu.Interface implementation of VC Based on LabWindows/CVI’s DLL [J].Control&Automation,2006(10-1):190-192.

[4]赵斌,周军,卢晓东.基于xPCTarget的飞行器半实物仿真系统研究[J].计算机测量与控制,2011(19):625-628 ZHAO Bin,ZHOU Jun,LU Xiao-dong.Hardware in loop simulation system for vehicle based on xPC target[J].Computer Measurement&Control,2011(19):625-628.

[5]王爽心,王玎婷,杨辉,等.基于xPC目标的液压疲劳控制系统半实物实时仿真[J].仪器仪表学报,2006(6):567-569.WANG Shuang-xin,WANG Ding-ting,YANG Hui,et al.Hydraulic fatigue control systems in real-time simulation based on xPC target environment with semi-hardware in the loop[J].Chinese Journal of Scientific Instrument,2006(6):567-569.

[6]进兵,黄一敏.基于xPC的无人机飞行控制系统的快速原型设计[J].系统仿真学报,2008(9):479-482.JIN Bing,HUANG Yi-min.Rapid prototype design for flight control system of UAV based on xPC[J].Journal of System Simulation,2008(9):479-482.

[7]施先旺,王鹏武.发动机工况实时调节软件设计[J].火箭推进,2012(5):70-76.SHIXian-wang,WANGPeng-wu.Design of real-time regulation software for engine power[J].Journal of Rocket Propulsion,2012(5):70-76.

猜你喜欢

宿主机机上网卡
嵌入式计算机软件测试关键技术研究
Server 2016网卡组合模式
机上上网,开启乘机新时代
虚拟网络实验室在农村职校计算机网络技术教学中的应用研究
挑战Killer网卡Realtek网游专用Dragon网卡
RHEL7 Network Teaming(网卡绑定)配置与测试
USB故障又一原因