完成了测试台软件分析和编程环境搭建后,接下来就是软件的编写。本章主要包括  
 
 
 软件窗口界面设计和功能代码实现。以某型号数据记录仪的工作需求为目标,根据测试  
 
 
 工作流程,以  
 Linux-Qt  
 为主要开发手段,设计一款功能完备、界面友好、操作简洁的测  
 
 
 试台软件。  
 
 
 3.1  
 软件设计原理  
 
 
 根据需求和总体设计软件分为三个工作模式,功能模块图如图  
 3.1  
 所示。从图中可  
 
 
 以明显看到软件包括模拟信号源、存储器检测回读、数据处理三个功能窗口。每个窗口  
 
 
 功能独立,又紧密结合。可以配合工作进行测试,也可以单独工作进行某一项测试。 
 
 
 
 首先是模拟源窗口,主要负责飞行实验前地面数据源模拟,由上位机发送指令控制  
 
 
 测试台中的主控  
 CPU 
 ,产生  
 5  
 路开关量、 
 2  
 路模拟量、 
 1  
 路  
 422  
 数据, 
 5  
 路网络数据。  
 
 
 目的是为了在飞行试验前,对系统的整个流程进行测试。通过发送已设定好的模拟数据  
 
 
 并存储到  
 Flash  
 中,然后回读数据,经过初步对比和进一步数据处理来验证整个系统的  
 
 
 工作状态。存储器检测回读窗口包括网络配置、存储器选择、查询当前存储状态、读取 
  
  
 
  
  
   
   
 
   
   
   
 
   
   
   
 
   
   
   
 
   
   
   
   
   
   
   
 
   
   
    
    
 
    
    
    
 
    
    
    
    
 
    
    
    
 
    
    
    
    
 
    
    
  
                 
  次数和读取量设置、停止读数、记录仪擦除等功能,核心任务是对已经存在  
  Flash  
  中的  
 
 
  
  数据进行回读。最后是数据处理窗口,主要功能是对已经回读并存放到桌面的的原始数  
 
 
  
  据文件进行分离,按照不同通道将数据分开,便于单独研究。  
 
 
  
  通讯模式采用串口指令收发和  
  UDP  
  数据回读两种。其中串口通讯采用发送 
  + 
  反馈的  
 
 
  
  方式,保证每一条指令的准确度,同时在软件界面给予即时显示,退出时生成 
  .log  
  日志  
 
 
  
  文件,便于查看。  
 
 
  
  下位机收到某一条指令以后会及时给予反馈。当上位机发送数据回读指令时,记录  
 
 
  
  仪通过网络  
  UDP  
  传输将已存到  
  Flash  
  中的数据传回上位机并储存为本地文件,进行下一  
 
 
  
  步处理。数据包格式为:帧头 
  + 
  帧计数 
  + 
  数据 
  + 
  校验和。表  
  3.1 
  、 
  3.2  
  为详细的控制指令表。 
 
 
 
 
  
 
  软件功能包括以下内容:  
 
 
  
  1 
  ,用户可以在软件开机界面选择工作模式。包括模拟源模式 
  / 
  数据回读模式 
  / 
  数据分  
 
 
  
  离模式。  
 
 
  
  2 
  ,在模拟源模式下,软件通过发送串口指令使能测试台中的继电器,同时控制  
  CPU  
 
 
  
  产生模拟数据源。操作方式分为自动和手动两种。实验过程中可随时开启或关闭任意一  
 
 
  
  路开关量,方便测试系统的某一路开关是否正常工作。  
 
 
  
  3 
  ,在数据回读模式下,上位机通过查询指定存储器中的存储信息选择读取数据,读  
 
 
  
  数过程中不能进行其他操作。读数完毕后,可根据需求擦除数据记录装置(整体擦除),  
 
 
  
  擦除前需要再次确认。  
 
 
  
  4 
  ,数据分离模式。对已经回读并存储的数据文件进行进一步分离,用户可按照需求  
 
 
  
  分离一路或者多路数据。每路数据分离互不干扰,都是独立的功能模块。 
 
 
  
  
   3.2 Qt  
   信号通信机制  
  
 
   
   作为一款上位机控制软件,与通过指令收发的形式与下位机进行通信是其主要职能。  
  
 
   
   使用  
   Qt  
   开发,首先要考虑通信问题。信号与槽( 
   Signal & Slot 
   )机制是  
   Qt  
   软件独创的  
  
 
   
   一种通信方式 
   [16] 
   。信号类似与一个开关,而槽函数类似于一个灯泡。当开关触发后,灯  
  
 
   
   泡开始工作。信号与槽也是如此 
   [17] 
   。当表示信号函数的事件触发后,比如点击一个按钮,  
  
 
   
   就会发出一个信号,需要实现的目的就是槽函数要表达的信息。它隐藏了复杂的底层实  
  
 
   
   现,完成信号和槽的关联后,发射信号并不需要知道  
   Qt  
   是如何找到槽函数的 
   [18] 
   。与某  
  
 
   
   些开发框架的回调函数( 
   callbacl 
   )相比,信号与槽这种机制更加灵活多变,也让  
   Qt  
   在  
  
 
   
   界面设计时,对各个组件的编程目标更加明确。  
  
 
   
   信号和槽函数是用  
   QObject::connect() 
   函数进行连接的的。一般写成:  
  
 
   
   QObject::connect(sender,SIGNAL(signal()),recevier,SLOT(slot()));  
  
 
   
   或者  
   connect(sender,SIGNAL(signal()),recevier,SLOT(slot()));//QObject  
   可省略  
  
 
   
   在上面的函数中, 
   sender  
   表示发出信号的控件名, 
   signal() 
   是该信号的名称。比如按  
  
 
   
   钮的点击,文本框的输入等。同理, 
   recevier  
   表示接收信号的类名称,可以是窗体,或  
  
 
   
   者对话框等。 
   slot() 
   函数为相对应的槽函数,表明接收信号的类要执行的操作 
   [19] 
   。可以是  
  
 
   
   窗体的弹出,或者显示一段文本。在使用信号和槽函数机制进行编程时,需要明确以下  
  
 
   
   内容:  
  
 
   
   4.  
   一个信号允许与数个槽函数进行配对,数个信号也能够关联相同的槽函数 
   [20] 
   。信  
  
 
   
   号与槽函数之间并没有固定的数目匹配。需要注意的是,当一个信号与几个槽函数连接  
  
 
   
   时,槽函数的实现需要参照具体程序,根据程序中关系的先后依次进行。这种一对多,  
  
 
   
   多对一的对应关系可以用图  
   3.2  
   表示。 
  
 
  
 
   
   5.  
   不同信号之间也能够互相建立关系。并不是信号必须对应槽函数。信号也可以触  
  
 
   
   发另一个信号,再去响应一个或几个槽函数,可以根据具体的情况灵活运用 
   [21] 
   。  
  
 
   
   6.  
   信号与槽函数的关联方式是很迅速的、即时的。类似于中断,当触发了一个信号  
  
 
   
   槽函数时,会立刻执行。只有这个槽函数执行完毕,主程序才会继续运行 
   [22] 
   。  
  
 
   
   信号与槽函数的通信机制是  
   Qt  
   编程的根本原则。除此之外,还有一些函数需要事件  
  
 
   
   去触发。比如鼠标操作和键盘的键入。这些操作在  
   Qt  
   中都有对应的函数来响应。图  
   3.3  
  
 
   
   为常见的几种事件处理函数 
   [23] 
   。 
  
 
  
 
   
   3.3  
   软件程序界面的设计和实现  
  
 
   
   根据  
   Qt  
   的通信机制,结合项目需求,软件除开机界面外,设计为三个功能窗口。分  
  
 
   
   别是模拟源窗口、数据回读窗口、数据分离窗口。  
  
 
   
   3.3.1  
   开机界面  
  
 
   
   开机界面显示软件名称和版本号以及软件功能入口。包括模拟源窗口、数据回读窗  
  
 
   
   口、数据分离窗口三个功能窗口。每个窗口都是功能独立,互不干扰。使用时,可以根  
  
 
   
   据具体需求选择对应的的功能按钮。开机界面如图  
   3.4  
   所示。 
  
 
  
 
   
   3.3.2  
   地面数据模拟窗口  
  
 
   
   地面数据模拟是整个系统的必要一环。在飞行试验前,有必要用模拟数据来检测记  
  
 
   
   录仪的工作情况。模拟源分为手动和自动两种模式。模拟源窗口界面如图  
   3.5  
   所示。 
  
 
  
 
   
   点击系统上电后,软件发指令给  
   CPU 
   ,控制继电器工作,系统上电。手动模式下可  
  
 
   
   以自由选择任意开关量和模拟量进行测试,方便检查系统某一路是否故障。自动模式下,  
  
 
   
   软件只发送一条指令。 
   CPU  
   收到指令后,会自动上电,依次启动各路开关量和模拟量数  
  
 
   
   据,并记录在存储器中,实现操作自动化。测试台上都有相应的信号灯显示某一路开关  
  
 
   
   是否打开。右边窗口显示即时操作信息和反馈信息。  
  
 
   
   模拟源模式的工作时间可以自行控制,通常试验时间为  
   3-5  
   分钟。其中,每一路开  
  
 
   
   关量数据的开关时间均以数据的形式存存储器中,回读后可以通过数据直观的看到每个  
  
 
   
   开关的启动时间和顺序。图  
   3.4  
   中 
   < 
   系统上电 
   > 
   和 
   < 
   自动模式 
   > 
   按钮均为为复用按钮,点击  
  
 
   
   一次就会变 
   < 
   系统断电 
   > 
   和 
   < 
   停止测试 
   > 
   。测试台中的主控  
   CPU  
   负责对收到的数据进行总  
  
 
   
   体的编帧存储。  
  
 
   
   3.3.3  
   数据回读窗口  
  
 
   
   数据回读是整个软件功能的核心部分。负责将已经编帧并存储到  
   Flash  
   中的数据回  
  
 
   
   读到上位机。硬件接口为百兆以太网接口芯片  
   W5300 
   ,采用  
   UDP  
   协议进行回读。回读  
  
 
   
   后的数据存储到桌面上,数据格式为 
   .hex  
   文件。窗口界面如图  
   3.6  
   所示。  
  
 
   
   首先点击 
   < 
   系统上电 
   > 
   按钮,然后配置网络  
   IP  
   和端口号。点击 
   < 
   连接 
   > 
   按钮,界面显 
  
 
  
 
   
   示当前网络连接状态。接着选择存储器。系统装配有两个存储器芯片,且均有备份,确  
  
 
   
   保数据保存完整。点击 
   < 
   读取记录器信息 
   > 
   按钮,会在界面显示当前存储器的存储状态,  
  
 
   
   包括上电次数,数据大小等信息,用户可根据显示的信息选择读取次数和读取量,点击  
  
 
   
   < 
   读主存储器 
   > 
   或者 
   < 
   读备存储器 
   > 
   开始读数。数据会保存到桌面,以读取时间命名。读取  
  
 
   
   结束后,文本框内会有提示。最后点击 
   < 
   停止读数 
   > 
   按钮,使  
   FPGA  
   端空闲。用户也可以  
  
 
   
   根据情况选择擦除存储器。界面右侧文本框内容为操作步骤。每一步操作和反馈均在下  
  
 
   
   方文本框内即时显示。每个按钮在上一步操作未完成之前,都是灰色不可用的,这样做  
  
 
   
   的目的是为了防止用户误操作。读取结束后点击 
   < 
   退出 
   > 
   按钮,退出当前界面,返回主界  
  
 
   
   面,执行下一步操作。 
  
 
   
    3.3.4  
    数据分离窗口  
   
 
    
    数据分离窗口的主要功能是对已经回读的原始数据文件进行分离。数据分离窗口界  
   
 
    
    面如图  
    3.7  
    所示。 
   
 
   
 
    
    图中每一个按钮都代表分离一路数据。点击每个按钮,自动弹出文件索引窗口,选  
   
 
    
    择分离已经回读的任意一次原始数据。分离结束后,弹出信息提示框表明分离结束。输  
   
 
    
    出的子数据文件存放到桌面上。通过分离数据,进一步观察分析每一路数据,与预先设  
   
 
    
    定好的模拟数据作对比,进而对整个系统的运行情况作出结论。  
   
 
    
    数据分离基本思路是按照不同通道数据的帧头进行分离。由于每个通道的数据都是  
   
 
    
    独立互不影响的,且数据格式固定,即帧头 
    + 
    帧计数 
    + 
    数据 
    + 
    校验和。所以按照帧头判断  
   
 
    
    可以很准确的将原始数据分离开来。分离过程程序设计流程图如图  
    3.8  
    所示。 
   
 
   深圳信迈提供RK3399+FPGA的软硬件方案。
 
    5.1  
    软件功能测试  
   
 
    
    将开发板与测试台连接,包括开发板电源  
    12V  
    由测试台提供。串口、网口与测试台  
   
 
    
    连接。接通测试台电源,可以看到测试台电压显示窗口数值稳定为  
    27.7V 
    ,表明电源、  
   
 
    
    串口、网口接通状态的指示灯都为绿色。系统硬件连接如图  
    5.1  
    所示。 
   
 
   
 
    
    打开软件,首先选择进入模拟源工作模式。点选 
    < 
    手动模式 
    > 
    。依次点击各个开关量  
   
 
    
    模拟量按钮,工作时间设为  
    5  
    分钟。软件工作界面如图  
    5.2 
    。窗口即时显示操作信息。 
   
 
   
 
    
    系统工作结束,开始回读数据。在软件数据回读界面,按照提示框内的操作流程进  
   
 
    
    行读数配置。工作界面如图  
    5.3  
    所示。 
   
 
   
 
   数据回读后自动存到桌面上,生成以存储时间命名的数据源文件。
 
    5.2  
    测试结果  
   
 
    
    将回读成功的数据从  
    rk3399  
    提供的  
    USB  
    口传输到  
    PC  
    端。通过数据解析软件处理,  
   
 
    
    按各通道数据帧头将原始数据分离,最终输出  
    7  
    路数据。用  
    Hexedit  
    和  
    Matlab  
    软件进行  
   
 
    
    查看和处理,得到对应的数据源码和波形图。每一路数据前  
    8  
    个字节中, 
    4  
    个字节为数  
   
 
    
    据帧头, 
    4  
    个字节为帧计数,在原始数据中都可以直观的看出。  
   
 
    
    7.  
    开关量和模拟量测试结果如图  
    5.4  
    所示。数据帧头  
    F1F20000 
    ,频率  
    100Hz 
    ,帧计  
   
 
    
    数间隔为  
    2 
    。 
   
 
   
 
   



















