利用Python语言实现实验室自动化
作为一名系统和应用工程师,得益于自动化仪器和软件,我已经节省了不计其数的日日夜夜;例如LabVIEW,这是一款系统设计平台和开发环境,支持可视化编程语言。LabVIEW支持用户利用友好的图形用户界面(GUI)构建应用程序。该平台带有多个库和模块,使其能够与仪器通信,所以可用于实验室自动化。作为LabVIEW用户,我已经使用该工具构建了多款应用程序,但在过去几年中,我已经开始逐步将其淘汰,代之以Python语言(见侧栏:“Python是什么以及如何使用?”)。
为了理解其中缘由,我们首先了解一下Python相对于现有替代语言的主要优势,以及讨论Python应用程序的工作实例。表达Python方便和强大之处的最佳方式是介绍一个完整、可工作的Python自动化脚本,例如我用来实现稳压器(VR)负载调节曲线(负载调节是指输出电压随输出电流(负载)增大而发生的变化)自动测量的脚本。
这些稳压器分为两类:零下垂稳压器设计的输出电阻为零;因此,输出电压设置点不应随输出电流增大而变化。相比较而言,下垂稳压器具有“载重线”,意味着被设计成具有特定的等效输出电阻。本例中所用稳压器的零电流输出电压为1 V,设定的载重线为2.5 mΩ。
图1. 测量配置
在图1所示的试验配置中,使用Chroma 63201电子负载施加负载电流(VR输出电流)。通过采集经过校准的4 mΩ短路器上的电压,测得输出电流。利用Agilent 34970A数字采集器(DAQ)采集电压和电流,DAQ和电子负载均通过GPIB连接至计算机。我们测量的目的是证明:在一定输出电流范围下,输出电压在技术指标范围之内;图2所示为应用程序的流程图。
图2. 应用程序流程图
从基本代码结构开始
以下是自动化脚本代码的第一部分。Python语言中,注释用#表示:
第1至3行引用库,其中包含随后代码中使用的方法:
?Numpy是用于科学计算的封装库。本例中,Numpy用于产生输出电流值的数组。
?Pandas (用于数据处理和分析的库)创建一个功能强大的数据结构,以储存我们的测量结果。
?Visa是PyVISA库,用来控制我们的仪器。
?Time是一个非常方便的库,用于产生某些时间延迟。
注意,引用的Numpy和Pandas库被重命名为np和pd,以保持代码整洁。本文中提及的所有库要么已经随Python 安装包提供,要么也很容易从在线软件库中安装。
第4至5行创建我们用来访问Chroma电子负载和Agilent DAQ的对象。这正是PyVISA的作用:我们只需调用instrument方法,并提供表示通信接口的字符串(GPIB)以及仪器在总线上的地址。
第6行创建results数据框(dataframe),用来储存测量结果。数据框是一种二维标签数据结构,各列的数据类型可以不同。使用数据框而不使用数组,允许我们通过容易记忆的字符串而不是数字来引用列,以及在数据本身中混合数字和文本。
第7行创建一个实数数组,从0到20,步长为2。这些数字表示以安培为单位的输出电流值,在这些电流点测量VOUT。
第8行用于构建“for”循环。注意,语法很容易理解:每次执行循环时,创建一个load 变量,其值等于loads数组的新元素。当使用了数组的全部元素时,循环结束。有意思的是,Python利用缩进定义代码的层次结构,而不依赖于任何类型的括号。这样能够保持代码的整洁和易读性,非常有用。
既然我们已经定义了主循环,就需要告诉仪器设置电流,然后读取电压,并保存结果。
仪器通信及保存数据
我们接下来看看第二部分的代码:
第9至10行配置相应的负载电流并打开负载。只需要使用读/写方法,并且知道仪器接受的命令串(可查阅仪器手册),即可通过GPIB接口进行通信。与其他编程语言类似,%.2f为占位符,在实际运行时用变量load的值代替。也表示我们希望数据表示为带两位小数的实数。第11行产生1秒延迟,这对于确保仪器和电路达到稳态条件非常有用。
第12行创建一个空对象(在Python中称为字典),用于暂存执行一次循环的结果。
第13至16行用来测量输出电压和电流。第一条命令告诉仪器我们想要做什么(测量直流电压,采用自动变比)以及对应的采集通道。分别在通道101和102采集输出电压和电流。第二条命令读取返回的结果并将其储存在temp中。数据以字符串的形式返回,所以必须利用float函数将其转换为实数。此外,由于DAQ测量的是电压,我们需要将读数与短路器电阻(0.004 Ω)相除,得到正确的电流值。
看看使用Python和Pandas有条理地保存数据是多么简单:temp字典中的字段无需提前定义,并且使用具有含义的字符串进行访问。无需记忆列号与数据之间的关系,而如果使用数组存储数据的话则必须这么
- 月度开发者:使用DragonBoard 410c开发轻量化Python 实现小型嵌入式单片机运行高级语言Python(10-11)
- python移植到arm平台(11-09)
- 对比Ruby和Python的垃圾回收(09-12)
- 学习Python编程的11个资源(09-12)
- 基于FPGA+Python的定点平方根实现(04-09)
- 基于虚拟仪器的特性测试参数数据库的设计(06-24)