如何在Simulink模型中获取信号尺寸

时间:2013-10-04 08:29:44

标签: matlab simulink

我有一个问题。

在模拟simulink模型后,我需要使用MATLAB命令获取每行的信号尺寸。

我按照

获得了句柄
line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line')

然后我如何从线句中获取信号尺寸

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

对不起我的英语技能

谢谢

3 个答案:

答案 0 :(得分:3)

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

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

用每个感兴趣的块的相应块路径替换<block_path>。必须先编译模型才能运行这些命令,但由于您在运行模型后指示这样做,这应该不是问题。

答案 1 :(得分:2)

您可以通过以下方式解决问题。

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

    % 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首选项中进行所有进一步的定义有一个列表来管理所有信号。

答案 2 :(得分:2)

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

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

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