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

    文章

    2259

    浏览量

    94870
  • 函数
    +关注

    关注

    3

    文章

    4345

    浏览量

    62867
  • 电池
    +关注

    关注

    84

    文章

    10672

    浏览量

    130833
收藏 人收藏

    评论

    相关推荐

    示波器波形分析软件使用指南

    示波器波形分析软件的基本功能 1.1 波形显示 波形显示是示波器波形分析软件的核心功能。它能够将示波器捕获的模拟信号转换为数字信号,并以图
    的头像 发表于 12-06 09:52 637次阅读

    干货!!!开关电源的软启动过程分析

    过去,要测试电源的特征,我们只是停留在用万用表测量静态电流和电压,并用计算器进行复杂的计算。今天,示波器成为了很多工程师的首选电源测量平台。有些高性价比的示波器甚至配备了电源分析软件,简化了设置
    发表于 11-26 17:40

    LM4811在启动时或者shutdown开启关闭过程中,增益控制跟预想的有偏差是为什么?

    各位大家好,关于LM4811的使用本人遇到了问题,手头上有若干块LM4811,有些工作正常,有些在启动时或者shutdown开启关闭过程中,增益控制跟预想的有偏差(一般差1个档位),目前想确认是
    发表于 10-23 07:19

    SDRuno软件使用说明 v1.22.002

    SDRuno软件使用说明 v1.22.002
    发表于 10-14 11:44 1次下载

    AIC3204设置了时钟常输出,关闭模拟电源后BCLK WCLK不能保持输出是怎么回事?

    /WCLK output。 2.P0_R29_D2=0, BCLK/WCLK are used in clock。 问题说明: 当设置P2_R2_D3=1关闭模拟电源快时BCLK/WCLK 无clock输出
    发表于 10-12 07:59

    启动:TPS2373X特性说明

    电子发烧友网站提供《软启动:TPS2373X特性说明.pdf》资料免费下载
    发表于 09-25 11:20 0次下载
    软<b class='flag-5'>启动</b>:TPS2373X特性<b class='flag-5'>说明</b>

    润和软件启动鲲鹏原生开发合作

    近日,江苏润和软件股份有限公司(以下简称“润和软件”)与华为举办鲲鹏原生开发启动仪式,宣布正式启动鲲鹏原生开发。润和软件将以openEule
    的头像 发表于 08-28 17:27 717次阅读

    FSP库启动文件说明

    FSP库启动文件说明
    的头像 发表于 06-04 08:06 532次阅读
    FSP库<b class='flag-5'>启动</b>文件<b class='flag-5'>说明</b>

    如何在tc377启动软件时检查SSH实例的内存是否已初始化?

    我有一个关于 SSH 内存初始化的问题。 问题是:如何在 tc377 启动软件时检查 SSH 实例的内存是否已初始化? 谢谢。
    发表于 05-22 06:48

    XC2365应用区跳转启动区程序中的特定地址一直在循环,为什么?

    。 现在可以肯定跳转指令没有问题,程序已经跳转到引导区,在跳转之前我已经关闭了中断。 或者提供一些关于软件重置的代码,我试过软件重置,但失败了,也许我的
    发表于 05-22 06:18

    态势数据分析系统软件

    智慧华盛恒辉态势分析软件系统的功能描述、部署环境、界面使用、技术支持及一些常见问题及其解决办法等。为数据态势分析软件系统的管理人员和使用人员提供说明
    的头像 发表于 04-22 11:36 475次阅读

    模拟电路仿真软件中电阻咋找

    模拟电路仿真软件中电阻的寻找方法在设计和分析电路时非常重要。电阻是电路中常见的元件,它用于限制电流流过电路中的特定部分。在模拟电路仿真软件
    的头像 发表于 04-21 10:45 2690次阅读

    模拟前端芯片的差异分析

    模拟前端芯片,作为电子设备中的关键组件,承担着将模拟信号转换为数字信号的重要任务。然而,由于应用场景、设计思路、工艺技术等因素的不同,市面上的模拟前端芯片存在着诸多差异。本文将从功能、性能、功耗、成本等方面,对
    的头像 发表于 03-16 15:22 932次阅读

    PCAN软件的使用操作说明

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

    CANoe软件的使用操作说明

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