控制状态流程图中的消息活动

news2024/9/23 21:31:58

消息是一个Stateflow®对象,用于在本地或图表之间进行数据通信。从发件人图表中,您可以发送或转发邮件。在接收图表中,队列接收消息并将其保存,直到图表能够对其进行评估。
在这里插入图片描述使用Stateflow运算符,您可以访问消息数据,并发送、接收、丢弃或转发消息。您还可以确定消息是否有效,并查找队列中的消息数。

访问消息数据

状态流消息有一个数据字段。要读取或写入有效消息的消息数据字段,请使用点符号语法:
message_name.data

如果发送消息时未首先为消息数据赋值,则数字数据的默认值为0。对于枚举数据,默认值是定义的枚举部分中列出的第一个值,除非在定义的方法部分中另有指定。
您无法访问仍在队列中或已丢弃的消息的消息数据。

发送消息

要发送消息,请使用send操作符:
send(message_name)
例如,在此图表中,状态A中的进入操作发送数据值为3的消息M。如果消息是本地消息,则该消息将进入本地消息队列。如果消息范围为Output,则图表会通过输出端口将消息发送到接收图表的输入消息队列。
在单个时间步骤中,可以通过输出端口或本地队列发送多条消息。
以下模型中,我将message中data数组所有元素赋值为3,然后将第二个元素赋值为4.

在这里插入图片描述
看下生成代码,完全正确
在这里插入图片描述

监视过渡和动作

消息可以监视转换或on类型的状态操作。在时间步长期间,当第一次评估监视消息时,图表会将消息从队列中删除,并使消息有效。当消息有效时,其他转换或操作可以访问消息数据,但不会从队列中删除另一条消息。
用消息监视转换
在此图表中,消息M监视从状态a到状态B的转换。当这两个条件都成立时,转换发生:
队列中存在一条消息。
消息的数据值等于3。
如果不存在消息,或者数据值不等于3,则不会发生转换。如果存在消息,则无论是否发生转换,都会将其从队列中删除。
在这里插入图片描述
用消息监视on动作中的状态
在此图表中,消息M监视状态a中的开启操作。当状态a变为活动状态时,如果这两个条件都为真,则会增加x值:
队列中存在一条消息。
消息的数据值等于3。
如果不存在消息,或者数据值不等于3,那么x的值不会改变。如果存在消息,则无论是否修改了x,都会将其从队列中删除。
在这里插入图片描述

接收消息

要接收消息,请使用receive操作符:
receive(message_name)

如果存在有效的消息M,则receive(M)返回true。如果有效消息不存在,但队列中有消息,则图表将从队列中删除该消息,receive(M)返回true。如果有效消息不存在,并且队列中没有消息,则receive(M)返回false。
例如,在此图表中,状态A中的操作过程检查队列中的消息M,如果这两个条件都为真,则增加x值:
队列中存在一条消息。
消息的数据值等于3。
如果不存在消息,或者数据值不等于3,那么x的值不会改变。如果存在消息,则无论是否修改了x,都会将其从队列中删除。

在这里插入图片描述

丢弃消息

要丢弃有效消息,请使用丢弃运算符:
discard(message_name)

图表丢弃一条消息后,可以在同一时间步长从队列中删除另一条消息。图表无法访问已丢弃消息的数据。
例如,在此图表中,处于状态A的操作期间会检查队列中的消息M。如果存在消息,则图表会将其从队列中删除。如果消息的数据值等于3,则图表将丢弃该消息。

在这里插入图片描述

转发消息

要将消息从输入队列转发到输出端口,或转发到本地消息队列或从本地消息队列转发消息,请使用转发运算符:
forward(input_message_name, output_message_name)
图表转发消息后,可以在同一时间步长从队列中删除另一条消息。

转发输入消息

在此图表中,状态A检查输入队列中的消息M_In。如果存在消息,则图表会从队列中删除该消息,并将其转发到输出端口M_out。图表转发消息后,该消息在状态A下不再有效。

在这里插入图片描述

转发本地消息

在此图表中,状态A检查输入队列中的消息M_In。如果存在消息,则图表将消息转发到本地消息队列M_local。在0.3秒的延迟之后,从状态a到状态B的转换将消息从M_local消息队列中移除,并将其转发到输出端口M_out。

在这里插入图片描述

确定消息是否有效

