人在仿真软件

仿真软件和基于模型的设计

模拟软件的启动和关闭

本周,我们最后深入初始化函数,重置功能终止函数块。

作为一个起点,我推荐看看这个视频对初始化和终止功能由我的同事特蕾莎修女Hubscher-Younger

模拟生成的代码的启动和关闭

上一次发布的关于出口函数模型,我们看到了如何模拟模型配置导出功能:通过引用使用模型块。

在这个例子中,我们可以模拟正在运行的代码的行为。换句话说,如果代码将运行在嵌入式控制器单元(ECU),该模型模拟的是ECU启动仿真开始时,代码运行,ECU仿真终止时关闭。

这是有趣的,但是如果你想模拟一个大场景中,ECU的启动和关闭多次吗?这就是初始化函数终止函数设计。

什么特蕾莎修女的例子是模拟汽车在启动和关闭多次,由于两种不同的情况。在汽车运行时,我们增加一个计数器跟踪引擎已经运行多长时间,在它的整个生命。在正常的关闭情况下,关键是关闭时,我们需要编写的总运行时间在非易失性内存,所以它可以被检索下次启动汽车。以防电池死了,车子也关闭,但是在这种情况下我们没有时间写入非易失性内存。

让我们看看如何做到这一点!

使初始化和终止事件

让我们从一个简单的导出功能模型实现一个计数器。

导出功能计数器模式

R2016b,你会注意到当你引用一个模型设置导出函数,模型块包括两个新选项的对话框。

模型参考对话框

当你使那些,模型块将显示两个新港口,你可以连接函数调用信号。作为第一个简单的测试,让Stateflow图启动和关闭我们的关键是开启或关闭时计数器:

初始化和终止端口模型参考

如果我们观察结果,我们可以看到,计数器增量时关键是,和停止时。主要从去时,计数器复位。

初始化和终止端口模型参考

自定义初始化和终止事件

如前所述,我们不希望柜台重置每次关闭。计数器值,我们可以使用Intialize功能和终止功能块。在终止函数中,我们使用国家读者块获取当前的计数器值并将其存储到数据存储块。同样,在初始化函数,我们将读取数据存储块并使用它来初始化计数器。

初始化和终止端口模型参考

现在当我们看结果,柜台被关闭并重新启动后不断增加。

初始化和终止端口模型参考

重置功能

正如前面所提到的,我们还需要处理的情况下车辆关闭,因为低电池电压。这意味着我们不想每次写入数据存储模型的终止。

要做到这一点,我们可以改变事件类型的终止事件监听器块从终止重置并给它一个有意义的名字。在这种情况下,因为该模型没有终止功能块了,默认区块终止函数将执行当模拟利用将触发终止事件。

重置功能

我们更新Stateflow调度器涵盖关机情况下:

初始化和终止端口模型参考

注意,在上面的模型中,在模型参考参数对话框中,我们启用了“显示模式”复位端口(s)选项。这就是给我们额外的writeNVmem端口。

在查看结果时,我们可以看到,如果关闭由电池故障引起,计数器值不是一直重启。

初始化和终止端口模型参考

代码生成

现在,我们已经创建了一个模拟,如预期的行为,让我们看看配置代码生成。

在生成的代码中,写入非易失性内存很可能需要使用自定义代码或硬件嵌入式目标提供的服务。处理,我们将使用函数调用者块和仿真软件的功能在以前的文章强调这个

恢复在几句话,我们替换存储块的数据导出功能模型中的函数调用块。模拟行为,我们使用仿真软件功能实现相同逻辑如前所做的初始化和终止功能,读写数据存储块。

这是全面的装置是什么样子:

从导出功能模型生成的代码

中描述的以前的文章为代码生成,可以指定在导出函数模型的配置功能writeEngineRunTimeNVreadEngineRunTimeNV应该在链接时发现。

如果我们出口函数模型生成代码,我们会是什么样子:

从导出功能模型生成的代码

现在轮到你了

让我们知道你认为这个语义在留言里。

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。

Baidu
map