3

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

我尝试使用“累积和”块但没有运气。这个块需要输入离散时间,所以我使用离散时间积分器。不能说我以正确的方式使用它:例如,如果要求和的值是 34 和 40,则总和可能是 12344 而不是正确的 74。

编辑

示例:
考虑以下模型:10 个实体先到服务器,然后再到接收器。
有2Set attribute个块:

  • 第一个用于StartTime(当前时间来自时钟,在服务器之前)
  • 第二个为EndTime(从时钟的当前时间,在服务器之后)

Attribute function设置ServiceTime属性的一个块 = EndTime- StartTime
该模型非常简单,因此ServiceTime属性始终等于 10。我们可以在Signal scope.
我们有 10 个实体。在每个实体中都有一个属性ServiceTime== 10。现在我想获取ServiceTime所有实体的属性总和。10*10=100。我怎么做?


细节:

  1. 模型
  2. 设置属性 1
  3. 服务器
  4. 设置属性 2 & 脚本功能
  5. 获取属性
4

2 回答 2

1

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

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

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

  3. 在我的情况下,很容易按索引分配向量元素。所以每个实体都有一个 ID(它是#d生成器的值)。

  4. 最后,让我们将数据写入向量。在启动模型之前,在 Matlab 中执行以下代码:
    someVar = zeros(1000,1)

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存储数据。现在我们可以找到总和或平均值。

于 2012-07-01T13:25:34.983 回答
0

似乎您的 SO 问题是在问“如何使用 Matlab 获得接收器的传播延迟?”

这篇题为“通过离散系统确定样本传播延迟”的Matlab 通讯文章讨论了用于离散 Simulink 模型获取总延迟值的方法。

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

于 2012-07-01T09:21:18.390 回答