历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | 利用Python语言实现实验室自动化

2019-10-21 来源:eefocus

  作为一名系统和应用工程师,得益于自动化仪器和软件,我已经节省了不计其数的日日夜夜;例如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字典中的字段无需提前定义,并且使用具有含义的字符串进行访问。无需记忆列号与数据之间的关系,而如果使用数组存储数据的话则必须这么做。


  在第17行中,我们将字段附加到results数据框。注意,results也不需要进行初始化;每次附加一个新行时,将增加新字段至数据框。


  第18行可选,但在终端上打印当前电压和电流值非常有用,尤其对于长时间测量,可以作为确认应用程序仍然在运行的途径,以及了解执行到了什么程度。


  在第19至20行,关闭负载,将数据保存到硬盘。对于后者,每个数据框对象都使用一种内置方法将数据保存到CSV文件。


  理解数据框的强大之处


  为了了解使用Python和Pandas数据框的强大之处,在第16行和第17行之间增加以下代码。

  第A和B行生成两个新的数据框字段。Vout_id包含输出电压的理想直流设置点,给定实测电流和理想的零电流设置点(1 V)以及载重线。Vout_err是理想电压与实测电压之间的绝对误差。


  第D和E行在数据框中增加了Pass字段。该字段的值是一个字符串,表示是否满足输出电压精度的假设指标±0.1%。在图3中, 您可看到保存的CSV文件在Excel中的情况。神奇的是:数字数据和文本位于相同表格中,甚至根据数据框字段的名称自动生成了表头。

图3. 包含测量结果的CSV文件截屏

  利用Pyplot分析数据以及绘制图表

  利用上一节介绍的代码片段,我们可以确定输出电压是否在其理想值附近的“允差”带内。我们通过本实验还能够获得另一个感兴趣的信息:载重线的准确值,也就是VOUT-vs-IOUT曲线的斜率。如果您不记得如何对采集的数据进行线性拟合,也不必担心:Python也有一个执行该操作的函数。只需在脚本最后插入以下代码:

  第A行从Scipy的Stats模块中导入一个方法。在第B行中,我们将欲拟合点的X和Y坐标传递给linregress方法。最后,在第C和D行中将结果打印到终端。Linregress以数字形式返回多个结果,斜率保存在索引0,截断点在索引1。可用的其它信息有相干系数和估计值的标准差。


  对于如此小的数据集(20个点),完全可以使用Excel生成曲线图。利用三行代码示例可了解在Python中如何完成这项工作:只需将其增加到上述脚本的末尾(plot方法的‘ro’参数表示我们希望使用红色圆点标记):

  Pyplot是Python的Matplotlib库的一个模块,包括大量绘制图形的方法。更好的是,这些方法几乎与MATLAB的方法完全相同。图4所示为这三行代码所产生的结果。窗口和图形由Pyplot自动生成,看起来好像“凭空”出现在终端窗口中。

