Engee 文档
Notebook

使用VISA接口与UNI-T UTG962E信号发生器一起工作

这个例子讨论了使用VISA规范和SCPI命令使用Utg962e信号发生器Engee的外部设备的工作。 发生器输出端口的连接设置、存储器轮询、复位和配置被执行。 给出了在Engee中使用信号发生器自动化工作的基本技术。

导言

Engee具有使用[外部硬件][1]的内置功能,包括通过VISA与计算机交互。

[1]:https://engee.com/helpcenter/stable/ru/engee-hardware/working-with-visa.html

工作准备

首先,您需要安装外部硬件支持包,并从主机程序建立连接。 详细的分步说明在[Engee文档][1]和[社区示例][2]中提供。

[1]:https://engee.com/helpcenter/stable/ru/engee-hardware/integration-with-hardware.html
[2]:https://engee.com/community/ru/catalogs/projects/vneshnee-oborudovanie-com-peredacha-signala-v-arduino

下一步是连接UT962E信号发生器并确保安装了设备驱动程序。

完成准备步骤后,我们将继续在Engee和信号发生器之间建立连接,首先连接必要的支持包模块。:

In [ ]:
using Main.EngeeDeviceManager.Devices.VISA

连接设置

创建签证对象:

In [ ]:
visa = VISA.Visa()
Out[0]:
Main.EngeeDeviceManager.Devices.VISA.Visa("Visa", UUID("d1c57053-746b-486f-a34e-87c7d20d8451"))

之后,我们将创建一个使用VISA工具的会话。:

In [ ]:
VISA.create_session(visa, "@py")

获取可用物理端口列表:

In [ ]:
ports = VISA.get_ports(visa)
Out[0]:
5-element Vector{String}:
 "ASRL27::INSTR"
 "ASRL4::INSTR"
 "ASRL3::INSTR"
 "ASRL26::INSTR"
 "USB0::26198::2100::AWG1522510085::0::INSTR"

列表中的最后一个端口对应于我们的信号发生器。 让我们单独保存它的ID。:

In [ ]:
port = last(ports)
Out[0]:
"USB0::26198::2100::AWG1522510085::0::INSTR"

让我们在指定的端口上创建一个工具的抽象,以便使用VISA:

In [ ]:
VISA.create_instrument(visa, port)

设备的连接建立,就可以直接继续工作了。

执行简单命令

专责小组 *IDN? 返回有关设备的数据:
*制造商名称,
*设备型号,
*序列号,
*固件版本。

要从设备发送命令和接收信息,请使用该功能 VISA.writeread(),其传送先前创建的VISA对象、端口标识符、SCPI命令以及从设备接收信息的等待时间。

In [ ]:
VISA.writeread(visa, port, "*IDN?", 1.2)
Out[0]:
"UNI-T Technologies,UTG900E,AWG1522510085,3.06"

使用命令将信号发生器设置重置为出厂设置 *RST 用命令锁定他的按键键盘 :SYSTEM:LOCK OFF.
您可以使用分隔符在同一时间发送这两个命令。 ; 使用命令记录功能 VISA.write().

In [ ]:
VISA.write(visa, port, "*RST;:SYSTEM:LOCK OFF");

改变生成信号的形状

我们将在设备的第一个通道上找出生成信号的当前形状。 为此,请在其中写入命令 :CHAN1:BASE:WAV?.

In [ ]:
VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2)
Out[0]:
"SINe"

请注意,此功能应仅向设备发送要求向程序员发送响应的命令。 这样的命令可以很容易地通过结束它们的问号来识别。

回答 SINe 表示电流波形为正弦曲线。 让我们将形状更改为三角形(RAMP)使用命令 :CHAN1:BASE:WAV RAMP

In [ ]:
VISA.write(visa, port, ":CHAN1:BASE:WAV RAMP");
VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2)
Out[0]:
"RAMP"