要检查消息是否有效,请使用isvalid运算符:
isvalid(message_name)
如果图表已将消息从队列中删除,且未转发或丢弃,则消息有效。请使用isvalid运算符检查消息在包含多个状态流程图的Simulink®模型中是否有效。
例如,此图表首先执行状态A,如丢弃消息中所述。当图表执行状态B时,操作期间检查消息M是否有效。如果消息有效且数据值等于6,则图表将丢弃该消息。
在这里插入图片描述确定队列的长度
要检查消息队列中的消息数,请使用长度运算符:
length(message_name)

例如,在此图表中,处于状态A的操作期间会检查队列中的消息M。如果存在消息,则图表会将其从队列中删除。如果队列中正好有七条消息,则图表会增加x的值。

在这里插入图片描述确定队列何时溢出
要检查消息是否因发送到已满的队列而丢失,请使用溢出运算符:
overflowed(message_name)

在每个时间步长中,当图表向队列添加消息或从队列中删除消息时,会设置此运算符的值。在同一时间步骤中发送或检索消息之前使用溢出运算符是无效的。
默认情况下,当消息队列溢出时,模拟会因错误而停止。要防止出现运行时错误并允许溢出的运算符对丢弃的消息做出动态反应,请将“队列溢出诊断”属性的值设置为“警告”或“无”。

检查输入消息溢出
要检查输入消息队列的溢出状态,请首先从队列中删除一条消息。你可以:
使用消息和溢出的运算符监视转换。
在这里插入图片描述
用消息监视转换,并在目标状态的输入操作中调用溢出的运算符。

在这里插入图片描述使用消息监视操作的状态,并在操作中调用溢出的运算符。
在这里插入图片描述在状态操作中,使用receive运算符,后跟overflow运算符。
在这里插入图片描述
在同一时间步骤中检索输入消息之前调用溢出的运算符会导致运行时错误。

检查输出消息溢出

要检查输出消息队列的溢出状态,请首先向队列中添加一条消息。你可以:
使用send运算符,后跟溢出的运算符。
在这里插入图片描述
使用前向运算符,后跟溢出运算符。
在这里插入图片描述
在同一时间步中发送或转发输出消息之前调用溢出的运算符会导致运行时错误。

检查本地消息溢出

要检查本地消息队列的溢出状态,请在调用溢出运算符之前向队列中添加消息或从队列中删除消息。在同一时间步骤中发送或检索本地消息之前调用溢出的运算符会导致运行时错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

更高效的数据交互实现丨 DolphinDB Arrow 插件使用教程

Apache Arrow 是一种跨语言的内存数据交换格式,旨在为用户提供高效的数据结构,以实现在不同的数据处理系统之间共享数据而无需进行复制。它由 Apache 软件基金会开发和维护,目前已经成为许多大型数据处理和分析框架的核心组件之一。在分布式框…

2024年【金属非金属矿山(露天矿山)安全管理人员】模拟考试题库及金属非金属矿山(露天矿山)安全管理人员作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 金属非金属矿山(露天矿山)安全管理人员模拟考试题库参考答案及金属非金属矿山(露天矿山)安全管理人员考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山&a…

DiskGenius帮你恢复系统无法识别的U盘数据

场景还原 前两天早上U盘复制文件卡死后,强行断开U盘,再次使用直接无法访问,心拔凉拔凉!! 使用驱动器G:中的光盘之前需要将其格式化 位置不可用-无法访问U盘 常规科普 一、U盘无法识别 1、检查U盘是否插入正确&…

【Pytorch】torch.nn.MaxPool2d

什么是MaxPool2d 是对二维矩阵进行池化层下采样的方法 MaxPool2d的用法 相较于卷积层,多出来的参数为ceil_mode 这个参数代表,如果所剩的部分不够卷积核的大小,要不要进行池化操作 具体代码为 import torch import torchvision from torch …

代购系统搭建,淘宝、1688海外代购系统建设以及部分前端源码展示

客户登录主界面&#xff0c;可以根据个人需求更换。 可支持个人定制模块化&#xff0c;也有一些模块可供选择 系统演示站测试 部分源码展示&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"> <title>会员中心 – 淘…

分布式搜索——ElasticSeach简介

一般都用数据库存储数据&#xff0c;然后对数据库进行查询获取数据&#xff0c;但是当数据量很大时&#xff0c;查询效率就会很慢&#xff08;具体下面会讲到&#xff09;&#xff0c;所以这种情况下就会使用到ElasticSeach ElasticSeach的基本介绍 ElasticSeach是一 款非常强…

RSC6218A LLC谐振电源案例分享-REASUNOS(瑞森半导体)