图4. 表示采集数据的图形曲线

  Python是实现实验室配置自动化的上佳之选,简单易用、容易理解,以及具有极高的灵活性和强大功能, 能够省去繁琐的测量时间。LabVIEW并没有消失,仍然是GUI王者。一般而言,我认为LabVIEW更适合需要精细图形界面并且不需要执行复杂循环或数据处理的应用。例如,我仍然使用LabVIEW设计大多数面向客户的应用程序,这些程序一定要漂亮,但很少有多么复杂。但对于其他应用和自动化需求,Python现在是我的首选。


  侧栏:“Python是什么以及如何使用?”

  Python是一种解析式、面向对象、高级编程语言,采用动态语义。自1991年首次发布以来,Python的应用越来越普及,现在被广泛用于各种应用;是主流大专院校和网络课程中最常用的教学编程语言之一。Python成为“第一门”编程语言的原因在于其简单、容易学习的语法和可读性(有人说它“用浅显的英文在编程”), 是通用性和功能性的完美结合。

  然而,不要认为Python“仅仅”是一种很好的教学或学院派编程语言,不适合或很少适合专业领域的应用。相反,Python被许多顶尖的公司大量用于网络应用和数据分析,例如Google、Yahoo和NASA。它是一门对于快速开发极具吸引力的编程语言,可用于实现复杂电子仪器的自动化,使数据采集的效率更高。


  Python的优势不仅限于使用简单。Python脚本可在任何主流操作系统上跨平台运行,只需安装Python解析器即可。Python的功能也极其强大,被广泛用于数据分析和复杂的数学运算。


  为什么选择Python来实现实验室自动化?我实施的大多数测试配置都相当简单:任务中95%的时间是在不同时间点测量一个或多个信号(例如电压、电流或温度),或者利用一组自变量产生另一组值。实现以上要求也只不过是循环操作自变量、采集信号,并最终保存数据供进一步分析。Python简单直观、没有严格的语法限制,并且提供方便、实用的库,很容易实现以上目的。


  此外,Python脚本非常容易修改。如果您随后确定通过两个自变量来采集信号而不是一个自变量,那么需要做的仅仅是将之前设计的循环嵌套到另一个循环之内。可能只需几行新代码即可解决这一问题。得益于Python的高度可读性,您很容易修改其他人编写的脚本(对于LabVIEW应用程序,我往往很害怕这么做)。


  随着复杂度的增加,编程语言具有图形语言无可比拟的优势。Python在数学运算和数据分析方面非常优秀,被数据科学工作者广泛用于从庞大、复杂的数据中析取趋势。许多人习惯依赖MATLAB进行复杂的数据分析。实际上,Python是MATLAB的优秀替代品(并且免费),因为它提供了大量兼容MATLAB的库(如本文末尾的例子所示)。我往往首选Python over Excel进行图形绘制,除非图形真的非常简单并且数据库较小。如果您对使用Python进行数据分析感兴趣,我推荐Wes McKinney (O'Reilly Media)编写的“Python for Data Analysis”(利用Python进行数据分析),或者参加Udacity的免费在线课程““Intro to Data Science”(数据科学入门)。


  如果您已经使用过某种编程语言,那么您对我以上介绍的内容不会存在任何问题,但您可能还不理解Python如何与实验室仪器通信。不用担心,也有一个库负责完成这项工作:PyVISA是一个非常容易使用的封装库,支持Python脚本连接到GPIB、RS232、USB以及以太网接口的仪器。


  LabVIEW仍然是采用用户友好的GUI设计应用程序的最佳选择,过程没有Python这么简单直接,但也不是特别困难。我选择GUI工具往往是PyQT。如果您有兴趣了解这方面的内容,请参考Mark Summerfield (Pearson/Prentice Hall)编写的“Rapid GUI Programming with Python and QT”(利用Python和QT快速GUI编程)。

  如果您希望学习Python,我建议参加大规模开放式网络课程(MOOC),例如Udacity、Coursera或Udemy。入门级的编程课程往往是免费的,由该领域最好的工程师和讲师授课。Python只需极少的配置和浅显的学习,所以您在不到一天时间内就能够写出有用的程序。


  Mac和Linux用户会发现终端中已经可以使用Python,只需使用诸如pip等软件包管理系统安装更多的库即可。对于Windows用户,我推荐安装Python(x,y),该软件包中包含了面向科学的Python版本,提供了您可能需要的所有库。我一般也安装IPython,这是一款命令解析器(shell),允许在Python中执行交互式运算,使得开发新应用程序更简单。


推荐阅读

史海拾趣

Dawning Precision Co Ltd公司的发展小趣事

随着市场竞争的加剧,Dawning意识到只有不断创新才能在行业中立于不败之地。公司加大了对研发的投入,聘请了一批在电子制造领域具有丰富经验的专家。在专家团队的带领下,Dawning成功开发出了多款具有自主知识产权的高精度电子产品,这些产品不仅在性能上领先同行,而且在价格上也更具竞争力。这些创新产品的推出,极大地提升了Dawning在市场上的竞争力。

EWC Controls公司的发展小趣事

EWC Controls公司自成立以来,一直专注于工业自动化控制技术的研发与应用。在早期,公司凭借其独特的PID控制算法,成功开发了一系列高性能的控制器产品,赢得了市场的初步认可。随着技术的不断进步,EWC Controls公司不断投入研发资源,推出了基于物联网和大数据的智能控制系统,实现了从单一控制到智能化管理的跨越。这一创新技术不仅提升了公司的核心竞争力,也为工业自动化控制领域带来了革命性的变化。

Cantherm公司的发展小趣事

Cantherm公司在电子行业中以其技术创新而著称。在一次重要的研发项目中,公司团队成功开发了一种新型的散热技术,该技术能有效降低电子设备在工作时产生的热量,从而提高设备的性能和稳定性。这一突破不仅为公司带来了大量的专利和知识产权,还吸引了众多知名电子产品制造商的合作意向,使Cantherm在行业中崭露头角。

Array Microsystems Inc公司的发展小趣事

随着技术的不断成熟和产品的广泛应用,Array Microsystems Inc开始寻求市场拓展的机会。公司积极与各大电子设备制造商建立合作关系,将其阵列传感器技术应用于智能手机、平板电脑等消费电子产品中。通过与这些企业的战略合作,Array Microsystems Inc不仅扩大了市场份额,还提升了品牌知名度。同时,公司还积极开拓海外市场,将产品推向全球范围。

AC Interface Inc公司的发展小趣事

随着全球环保意识的增强,ABC Electronics Inc. 敏锐地捕捉到了绿色电子产品的市场潜力。公司开始研发和生产符合环保标准的产品,如低能耗的LED照明产品、可循环利用的电池等。同时,公司还优化了生产工艺,减少了生产过程中的环境污染。这些环保举措不仅赢得了消费者的青睐,也提升了公司的社会形象。

Cincon公司的发展小趣事

创新是Cincon持续发展的动力。2003年,公司在台北设立了研发中心,专注于电源产品的技术创新和研发。这一举措极大地提升了公司的技术实力和产品创新能力。几年后,Cincon成功设计并制造了LED电源,进一步丰富了产品线,并满足了市场对高效节能照明解决方案的需求。

问答坊 | AI 解惑

我很急需MSP430的英文论文

各位老师,我很急。很需要MSP430的英文论文,翻译的话我可以自己,只求英文的原文论文。因为在我们学校的外文数据库,但很不理想。GOOGLE上搜了很长时间,但内容都比较杂,也不理想。急谢谢。这是我的邮箱:hy19841984163@163.com07.6.3…

查看全部问答>

IC设计?

面向客户的IC设计,已经和将来都会成为IC行业的主角。 对于半导体专业的小生,在IC设计中如何才能分得一杯羹? 请教IC资深人士…

查看全部问答>

收集的分立器件知识材料

本人收集的各种分立器件的基础知识,供大家参考!!…

查看全部问答>

6.2--DIY进展汇报--PCB画好了

两天时间,PCB就把线给布好了,而且很不错,感谢网友DS,现在就是认真核对电路,防止出错! 请大家帮忙仔细检查该板子的原理图,昨天我就检查出来两个很明显的错误。 学习的朋友也加油弄懂电路的原理,有问题大家多多讨论。 原理图链接:https://bbs. ...…

查看全部问答>

PCI32 IP CORE调试

在Xilinx PCI IPcore生成的user design里会在translate的时候出错, 错误内容:ucf中找不到相关的IP核的实例。 修改:synthesis-Properties-advanced-keep hierarchy-soft/yes 即可通过Implement。…

查看全部问答>

WinCE打开工程失败

{FB373486-0E6E-4BB6-8BF2-1F92EACA1468}…

查看全部问答>

【求助】ARM控制SED1330LCD320*240出现这种现象是什么原因?

正常现象应该是:■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■填满一行 实际的现象是:  ■  ■■■■■■■■■    ■■■■■■■■■■■■■■  ■■■■随机的消失几个出现到 ...…

查看全部问答>

大家谁对现在(凯思昊鹏)比较熟悉

大家帮帮忙顶顶哈,明天去那里面试。…

查看全部问答>

请大家给点建议

我之前一直从事window上应用程序的开发,现在打算往底层发展一点,学习一下driver的开发,因为现在一直在做windows的东西,所以想从windows的driver开始学起,请问大家 1 学习windows的驱动开发前景(钱途^^)如何? 2 我想开始先看Programming t ...…

查看全部问答>