labview实现自动测试

基于VISA+SCPI结构搭建自动测试平台,labview作为最常用且成熟的VISA(Virtual Instrument Software Architecture),NI公司提供了大多数仪器的常用example,需要练习着读仪器的操作手册了!!

1. labview编程环境

1.1 VI文件的组成

  • 前面板

    image-20210528093141105

  • 程序框图

    image-20210528093252932

  • 图标和连线板

    image-20210528093432321

1.2 菜单栏和工具栏

1.如何运行?2.循环体如何创建?3.如何给循环体设置终止条件?4.终止条件的返回值为true终止循环?5.端口描述为黑体就必须给以连接?6.等待时间模块的左端口就是黑体描述,必须给一个常量?7.灯泡表示测试功能,点击后输入和输出会缓慢变化

image-20210528095946258

以上按钮分别为各个组件的分布,组件的大小,以及最后一个(组合、移动和锁定)

1.3 3个选板

每个选板的下拉菜单可以勾选相应模块到常用选拔

  • 前面板的控件选板
  • 后面板的函数选板
  • 工具选板(断点和检验点的设置是非常重要的工具)

1.4 数据流编程

image-20210528101341310

image-20210528101352314

1.5 控件与常量

2. 基本数据类型

2.1 数值

image-20210609104039728

2.2 布尔型

image-20210610135731748

image-20210610141040692

2.3 字符串类型

image-20210610143325962

2.4* 下拉列表和枚举

2.4.1 概念

image-20210617104745160

3. 数组和簇

3.1 数组

  • 定义:

    image-20210611102422411

    image-20210611102521366

  • 创建

    image-20210611102606292

  • 运算

    image-20210611104013068

    实例:image-20210611104332932相同维度直接加,不同长度的,把多出来的长度省略

    image-20210611104520650

    3.2 数组函数

    最关键的,数组索引位置!!!!

    image-20210611104604279

    image-20210611104706543

    image-20210611104953348

    image-20210611105053794

    插入:一个索引(int),一个输入(int or array)

    image-20210611105400505

    删除: 两个控制位,长度和索引位置

    image-20210611105852028

    image-20210611105912287

    image-20210611110050795

    image-20210611110106964

    image-20210611110137776

    image-20210611110259435

    image-20210611110322750

3.2 簇

3.2.1 概念和创建

  • 概念

    image-20210612211433494

  • 创建

image-20210612214323328

3.2.2 簇的样式

  • 大小

image-20210612214833569

  • 顺序

    image-20210612215606159

3.2.3 簇的函数

  • 解除捆绑

image-20210612220516341

  • 捆绑

    image-20210613105759544

  • 按名称捆绑/解除捆绑

  • image-20210613105952330

    image-20210613105859852

  • 数组与簇转化

    image-20210613110106978

4. 图形显示器

4.1 波形图表

image-20210610143752505

  • 刷新模式:

image-20210610145147091

1.

带状图表Strip Chart Mode:类似于纸带表记录器。
2.
示波器图表Scope Chart Mode: 类似于示波器。
3.
扫描图Sweep Chart Mode:类似于心电图仪。

  • 可接收的数据类型

image-20210610145257247

  • 多曲线显示

image-20210610145534114

image-20210610145548699

image-20210610145554596

4.2 波形图

4.2.1 波形图的概念和组成

image-20210610150019558

  • 波形图的组成

image-20210610150342413

  • 波形图的可接收类型

image-20210610150523825

image-20210610150530530

4.2.2 波形图的特殊用法

4.2.3 显示多条曲线

  • 一维数组拼成二维数组,每一行是不同曲线(可以转置)
  • 可以先将两个一维数组转为簇,然后再转为二维数组(和上面相比,允许两条曲线可以有不同的点数)

image-20210613112256878

  • 注意点:

    image-20210613113424756

  • 多个标尺的设定

    image-20210613132040854

5. 图标和连线板设计(子VI)

5.1 子VI

  • VI在内存中的结构

    image-20210613132350951

  • 子VI的概念

    image-20210613132602143

5.2 编辑图标

  • 先创建图标的样式

    在VI文件的前面板或后面板的右上角点击一个图标就可以弹出下面的绘图框

    image-20210613164616799

  • 通过连线板对接口位置进行排布(让调用者更好理解)

    image-20210613164449671

