3

我有个问题。

模拟 simulink 模型后,我需要使用 MATLAB 命令获取每条线的信号维度。

我通过以下方式获得线路句柄

line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line')

那么我如何从线句柄中获取信号尺寸

** 当在格式菜单 -> 端口/信号显示中选中“信号尺寸”时,模拟后,信号尺寸的型号将显示在非标量线上。我需要使用 MATLAB 命令来获取它。

对不起我的英语水平

谢谢

4

3 回答 3

3

或者,您可以使用以下方法找到它们源自的每个块的信号维度和信号宽度:

get_param(<block_path>,'CompiledPortDimensions')
get_param(<block_path>,'CompiledPortWidths')

<block_path>为每个感兴趣的块替换适当的块路径。必须先编译模型,然后才能运行这些命令,但是由于您指示在运行模型后执行此操作,所以这应该不是问题。

于 2013-10-04T10:06:00.157 回答
2

您可以通过以下方式解决它。

  1. 启用所需信号的信号记录(属性)。例如,将名称设置为 custom 和signalone.
  2. 如果您实际上不想记录信号,请设置Limit data points to last1,这样您就可以避免存储未使用的数据。
  3. 转到 SIMulink 首选项并启用信号记录,默认输出名称为logsout
  4. 模拟后,您将logsout在工作区中获得一个数据集

现在评估这个数据集如下:

% returns data, if data limit is set to 1 it's a coloumn 
% vector with just the last value
data = logsout.get('signalone').Values.Data

你现在可以只使用这个向量的大小并且你知道信号的维度

[~,dim]=size(data)

或在一行中:

[~,dim]=size(logsout.get('signalone').Values.Data)

如果您有很多信号并且想要一次评估它们,请为您的信号提供方便的输出名称,并使用循环来遍历具有所有信号名称的字符串向量。

正如您所说,您想要“所有”(您确定吗?)信号的维度,我认为在每个信号属性中检查“启用信号记录”并在您有列表的 Simulink 首选项中进行所有进一步定义会更方便管理所有信号。

于 2013-10-04T09:23:54.107 回答
2

如果您的 find_system 命令有一组线句柄,则可以使用以下命令将模块连接到信号。

hblkSrc = get_param(h(k),'SrcBlockHandle');

然后,您可以get_param(hblkSrc,'CompiledPortDimensions')按照 am304 的建议使用来获取尺寸。

于 2013-10-04T12:54:33.663 回答