当前位置:首页>python>ICCAP中使用Python脚本(九)

ICCAP中使用Python脚本(九)

  • 2026-09-08 15:44:58
ICCAP中使用Python脚本(九)
前言:
之前已经介绍过ICCAP使用Python脚本系列,一共介绍了八篇,链接我会放在文末,方便大家系统了解。当然在往期中也陆陆续续介绍过一些具体实用的例子,这里就不再多说,感兴趣的朋友可以浏览往期文章。最近在研究ICCAP是否可以借助Pyvisa来扩展未支持的仪表驱动。今天就和大家讨论一下ICCAP如何简单编写驱动实现自动化测量。
01

了解什么是PyVISA

PyVISA 是一个用 Python 编写的开源库,它的核心作用是让你的 Python 程序能够与几乎所有的测量仪器(测试设备)进行通信,而不管其接口类型是什么。

简单来说:PyVISA 让你可以用 Python 代码控制万用表、电源、示波器、频谱仪、信号发生器等硬件设备。

理解 PyVISA 的关键在于区分 PyVISA 和 VISA

  1. VISA

    • VISA 是一个标准,全称是 Virtual Instrument Software Architecture

    • 它由 IVI 基金会制定,定义了一套用于配置、编程和调试仪器系统的通用 API。

    • 它本身不是软件,而是一个规范。仪器制造商(如 Keysight, Tektronix, NI)根据这个规范实现各自的 VISA 库

  2. PyVISA

    • 是 VISA 标准的一个 Python 封装

    • 它自身不直接与硬件通信。当你使用 PyVISA 的 write()或 query()函数时,PyVISA 会在后台调用你系统上安装的 VISA 库(例如 NI-VISA 或 Keysight IO Libraries Suite)来完成实际的通信。

    • 它为不同的 VISA 后端提供了一个统一的、Pythonic 的接口。

PyVISA 的主要特点和优势

  1. 接口无关性:无论是 GPIB、USB、LAN (TCP/IP)、RS-232 还是 PXI 接口的设备,PyVISA 都使用同一套语法(writereadquery)进行控制。你不需要为每种接口学习不同的编程方法。

  2. 厂商后端兼容:支持多种 VISA 实现作为后端,如 NI-VISA、Keysight VISA、Rohde & Schwarz VISA 等。

  3. 纯 Python:易于安装(pip install pyvisa),跨平台(Windows, Linux, macOS)。

  4. 语法简洁直观:符合 Python 的易读风格。

典型的 PyVISA 编程流程如下:

import pyvisa# 1. 创建资源管理器rm = pyvisa.ResourceManager()# 2. 列出所有连接的设备resources = rm.list_resources()print(f"找到的设备: {resources}")# 3. 通过资源地址打开特定设备# 地址格式示例:'GPIB0::15::INSTR'my_device = rm.open_resource('GPIB0::15::INSTR')# 4. (可选)设置通信参数,如超时、终止符my_device.timeout = 5000 # 毫秒my_device.read_termination = '\n' # 设置读取终止符# 5. 与设备通信 (需要了解仪表的SCPI命令)# 写入命令my_device.write("*IDN?"# 发送查询标识符的命令# 或使用 query 同时写入和读取idn_string = my_device.query("*IDN?")print(f"设备标识: {idn_string}")# 6. 关闭连接my_device.close()

核心组件

  • ResourceManager: 入口点,用于发现和管理资源。

  • Resource: 代表一个具体的仪器连接。主要对象,拥有核心方法:

    • .write(command): 向设备发送命令(不期待回复)。

    • .read(): 从设备读取数据。

    • .query(command):先 .write(command),然后立即 .read()。最常用的方法。

    • .read_raw(): 读取原始字节数据(用于非文本数据,如图像、波形)。

  • list_resources(): 列出所有可用设备的资源地址字符串。

安装与设置

1. 安装 PyVISA

pip install pyvisa

2. 安装一个 VISA 后端(必须):

  • 从 National Instruments 官网下载并安装 NI-VISA 运行时库。

  • 或者,如果你只有是德科技的设备,可以从Keysight官网下载安装 Keysight IO Libraries Suite。

02

了解什么是SCPI

SCPI(Standard Commands for Programmable Instruments,可编程仪器标准命令)是一种基于文本的仪器控制语言标准,旨在为可编程测试和测量仪器提供一致的编程接口。

核心特点

  1. 标准化

    • IVI基金会(Interchangeable Virtual Instruments)维护,旨在实现不同制造商仪器之间的命令兼容性。

    • 使用统一的命令结构和语法,例如 *IDN?命令几乎在所有支持SCPI的仪器上都能用于查询制造商和型号信息。

  2. 分层树状结构

    • MEASure:VOLTage:DC? 表示“测量直流电压”。

    • 命令像文件系统的路径一样组织。例如:

    • 使用冒号(:)分隔命令层级,使命令具有高度的可读性和逻辑性。

  3. 基于ASCII文本

    • 命令是人类可读的字符串,通常通过GPIB、USB、以太网(如VXI-11或Telnet)、串口(RS-232) 等接口发送。

    • 仪器返回的查询结果通常也是文本格式(数字或字符串),易于解析。

  4. 可查询性

    • 大多数设置命令都有一个对应的查询形式(通常在命令后加问号?)。

    • 例如,SOURce:VOLTage:LEVel?用于查询当前设置的电压,而SOURce:VOLTage:LEVel 10用于设置电压。

