利用Python语言实现实验室自动化

身为一名系统和应用工程师, 因自动化仪器与软件之故, 我节省了数不清的日日夜夜;比如说, 有一款系统设计平台及开发环境, 它支持可视化编程语言, 还支持用户借助友好的图形用户界面构建应用程序, 此平台带有多个库与模块, 能使其与仪器通信, 故而可用于实验室自动化, 作为用户, 我用该工具构建了许多多款应用程序, 然而过往数年, 我已然开始逐渐将其淘汰, 用语言(见侧栏: "是什么以及如何使用?")取而代之。

为了明白其中的缘故, 我们先去知晓一下相较于现有的替代语言的主要优势, 并且探讨应用程序的干活例子。彰显方便以及强大的拿手办法是以介绍一个完备、能运作的自动化脚本, 就像我用来达成稳压器(VR)负载调节曲线(负载调节说的是输出电压跟着输出电流(负载)增大而产生的变动)自动测量的脚本。

这些稳压器被划分成两类, 其中零下垂稳压器所设计出的输出电阻是零, 所以, 输出电压设置点不会依据输出电流增大而产生变化。相对来说, 下垂稳压器具备"载重线", 这意味着其被设计为拥有特定的等效输出电阻。在本例里所使用的稳压器, 其零电流输出电压是1 V, 设定的载重线是2.5 mΩ。

图1. 测量配置

在图1所展示的试验配置里头, 运用63201电子负载去施加负载电流, 也就是VR输出电流。借助采集经过校准的4mΩ短路器上的电压, 以此测得输出电流。使用数字采集器, 简称DAQ, 但叫它数字采集器也行, 来采集电压以及电流的数据, DAQ和电子负载都是通过GPIB连接到计算机的。我们进行测量的目标是要证实, 在一定的输出电流范围当中, 输出电压处于技术指标所规定的范围之内;图2所呈现的是应用程序的流程图表点。

图2. 应用程序流程图

从基本代码结构开始

以下是自动化脚本代码的第一部分。语言中,注释用#表示:

第1至3行引用库,其中包含随后代码中使用的方法:

∙Numpy是被用于科学计算的封装库, 在本例里, Numpy被用于产生输出电流值的数组。

借助用于数据处理以及分析的库, 去创建一个具备强大功能的数据结构, 从而用来储存我们所得到的测量结果。

•Visa是库,用来控制我们的仪器。

•Time是一个非常方便的库,用于产生某些时间延迟。

留意, 被引用的Numpy以及库被重新命名成np和pd, 目的在于维持代码的整洁。于本文里面所提及到的全部库, 要么已然伴随安装包予以提供, 要么从在线软件库之中进行安装也是极为容易的。

第4行到第5行, 创建对象, 该对象用于我们去访问电子负载以及DAQ。这正是其发挥作用之处: 我们仅仅只需调用方法, 并且提供字符串, 此字符串能够表示通信接口, 也就是GPIB, 同时还要给出仪器在总线上所具有的地址。

在程序的第6行, 创建了一个数据框(), 其目的在于储存测量结果, 数据框属于一种二维标签数据结构, 其中各列的数据类型能够有所不同, 选用数据框而非数组, 这使得我们能够借助容易记忆的字符串而非数字去引用列, 并且能够在数据本身之间混合数字与文本。

第7行, 创建一个实数数组, 其范围是从0到20, 步长为2。这些数字所表示的, 是以安培为单位的输出电流值, 在这些电流点上进行VOUT的测量。

第8行拿来构建"for"循环, 要注意, 语法是比较容易理解的, 那就是每次执行循环之际, 去创建一个load变量, 该变量的值等同于loads数组的新元素, 当把数组的全部元素都使用了以后, 循环就结束了, 颇具意思的是, 借助缩进对代码的层次结构予以定义, 并非依赖任何类型的括号, 如此一来能够让代码保持整洁以及易读性, 这是非常有用的。

哪怕我们已然界定了主循环, 那也得告知仪器设定电流, 接着读取读数, 随后留存结果。

仪器通信及保存数据

我们接下来看看第二部分的代码:

在第9行至第10行那儿, 要去配置相应的负载电流, 接着把负载打开。仅仅只需运用读/写方法, 而且要知道仪器所接受的命令串(这个可以去查阅仪器手册), 如此一来就能够借助GPIB接口去进行通信。跟其他的编程语言相类似, %.2f是占位符, 在实际运行的阶段用变量load的值将其代替。这也意味着我们期望数据呈现为带着两位小数的实数。在第11行的时候会产生1秒延迟, 这对于保证仪器和电路能够达到稳态条件是极为有用的。

第12行, 创建一个空对象, 这个空对象在其中被叫做字典, 它用于暂存执行一次循环所产生的结果。

用来测量输出电压和电流的是第13至16行。我们想要做什么(测量直流电压, 采用自动变比)以及对应的采集通道, 第一条命令是告诉仪器这些内容的。分别在通道101采集输出电压, 在通道1或去;02采集输出电流。以字符串形式返回数据, 所以必须利用float函数将其转换为实数, 第二条命令是读取返回的结果并将其储存在temp中的。此外, 因为DAQ测量的是电压, 我们需要将读数与短路器电阻(0.004 Ω)相除, 从而得到正确的电流值。

来瞧一瞧, 使用以及有条理地去保存数据是何等简单这样的情况: temp 字典之中的字段, 并不需要提前去加以定义, 进而是利用具有含义的字符串来开展访问。并不需要去记住列号与数据相互之间的关系, 然而要是采用数组用于存储数据那种方式的话, 那就必定得这么去做。

在第十七行那里, 我们附加上字段给数据框了。要注意哦, 也并不需要开展初始化这个操作;每一次去附加一行全新的内容的时候, 就会增添新的字段到数据框当中。

可选择第18行, 然而在终端之上打印当前的电压以及电流值是极为有用的, 特别是针对长时间的测量而言, 能够当作确认应用程序依旧在运行的一种途径, 还可以用于了解执行究竟达到了何种程度。

在第十九行到第二十行的位置, 把负载关闭掉, 把数据存储到硬盘当中。针对后者而言, 每一个数据框对象通过一种内置的方法, 把数据保存至CSV文件。

相关推荐
隐擎fox1 小时前
网络传输中的 DNS 泄漏成因剖析与 Python 自动化检测排查实战
python·网络协议·自动化·dns·ip/tcp
2601_962296281 小时前
python初学者怎么选IDE
ide·python·开发环境·初学者·工具选择
青少儿编程课堂3 小时前
威佐夫博弈(双堆取子游戏)解析
c++·python·算法·bfs·信息学竞赛
hhzz3 小时前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
金融小师妹5 小时前
AI趋势识别:黄仁勋宣布“AGI时代”到来,Astra能力跃迁背后的AI安全边界
大数据·python·深度学习·重构·逻辑回归
2501_941875287 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj7 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
智塑未来10 小时前
自动化立体库工业无线通信:AGV、AMR、RGV、穿梭车、无人叉车、堆垛机全覆盖
运维·自动化
泡海椒10 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python