使用VISA接口与UNI-T UTG962E信号发生器一起工作
这个例子讨论了使用VISA规范和SCPI命令使用Utg962e信号发生器Engee的外部设备的工作。 发生器输出端口的连接设置、存储器轮询、复位和配置被执行。 给出了在Engee中使用信号发生器自动化工作的基本技术。
导言
[UTG962E][1]是来自Uni Trend(UNI-T)的双通道信号发生器。 它的配置有两种模式:手动和通过[VISA][3]规范通过[SCPI][2]命令。
[1]:https://gduts.sharepoint.com/sites/Instrument/Shared Documents/Forms/AllItems.aspx?id=%2Fsites%2FInstrument%2FShared Documents%2FProducts%2F05 Documents 文档%2F01 Data Sheets 数据手册%2F02 Generators 发生器%2FUTG900E Series Waveform Generators - Data Sheet.pdf&parent;=%2Fsites%2FInstrument%2FShared Documents%2FProducts%2F05 Documents 文档%2F01 Data Sheets 数据手册%2F02 Generators 发生器&p;=true&ga;=1
[2]:https://en.wikipedia.org/wiki/Standard_Commands_for_Programmable_Instruments
[3]:https://ru.wikipedia.org/wiki/VISA_ (programme_architecture)
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和信号发生器之间建立连接,首先连接必要的支持包模块。:
using Main.EngeeDeviceManager.Devices.VISA
连接设置
创建签证对象:
visa = VISA.Visa()
之后,我们将创建一个使用VISA工具的会话。:
VISA.create_session(visa, "@py")
获取可用物理端口列表:
ports = VISA.get_ports(visa)
列表中的最后一个端口对应于我们的信号发生器。 让我们单独保存它的ID。:
port = last(ports)
让我们在指定的端口上创建一个工具的抽象,以便使用VISA:
VISA.create_instrument(visa, port)
设备的连接建立,就可以直接继续工作了。
执行简单命令
专责小组 *IDN? 返回有关设备的数据:
*制造商名称,
*设备型号,
*序列号,
*固件版本。
要从设备发送命令和接收信息,请使用该功能 VISA.writeread(),其传送先前创建的VISA对象、端口标识符、SCPI命令以及从设备接收信息的等待时间。
VISA.writeread(visa, port, "*IDN?", 1.2)
使用命令将信号发生器设置重置为出厂设置 *RST 用命令锁定他的按键键盘 :SYSTEM:LOCK OFF.
您可以使用分隔符在同一时间发送这两个命令。 ; 使用命令记录功能  VISA.write().
VISA.write(visa, port, "*RST;:SYSTEM:LOCK OFF");
改变生成信号的形状
我们将在设备的第一个通道上找出生成信号的当前形状。 为此,请在其中写入命令 :CHAN1:BASE:WAV?.
VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2)
请注意,此功能应仅向设备发送要求向程序员发送响应的命令。 这样的命令可以很容易地通过结束它们的问号来识别。
回答 SINe 表示电流波形为正弦曲线。 让我们将形状更改为三角形(RAMP)使用命令 :CHAN1:BASE:WAV RAMP
VISA.write(visa, port, ":CHAN1:BASE:WAV RAMP");
VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2)
波形的另一个检查返回一条消息给我们 RAMP 这意味着波形已成功更改。 现在,我们将向发生器写入命令,以交替更改所有可用选项的波形。:
FORMS = ["SIN","SQU","PULS","RAMP","ARB","NOIS","DC"];
下一个周期将允许我们切换生成信号的形状,之后设备设置将被重置。
for form in FORMS
    VISA.write(visa, port, ":CHAN1:BASE:WAV $form");
    sleep(1);
end
VISA.write(visa, port, "*RST");
 
从记录中可以看出,发生器正确处理传输的命令,改变生成信号的形状。
Engee脚本中的图形界面
要将一组命令写入设备,以便对生成的信号进行完整配置,可以方便地将它们写入向量中 Vector{String} 并传递,例如,到下面的辅助功能:
"""
Функция для записи в 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
Канал = "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");
 
从录音中,您可以看到如何使用代码单元掩码和Engee脚本,您可以实现对信号发生器的全面控制。
制造商的一个例子
制造商的文档提供了使用SCPI命令编程锯齿信号的示例。 它也可以在Engee中复制。:
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)
执行这些命令后,生成器将设置以下预期信号设置:
 
完成工作
要正确完成操作,有必要为工具释放轮胎。:
VISA.close_instrument(visa, port)
并使用该工具关闭会话:
VISA.close_session(visa)
结论
在这个例子中,我们根据VISA规范检查了Engee与外部设备-UTG962信号发生器一起工作的能力。 使用SCPI命令,您可以对设备进行编程并获取当前参数值。 Engee不仅允许您自动化使用设备的工作,还可以实现用户友好且简单的图形界面,无需额外的工具。