朱健民
(霍尼韦尔综合科技(中国)有限公司,上海201203)
FCT(Functional Circuit Test),即功能电路测试,是指对被测产品单元(UUT:Unit Under Test)提供激励及负载,使产品工作在它的设计状态下,测量产品在各种状态下的参数值,最终实现验证产品功能是否良好的自动测试设备。如今的生产线上,FCT设备具有比传统的人工测试方式更快速、操作更简单、测试更准确的优点,已经被生产企业越来越多地采用。由于FCT设备的激励点和测量点位于PCBA(带元件印制板)的测试点以及接口上,因此每种产品只能配备唯一的FCT设备,一家大型生产制造企业往往需要大量的FCT设备在生产线上工作。
目前市面上常见的FCT设备大多使用National Instruments公司的PXI平台,每套需要几十万甚至上百万的费用。因此,对于产品的生产制造企业,低成本的FCT设备具有重要的意义。笔者所在部门的职责是,配合本公司生产的诸多种类的产品,研发需要的测试设备。如能开发出一套基于嵌入式系统的FCT设备,就能为大规模电子产品的生产节约大量成本。但同时也要考虑到,嵌入式FCT设备虽然具有诸多优点,但普遍存在定制化和功能较为单一的缺点。因此,如何使基于嵌入式系统的FCT设备能做到标准化和通用,成为亟待研究的问题。
1.1.1 总线与模块化
硬件设计遵循总线和模块化的思路,便于自由地增加和裁剪,笔者最终选用了RS-485总线这一方式来实现一主多从的硬件整体结构,当同一个功能模块需要使用多片时,利用8位拨码开关可以将其扩展到同时使用256个。
1.1.2 硬件组成
硬件架构如图1所示。
图1 硬件架构
通用嵌入式FCT测试系统的硬件主要由以下几部分组成。
1.1.2.1 主控单元
主控单元作为整个系统的核心,由微处理器、扩展存储器、I/O、以太网MAC、PHY等部分组成。在本系统中,先后成功使用了基于ARM9EJ-S内核的AT91SAM9G25,以及市面上流行的卡片电脑Raspberry-Pi作为主处理器,并且实现了全部的测试功能。
1.1.2.2 功能测试模块
各功能测试板卡,根据其功能划分,称为继电器板、电压测试板、音频测试板、IO测试板、网络测试板等,分别用于测量电压、电流、脉冲信号、I/O信号、以太网、USB等各种数字接口信号、音频信号、射频信号,同时也可为相关电路的测试提供合适的信号源和激励,满足多种产品测试需求。
1.1.2.3 电源系统
为被测板、控制单元、测试模块提供电源,主控单元和测试模块采用统一电源接口。
1.1.2.4 针板、电缆、和其他附件
提供测试设备与被测板之间的连接,电源线与总线采用统一的电缆进行连接。
1.2.1 处理器及开发环境
ARM,高级精简指令集机器(Advanced RISC Machine),是一种精简指令集(RISC)处理器架构,广泛地使用在许多嵌入式系统设计中。在ARM上使用德国Segger公司的实时操作系统embOS以及emUSB-Host、emUSB-Device、embOS/IP等软件组件,可以搭建出一套功能强大的测试平台。
1.2.2 软件分层
本软件的分层如图2所示。
图2 软件分层
本软件分为硬件抽象层、操作系统、板驱动层、测试库和应用层共5层,进一步细化,得到表1。
表1 软件详细分层
1.2.3 主要软件模块描述
1.2.3.1 硬件抽象层
本层位于系统的最底层,作为底层硬件与操作系统间之间的抽象。本层封装了多种CPU的寄存器访问。
1.2.3.2 操作系统
EmbOS是有优先级控制的实时操作系统,适用于嵌入式实时应用,尤其是ARM芯片的软件开发。它可以优化尺寸以占用最小的存储空间,也可进行速度和功能性的优化。
1.2.3.3 板驱动层
包括本测试系统使用到的所有外设和板卡的驱动,微处理器与各功能测试子板的通信均基于一个自定义的RS-485总线协议。
1.2.3.4 测试库
测试库是一套庞大的常用测试案例的集合,规定了目前所有常用的测试项,如电压测试、电流测试、网络接口测试等等。
1.2.3.5 应用层
1.2.3.5.1 测试序列文件
各种产品有着各自不同的测试流,包括标识号、名称、控制命令、所用到的测试函数和其他辅助信息等。填写表格文件比编写文本脚本文件更容易,而且易于被程序解释,格式也不会被开发者编辑出错。
1.2.3.5.2 测试记录
测试记录文件用于记录各被测产品的参数和测试结果,便于追踪产品质量和问题。
将接口、供电方式、结构尺寸完全相同的各硬件模块用RS-485总线的方式连接,使本系统易于扩展和裁剪,灵活的硬件搭配和简单的地址区分,构成了一个类似于“搭积木”的硬件结构。由于被测品是多样的,测试台的测试项目、测试方法和参数都不同。当我们使测试台应用于某一种产品的测试时,只需选择要用的测试模块就可以了。
软件上同样实现了在具体的测试台上只做少量修改。选用表格脚本代替文本脚本对于测试台最为合适,但由于embOS不能直接识别Excel表格,笔者选用了一种易于解析、易于编辑的CSV表格文件格式。CSV文件选用逗号分隔文本的格式,后续研发人员可以先填好Excel表格,再另存为CSV文件。
表2是某设备测试表格的一部分节选,文件另存后的CSV文件就是测试台的脚本文件。解析这个文件需要循环调用一个strtok函数,程序将每个测试项以及参数按逗号或换行符取出,并将各参数传到一个定义的结构体。
表2 CSV文件
程序逐条解析,首先根据测试项名称TESTID,在测试库中找到相应的测试函数,typedef void(*TFUNCTION)(P_TEST p_test);再在具体的测试函数中使用其他参数信息。
函数*TFUNCTION的参数P_TEST p_test结构体定义为:
typedef struct
{
INT8U test_name[TEST_MSG_SIZE];
INT8U send_command[COMMAND_MSG_SIZE];
INT8U cmd_true[TRUE_MSG_SIZE];
INT8U cmd_false[FALSE_MSG_SIZE];
INT32U limit_low;
INT32U limit_upp;
INT8U test_idx[IDX_MSG_SIZE];
INT16U ch_number;
INT16U parameter;
INT8U test_res;
}TEST_NAME_T,*P_TEST_NAME_T;
结构体的其他各成员分别代表测试名称、与被测板交互的命令、所使用的硬件资源编号、参数阈值以及一个可灵活配置的辅助参数等。
利用这一系列软件、硬件的方法,此测试系统最终实现了通用性。
本系统在研发成功后,实现了笔者之前的预期,在后期很多不同的产品测试中,使用了同类型的硬件架构和完全相同的软件,而仅仅在测试脚本文件做了区别,体现了通用性的特点。
新的系统使我们可以使用类似“搭积木”的方式快速构建硬件和软件,把研发并建造一个测试台的周期,由以前3~5个月的时间缩短到2个月左右,并且使设备的标准化程度、可维护性大幅提高。
但是必须承认,系统还存在一些不足之处:目前的系统只实现了近端的维护,而不能通过网络做远程的调试和程序升级,我们将争取在下一个阶段实现。此外,硬件板卡、测试函数库和驱动中也只涵盖了目前产品所涉及的测试项,但笔者相信,随着以后产品的不断出现,这些软硬件资源也会继续扩充下去。
[1]刘思久,张礼勇.自动测试系统与虚拟仪器原理、开发、应用[M].北京:电子工业出版社,2009.
[2]SLOSS A N,SYMES D,WRIGHT C.ARM嵌入式系统开发——软件设计与优化[M].沈建华,译.北京:北京航空航天大学出版社,2005.
[3]LABROSSE J J.嵌入式实时操作系统μC/OS-Ⅱ[M].2版.邵贝贝,译.北京:北京航空航天大学出版社,2003.
[4]BARR M.C/C++嵌入式系统编程[M].于志宏,译.北京:中国电力出版社,2001.
[5]MCCONNELL S.代码大全[M].2版.北京:电子工业出版社,2016.
[6]CORBET J,RUBINI A,KROAH-HARTMAN G.LINUX设备驱动程序[M].3版.魏永明,耿岳,钟书毅,译.北京:中国电力出版社,2010.
[7]FOWLER M.重构:改善既有代码的设计[M].熊节,译.北京:人民邮电出版社,2015.
[8]HANSON D R.C语言接口与实现:创建可重用软件的技术[M].郭旭,译.北京:人民邮电出版社,2016.