在某些情况下Simulink金宝app®的前面添加了一个“隐藏信号缓冲区”外港块在条件子系统或之前外港块在模型的顶级。实际上,Simulin金宝appk插入a信号副本块在该位置,虽然块未出现在画布上。此缓冲区确保了一致的初始化外港块信号。
在一些情况下,使用条件输出信号或部分写入信号添加该信号缓冲器可能导致不同的仿真结果。参数确保出口是虚拟的是一个选择外港块删除缓冲区。当您关注条件或部分写信号时,选择此选项。
考虑以下模型。打开模型,看ex_conditional_write.
。
这合并块将其输入组合成一个信号,该信号的值在任何时候都等于其驱动块最近计算的输出。
对于大多数模型的情况,清除确保出口是虚拟的复选框外港块连接到启用子系统C
。
这外港块遵循非虚拟语义。的前面插入一个隐藏的缓冲区,如果需要的话外港堵塞。
缓冲区提供了一致的初始化外港块信号。
时间0:一种
运行时,C
不运行,但因为缓冲区在一种
,它运行并将初始值0复制到外港堵塞。B不运行。合并信号从输出到零一种
。
时间0.5:a不运行。B跑步并输出正弦波。合并信号是SINE WAVEB.
。
时间1。一种
, C不运行,但是缓冲区再次运行并将初始值0复制到外港堵塞。B不运行。合并信号再次是初始值一种
,不是最后一个值B.
。
使用固定步骤模拟模型,产生以下结果。
对于关心条件和部分写入的情况,选择(检查)确保出口是虚拟的复选框的外港块连接到已启用子系统C.
这外港块遵循虚拟语义。
隐藏缓冲区未在此之前插入外港块的子系统。
如果S金宝appimulink确定需要缓冲区,则显示错误。
时间0:一种
运行,c未运行。B不运行。合并信号是信号的初始值。
时间0.5秒:a不运行。B跑步并输出正弦波。合并信号是来自B的正弦波的值。
时间1:一种
运行,c未运行。B不运行。合并信号是最近计算的输出,是来自B的正弦波。
典型的建模模式是您想要初始化矢量信号的位置,然后基于某些条件或输入周期性地更新信号的部分元素。建模这种模式的一种方式是使用a合并块,它的输入来自2函数呼叫子系统块。一个子系统是初始化任务,而另一个子系统是定期写入任务。
下面的模型演示了这种模式。这initialize_process_subsystem.在模拟开始时被调用一次以初始化矢量信号。这Run_Process_Subsystem调用来部分地写入vector的元素。的输出任务块需要一个路径,其中隐藏缓冲区不制作矢量副本。选择确保出口是虚拟的复选框外港块删除隐藏缓冲区。如果S金宝appimulink确定缓冲区,则需要错误显示错误。打开模型,看ex_partial_write_single_merge.
。
这initialize_process_subsystem.
用值初始化2个元素向量的每个元素7.
。
输出向量7 [7]
。
这Run_Process_Subsystem
输入索引值为1,但是因为索引模式参数的选择器块设置为零基于
,它们从输入向量中选择第2个元素。
从中添加输出标量值选择器的结果块4.
。
因为任务堵塞索引模式参数设置为零基于
输入索引IDX1是1
,输出信号需要是长度2的向量。设置后输出的大小参数到2
,分配块能够写入第二个元素。
选择确保出口是虚拟的复选框将删除隐藏的缓冲区。
从该模型生成的代码包括两个函数。init_proc.
和run_proc.
。
/*模型步进函数*/ void Init_Proc(void) {int32_T s3_iter;/*用7.0初始化信号向量元素*/ for (s3_iter = 0;s3_iter < 2;{PartialWriteSingleMerge_DW s3_iter + +)。赋值(s3_iter) = 7.0;} for (s3_iter = 0;s3_iter < 2;{PartialWriteSingleMerge_Y s3_iter + +)。Out4 [s3_iter] = PartialWriteSingleMerge_DW.Assignment [s3_iter];}} /* Model step function */ void Run_Proc(void) {/* Write to element 1 of the output signal vector */ PartialWriteSingleMerge_Y. println . println . println . println . println . println。Out4 [1] = 4.0;}