时间:2023-02-17 17:22:14
序论:在您撰写单元测试方法时,参考他人的优秀作品可以开阔视野,小编为您整理的7篇范文,希望这些建议能够激发您的创作热情,引导您走向新的创作高度。
关键词:飞行控制软件;单元测试;动态测试
中图分类号:TP301
文献标识码:A 文章编号:1672-7800(2015)005-0029-03
作者简介:刘思思(1985-),女,陕西商洛人,硕士,上海机电工程研究所工程师,研究方向为飞行控制软件开发、系统集成与验证;刘迪(1985-),男,黑龙江哈尔滨人,硕士,上海机电工程研究所工程师,研究方向为制导控制系统设计与仿真。
0 引言
在飞行控制软件(简称飞控软件)开发过程中,单元测试环节必不可少。其中,静态度量指标可以用专门的工具很方便得出其具体数值,而动态测试虽然也有专门的工具,但编写测试用例需要花费大量时间和精力。当前,航天多型号开发任务重,迫切需要应用自动化的测试工具软件来提高动态测试的工作效率。
本文结合飞控软件的特点,论述通过自动生成测试用例的工具软件Cantata6.2进行单元动态测试的方法。
1 飞行控制软件特点
飞控软件的主要功能是完成相关设备之间的实时信息交互与控制解算,从而实现飞行过程中姿态和位置的控制。飞控软件主要分为应用层软件、接口协议层软件和底层驱动软件3个部分,软件架构如图1所示。
应用层软件由实现姿态和位置控制的各功能模块组成;接口协议层软件主要为飞行控制设备与其它设备之间通信的协议模块;底层驱动软件主要由飞行控制设备的接口驱动模块以及硬件输入输出模块组成。
飞控软件嵌入在飞控设备中,具有实时性高、时序和逻辑复杂、可靠性高的特点。首先,要确保底层驱动软件和接口协议软件的正确性,使得各类信号得以正确传输;其次,要确保软件与控制算法模型的一致性,输入输出及解算正确;最后,要确保软件时序和逻辑的正确性。只有这样才能保证飞行控制系统正常工作。
2 飞行控制软件单元测试的意义
对飞控软件的最小组成单位――函数进行测试的目的在于检验其能否正确地实现其功能,满足性能指标和接口要求。通过语句(SC)、条件(DC)、修正条件判断(MC/DC)等覆盖率指标评价程序结构,及早发现软件代码中的编码和逻辑错误。
对控软件来说,被测函数已经完成了编码和调试,能够通过编译和链接进行单元测试。此外,不考虑每个模块与其它模块之间的关系,为每个模块设计驱动模块和桩模块,每个模块进行独立的单元测试,各模块的单元测试可以并行进行,能够提高测试效率,也较容易实现100%的覆盖率指标要求[1]。
3 Cantata6.2测试工具
3.1 Cantata6.2简介
Cantata6.2采用先进的代码分析器和AutoTest技术,智能分析被测代码,扫描代码的所有可能路径,根据选定的覆盖率标准,自动生成满足100%覆盖率的测试用例。对全局变量、返回值自动赋期望值,并包含对全局变量、返回值、调用函数参数传递等进行检查。对形参为复杂类型,如结构体指针的情况,能自动生成相应的测试对象,即构造一个结构体数组,将结构体数组的地址赋给形参。自动生成桩函数,在测试工程中替代真实的外部函数。使用Cantata6.2进行单元测试的原理如图2所示。
用户可以使用Cantata6.2工具AutoTest选择相应的覆盖率规则集,通常航天A级软件要满足修正条件判断(MC/DC)覆盖率100%,B级软件要满足分支判断(DC)覆盖率指标100%,C级软件要满足语句(SC)覆盖率指标100%。飞控软件通常均为A级软件,选择DO-178B/ED-12B Level A Coverage规则,自动生成满足SC、DC、MC/DC3个覆盖率指标要求的测试脚本文件。
3.2 含有桩函数的测试实例
本文以飞控软件的指令形成函数模块为例,检验Cantata6.2的动态测试功能。该函数模块的主要功能是形成稳定控制系统姿态控制等的指令信号。代码框架如下:
void Instruction (C_INSTRCUTION *C_)
{
……; //定义局部变量
if(C_->fInTT < t1)
{
……; //控制解算
}
else
{
……; //控制解算
Function1(C_);
……;
if(C_-> fInTT < t2) //注①
{
……;
}
else
{
……;
}
……;
}
}
利用Cantata6.2进行动态测试。自动生成10个测试用例并执行完后,语句覆盖率和分支判断覆盖率都没有达到100%,源代码中注①处标注的条件判断的假分支没有得到执行。于是,手动添加一个测试用例,使得在给定的输入条件下结构体变量C_-> fInTT的值落在[t2,∞)的区间内,接着重新执行该测试用例,结果还是执行不到该假分支。仔细分析代码后发现,该分支中的条件判断表达式中的结构体变量C_-> fInTT的值已被桩函数Function1(C_)修改。
处理方法如下:第一步,在Cantata6.2的调用接口控制界面中,为该桩函数添加一个新的桩函数实例,并手动修改结构体变量C_-> fInTT的值,该数值应大于或等于t2;第二步,在Cantata6.2测试用例界面,将调用序列更改为新的桩函数实例。至此,执行全部11个测试用例之后,满足语句和分支判断覆盖率全达到100%的指标要求。
3.3 编译器对测试结果的影响
飞行控制软件的编译器目前主要使用CCS2.2或CCS3.3,在用Cantata6.2进行单元测试时,CCS被设置为Simulator模式,Cantata6.2会自动调用CCS,执行编译好的测试中间文件,进而生成测试结果文件。测试过程中,笔者发现对于如下代码段,Cantata6.2自动生成的测试用例对X自动赋值为0.9999,调用CCS2.2执行用例后,代码运行的实际路径与期望路径不一致,测试结果不能达到100%的分支覆盖率指标要求。
#define ZEROP 0.00001
void Function2 (void)
{
if(X
{
……;
}
else
{
……;
}
……;
}
笔者分别在CCS2.2和CCS3.3编译器环境下,验证了该代码段的运行情况,最终得出结论如下:①在CCS2.2编译器下,程序执行真分支,与期望不一致,结果不正确;②在CCS3.3编译器下,程序执行假分支,与期望一致,结果正确。上述结果表明,不同的编译器版本影响程序实际执行路径的正确性。
4 基控软件的Cantata6.2使用策略
4.1 Cantata6.2使用策略
飞控软件中包含很多复杂的结构体数据类型,Cantata6.2能够对结构体类型自动赋值,不用手动一一赋值;而且飞控软件涉及大量数学计算,Catata6.2的测试脚本是开放的纯C代码,可在其脚本管理器界面或测试脚本中直接修改某个测试用例的变量值,提高测试效率。Cantata6.2测试工具是通用的,而飞控软件具有其特殊性,就二者的融合使用,笔者总结出如下经验:
(1)飞控软件中一般都包含do while(1)的死循环结构,测试时需要将这类死循环放开,测试用例才能执行完毕。
(2)飞控软件中包含有很多类似“x=x”的赋值操作,本义是在某些特定条件下,x的值不变,测试时要将这类语句注释起来,否则Cantata6.2会报错。
(3)当被测函数包含子函数时,Cantata6.2会自动作打桩处理,但桩函数有可能会修改某些全局变量的值,进而导致某个分支始终无法覆盖。这时,可以在该桩函数的调用接口添加一个桩函数实例,并手动修改该变量的值,再将调用序列更改为新的桩函数实例,如3.2小节所述实例。
(4)飞控软件作为嵌入式软件,最终是固化在飞控设备中,构成飞控系统运行。因此,软件一般都包含对硬件端口地址的操作,如果是从端口输出数据,测试时需要将这些代码注释起来,如果是读取某个地址的值,则可以自己定义一个变量代替该数值,否则将导致不能自动生成测试用例。
(5)飞控软件中的控制算法一般都包含有积分计算,开发人员一般习惯定义静态的局部变量,遇到这种情况时,应该将这些变量移到函数外部定义,否则会导致不能自动生成测试用例。
4.2 测试驱动开发
Cantata6.2测试工具能够自动生成测试用例,即使不满足语句、分支判断、修正条件判断覆盖率100%要求,测试人员也能很快根据覆盖率结果图示手动添加新的测试用例,使得该用例执行后覆盖到上一次未覆盖到的分支。但是,就笔者的使用经验而言,Cantata6.2对被测代码的要求比较高,被测代码要符合标准C要求,其头文件不能相互嵌套重复引用,否则一个.c文件和其相关的.h文件加载进去就会出现错误提示和警告,而且必须将这些错误提示解决完并通过编译后,才能进行下一步生成测试用例的工作。此外,由控软件具有逻辑复杂、运算量大的特点,要借助Cantata6.2的自动生成测试用例的功能快速完成飞控软件测试,这也对飞控软件的代码质量和框架结构提出了比较高的要求。在飞控软件框架结构和代码质量比较高的情况下,可以加载整个.c文件,一次性生成整个.c的全部测试用例,而不用单个函数去建测试工程,从而加快测试速度。笔者总结使用经验如下:
(1)飞控软件的自动驾驶仪模块根据控制系统的模型编写,模型中包含滚动、偏航、俯仰三通道控制解算算法,该模块代码最好拆成3个函数模块,单个模块代码行数要在200行以内,便于测试,代码结构也更加清晰。
(2)由控软件的特殊功能需求,同一个函数中包含多个条件表达式“与”或者“或”,再进行逻辑(即if else)判断的用法非常多,譬如if(条件表达式1&&条件表达式2||条件表达式3),开发人员在编写代码时,最好将这些条件表达式的计算在if判断之前完成,以有利于测试用例能够正常覆盖到期望的分支。
(3)依据航天软件工程化标准要求,飞控软件的安全关键性等级一般为A级,单元测试必须满足语句(SC)、分支判断(DC)、修正条件判断(MC/DC)覆盖率均达到100%。MC/DC要求每个判定中的每个条件都曾至少一次独立影响判定结果。由控系统的特殊算法需求,模型中涉及分段函数计算比较多,选择MC/DC覆盖率标准后,某些代码会覆盖不到。代码结构如下,斜体加粗部分为未覆盖到的代码:
if((x1>x2)&&(x1< (x2+const1)))
{
……;
}
else if( (x1>(x2+ const2))&&(x1< (x2+const3))) //注2:0
{
……;
}
else
{
……;
}
分析上述代码,笔者认为由于选择了修正条件判断覆盖率标准MC/DC,Cantata6.2认为第一个判断条件“x1>x2”的假分支不应再包含“x1>(x2+const2)”的判断条件。类似情况,建议控制系统设计师修改模型文件,或者软件开发人员优化程序结构。
(4)通过3.3小节中的实例,建议开发人员应该选择升级版本的编译器作为开发工具。此外,笔者尝试了将ZEROP定义为局部变量0.00001,结果程序无论在CCS2.2还是CCS3.3编译器下,均执行不到期望的正确分支,这对编码质量提出了较高要求。
5 结语
利用Cantata6.2自动生成测试用例的功能能够快速完成单元动态测试,促进开发人员提高编码质量,提高飞控软件的可移植性和可维护性,满足当前航天多型号软件开发和单元测试的工作需求。同时,工具内置的很多规则集能够帮助测试人员快速定位软件编码错误和框架问题,进而帮助开发人员更好的优化程序结构,进一步提高航天软件研制水平。
参考文献:
[1] 张猛,毛亮.航天嵌入式软件的单元测试方法探讨[J].航天器工程,2006(7):32-35.
[2] 陶幸辉,宋志刚.嵌入式飞控软件测试方法研究及实践[J].软件导刊,2011(8):14-16.
[3] 马飒飒,赵守伟,肖小峰.基于覆盖与故障注入的飞控软件测试技术研究[J].计算机测量与控制,2005,13(3):291-293.
关键词:遗传算法;模拟退火算法;自动化;单元测试
中图分类号:TP311.53
随着计算机技术的发展,计算机智能技术也逐渐得到了开发应用,生物智能、人工智能以及算计智能的联合应用和优势互补,使智能技术的应用更加有效。随着计算机的普及,软件产品已经深入人们生活工作的各个领域,成为日常工作、生活、娱乐的必不可少的组成部分。而对于软件安全性能的要求则在很大程度上促进了软件测试的发展。软件测试是软件安全性能和良好的使用性能的重要哦保证,贯穿于软甲开发过程的始终,保证软件开发每个阶段的质量。
软件的质量需要经过软件功能测试才能得到保障,而单元测试则是软件功能测试的基础和前提,是软件测试的起步环节。单元测试针对的对象是程序中最小的软件模块,一般是软件开发人员通过编写小段代码,针对被测试代码的某个较小较明确的功能进行测试,看其是否可以正常运行。
1 参数化单元测试
单元测试作为软件测试的起步环节,同时也是不可或缺的环节,对软件的质量起着至关重要的作用。在实际测试中,单元测试代码的手动编写工作是一件极其复杂且耗时的工作,并且所选测试实例不能保证覆盖较大的代码,具有很大的随机性,进而降低单元测试的效率。
参数化单元测试将程序规格与测试用例生成分离,解决了传统单元测试存在的弊端。运用参数化单元测试方法,程序要实现的功能需要人工书写代码,然后测试工具就会通过对测试代码的分析和检测,自动根据测试的实际路径生成对应的实例和测试代码,实现代码的高覆盖率。
2 基于遗传算法的搜索策略
在退火算法的运行过程中溶入遗传算法,称为退火遗传算法,依旧是说,所谓的退火遗传算法,实际上是由退火算法和遗传算法两个部分组成,结合双方各自的优点和特性,所得到的新的综合性计算方法。
2.1 遗传算法依据
遗传算法的提出源于计算机发展初期提出的所谓“人工进化系统”,它是根据生物进化的特点,借鉴优胜劣汰的自然遗传法则,参照达尔文进化论的理论思想而形成的一种不依赖具体问题的直接搜索方法,在运用遗传算法进行数据计算时,不仅要用到进化学的概念,同时也要符合遗传学说的基因遗传原理。
运用遗传算法进行计算时,一般要经过几个基本步骤,即:初始化数据、数据的择优选择、随机对选中的两个数据进行交叉互换、根据遗产学说的基因变异原理所进行的个体数据变异、全局最优收敛,进而得出需要的结论或数据。
2.2 模拟退火算法依据
模拟退火算法是根据固体退火过程和组合优化问题之间的相似性而提出的。在对物质进行加热处理时,物质组成中粒子之间的布朗运动加强,当加热到一定程度时,温度达到物质熔点,固体物质会转化为液体形态。这时,对物体进行退火处理,使温度降低,则物体的粒子运动减弱,并且会逐渐趋于平衡和有序,最终达到物质性质的稳定。
模拟退火算法运用温度参数进行控制,当温度较高时,数据运动变化剧烈,从而使解的区间变化较大,容易接受到较差解;当温度降低,数据运动逐渐减缓时,解的区间也会逐渐趋于稳定,这时候就可以得到较为优良的解果,从而对遗传算法的不足进行弥补。
2.3 退火遗传算法依据
退火遗传算法,是指以遗传算法为主要运算方法,并在运算过程中引入模拟退火算法,使两者达到优势互补,进一步对群体进行优化调整。退火遗传算法可以分为两个组成部分:首先,运用遗传算法的进化理论,产生一个相对较为优良的群体,然后利用模拟退火算法,对群体中的个体进行优化和调整。
(1)针对遗传算子进行改进
所谓遗传算子,是指在遗传算法中,用来维持遗传多样性所使用的算子,遗传多样性是生物或数据演化过程中不可或缺的一个必要性质,遗传算子在遗传算法中类似于自然中的适者生存原则,对于个体的进化会产生巨大的影响。
初始进化阶段,为了保持种群的多样性,便于从中进行选择,应该加大对于个体间相互交叉和互换的概率;在进化的终极阶段,频繁的交叉互换不利于种群的稳定和最优解的产生,因此需要适当地减小个体间的联系和活动,减少最优解的求解难度,缩短求解过程。针对种群中的个体而言,在进行变异操作时,对优势个体进行较小的变异,劣势个体进行较大的变异,可以使其更加趋近于最优解。
(2)合理构造适应值函数
适应值函数可以针对遗传算法的求解过程进行指导,对最优解的数值区间进行限定,在适应值函数的构造过程中,引入关键分支的概念。关键分支,指在选定的路径中,对存在的结点的真实性进行判定,求解过程可能会在这些结点处产生偏离,引发错误,而这些会导致求解过程偏离目标路径的结点,就是关键分支。
适应值函数在遗传算法中是用来区分个体优劣的标准,是进行自然选择的唯一依据。原始适应值函数是对问题最初求解目标的反映。适应值对个体的判断有两个截然相反的情形:适应值越大,个体性能越好和适应值越小,个体性能越好。在遗传算法中,对适应值函数是有限制的,即适应值函数必须为非负数,这就需要选择较大的适应值函数来选择较为优良的个体。
为了使被测数据中每个参数都可以得到评估,根据相关数据对判断结点进行数据转换,在保证个体数据得到充分计算的情况下,不会对程序主体造成破坏
3 实验结果与分析
为了对退火遗传算法的性能进行验证,采用判断三角形的相关测试程序,将退火遗传算法与单纯的遗传算法进行对比,对进化每一代的最大适应值进行记录。
从实验数据可以看出,初始进化阶段,个体的产生具有随机性,在对实验进行多次运行后,可以看出,最高适应值之间差异十分明显。进化过程初期,两种算法的最高适应值都存在较大的波动,而随着遗传的不断进行,退火遗传算法的最大适应值范围逐渐趋于稳定,而遗传算法的最大适应值范围仍不稳定。因此可以得出结论,将模拟退火算法与遗传算法相互配合,可以有效避免单一遗传算法的不足,加快对最优解的计算速度,减少计算所需时间。根据实验的数据,对多次实验的结果进行统一总结,可以看出,相对于单一的遗传算法而言,退火遗传算法的进化速度大大加快,减少了计算时间。
4 结束语
经过实验和分析,我们可以看到,生成高代码覆盖率的测试用例是自动化测试的关键问题,是提高自动化测试性能的主要手段。针对遗传算法存在的缺陷,将遗传算法和模拟退火算法相互结合,实现优势互补,针对群体数据中的遗传算子以及适应值函数作出改进,最终通过对比实验,验证了退火遗传算法的有效性和优越性。
参考文献:
[1]赵慧娟,孙文辉.基于退火遗传算法的单元测试方法[J].计算机工程,2013,39(1):49-53.
[2]杨学红.自动化单元测试概述[J].信息通信技术,2012,(1):66-68.
【关键词】单元测试;cantata;测试用例
Abstract:The design of unit-testing case is one of the most important part of the unit testing,and it is an important guarantee for improving the software quality to design reasonable unit-testing cases.The article puts forward a designed method of unit-testing cases of a complex function,by introducing the cantata++ which is a testing tool and its function in unit testing,also considering that the true condition of making use of unit testing.This software unit-testing method is widely used in some other tastings and also well reputably.
Key Words:unit testing;cantata++;test case
1.引言
随着软件系统越来越复杂,在产品开发各阶段进行完全的软件测试也越来越重要,大多数软件开发者都已意识到这一点。但考虑到测试费用问题,软件开发者往往面临着在提高产品质量与减少费用之间进行选择的问题。IPL提供的Cantata测试软件应这种需要,在合理的费用下提供给软件开发者的强有效的软件测试工具。Cantata可以同时支持C和C++语言的测试,能够满足开发者进行高效的单元和集成测试的需求,该产品不仅能提高产品质量,还能帮助提高生产率。
作为专业软件测试工具,Cantata++除包含一些标准的特征之外,还提供了一些新功能:
(1)支持语句、判定和布尔代码覆盖率度量;
(2)支持运用白盒测试技术,自动获取私有类数据;
(3)支持面向对象测试用例的重用;
(4)图形化和XML形式的结果报告。[1]
2.单元测试用例的设计
软件质量的好坏很大程度上取决于测试用例的设计质量。不论程序员的编程水平、软件设计水平有多高,软件工程化执行得多好,如果没有通过合适质量的测试用例进行测试,其最终软件质量都是难以保证的。因此,测试用例设计是软件测试的最核心和最重要的内容之一。[2]
单元测试主要使用白盒测试技术,测试用例的设计方法一般分两种类型,即测试人员自己编写测试脚本和借助测试工具生成测试脚本框架后维护测试数据。Cantata++测试工具可用于生成和维护测试脚本,编译并运行测试可执行程序,查看测试结果和覆盖率数据。
3.基于cantata的测试用例设计方法
在cantata工具中常见的单元测试用例的实现方法很简单,不再赘述。本文主要介绍复杂函数实现的单元测试用例的设计方法。如单元测试的被测单元函数使用的函数形参是结构体变量和全局变量是结构体数组且结构体的成员是指针时,在设计测试用例时如何给结构体变量赋值?
3.1 函数的形参为结构体类型
Cantata测试工具自动生成的测试用例中,函数形参的默认值都是“NOT_SET”,编译测试脚本时不能被识别,给函数的形参赋正确的参数值是得到正确的测试结果的前提。设计带有结构体类型的形参的测试用例时,我们分别做了如下实验:
(1)按照在C语言中结构体变量成员赋值的方式给测试用例中的结构体变量赋值;
(2)使用改造C语言结构体变量成员赋值的方式把“->”改为“・”给测试用例中的结构体变量赋值。
编译结果证明两种赋值方式均不能被正确识别。
3.2 全局变量为结构体类型的数组变量,且其成员为指针
Cantata在自动生成测试用例时使用其本身封装的INITIALISE()函数给全局变量赋初值为0x55,以满足一般的测试需要。为达到充分测试的目的,需要给全局变量赋相应的数值,当全局变量为结构体类型的数组变量,且其成员为指针时,我们进行了如下实验:
(1)使用C语言中数组初始化的方式给结构体数组赋值;
(2)一个数组元素一个数据元素的方式给结构体数组赋值;
(3)使用分配内存的方式给结构体数组赋值。
编译结果证明三种赋值方式均不能被编译器识别。
结构体形参赋值时是不是因为该形参在赋值之前没有被分配内存空间所以无法赋值?结构体数组赋值的情况会不会因为cantata测试工具对编码规则要求较严格,必须按照相应的编程规则才可以编译通过?带着这种疑问我们查阅了大量编程规则的资料,通过反复实践,最终找到了解决该两个问题的办法。
其一,假设函数形参是如下两个结构体变量:
struct DIST* StrCount;
struct FILTER* StrFilter;
在测试用例脚本中可以通过下面的方式给结构体变量赋值:
StrCount = malloc(sizeof(struct DIST));
StrFilter = malloc(sizeof(struct FILTER));
memset(DIST_COUNT,0,sizeof(struct DIST));
memset(DIST_FILTER,0,sizeof(struct FILTER));
StrCount->cnt = 100; /*结构体成员赋初值*/
free(StrCount) ;
free(StrFilter) ;/*释放内存*/
如此赋值后的测试脚本文件加入测试工程后编译通过,得到了覆盖率测试结果,函数形参是结构体类型变量的测试用例设计的问题得以解决。
其二,假定定义如下的结构体数组:
PORT_CB g_PortCbTable[10];
其中:PORT_CB 为如下的结构体类型:
typedef struct
{
char num[16]; /* 端口名称*/
CONNOBJ* pObj; /* 端口句柄指针*/
}PORT_CB;
在测试用例脚本中,修改指针成员变量的方式为:
g_PortCbTable[0].pObj = (CONNOBJ*)-1;
g_PortCbTable[1].pObj = (CONNOBJ*)1U;
g_PortCbTable[2].pObj = (CONNOBJ*)1U;
g_PortCbTable[3].pObj = (CONNOBJ*)1U;
g_PortCbTable[4].pObj = (CONNOBJ*)1U;
g_PortCbTable[5].pObj = (CONNOBJ*) -12;
g_PortCbTable[6].pObj = (CONNOBJ*)2U;
g_PortCbTable[7].pObj = (CONNOBJ*)2U;
g_PortCbTable[8].pObj = (CONNOBJ*)2U;
g_PortCbTable[9].pObj = (CONNOBJ*)2U;
其中有后缀U或无后缀指明所赋常量的类型,强制转换类型不可以忽略。如此赋值后的测试脚本文件加入测试工程后编译通过,得到了覆盖率测试结果,至此全局变量为结构体类型的数组变量,且其成员为指针时,测试用例的设计问题得以解决。
4.小结
本文介绍了测试工具cantata的功能特性及其在单元测试中的应用,在此基础上提出了一种复杂单元函数的测试用例设计方法,该方法在类似的软件测试项目中得到了应用,在实践中取得了良好效果。
参考文献
[1]Cantata++ Reference Manual v6.1 2011,3.
[2]周伟明著.软件测试实践[M].电子工业出版社,2008:46.
作者简介:
现代中药质量控制技术横空出世
2004年3月19日是个让人激动的日子,由浙江大学药学院、中国生物制品检定所和天津天士力制药股份有限公司等联合承担的国家“十五”科技攻关重大项目“指纹图谱应用示范研究”正式通过国家科技部和国家中医药管理局验收。紧接着,该攻关项目成果“复方丹参滴丸指纹图谱分析及质量控制技术”通过国家技术鉴定。由四位院士为首的技术鉴定委员会对此作出高度评价:“该技术大大提高了复方丹参滴丸质量控制水平,为我国建立中药质量指纹图谱检测标准起了示范带头作用,为保障工艺稳定和实现药材-中间体-中成药制剂全程质量控制奠定了技术基础。它是中药现代化研究领域的重大技术进步,是我国以复方丹参滴丸为代表的中药产品指纹图谱分析技术创新发展的成果,总体达到国内领先、国际先进水平,为发展形成具有我国自主知识产权的现代中药质量控制技术作出了重要贡献。”这项技术已经成为代表当今现代中药质量控制技术领域世界最高水平的标志,它的诞生预示着一场中药产业的革命正在悄然来临。
根据《中国药典》记载,早期中药的质量检验方法非常简单,一直采用外观形态的经验鉴别方法,1963年开始采用重量法、容量法等实验室手段协助鉴定,发展到1985年开始采用手工分析化验的鉴定方法。直到1990年才真正开始采用气相/液相色谱等现代仪器分析检测方法鉴定。中药指纹图谱检测技术运用现代分析仪器和化学信息处理手段对中药产品质量进行表征,突破了传统中药质控技术诸多缺陷,可对药品生产的各环节进行全面质量控制,已为国内外药物分析界所广泛接受。FDA(美国食品药品监督管理局)对植物药的质量检测要求制订指纹图谱检测标准,欧共体对某些草药的质量控制也采用了指纹图谱技术。指纹图谱作为中药材、中药提取物、中成药等含有混合物质群的质量分析检测方法,已经成为全球医药界共识。
全程质量控制从复方丹参滴丸开始
从现代中药复方丹参滴丸研制成功起,天士力就致力于打造一条符合国际标准的现代中药产业链,从中药材、提取物再到成药采取了全程质量控制,从采用液相色谱分析等方法一步步发展到今天,更进一步将最先进的多元色谱指纹图谱分析及质量控制技术定为内控方法。该技术对复方丹参滴丸主要化学成分进行了系统分析,鉴定出10种丹参水溶性成分和20种三七皂苷类成分,基本揭示了复方丹参滴丸化学物质基础;它首次创造性地提出多元化学指纹图谱技术概念及其技术方法学,建立了复方丹参滴丸指纹图谱分析方法,同时还首次研制创建了多元指纹图谱相似度计算分析软件系统,从根本上保证了研究结果的可验证性和科学严谨性。与现有的单元指纹图谱分析技术相比,该技术能更完整地反映出复杂中药产品的化学组成特征,可用于复杂中药产品的质量控制。因此,它能够准确反映复方丹参滴丸的整体质量状况,有效地监控及优化制药工艺参数,科学严格地确保中药多组分的质量稳定性。
中药承载着人类健康的希望,天士力肩负着人类健康的使命与责任。以浙江大学程翼宇教授、中国药品生物制品检定所林瑞超主任、天士力研究院叶正良副院长等为课题负责人的科研组与天士力制药股份有限公司的专家通力合作,协同利用多元指纹图谱计算分析技术,分别对天士力陕西商洛国家丹参GAP基地生产的61批丹参药材进行指纹图谱检测,相似度均在95 %以上,充分表明通过规范化管理种植、生产的药材质量的稳定性,科学严格的质检标准保证了天士力丹参药材无农药残留,远远高于国家药典标准;重金属含量低于国际标准390倍。从而在根本上保证了复方丹参滴丸的高品质;对天士力现代中药资源有限公司生产的122批浸膏进行指纹图谱检测,相似度在90%以上,同样表明通过GEP生产的药材提取物质量的稳定性;对天士力制药股份有限公司生产的近200批复方丹参滴丸进行质量追踪,指纹图谱检测的相似度在90%以上,更加充分证明了复方丹参滴丸采用现代中药制剂工艺技术生产的产品质量的稳定性,是十年来被亿万消费者首选的复方丹参滴丸疗效确切、使用安全的保障。
复方丹参滴丸指纹图谱分析技术的研究成功与应用,在科学规范地检测复方丹参滴丸质量稳定性的同时,为复方丹参滴丸畅销10年不衰秘密的揭示提供了强有力的科学依据:稳定的产品质量换取的是稳定有效的药物疗效,真正使老百姓吃上安全有效的放心药,患者的肯定也造就了天士力大健康产业的蓬勃发展。
中药现代化任重而道远
关键词 EXCEL单元格 地址表示方法 实例
中图分类号:TP317.3 文献标识码:A DOI:10.16400/ki.kjdkz.2015.12.012
Abstract This paper systematically introduces three EXCEL cell address representation, which is the in-depth study EXCEL EXCEL and expand knowledge base, but also with specific examples illustrate three address representation features and how to use and so on.
Key words EXCEL; address representation methods; example
单元格地址表示方法是为Excel智能运算服务的,这也是Excel不同于计算器和其他电子表格的地方。使用普通计算器时,需针对不同的数据重复进行计算,即浪费时间又不能发现数据的变化规律。而使用Excel进行计算时,对于相同的运算,不需要重复进行,只要针对不同的应用问题写出对应的自变量的地址,就可以通过“拷贝”公式的功能得出其他单元格中的结果。所以说,在EXCEL中对公式或函数的“拷贝”是进行智能运算的助手。为此,先综述一下各种“拷贝”方法。
在EXCEL中“拷贝”操作可以使用通用的拷贝方法,如快捷键方法:Ctrl+C 再Ctrl+V;或人们习惯用的拷贝与粘贴两个图标方法以及右键快捷菜单方法。上述这些“拷贝”方法都需借助剪贴板来进行。若按Ctrl+左键拖被选内容,则不需要将拷贝信息事先注入剪贴板,这也是常用的一种拷贝方法。这些通用的拷贝方法对于EXCEL的计算不很方便,当待拷贝的公式单元格较多时,既浪费时间还容易出错。为此,EXCEL给出一种特殊的拷贝方法:拖公式单元格右下角的(细十字)“填充柄”进行公式或函数的拷贝操作。需要注意的是:这种拷贝方法仅限于相邻单元间的拷贝,而在EXCEL中我们最需要的恰恰就是相邻单元格间的快速拷贝方法。
为了能正确地计算出数据库类型表格中的公式或函数结果,自变量所在的单元格必须使用“相对地址”表示,即用“列标+行号”来表示。如A2表示第一列第二行中的数据,对于一个自变量区域,不必一个一个地写出来,可以用左上角和右下角单元格地址简捷地表示,两者之间用英文的冒号隔开,如A3:D6就表示一个含有16个单元格的矩形区域,在进行公式运算时特别方便。
用“相对地址”表示自变量单元格时的特点是:自变量单元格地址与(因变量)公式单元格的地址在空间布局上看是不变的,不会因为“拷贝”操作而改变。例如,某个单元格中的公式是计算左面3个单元格数据之和,则不论将该公式“拷贝”到哪个单元格中,结果始终是左面3个单元格数据之和。这就是我们在做成绩统计时,只要计算出第一个学生的总成绩,再向下拖动“填充柄”进行拷贝,就会得到其他同学的总成绩的原理。也就是说,用相对地址表示自变量时,自变量的地址始终是跟随因变量变化而变化的,并计算出其他单元中的结果。单元格的相对地址表示方法普遍适用于成绩表、设备表、工资表等数据库形式的表格统计与计算。
EXCEL单元格地址的第二种表示方法是:绝对地址表示法。所谓“绝对”就是永恒不变的意思,即自变量单元格不会跟随因变量变化而变化,形象地说,单元格地址被锁住了。在数据库计算和其他表格制作时均有应用。
绝对地址表示方法是:在自变量单元格的列标和行号前均加$号。如:一个单元格的绝对表示是$B$4,一个区域的绝对地址表示是$B$4:$D$7。
我们在制作数据表格时,有时需要对自变量进行筛选、比较,例如:在对一个班级学生成绩进行排位时,需逐个比较每名学生成绩在班级所有同学成绩中的位置。其中,单个学生的成绩是变化的,须用相对地址表示,而所有学生成绩的单元格区域必须是不变的,不能因为学生变化而改变,在Excel中这种不变的自变量或区域采用“绝对地址表示”。在对公式或函数单元格“拷贝”时,用“绝对地址表示”的区域始终保持不变,与“拷贝”无关。
在前面提到的学生成绩排位问题中,成绩对比区域必须用“绝对地址”表示,与此类似的应用问题很多。虽然我们可以用“排序”图标来进行,但这种排序方法会破坏原有表格行的位置,这恰恰是我们最不希望看到的。为此,用Excel 的排位函数Rank可以实现在不改变原有数据库记录次序的前提下,又能添加一个“排位”字段的功能。应用时的格式为:Rank(变量,变量区域,0或1)。其中,“变量”用相对地址表示,是跟随因变量变化的,第二个参数“变量区域”是变量大小比较的区域,在排序的过程中必须保持不变,须用“绝对地址”表示。第三个参数是可选参数,可以取0或1,取0时,表示第一个参数(变量)的值越大,排位越靠前,省略该参数时相当于取值为0。若第三个参数取1,则第一个参数(变量)值越小,排位越靠前。
该例是按“总成绩”进行排位的,G2中的公式为RANK(F2,$F$2:$F$10)。F列上的数据就是函数中的“变量”,其中F2必须用相对地址表示,在对G2中的公式向下“拷贝”的过程中,F2自动变更为F3、F4、F5一直到F10。第2个参数$F$2:$F$10是“总成绩”字段区域,既所有自变量所在的区域,须用绝对地址表示,以保证在对排位函数“拷贝”的过程中这个区域始终保持不变。此公式仅用了两个参数,省略第三个参数表明:总成绩高的排位号在前。拖G2单元格的“填充柄”向下“拷贝”时,单个学生的总成绩不断在变化,而所有学生的总成绩区域被“锁住”,拷贝到最后一个学生,即可快速得到整个“排名”字段。
另外,在实际工作时,某些公式中的常数有可能发生变化。如请假扣款金额、计件工资金额等,当把这些常数直接写在公式中时,一旦发生金额变化,就需要重新进行计算。最好的方法是在将该常数先放在表格中的某单元格处,而在公式中用该单元格的绝对地址表示,就可以实现在金额变化后,所有应用该金额的地方会自动更新。
EXCEL单元格地址的第三种表示方法是:混合地址表示法。他是介于相对地址和绝对地址表示之间的一种地址表示方法,这种表示方法中的自变量在跟随因变量变化的过程中受到一定的限制,仅能沿行方向变化或沿列方向变化。这种变量地址表示方法主要用于制作类似于九九乘法表的“交叉数据表”。当一个公式或函数中有多个变量时,提取两个相互独立的变量分别放在行和列上,并设定一个变化序列,相当于建立了一个二维的X-Y坐标系。再利用EXCEL的运算特点:相同运算仅计算一次,其他数据通过拷贝得到,就可以快速地制作一个函数F(X,Y)的平面数据表,我们中学用的《常用数学用表》可以利用这种方法快速地制作。
“混合地址”表示方法是仅在列标或行号前加$号。如$D6、A$8。其中,$D6表示Y方向变化的变量,即数据仅限于在D列上变化。A$8表示X方向变化的变量,该数据仅于在第8行上变化。也就是说,前面有$号的行或列,就是被限定变化的区域。
下面以制作两数和的立方表为例,介绍变量的“相对地址”表示方法在制作“交叉运算表”时的应用。图2为一最简单的X-Y 坐标系,自变量分别沿第一行和第一列放置。
在表中任意一个单元格中输入公式均可,但考虑到“拷贝”公式的方便,最好在坐标系左上角的B2单元格中输入计算公式:=(B$1+$A2)^3,如图2所示。
摘 要:随着汽车电子市场的快速发展,汽车控制器的电子控制单元(ECU)已越来越多,对ECU的功能测试也变得日趋复杂。为解决车载ECU功能测试,研究了基于控制器局域网络(CAN)的ECU自动测试方法。以NI公司的软硬件为开发平台、CAN总线为通信平台搭建测试系统与被测ECU形成闭环结构。通过CAN总线传输测试信息,可实现对同型号ECU的批量测试。此系统采用了新的测试方法来降低测试误差,并支持ECU的流水线测试,大大降低了测试的复杂度,减少了工作量。同时,在完善仿真信号产生模块和测试模块用例库后,也能适用于其他类型ECU的功能测试。
关键词:
控制器局域网络;电子控制单元;批量测试;汽车电子;车载网络
中图分类号: TP206.1 文献标志码:A
Abstract: With the rapid development of automotive electronic market, more and more Electronic Control Units (ECU) for vehicle controller appear and the functional test also becomes more complex. In order to solve the problem of ECU functional test, the ECUs automatic test method based on Controller Area Network (CAN) was studied. The system included the software and hardware platform of National Instrument (NI) and communication platform of CAN bus, by which the system and ECU formed a closed-loop structure. To transmit the test message through CAN bus, the system could achieve batch test of ECUs with the same type. By using the new test method, the system can reduce the test errors, and support assembly line test of ECU, which greatly reduces the complexity of ECU functional test and test work. At the same time, the system can also apply to other types of ECU functional test by improving the generation module of simulated signal and use case library.
Key words: Controller Area Network (CAN); Electric Control Unit (ECU); batch test; vehicle electronic; vehicle network
0 引言
随着汽车电子的不断发展,汽车已进入电子控制时代,其标志为电子控制单元(Electric Control Unit, ECU)的广泛应用。现如今,车辆上电控单元数量不断增加,功能越发复杂,多个处理器之间相互连接、协调工作并共享信息构成了汽车车载互联通信网络。其中控制器局域网络(Controller Area Network, CAN)是汽车中应用较多的现场总线。其良好的实时性、可靠性和经济性能很好地满足汽车ECU之间数据通信的需要,已成为最有发展前景的现场总线之一[1-2]。因此,带CAN总线功能的ECU测试也将变得更加复杂。ECU功能测试属应用层功能测试范畴,是为了检测ECU是否符合给定的协议规范,能否进行正常的控制工作。这种测试在系统级开发中占据了很大的比重,成为应用层测试中最为关键的部分[3]。
在传统的ECU功能测试中,一种方式是利用测试面板产生ECU各种信号后连接到ECU各输入引脚,触发它的各驱动模块进行控制工作,有专门的线路负责数据交换,但这样的测试系统随着传感器数量的增多,连线非常困难,且需要高速的数据采集和信号调理设备,使整体成本增加[4-5];另一种则改进了信号的产生方式,即通过虚拟仪器模拟ECU的控制信号来代替传统的触发信号,采用人工对控制效果进行直接的观察和记录。这些测试方法都加大了测试过程中的测试误差、复杂度和测试工作量,且无法进行自动测试和结果的自动生成,也不能同时对多个ECU进行测试,给ECU厂商进行批量生产时带来很大的不便。
由此,引发了对新的测试方法的思考和探索。基于CAN总线的ECU功能测试方法以CAN总线的传输作为关键技术,采用闭环测试方法对同型号的ECU进行自动和批量测试。
1 基于CAN总线的ECU功能测试介绍
车载控制系统主要任务就是要解决车身电器设备的功能性问题,所以,首先应关注ECU是否能实现功能上的控制,即测试其是否满足控制协议的要求。ECU在控制功能上包括了通信服务功能、传送数据功能、诊断信息及标定信息功能、设备监控和网络管理功能等,具体的要求规范则由各ECU生产厂商自行制定。
目前应用层协议制定分为以测试为重心的模式和以设计为重心的模式。不论哪种模式,控制器开发过程中,都需要通过测试来验证功能的正确性,确定ECU工作正常并不干扰总线正常通信[6]。
由图1的控制器开发“V”模式图可见,控制器开发过程包括多个环节,其中的应用层功能测试是其重要组成部分,它包括ECU功能测试、网络管理功能测试、故障诊断测试等,是进行实车测试前的重要环节。在引入CAN总线后,将大大降低ECU功能测试的复杂度和测试工作量,是CAN总线测试的重要组成部分[7]。
在基于CAN总线的ECU测试系统中,通信网络是进行数据传输,实现各模块协调工作的桥梁[8]。利用LabVIEW[5,7,11]虚拟仪器产生仿真信号代替数据采集卡采集的真实信号,并在此基础上引入CAN总线作为测试的关键技术,充分发挥CAN总线在传输上的高可靠性和实时性等优点。通过总线对仿真信号的测试报文进行有效传输,如表1所示。
表1中:Message表示报文名称;ID表示报文仲裁场;DLC表示报文长度;Data表示报文数据。
将报文与同型号ECU进行连接,形成闭环测试结构,模拟实车中ECU的各种传感器信号来驱动其进行控制工作(于3.2节详细描述),将仿真报文数据和CAN总线上反馈回来的ECU控制报文数据进行解析,提取出Data的值,并自动进行多次对比和测试后,在人机界面上对测试结果和各种信号量进行直观显示,并利用测试结果自动生成测试报告,优化和改进了传统的测试方法。
2 设计方案
此方法采用仿真信号序列代替采集卡采集的真实信号,利用CAN总线的特点对数据进行传输,并将整个测试构建成闭环结构,大大降低测试的复杂性。
2.1 方法总体框架
由CAN2.0协议可知,CAN报文的基本要素是报文ID、周期和信号与消息的映射关系。因此对ECU的协议功能测试,主要任务就是测试ID、消息周期、确定信号与消息的映射关系是否满足要求,并测试在循环执行多次之后,ECU是否具备在控制功能上的稳定性[8]。
选用以LabVIEW为软件平台实现ECU的功能测试。测试系统整体框架包括三部分:上位机仿真和测试、CAN网络和底层待测ECU模块。如图2所示。
工业计算机仿真给定ECU的各种信号量,驱动ECU进行控制工作。由于各ECU之间是相互独立的,“测试与结果显示模块”采集不同ECU广播的控制信息,并通过ID对它们进行识别。对采集到的控制信息进行分析、对比原始输入来判定各个ECU在功能控制中是否满足协议要求。
具体测试方法如下:
首先,通过上位机LabVIEW模拟仿真信号(如:转向灯信号、温度信号等),通过NI 6259板卡,与待测ECU各引脚进行对接;
然后,发送仿真信号,驱动ECU进行控制工作,并发送出相应的CAN控制信息;
再次,通过NI 8473s板卡与上位机LabVIEW进行对接,接收采集到的CAN报文,并通过LabVIEW实现报文的解析、处理和ECU控制效果的同步显示;
最后,把原始仿真数据和处理后的数据进行对比,验证ECU在功能控制上是否满足预期效果,并对以上测试步骤循环多次,得出测试结论,生成测试文档。
在此,根据测试大纲要求,选用一个由实验室和整车厂联合开发的ECU作为应用实例,仿真信号由模拟信号和开关量信号组成,主要分为:转向灯信号、报警信号、状态信号、门信号、温度信号和压力信号控制信号。具体的控制量与变化范围因测试ECU功能要求进行定制化处理。测试ECU仿真控制信号如表2所示。
2.2 软件设计流程
上位机软件整体分为7部分:虚拟仪器配置、模拟信号仿真、同步信号显示、测试结果显示、系统数据判断、数据处理、测试报告生成。模块示意图如图3所示。
1)虚拟仪器配置。对测试时使用的板卡进行初始化配置,设定参数和使用通道。
2)模拟信号仿真。产生ECU仿真信号(如转向灯信号,水温信号等)。
3)同步信号显示。将采集到的CAN报文,进行处理之后,在人机界面上进行控件显示,方便测试者进行直接观察和分析。
4)测试结果显示。在人机界面上进行测试结果的显示,以表格和BOOL数组的形式显示出每个信号在多次测试之后的通过情况。
5)系统数据判断。将处理后的CAN报文数据与预先保存的仿真信号数据进行对比,得出测试结果。
6)数据处理。处理NI 8473s板卡采集到的CAN报文,提取数据信息。
7)测试报告生成。在人机界面上显示测试结果后,将测试结果以网页(.html)格式的文档进行保存,便于后期的分析和处理。
软件设计流程如图4所示。
3 系统分析
由图2测试方法总体框架图可知,此系统主要包含三部分:上位机仿真和测试、CAN网络和底层待测ECU模块。其中上位机仿真和测试模块又分为仿真信号产生模块和测试与结果显示模块两部分。
3.1 仿真信号产生模块
使用NI 6259板卡和上位机LabVIEW构建仿真信号产生模块。此板卡可支持48路数字信号输出和4路模拟信号输出。在调用接口函数模块后,可产生需要的仿真信号,在板卡对应引脚输出对应电压信号。
由表2的ECU控制信号表可知,此待测ECU具有两种不同类型的信号:模拟信号和开关量信号。所以需要在LabVIEW中使用DAQmx各模块仿真出ECU需要的模拟信号和开关量信号。
1)产生模拟仿真信号[10]。需要把模拟信号转化为ECU能识别的电压信号,一般范围在5V以内。
如:仿真发动机冷却水温度信号,水温与电压之间的关系如图5所示。
通过最小二乘法线性拟合得出公式:
y=-4×10-10x5+7×10-8x4-3×10-6x3+0.0002x2-0.0642x+4.2044
其中:y为输出电压值;x为冷却水温度值。
如:进气歧管压力信号,压力与电压之间的关系式:
V=V参(0.0023P-0.015)
其中:P为上位机模拟的压力值;V参为参考电压5V。关系如图6如示。
由图5~6可知模拟信号与电压值之间的转换特性,由上位机进行转换后通过板卡进行输出,传递对应电压值到待测ECU,驱动其进行控制工作。
2)产生开关量仿真信号。
在LabVIEW中定义各种开关量信号,通过板卡产生高/低电平。一般情况下,ECU检测到高边信号(ECU有效电平分两种:H、L,即高电平有效或低电平有效)后进行控制工作(一般情况下,ECU的高电平判断电压在2.5V~5V),控制信号的开启或关闭,并同步使用CAN模块广播CAN报文。
如:DriverDoorStatus(左前门状态),根据ECU手册可知,其为BOOL量,所以在前面板中放置一个BOOL型控件。在对信号进行操作处理后调用NI6259板卡的接口函数并配置通道信息,与此板卡进行通信,产生所需仿真信号(此功能是否正常可通过示波器进行验证)。
3.2 待测ECU模块
车载ECU控制功能工作原理:ECU外接12V工作电压,在人为进行操作或发生状态变化(如开启转向灯、水温变化)时电路接通,然后产生电压值传递到ECU的模拟输入引脚,如图7所示。
此系统使用板卡产生的各种电压信号代替左侧虚线部分图中未见虚线,请补充或说明。,ECU检测到信号后进行控制工作。
3.3 测试与结果显示模块
上位机LabVIEW调用NI 8473s板卡接口函数采集CAN报文[12]。根据ECU控制协议,对CAN报文进行解析、分析、处理,提取出周期、ID、DATA等控制信息。然后对比原始数据(3.1节部分),进行多次测试后,如果每次测试都全部通过,则判断为Pass,否则为False,并在前面板中进行显示。
其中:原始数据包括报文周期、ID和控制信号数据等;报文周期和ID由ECU控制协议决定;控制信号数据由仿真控制信号模块在产生仿真信号时提供。
4 测试实现
测试ECU在控制功能上是否满足给定的协议和规范,并测试在循环测试多次之后,ECU控制功能是否具有较好的稳定性。测试系统人机界面如图8所示。
“仿真信号控制部分”产生表1的ECU控制信号。“ECU控制显示部分”是对接收到的CAN报文进行解析、处理之后用控件进行形象的显示,并与“仿真信号控制部分”进行对比。结果显示,在循环测试100次之后,信号量“左前门状态”和“进气歧管压力信号”控制出错,在BOOL数组和测试表格中都有明确显示。“ECU控制显示部分”显示出“左前门状态”灯不亮以及进气歧管压力信号数据不一致,这些也同样说明了信号控制的错误。在生成的测试报告(.html格式)中也有明确显示,如图9所示。
从测试过程中得知,各个ECU的触发电平有可能不一样,大致在5V~12V。NI 6259板卡的工作电压需小于10V,所以在需要触发电平高于10V的ECU上进行测试时,则需要在板卡的输出端加入一个增压电路。
同时,为了保证测试的正确性,在使用示波器确认仿真部分的输出电压无误后,采用车载网络测试专用工具CANoe对ECU控制报文进行监测,观察结果如图10如示。
由图8和图10可知,使用CANoe监测的总线报文与测试系统监测到的报文一致,验证了本文所设计测试方法的可行性和准确性。在对比分析图8和图10中的监测数据,验证了数据一致性和通信协议的可行性。
根据不同ECU的控制协议,制定不同的仿真信号产生模块和测试模块,并在使用过程中,不断完善ECU的测试用例库,在完善后进行不同ECU功能测试时,进行规格选择后,即可实现对不同ECU的功能测试。
5 结语
本文介绍了ECU功能测试的现状,优化和改进了传统测试方法。此方法以仿真信号代替采集的真实信号来驱动ECU进行控制工作,并引入闭环结构和CAN总线,使测试过程更加简单和智能化。所测结果准确可靠,能运用于ECU生产线,提高ECU批量测试的工作效率,为整车厂进行ECU测试带来了方便。在完善仿真信号模块和测试模块用例库后可扩展到对不同型号ECU的功能测试。同时,此方法的思想,还可以应用于车载网络的测试、故障诊断等方面,具有较好的理论价值和实际意义。
参考文献:
[1]
夏巍,严辉,丁刚.CAN网络的实时性与可靠性的研究[J].安徽建筑工业学院学报:自然科学版,2007,15(1):65-68.
[2]
KONG FENG, ZHANG LIYAN, ZENG JIE, et al. Automatic measurement and control system for vehicle ECU based on CAN bus [C]// Proceedings of the IEEE International Conference on Automation and Logistics. Washington, DC: IEEE Computer Society, 2007: 964-968.
[3]
王立萍.CAN网络在汽车控制方法的应用[J].工业仪表与自动化装置,2009(5):77-79.
[4]
WU WEI-BIN, HONG T S, LUO CAI-RU, et al. Hardware-in-loop of alternative fuel engine ECU [C]// Proceedings of the Second International Conference on Computer Modeling and Simulation. Washington, DC: IEEE Computer Society, 2010: 291-294.
[5]
陈彦丰,朱君.基于PXI的汽车测试方案[J].汽车制造与装备,2005(3):44-46.
[6]
程跃,康劲松,徐国卿.一种车用CAN总线网络测试系统的研究[J].电子应用,2008,27(1):83-86.
[7]
梁锐.NI软硬件平台在汽车ECU开发和测试中的应用[J].世界电子元器件,2007(12):61-63.
[8]
WEI WEN-XIONG, GUO JIANG-WEI, LIU SHENG-LONG, et al. Design of CAN communication network in automobile ECU testing system [C]// Proceedings of the Second Pacific-Asia Conference on Circuits, Communications and System. Washington, DC: IEEE Computer Society, 2010: 1-3.
[9]
CAN Specification 2.0,Part A [EB/OL]. [2011-02-15]. can-cia.de/fileadmin/cia/specifications/CAN20A.pdf.
[10]
曹更彦.汽车燃气发动机电控系统实时仿真技术研究[D].重庆:重庆邮电大学,2009.
[11]
阮奇桢.我和LabVIEW[M].北京:北京航空航天大学出版社,2009.
[12]
Society of Automotive Engineers. SAE J1939 [EB/OL]. [2011-03-03]. 省略/PDFs/manual/drehgeber/M36X8/M3658_J1939.pdf.
[13]
胡思德.汽车车载网络(VAN/CAN/LIN)技术详解[M].北京:机械工业出版社,2006.
收稿日期:2011-06-16;修回日期:2011-08-21。
基金项目:
国家“核高基”重大专项(2009ZX01038-002-002-2);重庆高校优秀成果转化项目(KJZH08210)。
关键词:氨氮;在线监测仪;使用;原理;方法
目前,水质监测仪器的发展前景仍处在一个未知的却极其可观的发展趋势当中,在北美等国都陆续设立了一定规模的专业生产企业。水质在线监测系统之所以得到世界各国的青睐,缘于其具有自动转换量程,自动在线监测、并能够完成自动运行、自动校正等对内部数据的管理功能,对测量值与测量时间的实时掌控有着较大的裨益。在日常的使用过程当中,应做好定期维护,了解其使用原理与及方法,保证其正常运行,从而才能保证监测的数据更为准确精密,更好的完成对水质环境的监控管理,下面我们一起来进行详细探讨。
一.对氨氮在线监测仪器的认识
氨氮(NH3-N)在线监测仪器是基于酸碱指示剂的变色原理的应用和分析从而测量和判断所检验的水样当中的NH3-N的浓度,在以往的监测方法之上进行改良,克服了采用电极法仪器的维修率频繁的缺憾,同时也解决了在采用纳氏试剂进行监测之时却同时对水质带来的毒害问题。
一套完整的氨氮(NH3-N)在线监测仪器具体应当具有监测主机(水中NH3-N含量的自动监测的重心)、流量综合仪(包括超声波流量计与巴歇尔流量槽),除此之外还有传输设置(常见的传输设置有PSIN有线网络与及GPRS无线网络两种,主要负责数据的输入与输出)[1]。
近几年来,氨氮(NH3-N)在线检测仪器较以往来看得到极其显著的改善,在进行污染源与水质环境的检测管控等方面都作出了极大的贡献,但是其主要的生产和供应商却都还主要集中在欧美等国家,这也直接导致了我们在进行水质监控时若需要一台具有较高质量保证的氨氮在线检测仪器往往需要从国外购置,这样一来所需耗费的成本和运行费用,这样的问题也是我们在采用氨氮在线检测仪器的最大制约因素。
二、氨氮在线监测仪器的使用原理和方法
氨氮(NH3-N)在线监测仪器是基于计算机技术与实时监控技术的综合应用与结合起来的,实现了对水质监控全程的自动化,在进行化工企业生产过程的污水排放与及城市生活的污水排放的实时监控起到了较明显的作用,获取水体重NH3-N的浓度与污染指数。下面我们首先来一起探讨氨氮(NH3-N)在线监测仪器的使用原理。就目前我国环境监测情况来看,氨氮(NH3-N)在线检测仪器的原理可以归结为氨气敏电法与及纳氏试剂法(也称分光光度法)。
纳氏试剂法与检测水质中铵含量时的测定方法(GB7479-1987)近似,在410-424mm的范围限制内对水样中的氨与碘化钾汞进行反应,所生成的化合物呈现为淡红色胶状,采取此类方法的仪表一般都配备有水样过滤装置,并对其检测期限做了明确的规定:0.1mg/L测定周期1H。
多年来较常采用的方法――氨气敏电法,我们根据其检测原理做了如图示1所示的实验,通过实验我们了解,氨氮监测分为五个过程,即:氨的转化、氨的溢出、氨的扩散、填充液受到氨的影响而发生改变与及PH值电极的监测与其数据的转化这五个过程[2]。
图示1 氨气敏电极检测原理实验
我们知道,通常氨氮以两种以NH3和NH4+这两种主要形式存在于水中,并以一定的量来保证这二者达到平衡,而这个量则取决于水的PH值,水的酸性浓度越大H+则相对较高,转化为NH4+的量也相对较多,我们可将其原理表示为以下两个式子:
注:①为水中NH3和NH4+动态平衡关系式,②式为着二者相对量的平衡常数计算式,Ks为所测定水中氨达到平衡时的常数。
通过实验研究与分析之后我们了解到,要得出水中NH3:NH4+的值,首先应当对水的PH值进行测定,PH值越大,NH3转化为NH4+的量也就越大,并且水温的高低也将对其转化速率产生影响,PH值得变化也是是影响氨的溢出和透过膜的关键因素,然而,在检测时,为了保证仪表稳定,应首先保证缓冲液当中的NaOH与EDTA二钠盐达到足够高的溶度当中,当样品水的表面包含活性剂类的物质时,应首先对水样进行预处理[3]。
三、小结
氨氮在线检查仪器的目前虽然已得到了较为广泛的应用,但从其设备成本投入费用来看仍然是制约其在水质监测当中的普及程度,在通过分光光度法与及氨气敏电极法这两种方法的认识与研究之后,我们进一步对目前进行水质环境污染时所采取的监控技术与设备有了更深入的了解,就目前较为普遍的氨气敏电极监测方法来看,离子数与及溶解性物资的数量、表面活性剂物质与及水样的PH值偏向都是检测当中存在的主要影响因素,如何能够更好的掌握这一系列因素所造成的影响规律,是今后采取氨氮在线仪器进行水质检测工作的中心,也是水质监测工作的重要指标。
参考文献:
[1] 陈涛;刘永波;袁红明;;纳氏试剂比色法测定污水中氨氮的方法[J];中国新技术新产品;2010(03):301.
[2] 王乐华;刘凤芝;;分光光度法测定生活饮用水中Cr~(6+)的不确定度评定[J];职业与健康;2010(02):67.