1.4 涉及的技术

由于被测试对象千差万别,要测试这些产品,就要根据被测对象的特征、测试需求针对性地构建测试系统,所以构建测试系统会使用很多技术。

多数具有总线通信的产品会应用到下述技术。

1.4.1 总线通信技术

总线通信技术有很多内容,在测试系统领域中主要涉及通过总线和被测对象交互。

1.计算机总线

计算机总线:各类计算机、设备、元器件之间用线缆连接,能够传递信息、互相通信,常见的是很多设备都具有的串口、航空航天领域中的1553B总线、车辆和卫星中的CAN总线。总线可以传输数据,设备通过总线向外部发送各类数据,总线上的其他设备可以接收数据、向其他设备发送各种数据包。

总线是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束。按照计算机所传输的信息种类,计算机总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线也是一种内部结构,它是CPU、内存、输入设备、输出设备传递信息的公用通道,计算机的各个部件通过总线连接,外部设备通过相应的接口电路再与总线连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

2.总线的分类

在计算机总线的分类中,有计算机内总线、计算机外总线。计算机内总线指计算机内部各组成间通信的总线,计算机外总线指该计算机与其他计算机之间通信的总线。本书中提到的总线泛指计算机外总线。

3.计算机网络

在常见的以太网(Ethernet)通信中,约定了计算机网络的五层模型,其中的物理层约定了电气特性。严格地说,总线应该是以太网中物理层的内容,但在日常描述中,经常会把总线和计算机网络混在一起,总线是实现计算机网络的基础。

在本书中,把能用线缆连接,又能传递数字量、采集模拟量、输出模拟量等,传递电信号能被计算机处理的,都归属于测试系统要面对的总线。

4.常见的计算机外总线

用于在计算机之间传递信息的计算机外总线有很多,常见的计算机外总线如表1-1所示。

表1-1 常见的计算机外总线

除传递数字量的各类总线外,测试系统还需要处理各类模拟信号,如采集设备上的电流值、温度值,采集脉冲信号,控制上电/断电、采集开关信号。

5.总线的具体描述

每种总线都有相关的标准文件、书籍,描述总线不是本书的重点,关于各总线的详细描述,请参考相关标准文件、书籍。

6.通信协议

在计算机通信技术中,总线实现的是计算机能够通信,在总线中传输的各类信息、数据是通信各方最关注的内容。因此,需要制定通信协议。在计算机通信中为了使设备之间有效进行通信,所定义的一组协调一致的传送数据格式的规则称为通信协议。

在计算机网络的五层模型中,除物理层外,各层都会有通信协议,很多协议都是标准化的,如以太网的传输层协议TCP(Transmission Control Protocol,传输控制协议)/UDP(User Datagram Protocol,用户数据报协议)。在测试系统中处理的通信协议,多数是应用层协议,既有标准的,也有自定义的。

在各种领域中有很多标准化的通信协议,如仪器仪表的SCPI、工业领域的Modbus、空间数据通信的CCSDS等。这些协议是各种委员会(如国际的IEEE)约定的。在测试系统中实现这些标准化协议,遵照对应标准文件即可。

除各种标准协议外,还会有很多自定义的协议。各种产品在设计实现时,会自定义通信协议。测试系统中处理最多的便是各种自定义的通信协议。

1.4.2 计算机软件技术

计算机软件技术实在是太丰富了,如人工智能、大数据、云计算中各种软件技术,细分有组态软件、框架软件、B/S软件技术、C/S软件技术等。程序设计语言方面有数十种流行的编程语言,每种语言又有丰富的代码库、框架。

有丰富的软件技术,并不会造成混乱、不会让技术人员不知所措,因为针对不同领域、不同软件,有各自适合的软件技术。我们需要针对所研发的软件、所面向的领域,选择合适的软件技术。例如,在安卓手机开发中,可以选择Java开发应用软件;在互联网各类Web应用程序中,可以选择J2EE、.Net、PHP;在Web前端页面中,可以选择HTML/CSS/JavaScript等。

