Simulink-StateFlow手把手教学(五)-事件的三种用法

本文在于教学状态机的事件用法:

输入事件、局部事件、输出事件、手把手傻瓜式教学

话不多说直接进入simulink进行教学

打开simulink新建一个chart

双击进入,创建一个输入事件

这是几种触发方式,分为上升下降沿触发,函数调用触发建立一个输出事件,这里我们选择functioncall,函数调用触发形式

返回,可见生成了输入和输出的接口

随后我们输出选择一个脉冲信号,我们双击输入Pulse Generator

配置这个脉冲信号,输入占空比百分之五十

双击进入状态机,建立一个节点和默认转移

编写执行function call 事件

我们建立另外一个chart,让前一个的function call 作为下一个chart的输入

双击进入chart1

建立一个事件,作为function call的输入

建立两个局部事件,和两个参数

如下连接

建立一个constant作为chart1的输入

进入chart1,建立两个互斥的状态,同时建立两个并行的状态

A,B并行,A、B内部互斥

点击闪电选择事件

此时,我们希望通过A,B状态并行,让内部的A1\A2,同时转移到B1\B2去

如何保持同步呢?那么就需要发送这个事件,发送到B去,也就是上面的send函数

在B2中添加time的数据,让其进行记录就行

加入scope

点击运行进行仿真

此时可以看出事件已经执行且,状态同步转移了

点击示波器可观测time数值的累加

Simulink中创建自定义模块时,如果想要通过回调函数(Callback Function)来设置封装动态图表(例如使用MATLAB的`uicontrol`或`uilayout`等UI组件),你需要按照以下步骤操作: 1. **创建自定义模块**: 在Model Explorer中右键点击,选择“New > Block”然后选择“User-Defined Subsystem”。这是创建自定义模块的基本框架。 2. **编写模块代码**: 在生成的M文件(通常是`.mdl`或`.slx`扩展名)中,首先定义一个回调函数,该函数通常命名为`createChartFcn`或者`updateChartFcn`。这个函数会在模块被激活时(例如当信号传递到输入端口时)被调用。例如: ```matlab function updateChartFcn(~, ~) % 在这里编写绘制和更新动态图表的代码 % 使用uitable, uibutton, uipanel等UI组件 chart = uitable; % 创建表格实例 % ...其他的UI组件实例化和配置... end ``` 3. **将回调函数与模块关联**: 在模块内部,找到`Callbacks`部分,在那里添加对`updateChartFcn`的引用。通常是在`OpeningFcn`下添加,表示在模块打开时运行此函数: ```matlab function MySubsys_OpeningFcn(hObject, eventdata, handles, varargin) % 其他初始化代码... createChartFcn(hObject, eventdata, handles); end ``` 4. **响应信号**: 要让图表随输入信号的变化而更新,可以在模块的适当处理函数(如`PreemptiveTasksFcn`或`ContinuousUpdateFcn`)中调用回调函数,传递信号作为参数,以便动态更新图表内容。 5. **发布模块**: 完成上述步骤后,保存并发布模块,将其拖放到Simulink模型中使用。 注意:每次仿真开始时都会调用`OpeningFcn`,因此确保`createChartFcn`只创建一次图表对象,后续只需要更新数据即可。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值