问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用UltraSigma和MATLAB远程监控普源DP932U直流电源

创作时间:
作者:
@小白创作中心

使用UltraSigma和MATLAB远程监控普源DP932U直流电源

引用
CSDN
1.
https://blog.csdn.net/w111222333123/article/details/143888827

本文将介绍如何使用UltraSigma软件和MATLAB实现对普源DP932U直流电源的远程监控。主要内容包括UltraSigma软件的安装和使用、SCPI命令控制以及MATLAB程序实现远程监控和上下电控制。

UltraSigma软件使用

  1. 软件安装注意事项
  • 安装UltraSigma远程软件时,要注意该软件不支持win11系统。
  1. 设备信息获取
  • 右键点击设备,选择"SCPI Panel Control",可打开SCPI命令控制页面。
  1. SCPI命令控制
  • 输入SCPI命令控制直流电源,单行输入。具体命令可以参考编程手册。
  • 例如,设置通道电压和电流::APPLy CH1,24,2(设置通道1电压为24V,电流为2A)
  • 控制输出状态::OUTPut:STATe CH1,ON(打开通道1输出),:OUTPut:STATe CH1,OFF(关闭通道1输出)
  • 查询输出状态::OUTPut:STATe? CH1
  • 监控电流::MEAS:CURR? CH1

使用MATLAB远程监控

程序初始化

  1. 设备信息设置
  • InitialtionEquip函数中设置当前所连接设备的信息。
  • 设备信息可以在UltraSigma中查看,或者直接从直流电源中获取。

上下电控制

  1. 设置采集参数
  • acquisition_time:采集时间,以秒为单位
  • acquisition_interval:采集间隔,以秒为单位
  • passage:选择需要采集的通道
  • 例如,设置通道电压和电流::APPLy CH1,24,2
  1. 上下电控制
  • 上电::OUTPut:STATe CH1,ON
  • 断电::OUTPut:STATe CH1,OFF
  • 查询输出状态::OUTPut:STATe? CH1

电流监控

  1. 监控电流
  • 获取当前电流信息::MEAS:CURR? CH1
  • 将前后两次获取的电流作对比,不一致则保存到data中
  • 若电流超过设定阈值(如1.5A),则立即断电

MATLAB完整代码

clc
% ------------------------打开仪器资源--------------------------------------
InitialtionEquip;     %初始化设备对象
fopen(DP932U);        %打开设备
% ------------------------读取设备信息--------------------------------------
fprintf(DP932U, '*IDN?');%设置命令
pause(1); 
DataBack = fscanf(DP932U);%读取数据
% ------------------------设置采集参数--------------------------------------
acquisition_time = 10;              %采集时间,S
acquisition_interval = 5;            %采集间隔 ,S  
passage = 'CH1';                    %采集通道
      
% 设置通道电压为24V,电流为2A
fprintf(DP932U, ':APPLy %s,5,2', passage); 
pause(1);                          % 等待设置生效
% --------------------------上电--------------------------------------------
% 打开通道输出(上电)
fprintf(DP932U, ':OUTPut:STATe %s,ON',passage ); 
pause(1); 
% 查询通道输出状态,并返回结果
fprintf(DP932U, ':OUTPut:STATe? %s',passage); 
pause(1); 
OutputStatus = fscanf(DP932U);
OutputStatus = str2num(OutputStatus); % 将读取到的字符串转换为数字
if OutputStatus == 1
    disp('上电成功');
else
    disp('上电失败');
end
pause(1); 
% --------------------------电流监控----------------------------------------
% 初始化变量
startTime = tic; % 记录开始时间
currentReadCount = 0; % 记录当前已经读取的次数
prevCurrentValue = NaN; % 用于存储前一次获取到的电流值
% 创建用于存储数据的结构体数组
data = struct('Time', {}, 'Current', {});
index = 1; % 用于记录结构体数组中数据的索引位置
while toc(startTime) < acquisition_time   %采集时间
    tic;
    % 获取当前时间
    currentTime = datestr(now,'HH:MM:SS.FFF');
    % 获取电流信息
    fprintf(DP932U, ':MEAS:CURR? %s',passage);
    pause(0.2); % 增加等待时间
    currentValue = fscanf(DP932U);
    currentValue = str2num(currentValue);
    % 比对电流值(第一次读取时不做比对,直接显示)
    if currentReadCount > 0
        if currentValue ~= prevCurrentValue
            % 将不一致的电流信息和时间保存到结构体数组
            data(index).Time = currentTime;
            data(index).Current = currentValue;
            index = index + 1;
        end
    else
        % 第一次读取时只显示当前时间和电流值
        disp(['当前时间:', currentTime, ', 当前电流:', num2str(currentValue), 'A']);
    end
    
 % 检查电流是否大于1.5A,如果是则给设备断电
    if currentValue > 1.5
       fprintf(DP932U, ':OUTPut:STATe %s,OFF',passage); % 发送断电命令
       disp('电流过大,已给设备断电!');
       break; % 断电后跳出循环
    end
    
    prevCurrentValue = currentValue;
    toc;
    % 暂停一段时间后再次获取
    pause(max(acquisition_interval - toc, 0)); 
    currentReadCount = currentReadCount + 1;
end
 
% 
% % ------------------------断电------------------------------------------
% 关闭通道输出(断电)
fprintf(DP932U, ':OUTPut:STATe %s,OFF',passage); 
pause(1); 
% 查询通道输出状态
fprintf(DP932U, ':OUTPut:STATe? %s',passage); 
pause(1); 
OutputStatus = fscanf(DP932U);
OutputStatus = str2num(OutputStatus); % 将读取到的字符串转换为数字
if OutputStatus == 0
    disp('断电成功');
else
    disp('断电失败');
end
%--------------------------关闭仪器资源-------------------------------------
fclose(DP932U);
%-----------------------------显示返回结果----------------------------------
% disp(DataBack);
for i = 1:length(data)
    disp(['时间:', data(i).Time, ', 电流:', num2str(data(i).Current), 'A']);
end
%-----------------------------将结果写入EXCEL----------------------------------
% 将数据转换为表格形式
tableData = struct2table(data);
% 将时间列转换为文本格式
tableData.Time = cellstr(tableData.Time);
% 写入Excel
filename = '电流波动记录表.xlsx';
writetable(tableData, filename);
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号