一、前言 RSC6218A是一款可以满足4项标准的优秀产品&#xff1a;①2024年8月1日要实施的《建筑照明设计标准》GBT0034-2024&#xff1b;②2024年07月01日起实施的《电磁兼容限值 第1部分&#xff1a;谐波电流发射限值&#xff08;设备每相输入电流≤16A&#xff09;》GB17625.…

在PyQt5中实现点击按钮打开新窗口功能—窗口的跳转功能实现

百度搜索“pyqt5中如何点击按钮打开新的窗口”&#xff0c;自动生成以下参考代码。 在PyQt5中&#xff0c;要实现点击按钮打开新窗口&#xff0c;你需要定义一个新的窗口类&#xff0c;并在按钮的点击信号&#xff08;clicked&#xff09;处理函数中创建并显示这个新窗口。以下…

继承的奥秘:面向对象编程中的血脉传承与智慧抉择

1. 概述 在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;继承是构建复杂软件系统的基石之一。它允许我们定义一个类&#xff08;称为父类或基类&#xff09;作为其他类&#xff08;称为子类或派生类&#xff09;的基础&#xff0c;子类能够自动获得父类的属性和方法…

jQuery EasyUI textbox 值取不到问题

用textbox 存值点击修改的时候有些字段是不能更改的所以将textbox 的disabled属性设为true后 像这里的textbox disabled属性设为true是灰的 点击保存时这两个值没传 我们可以在提交保存前先将disabled属性先设为false,保存后又设为true

【PDF技巧】PDF如何解密?

PDF文件设置了加密&#xff0c;需要密码才能够打开文件或者编辑文件&#xff0c;那么如何解密PDF密码&#xff1f;今天我们来一起学习一下。 首先是在已知密码的情况下&#xff0c;PDF文件中的打开密码或者是限制编辑&#xff0c;想要解密PDF密码&#xff0c;我们只需要在PDF编…

关于easypoi使用@ExcelCollection一对多导致合并失效问题

导致无法合并的原因是序号中使用了自增的操作 将自增改为手动赋值就能正常合并了

微服务- protobuf 安装

这里写自定义目录标题 1&#xff1a;下载链接2 &#xff1a;下载对应的包3&#xff1a;解压到目录4&#xff1a;设置环境变量5: 查看版本 1&#xff1a;下载链接 https://github.com/protocolbuffers/protobuf/releases 2 &#xff1a;下载对应的包 3&#xff1a;解压到目录 4&…

LeetCode474:一和零

题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 代码 /*抽象为两个维度的背包问题 dp[i][j…

如何快速将视频做成二维码?扫描二维码播放视频的制作方法

视频二维码的用途越来越多&#xff0c;比如常见的有产品展示、企业宣传、教程说明、个人展示等都可以生成二维码&#xff0c;通过扫码在手机或者其他设备上预览内容&#xff0c;从而提升其他人获取视频的速度&#xff0c;实现内容的快速分享。 对于有制作视频二维码需求的小伙…

AI 一键生成高清短视频,视频 UP 主们卷起来...

现在短视频越来越火&#xff0c;据统计&#xff0c;2023年全球短视频用户数量已达 10 亿&#xff0c;预计到2027年将突破 24 亿。对于产品展示和用户营销来说&#xff0c;短视频已经成为重要阵地&#xff0c;不管你喜不喜欢它&#xff0c;你都得面对它&#xff0c;学会使用它。…

Java为什么会成为现在主流的编程语言

Java为什么会成为现在的主流语言 前言一、Java语言概述Java是什么为什么大多数人会选择从事Java为什么从事Java的工作者数量从年递减 二、Java语言的特点简单性面向对象分布式&#xff08;微服务&#xff09;健壮性安全性体系结构中立可移植性解释型高性能多线程动态性 三、Jav…

CF 944 (Div. 4) A~G

文章目录 A My First Sorting Problem&#xff08;模拟&#xff09;B Different String(模拟、字符串)C Clock and Strings&#xff08;模拟&#xff09;D Binary Cut &#xff08;贪心&#xff09;E Find the Car&#xff08;二分查找、数学&#xff09;F Circle Perimeter&am…

无独立显卡如何安装Pytorch

以前我是直接在colab中使用pytorch&#xff0c;非常方便&#xff0c;今天折腾了一上午&#xff0c;终于搞定了pytorh的安装和环境设置&#xff0c;分享下我的安装流程&#xff0c;遇到的问题和解决方案。 1. 用pip安装Pytorch 打开cmd窗口&#xff08;按win R&#xff09;&a…

Linux 第三十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…