5.3 创建子VI

image-20210614094911382

对于选取代码做子VI时:

image-20210614095007278

5.4 多态VI

设计的目的:

image-20210614111743906

创建步骤:
image-20210614111939234

  • 例子:

    一个二输入的加法器和一个二输入的与运算器,可以添加到一个多态VI中,此时这个多态VI就可以在给不同类型的输入时执行不同的功能!!!

  • 注意:

    • 多态VI中的所有VI有相同的接线板模式

    image-20210614112321525

5.4.1 如何允许多态VI自动匹配输入数据类型

5.5 可重入子VI

  • 默认不可重入(即程序加锁,任意时刻只有一个线程可以调用)!!!

    image-20210614112652049

6. 结构

6.1 条件结构

6.1.1 条件结构输入

  • 布尔类型(默认)

  • 错误簇(条件划分为有错和无错)(可以直接新建模板中选择带错误处理的子VI)

  • 数值型输入

    image-20210617104116156

  • 枚举型输入

  • 下拉列表输入(==字符串输入)

  • 字符串输入

6.1.2 条件结构输出

image-20210617104544477

6.2 循环结构

6.2.1 wihle

6.2.2 for

6.3 顺序结构

image-20210621102014718

6.3.1 两种顺序结构

labview中,程序的执行顺序不同于代码程序的顺序执行,由数据流推动,两个无关的程序框图是多线程并行执行的

平铺式顺序结构和层叠式顺序结构可以将无关的程序框图以顺序方式执行,并且可以设置定时

区别在于:

  • 顺序式更直观,层叠式占面积更小

6.3.2 顺序结构中,帧间的数据传递

问题:测试一段代码的运行时间

image-20210621101152061计算执行时间需要第三步获取到第一步的时间!即帧间数据传递

  • 平铺顺序式结构:

    image-20210621101509660直接使用(ans=b-time())

  • 层叠式:

    image-20210621101600320创建局部变量(int a=time();ans=b-a;)

6.3.3 顺序结构的优化

核心:尽量减少顺序结构的使用或,使用范围

实例:image-20210621102816344

优化1:image-20210621102858686仅通过控制数据流控制执行顺序

优化2:image-20210621103016109image-20210621103043890

引入延时子VI,在无错时进入延时,有错时直接输出

总结:

image-20210621103359759

7. 变量

7.1 局部变量

image-20210621104313137

理解:

  • 字符串控件:如获取字符串长度,new String(”abc“).length()
  • 局部变量:String a = new String(“abc”);a.length();

2. 网口连接labview实例

2.1 入门范例(GPIB和VISA函数)

image-20210616102400700

  • VISA打开:打开仪器资源的VISA会话句柄(即让仪器接收传入的控制指令!)

    我的理解:句柄就是程序INSTR的VISA指令开始地址

image-20210615093409823

