You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Simulink的To Instrument模块传递变量值控制RIGOL DP832

解决Simulink控制RIGOL DP832可编程电源的问题

一、排查To Instrument模块的配置问题

  • 确认资源名称匹配:Simulink模块的「Resource Name」必须和MATLAB中visadevlist()返回的设备名称完全一致(比如USB0::0x1AB1::0x0E11::DP8Bxxxxxx::INSTR)
  • 启用参数化命令:将模块的「Command」设置为带格式符的SCPI指令,比如设置电压用:VOLT %f,电流用:CURR %f,通道选择用:INST CH%d。输入端口的信号要对应格式符的类型(%f对应双精度浮点数,%d对应整数)
  • 初始化VISA连接:在模型的Model Properties > Callbacks > InitFcn中添加代码,提前创建并打开VISA对象,避免模块重复连接:
    global vi_PSU;
    if isempty(vi_PSU)
        PSU = visadevlist();
        vi_PSU = visa('agilent', PSU{1,1});
        fopen(vi_PSU);
    end
    
    然后在模块的「Object Name」中填写vi_PSU,使用全局对象连接

二、替代方案:MATLAB Function模块(更灵活可靠)

直接复用MATLAB中验证过的VISA控制逻辑,支持任意参数化输入,步骤如下:

  1. 拖入MATLAB Function模块,添加3个输入端口(命名为voltage、current、channel)
  2. 编写模块内部代码,使用persistent关键字保持VISA对象的持久化,避免重复创建:
    function set_PSU(voltage, current, channel)
    persistent vi;
    % 初始化VISA连接(仅第一次调用时执行)
    if isempty(vi)
        PSU = visadevlist();
        vi = visa('agilent', PSU{1,1});
        fopen(vi);
    end
    % 发送SCPI命令设置通道、电压、电流
    fprintf(vi, sprintf(':INST CH%d', channel));
    fprintf(vi, sprintf(':VOLT %.3f', voltage));
    fprintf(vi, sprintf(':CURR %.3f', current));
    end
    
  3. 添加模型停止回调,关闭VISA连接:在Model Properties > Callbacks > StopFcn中添加:
    persistent vi;
    if exist('vi', 'var') && isvalid(vi)
        fclose(vi);
        delete(vi);
        clear vi;
    end
    
  4. 参数化输入:可以通过Constant模块、Workspace模块(关联MATLAB工作区变量)或Slider Gain模块等,将动态参数传递到MATLAB Function模块的输入端口

关键注意事项

  • 确保Keysight IO Libraries始终处于运行状态,设备已被正确识别
  • 避免频繁创建/关闭VISA对象,否则可能导致通信异常
  • SCPI指令需严格匹配RIGOL DP832的手册格式,比如通道选择指令:INST CHx、电压设置:VOLT <value>都是正确的

内容的提问来源于stack exchange,提问作者Angel del Pino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:42:29