形式化语义中数据流模型和控制流模型详解

模型驱动开发在嵌入式系统领域中被广泛使用,它具有低代码、不易出错、容易仿真和验证的特点。

数据流

其中数据流模型是使用最为广泛的计算模型。在数据流模型中,组件按照先后顺序执行,读取组件输入端口的数据,并将计算得到的结果通过输出端口和相应的连线向后续组件传递。例如加减法组件,首先在组件的输入端口获得加数和减数等输入数据,将加数相加、减去减数,最后在组件的输出端口输出结果。

数据流模型中更高级的功能还包括复合组件和状态机等,复合组件是将一些基础组件进行封装,作为一个更大的计算单元使用,一般地,复合组件是可以嵌套的,而状态机的应用使得状态转换相关的控制逻辑的建模更加方便。数据流中的这些组件通常被组合起来使用,从而描述整个模型系统。

控制流

控制流子系统将在当前时间步执行一次或多次。控制流模块实现类似于以编程语言的控制流语句(例如 if-then、while-do、switch 和 for)所表示的控制逻辑。

语义:

  • for

  • if-else

  • switch

  • while

if-else控制流

在这里插入图片描述
构造一个 if-else 控制流图,如下所示:

1.提供 If 模块的数据输入用于构造 if-else 条件。

在 If 模块参数对话框中,设置 If 模块的输入。在内部,这些输入被指定为 u1, u2,…, un 并用于构造输出条件。

2.在 If 模块参数对话框中,为 If 模块设置输出端口 if-else 条件。

在 If 模块参数对话框中,设置输出端口。使用输入值 u1, u2, …, un 表示对话框中 if、elseif、else 条件字段的条件。其中,仅 if 字段是必需的。您可以输入多个 elseif 条件并选中某个复选框以启用相应的 else 条件。

3.将每个条件输出端口连接到一个执行子系统。

将 If 模块上的每个 if、elseif 和 else 条件输出端口连接到一个当端口条件为 true 时执行的子系统。

通过在子系统中放置一个 Action Port 模块创建这些子系统。这将创建一个原子执行子系统,该子系统具有一个名为 Action 的端口,然后您再将该端口连接到 If 模块上的一个条件。

一旦建立连接,该子系统将充当它所连接到的条件,且行为类似于使能子系统。

switch控制流

在这里插入图片描述

构造一个 switch 控制流语句,如下所示:

1.为 Switch Case 模块的参量输入提供数据输入。

Switch Case 模块的输入是 switch 控制流语句的参量。此值确定要执行的适当 case。此端口的非整数输入将被截断。

2.基于参量输入的数值向 Switch Case 模块添加 case。

使用 Switch Case 模块的参数对话框向 Switch Case 模块添加 case。Case 可以是单值或多值。您也可以添加可选的默认 case(即如果没有其他 case 为 true,则此 case 为 true)。一旦添加,这些 case 会显示为 Switch Case 模块上的输出端口。

3.将每个 Switch Case 模块的 case 输出端口连接到一个执行子系统。

Switch Case 模块的每个 case 输出连接到一个子系统,当端口的 case 为 true 时便会执行该子系统。您可以通过在子系统中放置一个 Action Port 模块创建这些子系统。这将创建一个原子子系统,该子系统具有一个名为 Action 的端口,然后您再将该端口连接到 Switch Case 模块上的一个条件)。一旦建立连接,该子系统将充当它所连接到的条件,且行为类似于使能子系统。将对该 case 执行的所有模块编程放在此子系统中。

while循环控制流

在这里插入图片描述
构造一个 while 循环,如下所示:

1.将 While Iterator 模块放置在子系统中。

宿主子系统标签更改为 while {…} 以指示它正在对 while 循环进行建模。这些子系统的行为类似于触发子系统。此子系统是您要使用 While Iterator 模块执行迭代的模块编程的宿主。

2.为 While Iterator 模块的初始条件数据输入端口提供数据输入。

While Iterator 模块要求为其第一次迭代提供初始条件数据输入(标记为 IC)。这必须源于 While 子系统外部。如果此值为非零,则发生第一次迭代。

3.为 While Iterator 模块的条件端口提供数据输入。

剩余迭代的条件被传递到标记为 cond 的数据输入端口。此端口的输入必须源于 While 子系统内部。

4.(可选)通过 While Iterator 模块的属性对话框将该模块设置为输出其迭代器值

迭代器在第一次迭代时的值为 1,之后每迭代一次,值增加 1。

5.(可选)通过 While Iterator 模块的属性对话框将该模块的迭代更改为 do-while。

这会将宿主子系统的标签更改为 do {…} while。使用 do-while 迭代时,While Iteration 模块不再具有初始条件 (IC) 端口,因为在检查条件端口(标记为 cond)之前子系统中的所有模块都会执行一次。

6.在子系统中创建用于定义子系统输出的模块图。

For循环控制流

在这里插入图片描述
构造一个 for 循环,如下所示:

1.从库浏览器或 Library 窗口中将 For Iterator Subsystem 模块拖到您的模型中。
2.(可选)将 For Iterator 模块设置为接受外部或内部输入,作为它执行迭代的次数。

通过 For Iterator 模块的属性对话框,您可以将其设置为通过标记为 N 的端口接受输入,输入值为迭代次数。此输入必须来自 For Iterator Subsystem 外部。

您还可以在属性对话框中直接设置迭代次数。

3.(可选)将 For Iterator 模块设置为输出其迭代器值以用于 For Iterator Subsystem 的模块编程。

迭代器在第一次迭代时的值为 1,之后每迭代一次,值增加 1。

4.在子系统中创建用于定义子系统输出的模块图。

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值