有没有办法从C结构的定义创建Simulink总线?我们假设我在头文件中有一些C结构定义:
typedef struct {
double a, b;
} u_T;
我可以使用它来自动生成Simulink.Bus
对象吗?
修改:是否有工具生成Matlab
代码,用于创建描述Simulink.Bus
文件中结构的.h
个对象?
答案 0 :(得分:2)
最新版本的MATLAB(2017a)支持此功能。使用以下命令。
importInfo = Simulink.importExternalCTypes(headerFiles)
有关详细信息,请参阅:https://www.mathworks.com/help/simulink/slref/simulink.importexternalctypes.html
答案 1 :(得分:1)
您可以在创建总线对象时导入标头,但这仅用于使用Simulink Coder生成代码,而不是用于使用Simulink进行正常模拟。有关详细信息,请参阅Simulink.Bus
上的文档。
执行所需操作的唯一方法是编写一个解析.h文件的解析器,并在MATLAB工作区中创建一个总线对象。我不知道有什么这样的工具。
答案 2 :(得分:0)
这是一个MATLAB脚本:
filename = 'Test3.h';
fid = fopen(filename);
tline = fgetl(fid);
i = 1;
while ischar(tline)
% Search for structs
if any(strfind(tline,'typedef struct'))
tline = fgetl(fid);
% Get elements
while ~any(strfind(tline,'}'))
% Create Element
el(i) = Simulink.BusElement;
c = regexp(tline,'(\w*) (\w*);','tokens');
% Element Name
el(i).Name = c{1,1}{1,2};
% Element Data type
switch c{1,1}{1,1}
case 'float'
el(i).DataType = 'single';
case 'int8_t'
el(i).DataType = 'int8';
case 'uint32_t'
el(i).DataType = 'uint32';
% Add unknown Data types as cases here
otherwise
el(i).DataType = ['Bus: ',c{1,1}{1,1}];
end
i = i+1;
tline = fgetl(fid);
end
% Get struct name
c = regexp(tline,'} (\w*);', 'tokens');
% Create bus
eval([c{1,1}{1,1},' = Simulink.Bus;']);
% Assign elements
eval([c{1,1}{1,1},'.Elements = el;']);
% Assign Header file
eval([c{1,1}{1,1},'.HeaderFile = ''',filename,''';']);
clear el; i = 1;
end
tline = fgetl(fid);
end
fid = fclose(fid);
clear c fid filename i tline;
我希望它有所帮助...