波形的另一个检查返回一条消息给我们 RAMP 这意味着波形已成功更改。 现在,我们将向发生器写入命令,以交替更改所有可用选项的波形。:

In [ ]:
FORMS = ["SIN","SQU","PULS","RAMP","ARB","NOIS","DC"];

下一个周期将允许我们切换生成信号的形状,之后设备设置将被重置。

In [ ]:
for form in FORMS
    VISA.write(visa, port, ":CHAN1:BASE:WAV $form");
    sleep(1);
end
VISA.write(visa, port, "*RST");
bandicam2025-05-2017-06-13-402-ezgif.com-optimize.gif

从记录中可以看出,发生器正确处理传输的命令,改变生成信号的形状。

Engee脚本中的图形界面

要将一组命令写入设备,以便对生成的信号进行完整配置,可以方便地将它们写入向量中 Vector{String} 并传递,例如,到下面的辅助功能:

In [ ]:
"""
Функция для записи в UTG962 SCPI команд, записанных в вектор
"""
function UTG962_write(command::Vector{String})
    for com in command
        VISA.write(visa, port, com);
        sleep(1);
    end
end;

在Engee脚本中添加[代码单元格掩码][1]的功能允许您为生成器实现一个简单的图形界面:

[1]:https://engee.com/helpcenter/stable/ru/interactive-scripts/language_basics/code_cell_masks.html

In [ ]:
Канал = "1" # @param ["1","2"]
Форма = "RAMP" # @param ["SIN","SQU","PULS","RAMP","ARB","NOIS","DC"]
Частота_Гц = 271423 # @param {type:"slider",min:1,max:1000000,step:1}
Фаза_град = 0 # @param {type:"slider",min:-360,max:360,step:1}
Амплитуда = 3.587 # @param {type:"slider",min:0.002,max:20,step:0.001}

message = [
    ":CHANnel$Канал:MODe CONTinue",
    ":CHANnel$Канал:BASE:WAVe $Форма",
    ":CHANnel$Канал:BASE:FREQuency $Частота_Гц",
    ":CHANnel$Канал:BASE:HIGH $Амплитуда",
    ":CHANnel$Канал:BASE:LOW 0",
    ":CHANnel$Канал:BASE:PHAse $Фаза_град",
    ":CHANnel$Канал:OUTPut ON"
]

UTG962_write(message)


# VISA.write(visa, port, message);
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:BASE:FREQ $Частота_Гц");
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:BASE:PHAS $Фаза_град");
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:BASE:AMPL $Амплитуда");
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:OUTP ON");
bandicam2025-05-2017-11-27-953-ezgif.com-optimize.gif

从录音中,您可以看到如何使用代码单元掩码和Engee脚本,您可以实现对信号发生器的全面控制。

制造商的一个例子

制造商的文档提供了使用SCPI命令编程锯齿信号的示例。 它也可以在Engee中复制。:

In [ ]:
Sawtooth = [
    ":CHANnel1:MODe CONTinue",
    ":CHANnel1:BASE:WAVe RAMP",
    ":CHANnel1:BASE:FREQuency 30000",
    ":CHANnel1:BASE:HIGH 2",
    ":CHANnel1:BASE:LOW 0",
    ":CHANnel1:BASE:PHAse 90",
    ":CHANnel1:RAMP:SYMMetry 20",
    ":CHANnel1:OUTPut ON"
]

UTG962_write(Sawtooth)

执行这些命令后,生成器将设置以下预期信号设置:

image_2.png

完成工作

要正确完成操作,有必要为工具释放轮胎。:

In [ ]:
VISA.close_instrument(visa, port)

并使用该工具关闭会话:

In [ ]:
VISA.close_session(visa)

结论

在这个例子中,我们根据VISA规范检查了Engee与外部设备-UTG962信号发生器一起工作的能力。 使用SCPI命令,您可以对设备进行编程并获取当前参数值。 Engee不仅允许您自动化使用设备的工作,还可以实现用户友好且简单的图形界面,无需额外的工具。