matlab、simulink、excel联动实现simulink其中一个模块参数不断改变后,画出仿真输出和参数的变化关系图


前言

事情是这样的,前几天在做电机故障诊断的时候,需要做simulink模型中一个模块参数多次改变后,导出模型的输出,并画出输出和参数变化的关系图。于是想着能不能编写一个程序,自动改变仿真模块的参数,将输出导入到excel表格,并画出输出和参数关系图。下面来介绍一下里面的基本知识以及这个程序


一、如何改变simulink其中一个模块的参数

您可以使用具有以下输入参量的 set_param 函数来设置模块参数的值:

1.模块句柄或包括模块名称的完整模块路径,例如 ‘myModel/mySubsystem/myblock’

2.参数名称

3.要赋给参数的新值

在此示例中,您设置由名为 duanludianjizaixian模型 的 step 模块中的终值(After)参数。

该模块位于 duanludianjizaixian 模型的 DFIG Wind Turbine/故障电机模型 的子系统中。

终值参数存储在After中,我们设置的值是0.05

打开仿真后左上角就是需要改变的模块的地址,这里我们改变左下角的step模块
打开仿真后左上角就是需要改变的模块的地址,这里我们改变左下角的step模块

只要把鼠标放到要改变的参数上就能知道它的名字
只要把鼠标放到要改变的参数上就能知道它的名字

可以使用如下代码:

path = 'duanludianjizaixian/DFIG Wind Turbine/故障电机模型/Step';%要设置的simulink模型里面相应模块的地址
h = getSimulinkBlockHandle(path,true);
set_param(h,'After','0.05');%要设置模块的参数名称,设置成m

二、将simulink输出导入到工作区

有两种方法,第一种是将输出连接到to workspace模块,点击模块可以设置名称和数据类型,这里的数据类型我选择带有时间的结构体
在这里插入图片描述

第二种是点击scope示波器后点击左上角的配置属性/记录,点击记录数据到工作区,可以改变变量名称,保存格式我选择带时间的结构体。
在这里插入图片描述
运行仿真后会在工作区出现对应名字的变量,但也要注意,如果需要变量里面对应的数据,需要看好数据存放的地方
在这里插入图片描述
在这里插入图片描述
这里的zhengxuD2.signals.values就是数据的位置

三、将matlab工作区变量存入到excel表格中

这里要用到readmatrix和writematrix函数

readmatrix语法
A = readmatrix(filename)
A = readmatrix(filename,opts)
A = readmatrix(___,Name,Value)

这里我用的是第一个语法,其他两个就不介绍了。
filename是要读取的文件的名称,指定为字符向量或字符串标量。也可以用地址,如果该文件不在当前文件夹或 MATLAB 路径下的文件夹中,则在 filename 中指定完整或相对路径名。

例如:‘C:\myFolder\myFile.xlsx’

例如:‘dataDir\myFile.txt’

writematrix语法
writematrix(A)
writematrix(A,filename)
writematrix(___,Name,Value)

filename是要读取的文件的名称,指定为字符向量或字符串标量。也可以用地址,如果该文件不在当前文件夹或 MATLAB 路径下的文件夹中,则在 filename 中指定完整或相对路径名。

示例:‘C:\myFolder\myTextFile.csv’

示例:‘myFolder\myExcelFile.xlsx’

这里我因为要将不同模块参数时的输出导入到表格中,所以需要多个表格,我创建了一个矩阵存储五个表格的地址,然后再写入或读取相应的表格地址就好了

fileList = ["D:\matlab\读研数据\特征量数值1.xlsx", "D:\matlab\读研数据\特征量数值2.xlsx", "D:\matlab\读研数据\特征量数值3.xlsx", ...
        "D:\matlab\读研数据\特征量数值4.xlsx", "D:\matlab\读研数据\特征量数值5.xlsx"]; % Excel文件列表
writematrix(out1,fileList(i));%将相应数据写到excel表格中
 M = readmatrix(fileList(q));%读取表格数据

四、整体思路和代码

要实现自动改变仿真模块的参数,将输出导入到excel表格,并画出输出和参数关系图。
首先创建一个array矩阵存储需要的参数值,还有一个矩阵存储需要导入的excel表格的地址,然后使用for循环语句,将每个参数值对应的模型输出(这里我选择了最后100个数据)存储到对应的表格中。再使用一个for循环语句,不断读取五个表格中的值到M矩阵中,计算均值,最后得到的M矩阵是含有5个数(每个参数对应的输出均值)的矩阵。画出M矩阵和array矩阵的关系图。

整体代码如下:

clc
clear
array = [0.02 0.04 0.06 0.08 0.1];%要设置的参数值
n = numel(array);
fileList = ["D:\matlab\读研数据\特征量数值1.xlsx", "D:\matlab\读研数据\特征量数值2.xlsx", "D:\matlab\读研数据\特征量数值3.xlsx", ...
        "D:\matlab\读研数据\特征量数值4.xlsx", "D:\matlab\读研数据\特征量数值5.xlsx"]; % Excel文件列表
for i = 1:n
    m = array(i);
    path = 'duanludianjizaixian/DFIG Wind Turbine/故障电机模型/Step';%要设置的simulink模型里面相应模块的地址
    h = getSimulinkBlockHandle(path,true);
    set_param(h,'After','m');%要设置模块的参数名称,设置成m
    sim('duanludianjizaixian');
    out1 = zhengxuD2.signals.values(end-99:end);%在模型输出上加上to workspace模块后,取传输到工作区变量的最后100个数据,其中zhengxuD是to workspace模块的名称
    writematrix(out1,fileList(i));%将相应数据写到excel表格中
end
tezhengliang = [];
for q = 1:n
    M = readmatrix(fileList(q));%读取表格数据
    junzhi = mean(M(:));%取均值
    tezhengliang(q) = junzhi;%将0.02 0.04 0.06 0.08 0.1对应输出的均值输入到矩阵中
end
plot(array,tezhengliang);
  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值