如何在所有实体中汇总属性的值

时间:2012-06-18 18:34:42

标签: matlab simulink

在我的模型中有一个实体生成器,一些属性function(out_attrName)和一个实体接收器。如何获得每个实体的所有attrName值的总和?我希望在它到达接收器之前得到每个实体的值并累积这个值。

我试图使用'累积总和'块但没有运气。该块需要输入的离散时间,因此我使用Discrete-Time Integrator。不能说我以正确的方式使用它:例如,如果总和的值是34和40,总和可以是12344而不是正确的74。

修改

例:
考虑以下模型:10个实体进入服务器然后进入接收器 有2个Set attribute块:

  • StartTime的第一个(当前时间来自Clock,服务器之前)
  • EndTime的第二个(当前时间来自时钟,服务器之后)

设置Attribute function属性= ServiceTime - EndTime的{​​{1}}个阻止。
该模型非常简单,因此StartTime属性始终等于10.我们可以在ServiceTime上看到它。
我们有10个实体。在每个实体中都有一个属性Signal scope == 10.现在我想得到所有实体的ServiceTime属性的总和。 10 * 10 = 100。我该怎么做?


详细说明:

  1. Model
  2. Set attribute 1
  3. Server
  4. Set attribute 2 & Script function
  5. Get attribute

2 个答案:

答案 0 :(得分:1)

经过一些研究后,我自己的答案对我有用 如果我错了,请评论这个答案。

  1. 我们需要一个累加器(一些存储器)来存储数据。所以我们需要使用MatLab工作空间。我们可以使用函数coder.extrinsic('evalin')coder.extrinsic('assignin')来读取/写入值。

  2. 我们必须将所有实体的所有值都放在单个向量中。在这个操作之后,我们将在一个地方拥有数据并且可以做任何我们喜欢的事情。该向量将由工作空间“托管”。

  3. 在我的情况下,通过索引分配矢量元素很容易。因此每个实体都有一个ID(它是来自生成器的#d值)。

  4. 最后,让我们将数据写入矢量。在开始模型之前,在Matlab中执行此代码:
    someVar = zeros(1000,1)

  5. 在汇总前的Attribute function块中保存数据:

    out_EntityDuration = FinishTime - StartTime;
    
    coder.extrinsic('evalin');
    coder.extrinsic('assignin');
    
    x = zeros(1000,1);
    x = evalin('base', 'someVar');
    
    x(Id+1) = out_EntityDuration;
    
    assignin('base','someVar',x);
    

    在此处查看有关读/写工作空间的更多信息http://www.mathworks.com/matlabcentral/newsreader/view_thread/263578

    执行后,模型someVar存储数据。现在我们可以找到总和或平均值。

答案 1 :(得分:0)

看起来您的SO问题是“如何使用Matlab获取接收器的传播延迟?”

这篇名为Determining Sample Propagation Delay through a Discrete System Matlab Newletter 文章讨论了在获取总延迟值时用于离散Simulink模型的方法。

根据该时事通讯,建议 “使用 Matlab 的输入和输出 功能之间的互相关,而不是使用< em>延迟的分析估计因为很难计算成最终值。