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;
运行结果