打开超时 VISA打开超时指定“VISA打开”在返回错误前等待的最大超时值,以毫秒为单位。它不设置I/O超时。 VISA设置超时指定VISA会话句柄之后的操作超时值。
资源名称 VISA资源名称指定要打开的资源。VISA资源名称控件也可指定会话句柄和类。
会话句柄副本 会话句柄副本的值为TRUE,且当前存在对资源开放的会话句柄,可为资源打开另一个会话句柄。如会话句柄副本设置为FALSE,且存在对资源开放的会话句柄,可使用打开的会话句柄。 VISA会话句柄是VISA使用的唯一逻辑标识符,用于与资源通信。VISA会话句柄由VISA资源名称控件保持,用户不能看见该控件。
访问模式 访问模式指定如何访问设备。 该输入支持下列值。
  • 属性节点(property node)

    通过右键连线可以常见instr类的属性节点,这里设置的是超时节点

    image-20210616100703910

    • 属性节点的核心思想:

      对VI类的属性进行修改,如设置一个数值控件的visible属性节点,此时数值控件就是引用,可连可不连,可以将visible属性改为可以,此时就可以通过写入布尔型数据控制控件是否显示。

  • 格式化写入字符串

    image-20210616102634746image-20210616102715874

    | 输入1 | 输入2 | 格式字符串 | 返回字符串 | 说明 |
    | ——- | ——— | ———————— | ————————- | —————————————————————————————— |
    | first | second | %s %s | first second | 格式字符串使用$标识符,函数按顺序将输入值写入格式字符串。 |
    | first | second | %2\$s %1\$s | second first | 格式字符串使用$标识符按非默认顺序将输入写入格式字符串。 |
    | first | second | %1\$s %1\$s %1$s | first first first | 格式字符串使用标识符$多次使用第一个输入,而忽略第二个输入 |

    注意:这里的%意味着格式字符的开始,$符号是其中一种格式方式,别的还有很多!!!

  • VISA写入

    • 这里就涉及到了所谓的VISA+SCPI

    image-20210616103329485

    • VISA写入详细信息

      依据不同的平台,数据传输可为同步或异步。右键单击节点,在快捷菜单中选择同步I/O模式»同步,可同步写入数据。

      硬件设备同步传输数据时,调用线程在数据传输期间处于锁定状态。依据传输的速度,该操作可阻止其他需要调用线程的进程。但是,如应用程序需尽可能快地传输数据,同步执行操作可独占调用线程。

    | 注: 在大多数应用程序中,与不多于4台仪器进行通行时使用同步调用可以获取更快的速度。与不少于5台仪器进行通信时,异步操作可使应用程序的速度显著提高。LabVIEW默认为异步I/O。 |
    | —————————————————————————————— |

    ​ 可以看到不同的字符串指令不能通过格式化字符串同时传入,待证明!!!

  • VISA读取(和VISA写入同时使用)

    image-20210616104042614

    读取缓冲区为字符串输出!!!

<<<<<<< HEAD

2.2 3352X Series

2.2.1 生成频率扫描

image-20210615092806818

2.2.2仪器通用控件:初始化连接控件

image-20210615092943320

  • 第一步还是VISA打开,设置默认打开模式为0!!

  • 第二步进行设备缓冲区清零!!

  • 第三步同样是设置超时!!!这里设置10秒

  • 条件选择器:通过外加的布尔开关进行控制,是否

  • *IDN? 指令:识别大多数仪器的查询指令。仪器会回应一个用于描述仪器的识别字符串。如果仪器不接受该指令,请在仪器手册中查询仪器能识别的指令列表。

  • 匹配正则表达式

    image-20210616112519683

  • 匹配字符串

    image-20210616115530406

    | 字符串 | 字符串是要匹配字符串数组前缀的字符串。默认值为空字符串。 |
    | ————— | —————————————————————————————— |
    | 字符串数组 | 字符串数组指定要与字符串匹配的字符串数组。 如函数在字符串数组中发现空字符串,函数将字符串视为匹配。 |
    | 输出字符串 | 输出字符串返回删除匹配前缀后的原有字符串。 如字符串的起始部分不匹配字符串数组中的任何字符串,输出字符串返回原有字符串。 |
    | 索引 | 索引返回匹配前缀在字符串数组中的索引。 如字符串的起始部分不匹配字符串数组中的任何字符串,索引为-1 |

总结: 可以看出,初始化连接空间的本质就是判断仪表是否是安捷伦/是德的(3352X)系列仪表!!

2.2.3 配置标准波形

image-20210616120120544

2.2.4 测试中使用的不带频扫的标准波控件

image-20210618151547796

个人思考的循环输入电压的方法:

image-20210618183538404

可以通过面板控制是否输出和采用手动还是自动模式

3. 网口控制的步骤

3.1 33500B Series(仪表型号:33522B/仪表驱动:3352X series)

  • 安装系列软件:labview(NI-Max)+驱动(VISA+488.2)

  • 配置IP地址:System/local,I/O config,LAN Settings,Modify Setting将DHCP自动分配切换到手动分配

  • 本机IP地址不知道为啥好像不能修改(????),只能修改电脑IP和子网掩码

  • 两端ping通后就可以在NI-Max中查看VISA资源了!!

  • 需要注意一点:

    image-20210618094525116

    原来担心找不到地址,现在一下出来俩,这里就要选第一个!!!,第二个会一直报VISA读错误!!

3. 串口连接labview实例

image-20210601103909494

以上控件从instrument IO的串口空间中获取,通过输入A1指令控制继电器工作使灯打开

  • 这里的visa配置模块的两个输入分别是设备(源)名称,串口的话就是COM-。另一个就是波特率,由设备决定!