当前位置:网站首页>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然后运行。

边栏推荐
- Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd
- How to use PHP spoole to implement millisecond scheduled tasks
- Int to string, int to qstring
- Supplier selection and prequalification of Oracle project management system
- Pool de connexion redis personnalisé
- Navicat 远程连接Mysql报错1045 - Access denied for user ‘root‘@‘222.173.220.236‘ (using password: YES)
- 2837xd code generation - stateflow (4)
- VIM operation command Encyclopedia
- Long summary (code with comments) number structure (C language) -- Chapter 4, string (Part 1)
- Knowledge points are very detailed (code is annotated) number structure (C language) -- Chapter 3, stack and queue
猜你喜欢

Difference between redis serialization genericjackson2jsonredisserializer and jackson2jsonredisserializer

Supplier selection and prequalification of Oracle project management system

How to use PHP spoole to implement millisecond scheduled tasks

c语言编程题

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

2837xd 代码生成——总结篇

Timed thread pool implements request merging

YOLO物体识别,生成数据用到的工具

Pool de connexion redis personnalisé

Knowledge points are very detailed (code is annotated) number structure (C language) -- Chapter 3, stack and queue
随机推荐
Fragmenttabhost implements the interface of housing loan calculator
Idempotent design of Internet API interface
Supplier selection and prequalification of Oracle project management system
每天睡觉前30分钟阅读_day3_Files
What are the differences between TP5 and laravel
Statistical learning methods - Chapter 5, decision tree model and learning (Part 1)
Navicat 远程连接Mysql报错1045 - Access denied for user ‘root‘@‘222.173.220.236‘ (using password: YES)
Bold prediction: it will become the core player of 5g
Save video opencv:: videowriter
TD conducts functional simulation with Modelsim
Alibaba /热门json解析开源项目 fastjson2
Thinkphp5 how to determine whether a table exists
Alibaba / popular JSON parsing open source project fastjson2
How to choose between efficiency and correctness of these three implementation methods of distributed locks?
C语言之到底是不是太胖了
因上努力,果上随缘
idea查看字节码配置
VIM operation command Encyclopedia
Read Day5 30 minutes before going to bed every day_ All key values in the map, how to obtain all value values
2837xd 代码生成——补充(2)