每个可远程控制的仪器都有一组记录的 SCPI 命令,允许用户使用编程接口而不是使用前面板控件或图形用户界面来控制仪器。在某些情况下,仪器的 SCPI 命令集包含在其用户手册中,但制造商通常会提供独立的程序员手册,其中记录了所有可用的命令。每个支持 SCPI 的仪器都提供一些标准命令,包括 *RST(重置/默认设置)、*ESR? (检查错误状态寄存器),*OPC? (操作完成查询)、*CLS(清除状态寄存器)和*IDN? (身份查询),但大多数命令是仪器特定的,我们也可以称之为FLEX Command

FLEX Command 与 SCPI 命令的核心区别

对比维度
FLEX CommandSCPI Command
标准性质
专有命令集
行业标准(IEEE-488.2)
设计目标极致速度
和效率
通用性
和标准化
控制层级
底层硬件直接控制
高层抽象接口
性能表现
更快
相对较慢
命令复杂度
简洁、底层、更复杂
规范、易读、易用
兼容性
仅限特定机型(如B1500A)
跨品牌、跨仪器通用
典型应用
量产高速测试
研发、多仪器协同

03

ICCAP中如何编写仪表驱动

虽然IC-CAP支持主要的HP或Keysight仪器,但HP或Keysight或其他供应商制造的其他仪器可用于Device Modeling IC-CAP中的表征工作。开放测量接口(OMI)是器件建模IC-CAP开放系统理念的一部分,允许添加新的仪器驱动器。但这种OMI的方式添加需要复杂的配置和C++开发驱动的功底,如果我们不是完整的开发驱动,而是只是开发几个常用的测试功能,这种方式将显得繁琐。好在IC-CAP自带的Packages已经将PyVISA添加的默认库中了,我们安装好IC-CAP就可以方便的使用PyVISA了。结合之前创建GUI的文章ICCAP使用Python脚本(六),我们很快就可以开发一个自动化测试程序。
第一步:我们首先创建一个Dut,命名为Drivers。然后创建不同的Setups,这里创建B1500A, SG, PSA, Velox,用来编写不同仪表的Driver。这里我在IC-CAP的Extract/Optimizer下面创建新的Transform,命名为B1500A,来编写Driver。注意Function中要键入PythonGlobal才能使用Python脚本来开发Driver。
因为SCPI或者仪表特有的FLEX命令,都是一些简短的ASCII文字,所以我们把B1500A的驱动代码封装在一个Class里面,然后按照功能,我们再把SCPI或FLEX命令封装为功能函数。
比如这里的check_error()函数,用到的命令是“ERRX? 0”,是从B1500A仪表抓取错误信息。现在,将它封装在check_error()函数里,我们想要打印error信息时,直接调用此函数就可看到error信息。极大的简化了更复杂功能的开发,提高了代码的复用。
第二步:开发Routine。当我们开发了底层的Driver后,我们需要开发更高一级的Routine,它相当于一个测试模板,我们要实现什么具体的测试功能在这里实现。例如,这里我实现一个sampling_test功能。我需要给仪表提供GPIB地址,Sampling 采样间隔,采样点数,每个通道的采样电压,最后返回采样电流数据。
第三步:开发TestPlan。当我们有了Routine之后,我们就可以开发TestPlan了。TestPlan意味这,我每个器件在Wafer的哪个Die,每个器件所施加的测试电压是多少。程序需要打开测试文件,读取TesPlan,并自动做成相应动作。例如,移动Probe到对应的Die,扎针,然后测试,保存数据到对应文件夹。比如,这里将传递实际的GPIB地址, 采样间隔,采样点数,每个通道的采样电压。
第四步:当功能开发相对比较完善,我们需要开发一个简单的GUI界面,以方便分享给他人使用时,可以非常方便的运行,而不用深入到代码内部。如下图所示,通过简单的配置GPIB地址,B1500A 通道。切换到TestPlan标签,设置好TestPlan,然后切换到Measure标签,执行测试,即可得到结果。

04

总结

“IC-CAP + PyVISA + SCPI (&FLEX)” 组合,构建了一个集标准化、灵活性、专业性与强大扩展性于一体的现代半导体测试解决方案。IC-CAP本身就具备测试能力,默认就已经支持很多仪表驱动,能做到自动化的能力。再加上PyVISA和SCPI(&FLEX)组合,能够扩展未支持的仪表驱动,比如国产半导体参数分析仪,国产探针台等,可实现最小开发代价实现自动化测量。

参考资料:

[1] IC-CAP Manual.

[2]《PyVISA Documentation》. 

[3] scpi-99. 见于: 2025年12月29日. [在线]. 载于: https://www.ivifoundation.org/downloads/SCPI/scpi-99.pdf

往期回顾
  1. ICCAP中使用Python脚本(一)
  2. ICCAP中使用Python脚本(二)
  3. ICCAP使用Python脚本(三)
  4. ICCAP使用Python脚本(四)
  5. ICCAP使用Python脚本(五)
  6. ICCAP使用Python脚本(六)
  7. ICCAP使用Python脚本(七)——与ChatGPT, DeepSeek, Kimi, Doubao等结合提高编程效率
  8. ICCAP中使用Python Script一键导出并保存DUT下的参数到*.csv文件中
  9. 47. python 基础(三万字长文)
  10. 48. python numpy(万字长文)
  11. 49. python pandas (万字长文【上】)
  12. 50. python pandas (万字长文【下】)
  13. ICCAP中使用Python脚本(八)

最新文章

随机文章