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

    文章

    2324

    浏览量

    98735
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    68071
  • 电池
    +关注

    关注

    85

    文章

    11682

    浏览量

    145133
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    关于启动器内接法和外接法的优缺点

    关于启动器的“内接法”和“外接法”,核心区别在于软启动器是控制电机的线电流还是相电流。这直接决定了两种接法在成本、接线和适用场景上的巨大差异。
    的头像 发表于 05-11 17:41 840次阅读

    PMOS管在关闭状态下Vgs和Vds过压损坏分析

    PMOS通常用在高端开关、源极接电源、栅极驱动电压相对源极为负,且工作在关闭状态下电压应力最大,容易导致Vgs过压(栅源击穿)、Vds(漏源击穿)。以下分别分析两者被击穿的原因:核心状态:关闭状态在
    的头像 发表于 04-15 15:41 274次阅读
    PMOS管在<b class='flag-5'>关闭</b>状态下Vgs和Vds过压损坏<b class='flag-5'>分析</b>

    请教关于OpenOCD 意外损坏启动闪存

    我可能在使用基本用例之外的 VisionFive。 我基本上是在允许引导加载程序运行后运行裸机软件。 我没有安装 SD 卡,因此启动停止并且不会打开 Linux。 然后,我使用 OpenOCD
    发表于 03-18 08:27

    系统无法启动挂起怎么解决?

    ,然后可能因缺少 U-boot 指令而停止。使用其他一些软件,我可以访问系统 SSH。但是不知道如何继续启动选项。 可以做些什么来关闭公告并获得正常启动
    发表于 03-12 06:40

    APx500 软件演示模式 (Demo Mode) 竟有这些隐藏玩法?免费体验!

    图1.APx500软件启动画面与硬件检测窗口当您在未连接APx分析仪的情况下启动APx500软件时,系统会提示您进入演示模式(DemoMod
    的头像 发表于 12-29 09:04 895次阅读
    APx500 <b class='flag-5'>软件</b>演示模式 (Demo Mode) 竟有这些隐藏玩法?免费体验!

    电能质量在线监测装置的报警功能可以关闭吗?

    电能质量在线监测装置的报警功能 能否关闭及如何关闭,取决于装置的设计、功能等级和具体配置 。以下是详细分析: 一、核心结论:报警功能可部分关闭,但安全相关报警通常不可禁用 多数装置支持
    的头像 发表于 11-05 13:38 715次阅读

    交易关闭自动处理接口

    ​  在电商、支付系统或任何交易密集型应用中,交易关闭(如用户取消订单、支付超时或系统异常)是常见事件。手动处理这些事件效率低下且易出错,因此开发一个自动处理接口至关重要。本文将从需求分析、工作原理
    的头像 发表于 10-17 14:25 669次阅读
    交易<b class='flag-5'>关闭</b>自动处理接口

    关于太阳光模拟器的常见问题解答(一)

    太阳光模拟器是研究与测试中不可或缺的核心设备,其性能直接关系到数据的准确性与可靠性。为帮助大家更深入地理解其工作原理与选型要点,下文,紫创测控Luminbox梳理了关于太阳光模拟器的高频疑问以及解答
    的头像 发表于 10-15 18:04 712次阅读
    <b class='flag-5'>关于</b>太阳光<b class='flag-5'>模拟</b>器的常见问题解答(一)

    电能质量分析软件可以提供哪些数据分析功能?

    、CET 中电技术等)的技术特性,从核心功能模块展开说明: 一、基础电能质量指标分析 软件可实时计算并存储 100 + 项关键参数 ,涵盖电压、电流、功率、频率等稳态指标,以及谐波、闪变、不平衡度等动态特性: 稳态指标 : 真有
    的头像 发表于 10-10 17:12 1091次阅读

    TINA-TI 模拟电路设计、仿真和分析软件中文教程

    电子发烧友网站提供《TINA-TI 模拟电路设计、仿真和分析软件中文教程.pdf》资料免费下载
    发表于 09-03 17:10 4次下载

    详解线性稳压器的启动特性

    以下将介绍线性稳压器电源(VIN)开启时的启动特性及关闭时的特性。当线性稳压器的电源在开启与关闭时,其工作特性会受VIN的瞬态变化及输出电容的静电容量等因素影响而变化。由于这些特性往往会对负载设备产生影响,因此在工作性能评估中,
    的头像 发表于 07-28 11:14 1936次阅读
    详解线性稳压器的<b class='flag-5'>启动</b>特性

    请问Linux+rtos的1.9版本sdk大核开机自启动一个程序怎么关闭

    编译开机大核心就出现一个程序报错,01开发板csi2上面默认接的摄像头是gc2093的,运行的是ov5647 期待结果和实际结果 可以关闭这个自启动程序;也希望顺带知道我要开启自启动的程序放在哪里 软硬件版本信息 01stido
    发表于 07-22 06:07

    【案例2.36】芯片启动异常的故障分析

    【案例2.36】芯片启动异常的故障分析在某产品的调试中发现,板上核心处理芯片在每次启动后的表现不同,偶尔会出现无法启动的故障。经过几百次反复上下电测试发现,在大多数情况下,芯片
    的头像 发表于 06-26 08:24 1366次阅读
    【案例2.36】芯片<b class='flag-5'>启动</b>异常的故障<b class='flag-5'>分析</b>

    华秋DFM软件升级时,提示“应用程序无法正常启动”怎么办?

    最近有用户反馈: 登录华秋DFM软件,点自动升级的时候有时会报错,导致无法正常升级。 其中有一种情况是: 软件自动升级时,弹出“应用程序无法正常启动(0xc000007b)。请单击“确定\"
    发表于 06-12 18:32

    FRED 应用于照明系统的分析模拟

    ,可以随你所需要而更改颜色,使你更容易的区别出光线的信息。 (二)LED 的应用及模拟 在FRED 你可以设计或分析LED 光源,可分析LED 的视角,照度图、色座标,及LED 的应用如混光、照明等等之用
    发表于 06-06 08:53