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

边栏推荐
- PI control of three-phase grid connected inverter - off grid mode
- 大学生四六级作文模板(自创版,成功跨过六级)
- 攻防世界-Web进阶区-unserialize3
- Alibaba / popular JSON parsing open source project fastjson2
- 并网逆变器PI控制(并网模式)
- How to choose between efficiency and correctness of these three implementation methods of distributed locks?
- Chrome browser tag management plug-in – onetab
- 2837xd code generation - stateflow (4)
- 三相并网逆变器PI控制——离网模式
- Number structure (C language -- code with comments) -- Chapter 2, linear table (updated version)
猜你喜欢

每天睡觉前30分钟阅读_day4_Files

Image recognition - data annotation

Navicat remote connection MySQL reports an error 1045 - access denied for user 'root' @ '222.173.220.236' (using password: yes)

三相并网逆变器PI控制——离网模式

Redis installation and deployment (windows/linux)

Chrome browser plug-in fatkun installation and introduction

How to use pyqt5 to make a sensitive word detection tool

Save video opencv:: videowriter

互联网API接口幂等设计

ZK configuration center -- configuration and use of config Toolkit
随机推荐
Mysql默认事务隔离级别及行锁
DTM distributed transaction manager PHP collaboration client V0.1 beta release!!!
逆变器simulink模型——处理器在环测试(PIL)
Ckeditor 4.10.1 upload pictures to prompt "incorrect server response" problem solution
Off grid control of three-phase inverter - PR control
C语言之分草莓
Chrome browser plug-in fatkun installation and introduction
Read Day6 30 minutes before going to bed every day_ Day6_ Date_ Calendar_ LocalDate_ TimeStamp_ LocalTime
Image recognition - Data Cleaning
Required request body is missing: (cross domain problem)
MySql报错:unblock with mysqladmin flush-hosts
Bold prediction: it will become the core player of 5g
道阻且长,行则将至
C language programming problems
C语言之做木桶
Difference between redis serialization genericjackson2jsonredisserializer and jackson2jsonredisserializer
告别996,IDEA中必装插件有哪些?
Chrome浏览器插件-Fatkun安装和介绍
Activity的创建和跳转
Timed thread pool implements request merging