刘规划
摘要:为了采用Python编程来完成计算机测试测量任务,对LabVIEW和TestStand编程环境中调用Python编程的工具和方法进行了研究。介绍了在LabVlEW中通过LabPython模块、Python集成工具包、Python生成的动态链接库和LabVIEW2018内置函数节点调用Python脚本的方法,以及在TestStand中通过调用Python生成的动态链接库、由LabVIEW封装Python模块生成的VI和通过TestStand附加软件工具调用Python脚本的方法。结合Python代码实列,分析了在程序调用中的关键配置信息及步骤,给出在LabVIEW中和TestStand中调用Python的数据类型对应关系,推荐了相应的调用Python代码的方式。
关键词:LabVIEW;TestStand;Python;调用;动态链接库
中图分类号:TP311.1 文献标识码:A 文章编号:1006-8228(2020)07-54-05
0引言
Python是一种解释型、面向对象、动态数据类型的高级计算机程序设计语言。近几年随着人工智能应用的火热,Python语言在大数据、图像识别、深度学习等方面得到了广泛的应用。而在计算机测试测量领域,则更多地使用TeststaJld结合LabvIEW编程,实现通信、数据采集、信息交互等功能。鉴于Python的易用、免费、具有丰富的库资源以及在数据处理和协议分析方面的优势,使用TeststaJld和LabvIEw调用Python模块快速实现自动化测试,会越来越多地应用到实际的测试项目中,这也是近年来使用图形化编程工具的用户群呼声最高的热点技术之一。因此,研究并发掘LabVlEW和TeststaJld中各种调用Python编程的工具和方法,找到更佳、更便捷的调用方法,对于自动化测试脚本程序编写,具有很好的实用价值。
1LabVlEW中调用Pvthon模块
LabvIEW是由美国国家仪器(NI)公司研制开发的一种图形化程序开发环境,是开发计算机测量与控制软件的理想选择。LabVIEW调用Python模块通常有四种方法,每种调用方法在使用前都需要先安装Pymon开发环境并配置环境变量。
1.1通过LabPython模块调用
LabPymon是免费的OpenG工具库中的子模块,它是一个执行Python脚本的LabVIEW工具,内含一套调用Python脚本的函数节点。使用LabPython模块来将Python程序引入LabVlEW中,可以使用市面上现有Python工具库,方便LabVlEW编程。
通过VIPM可以安装OpenG工具库,安装后LabPython函数选板会集成到User.1ib库中,用户可以在View→FunctionPalette→User Libraries→LabPython位置找到它,并可使用LabPython函数选板中列出的常用函数节点。实际使用LabPython工具库调用Python脚本编写应用程序时,LabPython功能并不专业且仅支持LabVIEW2009以前版本和Python2.x版本,故本文不推荐使用也不过多探讨。
1.2通过Python集成工具包调用
PythonIntegration Toolkit for LabVlEW是由En-thought公司开发的商业软件,它为Python和LabVlEW提供了一个新的无缝联接的方式。使用该工具包可以在Python和LabVIEW程序间实现快速的双向通信,通过集成工具包中的工具节点可从LabV~W中直接调用Python函数或方法,加载Python脚本到内存中。开发者可并行运行Python和LabVIEW,为调用的函数传递参数,并从Python解释器中得到响应。
集成工具包函数选板中包含了调用Python脚本的函数节点,常用的函數节点包括New Session,Pack,GetValue,Set Value,Call,Unpack,CloseSession等。使用LabPython中的函数编写调用Python模块的方法和LabVlEW常规编程方法一致。调用Python脚本创建应用程序时首先使用NewSession.vi函数节点创建引用Python模块的会话,然后用Pack.vi函数节点传递参数数据给Python脚本,接着用Call.vi指定调用的Python函数或方法的名称并执行调用,再从Python解释器中取回执行结果,最后关闭会话。编写调用Python脚本的应用程序如图l。
该工具包是收费的商业软件,兼容Python2.x和Python3.x版本,调用Python脚本比较便捷,其功能比LabPython强大。但Enthought集成工具包产品由Enthought公司提供支持,NI并不直接提供技术支持/服务。由于是商业收费软件且价格不菲,LabVIEW/Python集成工具包并不常用。
1.3通过Python生成动态链接库调用
动态链接库(DLL)是软件开发中一种非常重要的跨语言协作方式。把Python语言写成的脚本编译成DLL,能够提供给诸如c++、c#、LabVIEW等编程语言调用,这能够在很大程度上提高软件的开发效率。但是,虽然Python可以调用其他语言生成的动态库,Python作为一种脚本语言,本身是不能直接编译生成动态库的。为了生成动态库,可以借助Cython,将Python脚本变成c语言文件并创建DLL。具体如何使用Cython把Python程序创建生成为DLL的过程,可以参考Cython官网相关资料,本文不展开阐述。
LabVIEW语言是一种图形化编程语言,结合DLL这种跨语言的编程协作,可以大大弥补它固有的不足,比如一些复杂算法处理。LabVIEW中调用由Python创建生成的DLL的方法和调用其他编程语言生成的DLL的方法并无本质区别。可以使用LabVlEW函数选板中Functions→Connectivity→Libraries&Executables下的Call Library Function Node函数节点。把CallLibrary Function Node函数节点放置到LabVlEW框图编程区域,双击打开节点,在弹出的窗口中配置调用库函数节点,如图2所示。
以调用目标函数Test()为例,Test()函数功能是实现取模运算并返回结果,函数原型见下面Python代码:def Test(a,b):
Mod-Value=a%b
return Mod——Value
首先在图2的函数选项卡中配置库文件和库函数,在Libraucname or path中选择需要调用的SharedLib.DLL文件,在Funcfionname下拉框中选择需要调用的目标函数Test()。由于是使用Cython把Python脚本生成为DLL,而Cython底层就是由c语言实现,所以在Callingconvention调用规范中仍选用c。然后在参数配置选项卡中分别为各个参数指定数据类型,并选择参数传递方式为传值或传参嘲。退出Call Library Function窗口后,为输入参数赋值,运行LabVIEW程序,即可执行Python编写的脚本函数。
需要特别指出的是,对于使用ActiveX/COM技术类型的DLL,需要先使用resvr32.exe命令注册,然后才可以调用DLL并使用其内部的函数。
1.4通过LabVlEW2018内置Python节点函数调用
自LabVlEW2018版开始,新版LabVlEW提供了三个可以调用Python脚本模块的接口函数,位于函数选板Functions→Connectivity→Python位置。开发者拥有LabVIEW2018许可证后,这三个接口函数是默认免费提供的。由于是NI官方提供的LabVlEW中调用Python接口方式,其帮助文件和开发范例程序都比较完善。这是本文推荐的一种直接调用Python模块的较好方式。
LabVIEW2018中提供的调用Python的相关函数有三个,分别是:①Open Python Session,用于打开Python引用,为后续的操作程序创建Python会话;②Python Node,用于调用Python脚本模块,并指定所调用的Python模块的函数;③Close Python Session,用于关闭Python会话,以免内存泄漏。
LabVIEW2018中使用这三个函数调用Python脚本需要Python3.6或Python2.7开发环境,Python版本号需要在调用Python模块时正确配置。另外,Python和LabVIEW的数据类型的匹配有严格对应关系,如表l所示。在LabVIEW2019版中新增加了对NumPy库的Array数据类型的支持。
基于Python3.6版本编写一个计算斐波那契数列的函数,保存为UTF-8格式并命名为FibSeq.PY,源代码如下。
以LabVIEW2018内置的Python节点调用FibSeq.PY内的Fib(n)函数为例,先使用OpenPythonSession节点打开一个会话,并配置脚本解析环境为Python3.6版本,确保输入的Python版本号数据类型为字符串;然后采用PythonNode函数节点调用指定路径下的Python模块,并输入函数名Fib和参数值n,同时输出函数返回值;最后用ClosePythonSession关闭会话。LabVIEW编写的框图程序如图3所示。
2Testsland中调用Python模块
TestStand是一款测试管理软件,用于开发、执行和部署计算机测试系统软件。TestStand中调用Python模块通常有3种方法。与在LabVIEW中调用Python模块类似,需要先安装Python开发环境并配置环境变量。
2.1TestStand直接调由Python生成的DLL
前文提到,可以借助Cython将Python脚本变成c语言文件并生成动态链接库。同样,也可以通过这种方式在TestStand中调用由Python脚本生成的DLL。
由于代码模块是DLL,在TestStand的插入面板中,模块适配器类型选择为C/C++DLL。在Module选项卡内选定需调用的DLL路径后,Function下拉列表中会自动枚举出该DLL所有的函数名称,选择DLL中的函数名,然后该函数对应的输入输出参数就列出在参数列表内,选中一个参数,可以在右侧参数属性配置区域为该参数配置相应的属性,如参数类型,参数传递方式等。如图4所示。最后为DLL内函数的输入输出参数配置对应TestStand内设定的变量名,并且在Limit选项卡中设定测试结果的判定条件。
这种调用方式占用资源少,代码执行效率也很高,适用于采用Python语言实现复杂算法函数的调用。
2.2TestStand调用由LabVIEW封装Python模块创建的VI
TestStand调用由LabVIEW创建的vI来编写测试序列是开发者常用的方式,也是对NI自动化测试测量软件生态环境的充分应用。如前文所述,既然LabVIEW中有多种方式可以调用Python脚本模块,那么TestStand中调用由LabVIEW封装Python模块后创建的Ⅵ,就成为另外一种TestStand结合Python语言编程的途径。
首先,在TestStand的序列编辑器中,通过工具条中的选择适配器下拉列表来选择模块适配器为LabVIEW。模块适配器的作用在于能够让TestStand正确识别并执行LabVIEW代码模块,它在TestStand引擎和LabVIEW代码模块之间提供了一条通道,TestStand可以传递参数给LabVIEW代码模块,并从LabVIEW代码模块获取数据。确定模块适配器后,在步骤类型中选择需要的测试步骤类型插入到序列程序中,并在步骤设置窗格中完善輸入输出参数的数据传递配置。这样即可在TestStand中加载LabVIEW封装Python模块的vI。
2.3通过PythonStep Types for TestStand软件工具调用
NI于2018年8月发布了一个TestStand的附加软件工具包Python Step Types for TestStand V1.0,支持TestStand2014/2016/2017。它是一组有NI官方开发的自定义步骤类型,可用于在TestStand程序序列中指定并执行Python脚本。通过Python Step Types forTestStand工具库中的Python步骤类型,可以调用Python模块函数、类成员或静态函数。Python StepTypes for TestStandVl.0支持的Python开发环境是Python3.6或Python2.7,需要在调用Python模块时对Python版本号正确配置。
开发者可以在Python中实现特定的处理计算功能,并使用参数变量在步骤之间传递数据。为负责传递数据的输入输出参数配置属性时,选择TestStand和Python之间相匹配的数据类型。表2是TestStand和Python之间的数据类型匹配关系。
安装Python Step Types for TestStand VI.0后,TestStand2016插入选板中包含五个自定义步骤类型,分别是Action,String Value Test,Multiple NumericLimit Test,Numeric Limit Test和Pass/Fail Test步骤类型。以Multiple Numeric Limit Test步骤类型为例,用Python3.6编写一个函数,将多个值以列表形式返回,保存该模块名为SampleFunction.PY,代码如下:
然后采用PythonStepType中的Multiple NumericLimit Test步骤类型,调用SampleFunction.PY模块内samplefunction函数。打开该步骤类型所提供的ConfigurePythonStep界面,如图5所示。指定Python解析器版本为3.6并选择调用Python模块的路径,Function Name下拉列表区域将自动枚举出此Python模块内部包含的函数,然后选择调用的函数,则此函数相应的参数会出现在参数列表中,可以为参数配置匹配的数据类型和TestStand变量。
对于函数返回的列表,若列表中的每个值都需要比较是否符合要求,Multiple Numeric Limit Test步骤类型则可以将列表中的每个数值和限值进行比较,以决定该步骤的测试结果是否合格。在参数配置窗口中,函数返回的列表数据类型使用TestStand中数组类型相匹配。
最后为Python输入的参数值指定数据源并设置每个数据源的上下限值。运行TestStand可执行Python脚本内的samplefunction函数,并得到返回值。基于Python Step Types for TestStand工具在TestStand2016中调用Python脚本的方便快捷,代码执行效率高,推荐使用此方法。另外,在TestStand2019版中,Python适配器已经被内置在TestStand中,用于提供从TestStand调用Python代码模块的高级功能。由此可以预见,Python语言将在基于TestStand的自动化测试软件中发挥更重要的作用。
3结束语
本文详细阐述了目前LabVIEW和TestStand调用Python脚本编程的工具和方法,结合Python代码实例及实际应用经验,指出了在LabVlEW中推荐采用LabVlEW2018内置Python节点函数调用Python代码模块,而在TestStand中推荐采用PythonStep Typesfor TestStand软件工具包调用Python代码模块。
当前随着全球各大公司数字化转型以及业务的快速发展,一个项目从开发出产品原型到测试验证完成,要求的时间周期越来越短,除需要软硬件开发人员快速地开发出原型产品外,也要求测试验证人员快速搭建自动化测试系统,并尽快编制测试脚本以完成测试验证。而Python的简单易用,现成可用的丰富资源库等特点,正是这种应用场景所需要的,再结合NI公司丰富的测试工具资源库,相互配合应用到LabVlEW和TestStand中,将会使测试人員搭建自动化测试系统变得越来越快速便捷,能更快适应当前新形势下的研发测试需要。