1.软件分类

计算机软件从不同的角度可以有很多分类,如本地应用程序和Web应用程序、应用软件和系统软件、单机软件和网络软件等。所有这些软件都有很多种技术来实现。根据测试需求的复杂度,研发的测试软件应归属为应用软件。

2.程序设计语言

计算机软件是用各种编程语言实现的,用编程语言编写程序代码、编译生成软件。编程语言有多种,每年既有新出现的编程语言,也有消亡的编程语言。主流的软件开发语言仍然是C++/C/Java/C#等,因为这些语言有各自的优势,所以这么多年一直在流行,其他的语言相对小众、其使用者相对少一些。C++、Java、C#都可以用来实现测试系统。本书介绍的总线仿真测试平台是基于C++和Qt构建的一套软件系统。

脚本语言也有很多种,能完成很多事情,但脚本语言不能开发常规的软件。在测试系统中可以应用脚本语言,用于公式计算、执行测试流程,在后续的章节中将详细描述。

3.低代码

最近几年在互联网世界有一个流行的概念——低代码:编写少量代码生成软件,采用鼠标点击设置、属性修改、图形编辑等方式,可以生成一套应用程序。

低代码应用较多的领域包括一些企业门户网站的自动生成、手机应用软件的自动生成、微信小程序的自动生成等。这类应用程序的复杂度不高,内容重复性很强,在开发过程中大量的代码可以复制、粘贴,所以适合这种低代码方式。

在测试系统中可以借鉴低代码,用低代码实现的配置化、图形化编程可降低编写测试流程、测试脚本的复杂度。

4.图形化编程

在互联网技术最火热时,有很多图形化编程技术,如Google的可视化编程工具,其中的绝大多数是辅助生成文本代码的。

在测试系统中测试流程、测试用例,需要顺序执行,以图形化的方式可以非常直观地表示出来,与很多软件功能的工作流有些相似。工作流是很多业务管理类软件中都有的功能,如合同的审批流程,在软件系统中可以看到每个步骤、是否审批等信息。因为测试系统中的测试用例是顺序执行的测试,与工作流类似,所以可以参考工作流的方式,表示、编辑测试用例。

5.传统的测试系统

传统的测试系统都是基于客户端/服务器(Client/Server,C/S)模式的软件,多数是用C++/.Net/LabView等开发的本地可执行应用程序。本地可执行应用程序即常见的exe程序,其特点是方便访问硬件资源、实时性高,在浏览器/服务器模式大行其道的今天,该特点是其仅存的优势,而浏览器程序不具有该特点。除去硬件交互的内容,很多功能归属于应用软件的范畴,用现在流行的浏览器/服务器模式,将这些应用软件功能实现出来也是可行的。

6.互联网中的软件技术

互联网技术的发展带动了整个计算机软件行业的技术发展,传统行业的计算机软件技术也在参考互联网的各种技术,有些复杂的测试系统,以基于私有云平台的方式构建。目前,主流的云平台开发技术使用Java。Java是一种使用广泛的计算机程序语言,也有一些企业使用Java开发测试系统,Java自带了跨平台的特性,Java也能支持一些对跨平台有要求的场景。

在扩展方面,基于Web技术有流行的微服务概念、容器化部署等。这些技术有很多优点、解决了很多问题,也能够使Web应用支持扩展,方便地加入新的功能。

容器化提供了应用的基础运行环境,应用程序调用容器化环境提供的各种库、函数、接口代码、性能优化等,之后应用程序不需要关心具体的硬件环境、运算资源等。这在互联网的各类应用中很重要,可以方便地升级硬件资源、移植硬件环境,而不需要修改应用代码。但在测试系统的应用软件中,一部分功能与硬件打交道,这部分程序不需要容器化。测试系统中的应用程序部分,如数据分析、数据应用、数据管理等,已经脱离了硬件交互,也不太需要考虑性能等,基于前、后台分离的设计,一些应用功能可以考虑使用容器化的技术。在后面的一些章节中讨论一些Web技术的应用。

