当前位置:网站首页>2837xd 代码生成——StateFlow(1)
2837xd 代码生成——StateFlow(1)
2022-07-02 06:35:00 【Quikk】
2837xd 代码生成——StateFlow(1)
在Command Window中键入sf可以进入,也可以通过Simulink库中的StateFlow子库进入.
StateFlow有限状态机,再使用matlab时,可能有所感觉:一个简单的if语句或者++操作需要构建的过于复杂。但是引入状态机可以大大减少这种情况。
进入库函数模块可以看到这三个元件都是状态机的模块,一个个学习:先看Chart模块。

1 Chart模块
创建一个新的Chart模块,打开后,右键进入Properties进行设置。

界面左侧是一些Chart中使用的组件:

其中,每个模块之间都只有互斥(只有一个能够执行)和并行的关系。并行关系下右上角会有执行顺序标识。

其中被模块分成了不同的级别,同属于一个模块下的内容是一个级别,如果需要设置并行和互斥关系。在需要设置的级别空白处右键选择Decomposition进行选择并行和互斥关系。

State模块有一些关键字可以进行定义进入和这些模块后执行的动作:


利用上面的知识可以搭建一个简单的模型,看一下流程图的概念。

首先搭建如上图所示的简单模型,s是条件,light是动作结果。这是模拟了开关灯的一个过程,开灯(s=1)很明显需要我们给定,light需要程序进行运行出来相关的结果。此时进入Model Explorer中进行相关的设置。


然后在Simulink中加入相关的外部模块,给定与显示输入输出。

仿真结果如下。改变s的值,可以相应的改变light的值。

将上述流程加以改造,加入事件。Open_switch(Close_Switch),b并在Model Exporer中进行定义。这里要注意定义的输入端口与demux输入应该保持一致。

然后搭建一下电路,Input3是用来激活模块。可以知道这时候,不仅仅要s=1,并且需要上升沿(Open_switch事件设置的触发的上升沿)才能触发light=1。类似数电中的上升沿才能锁存相应的信号。

为了可以更好的书写流程,StateFlow引入了连接节点的概念。点击Parretn可以设置出来以下的多种结构。

也可以自己为连线增加条件,鼠标放置在两个连接点的连线上会自动出来如下标识,默认一个节点多个分支的情况下,会优先执行有条件的那个分支。:

如图,搭建以下分支,等同于C代码:
if (x<0)
y=abs(x);
else
y=x;

在Model Explorer中设置相关的data的属性,给定输入和输出。这里输入给定的是1Hz的正弦波。


现在结合第一个开关灯的状态,若在开灯状态里面存在两个状态(A、B)代表亮度不同。那么我们若在设置了第一次亮度后,肯定不希望下一次开灯亮度又要再次调节。因此这里引入历史节点,即能够记忆最后一次退出的状态,尽管A是默认状态。但这时的状态由上一次退出时的状态决定:

2 模型实例搭建
2.1 汽车状态判断
构建如下的一个汽车状态判断逻辑电路,能够定义上面所产生的事件,进行运行,可以模拟换挡以及启停状态监测:

搭建完成后,可以直接点击运行,这时因为没有定义相关的data和event会弹出一个自动定义的界面,在上面进行相关修改即可快速添加:

构建外围电路,设置相关事件触发的装置运行时,将仿真时长改为inf(无限长),便可以操作观测实验现象:

2.2 媒体播放状态检测
通过流程图可以进行观测媒体播放状态,这个例子引入了历史节点与状态检测,构建如下图所示的chart,可以看到在power_on中的状态转移流程图上有的没有触发条件(即表示任何事情都可以触发)。例如,若现在处于USB状态,若发送Open_CD(Open_Radio)之后都可以触发状态转移。

在状态上右键进去属性(Properties),修改状态输出,便可以在输出端口观测状态情况(布尔变量输出,为1表示在次状态)。

其中加入了历史节点,代表下一次进入power_on模块时,会重新直接进入上一次退出的那个状态。
搭建外部电路如下图所示:

2.3 2837xd流水灯联机调试
首先搭建以下的chart,这里led1和led2都是输出量。直接连接GPIO接口就可。

下图是led1和led2的输出波形图,图中标识的1.2.3.4与上图的执行流程对应。就这样循环3次之后,出循环,然后熄灭等,进入下一个循环。这里测试发现,在状态中会持续一个步长,在节点进行动作(3、4)又会花费一个步长。[步长设置为0.5s],相关参数的设置,请参照博客前面的文章叙述。

程序外围电路图:

这是将一个调试的技巧,下图中SIMULATION和HARDWARE中各自有一个RUN,SIMULINK中的RUN可以不连接硬件,直接跑软件运行结果,也就是也可以方便的调试chart模块输出。HARDWARE中的RUN是生成DSP的代码烧录进入DSP然后运行。

边栏推荐
- Inverter Simulink model -- processor in the loop test (PIL)
- 记录一下初次使用Xray的有趣过程
- 每天睡觉前30分钟阅读_day4_Files
- Elastic Stack之Beats(Filebeat、Metricbeat)、Kibana、Logstash教程
- Methods of classfile
- c语言编程题
- 2837xd 代码生成——总结篇
- Learn combinelatest through a practical example
- Redis installation and deployment (windows/linux)
- YOLO物体识别,生成数据用到的工具
猜你喜欢

Idea view bytecode configuration

Machine learning practice: is Mermaid a love movie or an action movie? KNN announces the answer

2837xd code generation - Summary

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd

Knowledge points are very detailed (code is annotated) number structure (C language) -- Chapter 3, stack and queue

Chrome video download Plug-in – video downloader for Chrome

c语言编程题

2837xd Code Generation - stateflow (4)

一次聊天勾起的回忆

tinyxml2 读取和修改文件
随机推荐
Probability is not yet. Look at statistical learning methods -- Chapter 4, naive Bayesian method
每天睡前30分钟阅读Day6_Day6_Date_Calendar_LocalDate_TimeStamp_LocalTime
一次聊天勾起的回忆
tinyxml2 读取和修改文件
Off grid control of three-phase inverter - PR control
JDBC回顾
分布式锁的这三种实现方式,如何在效率和正确性之间选择?
Matplotlib swordsman line - first acquaintance with Matplotlib
2837xd 代码生成——StateFlow(4)
Ckeditor 4.10.1 upload pictures to prompt "incorrect server response" problem solution
QT QLabel样式设置
C语言之到底是不是太胖了
Chrome browser plug-in fatkun installation and introduction
MySQL multi column in operation
c语言编程题
idea查看字节码配置
Hystrix implements request consolidation
图像识别-数据采集
Image recognition - data annotation
Mysql默认事务隔离级别及行锁