0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于模拟软件的启动和关闭的分析说明

MATLAB 来源:djl 作者:Guy Rouleau 2019-09-16 14:23 次阅读

在之前的导出函数文章中,介绍了如何配置仿真模型并将它导出为函数:使用 Model 模块。

案例中,我们的模型模拟的是代码运行一次的行为。也就是说:假设这些代码要跑在 ECU 里,当模型仿真开始ECU 启动,这些代码就运行,当仿真结束ECU 停止。

这是个有意思的过程,不过,要是你想仿真一些更复杂的场景,比如 ECU 多次启动和关闭的场景呢?

这就是需要用的Initialize Function 和 Terminate Function 模块。

下面的例子模拟了一辆车在两种不同情况下多次启动和关闭的场景:

关于模拟软件的启动和关闭的分析说明

a.当车在运行时,我们使用计数器累加来跟踪记录发动机的在它的整个生命周期里运行的全部时间。

b. 在正常关停的场景下,车钥匙熄火,我们将累计的时间写入一个 non-volatile 内存。所以,在下次汽车启动的时候它还可以被读出来。

c. 假如电池没电了汽车也会关停,但是这时候我们就没有机会把累计时间写入 non-volatile 内存了。

下面我们来看看如何实现上述逻辑。

使用 Initialize 和 Terminate 事件

首先用一个简单的计数器例子,用来模拟发动机运行时间计数:

关于模拟软件的启动和关闭的分析说明

把上图这种形式的导出函数模型,使用一个Model 模块引用起来。在 R2016b 里 Model 模块的参数设置对话框里就会出现两个新选项:

关于模拟软件的启动和关闭的分析说明

勾选这两个选项,Model 模块就多出两个输入端口,可连接 Function-call 信号(见下图)。

作为第一次简单尝试,我们用一个 Stateflow chart 来仿真车钥匙启、停时分别启动和关闭这个计数器 EngineRunTime。

关于模拟软件的启动和关闭的分析说明

仿真结果如下:

关于模拟软件的启动和关闭的分析说明

当车钥匙启动时,计数器在增长,而当车钥匙关停时,计数器停止计数。而当车钥匙再次启动的时候,计数器重置了。

自定义Initialize 和 Terminate 事件

就像之前所说的,我们并不希望这个计数器在每一次车钥匙关停的时候都重置,不然就没法累计发动机的运行时间了。

为了保留这个计数器的值,我们这时候就可以使用 Initialization 和 Terminate 模块了。

关于模拟软件的启动和关闭的分析说明

在 Terminate Function 内部,我们使用 State Reader 模块来获取当前的计数值,并保存在 Data Store 模块里。类似的,在 Initialize Function 内部,我们可以读取这个 Data Store 模块,并用这个值来初始化计数器。

译者补充:熟悉 Simulink 代码生成的朋友都知道,EngineRunTime 模型生成代码时,会生成 step 函数,以及相应的Initialize 和 terminate 函数。默认情况下 Initialize 函数里进行输入、输出以及状态量的初始化,terminate函数里是空的。R2016b 之后,新增加的这个 Initialize 和 terminate 模块,可以让你显示的定义这两个函数里的内容。

我们来看结果:

关于模拟软件的启动和关闭的分析说明

在车钥匙关闭和重启后,每一次EngineRunTime 被重新调用运行时,是在持续计数的。

Reset Function

就像之前说的,我们还需要模拟由于电池电压过低引起的车辆重启。

这表示,在有些真实场景下,有时候计数器模型结束运行的时候,我们是没机会往Data Store 里写数据的。

为了模拟这种场景,我们把原来的Terminate 模块里面的 Terminate Event Listener 模块的事件类型从 Terminate 改为 Reset,并设置一个有含义的名字 writeNVmem。

关于模拟软件的启动和关闭的分析说明

这样一来,模型里就不再有Terminate Function 模块了。当仿真触发 terminate 事件后,就会执行默认的模块 terminate 函数。

我们重写 Stateflow 调度器,处理这两种关停的情况:

关于模拟软件的启动和关闭的分析说明

注意,在上面这个模型中,我们在 Model 的参数对话框里勾选了 "Show model reset ports",所以就出来了这个额外的 writeNVmem 端口。

仿真结果如下:

关于模拟软件的启动和关闭的分析说明

可以看到,在因为电池失效而引起的关停时,计数器的值并不会保存给下次重启的时候用。

代码生成

现在,仿真结果跟我们想要的一致了,接着我们来生成代码。

在生成的代码里,写入 non-volatile 内存一般都是用户自定义代码来实现,或者是 Embedded target 提供的硬件服务。为了模拟这种情况,我们使用 Function call 模块和 Simulink Function 来实现,以前的帖子有介绍过这两个模块的用法。

简单来说,就是把上面 EngineRunTime 模型里的 Data Store Read/Write 模块替换为 Function call。

另外,为了能在仿真的时候得到同样的结果,我们使用 Simulink Function 来完成读写 Data Store 这个功能,跟之前在Initialize 和Terminate function 的读写功能一样。

这就是整个模型的结构:

关于模拟软件的启动和关闭的分析说明

之前的帖子有介绍过,在代码生成的时候,可以在 EngineRunTime模型里设置配置选项,告诉 Simulink 在链接的时候,去哪里找这个 writeEngineRunTimNV 和 readEngineRunTimNV 函数。

