一种行波管放大器测试软件的设计与实现
2023-11-14杨林
杨 林
(中国空间技术研究院西安分院,西安,710000)
0 引言
空间行波管放大器广泛应用于通信、导航、遥感等卫星中,是星载有效载荷系统中的重要的功放设备。随着国产化空间行波管放大器研制的突破,产品构成的复杂性和集成度越来越高,功能越来越强,频段覆盖L/Q波段,在北斗导航、载人飞船、货运飞船、通信卫星等58颗星船中实现批量飞行应用,形成型谱化开发和产业化的发展。目前国内多家行波管放大器研制单位都已建成了一些测试系统,实现了行波管放大器的自动化测试[1]。早期研发的测试系统大多数属于定制化开发,只针对特定产品、特定项目和特定仪器完成自动化测试。当增加新的测试仪器或测试项目时,需要重新进行开发,现有测试系统存在设备分散、功能单一、通用性差等问题。随着产品交付种类和数量增加,现有的测试系统已经无法满足行波管放大器的测试需求,尤其在新的测试项目和仪器的扩展上、测试数据的分析方面存在困难[2]。国产化行波管放大器进入了质量问题多发与交付进度大量延期的双重困境。
根据国产化行波管放大器产品的测试需求和功能特点,本文提出一种基于三层架构的行波管放大器测试软件。该软件以Python为开发语言,利用其强大的第三方依赖库与高效的开发速率,设计并实现了行波管放大器自动测试软件。内置了完整的行波管放大器测试方法和丰富的仪器驱动程序,开放的软件接口支持多种仪器驱动和新测试项目的扩展,实现测试过程中数据的自动采集、存储、处理和分析比对。最后的测试结果标明软件的设计大大提高了行波管放大器测试效率,降低了测试风险。
1 系统概述
行波管放大器是通信卫星有效载荷系统中的关键装置,其工艺技术复杂、研制难度高,必须对其进行全面、精确的测试,对测试系统提出了更高的要求[3-4]。系统应满足各类行波管放大器的测试需求,实现测试项目全覆盖,并支持国内外不同厂家的测试仪器,且具备良好的扩展性,实现一种通用的行波管放大器测试系统。
软件拟实现的功能:1)实现对仪器的控制和测试数据的采集;2)内置的测试方法完成测试项目的自动测试;3)对测试数据进行统一管理,完成数据的保存、分析和比对。
2 系统设计与实现
2.1 系统结构与组成
根据软件的设计要求和功能需求,本系统采用三层结构,包括数据访问层、业务逻辑层、表示层[5],如图1所示。
图1 系统结构图
1)数据访问层实现仪器的控制与访问,系统调用标准的VISA库,实现对仪器的读取数据和发送指令,完成对仪器的参数设置、数据读取、轨迹截取等操作。
2)业务逻辑层实现测试方法的编写,完成所有测试项目的功能实现。接收表示层的用户指令,将指令处理成仪器可识别的SCPI指令之后发送到数据访问层,再将仪器返回的数据回传到表示层。
3)表示层实现数据的显示和输入,用户通过图形界面输入测试信息和测试指令,同时为测试工程师和设计师提供直观的数据展示。
系统软件分为数据处理、测试方法设置、仪器操作控制三个部分。每一个模块中含有一些主模块,每个主模块中有若干子模块,每个子模块之间相互独立,且只实现目的单一的功能。在数据处理层主要完成文件管理、数据处理和数据展示,用户完成测试文件编辑后,直接开始测试,将需要测试的项目传递到业务逻辑层中;在业务逻辑层完成测试方法的设置,包括测量项目设置、被测件设置、寄存器选择、测量参数设置等模块,将仪器操作的要求传递到数据访问层;在数据访问层完成仪器的具体操作要求,包括寄存器调用、初始化、测量准备、执行操作和数据读取,并将测试数据回传到业务逻辑层进行暂存,最后回传到表示层;在表示层对数据进行数据修正、单位换算,最后以图像、表格化的形式进行展示,系统数据流图如图2所示。
图2 系统数据流图
采用三层结构,体现系统的“高内聚、低耦合”特性,用户表示层只需要对数据进行输入和显示,业务逻辑层对测试项目进行逻辑判断和执行操作,数据访问层对逻辑业务层下发的操作指令进行具体实现。层次之间划分清晰,相互独立,可以自由扩展和维护[6]。
2.2 数据访问层
数据访问层是所有仪器的控制中心,封装了对仪器各种操作的集合,仪器的设置、读取和触发等所有操作都在这里完成。实现对仪器的指令操作、数据读取,并将读取数据反馈到业务逻辑层。数据访问层只用来执行逻辑业务层发来的操作指令,不需要对其进行逻辑判断。
行波管放大器测试所需要的仪器种类包括矢量网络分析仪、频谱仪、信号发生器、功率计、功率头、脉冲信号发生器、指令发生器、数据采集器等十余种仪器。国内外主流的仪器厂商包括是德科技、罗德与施瓦茨公司、泰克科技、中电41所和中科四点零等国内外多个厂家,虽然厂家不同,但都提供标准的VISA库。VISA库是一种国际标准的I/O接口,广泛应用于国内外仪器仪表的控制。PyVISA是基于VISA标准库的 Python第三方库,以 NI-VISA 作为后台驱动[7]。针对不同厂家的不同仪器,通过开放VISA接口进行二次封装,使不同厂家的仪器形成统一的驱动程序。
数据访问层流程设计如下:首先在程序中导入PyVISA第三方库;其次根据仪器的连接方式,通过执行ResourceManager( )方法查询仪器资源管理器,获取已连接到电脑的硬件资源;在得到已连接的仪器资源管理器后,就执行list_resources( )方法对本地仪器资源进行查询,获取保存仪器的物理地址,每个地址作为仪器资源的唯一标识符;查询到本地所有的硬件资源地址后,调用open_resource ()方法选择某一仪器建立通讯进行访问;之后利用PyVISA模块的内置函数Write()进行仪器设置,Query()进行数据的读取,根据仪器厂家提供的手册进行仪器的访问和控制,完成驱动程序的开发,并拷贝到根目录中;最后将仪器的名称、型号、类别和驱动名称保存到仪器数据库中。新仪器的扩展只需要对数据驱动层进行二次开发,按照厂家提供的编程手册对新仪器开发驱动程序,将编译好的驱动程序文件拷贝到软件根目录中,最后将仪器的名称、型号、类别和驱动名称保存到仪器数据库中,即可完成对新仪器的扩展与更新。
数据驱动层通过对不同仪器编写相应的驱动程序,实现仪器控制的模块化设计,只实现目的单一的仪器控制功能。业务逻辑层根据功能需求直接调用相应仪器驱动程序,完成仪器的控制和访问。仪器驱动程序后期的维护和扩展,工程师只需要在数据访问层进行二次开发,不需要对整个测试系统进行更新维修。
2.3 业务逻辑层
业务逻辑层是测试系统的核心部分,完成行波管放大器测试项目的逻辑判断、执行操作、轨迹获取和数据读取的功能。行波管放大器的技术参数有很多,不同类型的行波管有一些特殊的性能参数,主要包括输出功率、增益、输入输出特性、插损等基本的特性也包括谐波输出、三阶交调噪声功率谱密度等其他特性参数[8],如图3所示。
图3 功能结构图
2.3.1 测试项目流程设计与实现
在行波管自动测试系统中,测试项目的处理步骤如图4所示:首先,系统与测试仪器建立连接通讯,判断连接是否正常;其次,根据测试项目选择正确测试方法,并对输入参数进行判读,若不符合逻辑条件则报错,若符合要求测试方法会控制仪器按照要求进行参数的自动设置,等待设置完成后,按照要求进行数据读取[9],如果测试方法中有轨迹截取的要求,则将轨迹数据按照二进制进行保存;最后,所有的测试项目逐一完成测试后,将测试数据和轨迹曲线进行统一保存。
图4 单项目测试流程图
2.3.2 异常处理机制
在业务逻辑层处理业务数据时,可能会出现不可预估的异常情况,如仪器通讯故障、数据读取超时或者文件操作权限不够等。软件利用Python提供的异常处理机制,包含了异常的信息和对异常进行处理的方法如图5所示,在异常出现的时候及时捕获,并从内部自我消化掉,保证软件的正常运行。软件通过“try…except…finally”结构实现异常捕获并处理,finally 块无论是否发生异常都会被执行,通常用来释放try 块中申请的资源。在数据读取、文件操作和远程控制等可能会发生异常的地方加入try语句块,当执行该段程序时,如果try块中抛出异常,则利用Except捕获异常,继续执行后续操作;如果没有抛出异常,则利用else语句块执行后续操作,最后finally 块释放资源,执行后续语句,保证软件不会因为突发的异常导致程序中断。
图5 异常处理机制
业务逻辑层是表示层和数据访问层的桥梁,实现三层架构之间的数据交互和指令传递。一方面接受表示层传来的测试要求,经过逻辑判断和处理后下达到数据访问层进行仪器控制和数据读取;另一方面接收数据访问层传回的测试数据,经过数据处理和运算后上传到表示层,完成数据展示。
2.4 表示层
表示层给用户提供直接的图形界面,实现系统的人机交互,是测试系统的最顶层。主要功能是实现测试要求输入与测试数据的展示,不需要任何逻辑判断,直接将测试要求传递到业务逻辑层中进行业务数据逻辑处理,待指令执行结束后会将测试数据回传到表示层,将最终的数据进行图形化展示[10]。
2.4.1 软件界面设计
软件采用Python提供的PyQt5库实现界面的设计,PyQt5是Qt和Python结合的一个产物,为了将Qt的功能用于Python开发的一个Qt的Python包装器。Qt是一个基于面向对象的可视化开发工具,能够为自动测试系统开发人员提供建立人机交互界面的功能,具有操作简便、易扩展,并可以用于多种应用系统的开发[11],软件主界面如图6所示。
图6 用户界面
2.4.2 测试数据图形化展示
行波管放大器在测试过程中会产生大量的测试数据,饱和输出功率、幅频特性和增益步进性等基本测量参数都是以图片和数值的方式进行展示。输入输出特性需要观察行波管过饱和激励特性,测试行波管的过饱和承受能力。在指定的频率下,从小到大逐步增加激励信号,同时测量行波管的输入功率和输出功率,记录输入功率从小到大变化过程。测试过程中需要输出功率、电压遥测和电流等参数的变化过程[12],部分输入输出特性数据如表1所列。软件利用Python强大可视化功能实现测试数据的图形化展示,用图形方式从大量数据中提取信息。
表1 输入输出特性表
软件采用Matplotlib包实现数据曲线的绘制。Matplotlib是基于Matlab编写的Python第三方库[13],首先,创建画布,在画布中创建子图;其次,添加图形标题、坐标轴名称、刻度等信息;再次,利用内部封装的函数创建曲线、柱状、饼图等2D图形和一些3D图;最后,将图形进行保存和显示,绘制流程图如图7所示。
图7 绘制流程图
在输入输出特性数据中,输出功率、电流、电压遥测、功耗等数据的量级差异较大[14],以XX-2行波管放大器为例,测试数据如表1所列,输出功率的变化范围在20~50 dBm;功耗变化范围80~200 W,螺流遥测变化范围0.4~1.6 V,母线电流遥测变化范围在1.0~2.0 V;软件需要将不同量级的数据进行同时绘制在一张图中,从而反映不同输入与输出、遥测等关系变化。实现流程如下所示:首先,读取EXCEL 中原始数据,输入功率作为X轴数据,输出功率、电流、功耗、遥测电压分别存放到列表中作为Y轴数据。其次,分别每一组Y轴数据做归一化,计算出他们的间隔和范围。之后,利用ParasiteAxes函数[15],在同一画布中添加该数据,最后将曲线保存。如图8所示,相比直接看数据表格,图表可以包含更多信息量,也更能直接体现数据间的关系。
图8 输入输出特性图
2.4.3 防错纠错机制
测试人员在输入数据时,可能会出现误操作情况:(1)输入不合理数据,如频率输入为负值;(2)输入数据远远超出仪器设备自身能力的数据,如信号源功率输出最大为20 dB,软件输入数据为30 dB,频谱仪的起始频率大于终止频率等;(3)输入非法的信息,如在本应输入数字的地方输入文本,或者在整数的地方输入小数等。为防止意外情况发生,软件中设置了多种防差错机制:
1)只要输入错误数据,软件自动清空数据,等待测试人员重新输入正确值;
2)只要是错误输入自动纠正为默认值或者原值,并弹出提示框,提示测试人员确认数据。
用户通过图形界面,填写产品信息、选择测试项目、设置测试参数等信息,之后将这些信息传到业务逻辑层;业务逻辑层根据测试项目,选择相应的测试方法,根据测试方法将测试指令传到数据处理层;数据处理层根据指令对仪器发送指令,最后将测试数据逐步上传到表示层。
3 结论
基于Python的行波管放大器测试软件采用三层架构,各层之间相互独立,体现系统“高内聚、低耦合”的特性,解决了新仪器、新测试项目难的问题。目前该软件已成功应用于北斗三号、天宫、海洋二号等多个卫星型号中,完成200余台行波管放大器的测试试验,测试时间缩短了30%。在使用过程中还存在重复性的仪器参数配置工作,如频谱仪的分辨率带宽(resolution bandwidth,RBW),后期可以根据产品和频谱仪的实际情况,优化分辨率带宽的识别算法,自动将分辨率参数写入软件,减少人工操作,进一步提高测试效率。