matlab - 动态创建变量名称

1. assignin

语法

% 描述: 将值 val 赋给工作区 ws 中的变量 var
% ws: 工作空间名称
% var: 变量名称
% val: 变量值
assignin(ws,var,val);

示例
当前存在一个数组fruits,希望遍历该数组并按照该数组元素创建与之相对应的变量。

clear;

fruits = ["apple", "banala", "peach", "watermelons"];
for item=fruits
    price = rand() * 10;
    assignin("base", item, price);
end

% 尝试打印创建的变量
disp(apple);
disp(banala);
disp(peach);
disp(watermelons);

在这里插入图片描述

2. evalin

语法

% 描述:使用指定工作区中的变量计算expression表示的MATLAB代码
% workspace: 工作空间名称
% expression: matlab表达式或指定或代码段
% outputN: 表达式运行的返回结果
evalin(workspace,expression)
[output1,...,outputN] = evalin(workspace,expression)

示例
当前存在一个数组fruits,希望遍历该数组并按照该数组元素创建与之相对应的变量。

clear;

fruits = ["apple", "banala", "peach", "watermelons"];

for item=fruits
    price = rand() * 10;
%     assignin("base", item, price);
    evalin("base", item+"="+price);
end

% 尝试打印创建的变量
disp("---------------")
disp(apple);
disp(banala);
disp(peach);
disp(watermelons);

在这里插入图片描述

补充

matlab导入dbc文件并转换为Simulink.Bus类型。

clear;

% 文件路径
filepath = "E:\tools\test_demo_20240713.dbc";

% 加载文件获取数据对象
db = canDatabase(filepath);

% 遍历报文列表
msg_size = size(db.Messages);
for i = 1:msg_size
    msg_name = db.Messages(i) + "";
    disp("----------- " + msg_name + " --------------");

    msg_info = messageInfo(db, msg_name);

    % 遍历信号列表
    signal_size = size(msg_info.Signals);
    for j = 1:signal_size
        signal_name = msg_info.Signals(j) + "";
        disp(" (" + j + ") " + signal_name);

        signal_info = signalInfo(db, msg_name, signal_name);
        
        % 创建当前信号的Bus元素属性
        signalBusElement(j) = Simulink.BusElement;
        signalBusElement(j).Name = signal_name;
        signalBusElement(j).DataType = signal_info.Class;
        signalBusElement(j).Unit = strrep(signal_info.Units, "-", "");
        signalBusElement(j).Max = signal_info.Maximum;
        signalBusElement(j).Min = signal_info.Minimum;
        signalBusElement(j).Description = signal_info.Comment + "  (y=" + signal_info.Factor+"*x + "+signal_info.Offset +")";
    end

    % 创建报文Bus类型
    msgBus = Simulink.Bus;
    msgBus.Elements = signalBusElement(1:signal_size);

    % 指定到base空间并通过报文名称重命名
    assignin('base', msg_name, msgBus);
end

clear msgBus;
clear i;
clear j;
clear db;
clear msg_name;
clear msg_info;
clear msg_size;
clear signal_size;
clear signal_name;
clear signal_info;
clear signalBusElement;

运行结果
在这里插入图片描述

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值