7.本书的重点是软件技术

为应对测试系统的复杂度,测试系统中会使用框架软件技术,基于平台、框架、插件、扩展等方式,使测试系统成为一个容易扩展的测试软件平台,避免出现不通用、重复开发导致成本上升、增加研发周期、稳定性等问题。

在后面的章节中专门描述框架软件技术及一些具体的实现。

1.4.3 程控仪器仪表

在测试系统中为了获取、模拟、测量各类信号,避免不了使用各种仪器仪表,用仪器仪表测量、获取被测对象的各种属性值、输出值,用仪器仪表提供输入值、模拟量。例如,常见的是用程序控制电源供电、断电,执行上/断电测试。仪器仪表技术也是测试系统会涉及的重要技术内容。在测试系统中使用仪器仪表,基本上都是使用仪器仪表的程序控制功能,即程控技术。

1.程控技术

程控即程序控制的简写。计算机程序控制仪器仪表执行测试工作,计算机通过网口、串口、USB、GPIB等方式连接到仪器仪表,然后在计算机中运行程控程序,基于这些连接与仪器仪表建立通信,控制仪器仪表执行测量、读取测量值、控制输出等,实现程序控制。

绝大多数现代化的仪器仪表都支持程序控制,仪器仪表的程控技术中有SCPI。

2.SCPI

IEEE制定了很多标准,绝大多数公司、企业都会遵守这些标准。SCPI(Standard Commands for Programmable Instruments,可编程仪器标准命令)定义了一套用于控制可编程测试测量仪器的标准语法和命令。

SCPI于1990年与IEEE 488.2协议一起面世。这套标准定义了可用于控制仪器的语法、命令结构及数据格式。例如,定义了通用的命令,如配置仪器参数的命令CONFigure;测量命令MEASure等。这些命令可用于支持SCPI的仪器,并且同一类的命令属于同一子系统。SCPI同时也定义了若干仪器的种类。例如,任何可控制的电源都会实现DCPSUPPLY基本功能类型。仪器的类别规定了它们会实现什么样的子系统,当然也包括针对仪器的特定功能。

需要注意的是,SCPI并未定义物理层的传输信道的实现方法。虽然它最开始是与IEEE 488.2协议一起面世的,但SCPI控制命令也可用于串口、以太网、USB接口、VXIbus等若干硬件总线。

SCPI命令是ASCII字符串,通过物理传输层传入仪器。命令由一连串的关键字构成,有的还需要包括参数。在协议中,命令规定为如下形式:CONFigure。在使用中,既可以写全名,也可以仅写仅包含大写字母的缩写。通常,仪器对于查询命令的反馈也为ASCII代码。在传输大量数据时,二进制数据也是可以使用的。

此外,也有很多仪器仪表厂家自己定义了非标准的程控协议。非标准的程控协议会千差万别,例如在程控命令方面,有些厂家定义了自己的字符串命令格式,有些厂家定义了二进制数据的命令格式。针对这些非标准SCPI的仪器仪表,测试系统中也需要编写代码进行程控。

3.VISA

VISA(Virtual Instrument Software Architecture,虚拟仪器软件结构)是由VXI plug&play联盟制定的I/O接口软件标准及其规范的总称。VISA提供用于仪器编程的标准I/O函数库(称为VISA库)。VISA库驻留在计算机系统内,是计算机与仪器的标准软件通信接口,计算机软件通过它来控制仪器。

在C/C++、Java、C#、LabView等编程语言中都可以使用VISA。在使用VISA前需要先安装它,常用的安装包是NI的VISA安装包。安装好之后,在安装目录中有h文件、lib文件、dll文件,在C/C++代码中引用头文件、链接lib文件,就可以编译执行,软件会在系统的根目录找到VISA的dll文件并加载。在没有安装VISA的计算机环境中,则需要安装VISA或者复制VISA的dll文件,并且VISA的版本必须与程序调用的版本一致,否则可能出错、带来不便,这也是使用VISA的一个缺点。