我们把这个导出函数模型生成如下代码:

关于模拟软件的启动和关闭的分析说明

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2121

    浏览量

    92943
  • 函数
    +关注

    关注

    3

    文章

    3864

    浏览量

    61306
  • 电池
    +关注

    关注

    82

    文章

    9797

    浏览量

    123474
收藏 人收藏

    评论

    相关推荐

    PCAN软件的使用操作说明

    本文档是PCAN软件的使用操作说明,方便刚接触PCAN的伙伴们快速上手使用这个软件
    的头像 发表于 02-27 11:42 1009次阅读
    PCAN<b class='flag-5'>软件</b>的使用操作<b class='flag-5'>说明</b>

    CANoe软件的使用操作说明

    本文档是CANoe软件的使用操作说明,方便刚接触CANoe的伙伴们快速上手使用这个软件
    的头像 发表于 02-25 14:30 1059次阅读
    CANoe<b class='flag-5'>软件</b>的使用操作<b class='flag-5'>说明</b>

    Ethernet_1_KIT_TC397_TFT例程 ,关闭LWIP_DHCP宏后,pc上putty软件按照说明配置连接不上是为什么?

    关于Ethernet_1_KIT_TC397_TFT例程 ,关闭LWIP_DHCP 宏后,pc上putty软件按照说明配置连接不上, 是对的吗? 如果
    发表于 01-18 08:20

    14种电机启动电路分析

    【资料】14种电机启动电路分析
    的头像 发表于 01-04 10:56 566次阅读
    14种电机<b class='flag-5'>启动</b>电路<b class='flag-5'>分析</b>

    AD7732无法启动转换怎么解决?

    1、我用的是STM32软件模拟SPI通讯,能够正常读写寄存器。 2、按照官方文档上的转换启动说明,依次写入38H和40H对通道1启动单次
    发表于 12-12 06:28

    linux关闭docker的命令

    在 Linux 系统中,关闭 Docker 的操作可以通过以下多种方式进行。本文将详细讲解每一种方式,并提供示例代码和命令,以帮助读者更好地理解和实践。 使用 docker 命令 最常用的方法
    的头像 发表于 11-23 09:39 1139次阅读

    STM32的完整启动流程分析

    STM32的完整启动流程分析
    的头像 发表于 10-25 16:00 764次阅读
    STM32的完整<b class='flag-5'>启动</b>流程<b class='flag-5'>分析</b>

    一个关于恒流源来测模拟量的方式

    昨天我们聊了用电桥的方式来进行测试,在里面说了一个关于恒流源来测模拟量的方式,在我们一些模拟量变化测量中要求采用恒流源的方式来进行测量
    的头像 发表于 10-18 14:28 353次阅读
    一个<b class='flag-5'>关于</b>恒流源来测<b class='flag-5'>模拟</b>量的方式

    Linux整体汇编启动流程分析

    汇编启动流程 先从整体分析汇编做的事情,有个大体框架。 路径: arch/riscv/kernel/head.S ,入口是 ENTRY(_start_kernel) 从 ENTRY
    的头像 发表于 10-08 11:28 298次阅读
    Linux整体汇编<b class='flag-5'>启动</b>流程<b class='flag-5'>分析</b>

    Zynq-7000 SoC的安全启动应用说明

    电子发烧友网站提供《Zynq-7000 SoC的安全启动应用说明.pdf》资料免费下载
    发表于 09-13 11:46 1次下载
    Zynq-7000 SoC的安全<b class='flag-5'>启动</b>应用<b class='flag-5'>说明</b>

    细说GNSS模拟器的RTK功能(三)应用实例01——运行和分析模拟

    在上期文章中我们介绍了基于RTCM插件来模拟RTCM使用的硬件和软件设置,那么这一方式的运行和分析模拟结果如何呢?快来了解一下吧
    的头像 发表于 09-04 16:07 442次阅读
    细说GNSS<b class='flag-5'>模拟</b>器的RTK功能(三)应用实例01——运行和<b class='flag-5'>分析</b><b class='flag-5'>模拟</b>

    模拟设计中噪声分析的误区

    噪声是模拟电路设计的一个核心问题,它会直接影响能从测量中提取的信息量,以及获得所需信息的经济成本。遗憾的是,关于噪声有许多混淆和误导信息,可能导致性能不佳、高成本的过度设计或资源使用效率低下。今天我们就聊聊关于
    的头像 发表于 08-30 10:33 298次阅读
    <b class='flag-5'>模拟</b>设计中噪声<b class='flag-5'>分析</b>的误区

    740系列软件说明

    740系列软件说明
    发表于 06-26 18:43 0次下载
    740系列<b class='flag-5'>软件</b><b class='flag-5'>说明</b>书

    ESP8266关闭电源并重新启动它没有做任何事情?

    调试等。当我在这个上午醒来发现电路板未运行测试时,我让它运行了 24 多个小时。我记得,它响应一次网络点击,然后就不再做任何事情了。但是当我去重置它时,什么也没有发生。关闭电源并重新启动它没有做
    发表于 05-15 08:27

    740系列软件说明

    740系列软件说明
    发表于 05-05 18:53 0次下载
    740系列<b class='flag-5'>软件</b><b class='flag-5'>说明</b>书