在Java语言中,可以通过JIN调用dll文件的方式来调用VISA库。

编写仪器仪表的程控代码,不一定非调用VISA库,也可以调用操作系统的socket函数与IO函数、调用配套驱动库函数,根据SCPI命令、通信协议,编写代码实现通信与程控。

4.VISA的缺点

使用VISA会导致引入一个外部依赖,可能产生一些问题。例如,开发环境与部署环境的VISA版本不一致,导致开发环境正常、部署环境不正常,需要反复确认VISA版本等。想减少外部依赖,就少使用VISA。

1.4.4 硬件模块——数据采集、输出

硬件部分用于与设备交互,建立物理上的连接、采集信号、输出信号、通信控制。常见的方式是选择市场已有的各种商用计算机、数据采集卡、信号输出卡、总线通信板卡、总线模块、数采模块。这些计算机、板卡是稳定可靠的,并经过商业验证,已经具备了基本的稳定性、可靠性,适合用于构建测试系统。

在极少的情况下,市场上的各类商用板卡不满足需求,此时可能需要自己研制,想办法满足需求。常见的是一些高速通信板卡,如LVDS总线高速传输图形数据,以几百兆或千兆的速率传输并解析数据,这种需求没有现成可用的LVDS通信模块,必须自行研制接收板卡、插入工控机中。

使用数据采集卡、通信板卡,都是为了解决交互的问题,可以组合选择的方式也比较多。

1.工控机+板卡

常用的工控机+板卡是指工控机+各类数据采集卡或各种总线通信卡。工控机应用在工业领域中,其特点是温/湿度指标高、长时间工作、稳定可靠、扩展槽多等。在工业领域的生产、制造等对稳定性、可靠性、环境指标有要求的环境中,需要选择工控机+板卡的方式。

在工控机中插入板卡的卡槽有多种,如CPCI、PXI等。它们的主要区别是速率不同,CPCI速率高、PXI速率低。在选型时要将工控机的卡槽和板卡的卡槽相对应,如果不匹配,则使板卡无法插入工控机中,即无法使用。

2.便携

通常,工控机的体积都比较大、重量沉,采用工控机+板卡的形式,会导致测试设备的体积大、不便于携带。对于有便携要求的测试系统,为解决这个问题,可以采用便携式选型,采用一些小型化、便携式硬件模块。

绝大多数计算机都有网口和USB接口。现在有很多商业的USB转接模块、网口转接模块,能够将模拟量输入/输出、总线通信等转接为USB或者网口。此时,将这些小型模块接入任意的计算机中,部署上测试软件,就可以执行测试。

转接后的数据精度、采集频率等不会变化,唯一的问题是对实时性可能有影响,这要看具体的测试需求中是否对实时性有极高的要求。

很多国内供应商提供便携式模块。例如,1553B总线转以太网、1553B总线转USB:1553B本身是高实时性总线,转接后的实时性会受到影响,其应用场景肯定有限。例如,CAN总线转USB、CAN总线转以太网:因为CAN总线的应用场景不需要很高的实时性,所以很多应用场景采用CAN总线的便携式模块。

3.选型

应根据具体的测试需求,选择硬件模块,核对测试需求的指标,核对硬件模块能否满足要求,如精度要求、速率要求、输入/输出的范围等。

硬件的选型很多,可以选择知名的厂商,例如登录凌华、NI(美国国家仪器公司)、是德科技等官网进行选择。这些硬件厂家不断地推出各种硬件模块,这些硬件模块的特点是便携化、远程化、支持物联网等。在构建测试系统时,可根据测试需求及各个厂家的硬件模块的特点进行选择。

4.驱动和编码

最后的工作是安装驱动,参照附带的示例代码,编写程序,使用这些硬件模块。

也有免安装驱动的硬件模块,如网口转接的硬件模块、串口转接的模块。这些模块或者透明转发数据,或者有通信协议。编写程序调用操作系统的socket、COM函数、实现通信协议,就可以使用这类硬件模块。