经过两日的学习,对SimuLink已经有了基本的了解。今后的应用主要集中于基于底层的控制逻辑,需要用到SimuLink的Stateflow进行开发,因此开始了对Stateflow的了解。
Stateflow的相关资料比较少,下载了一些还在学习;同步开始的对MATLAB自带help的Demo的学习就有些困难了,一方面是语言障碍(对英语不是很熟练)所致,另一方面那些Demo本身就比较复杂,第一个例子家用报警器凑合能懂工作过程,其有限状态机就不懂了;第二个双电梯就只能望洋兴叹,空叹其精巧而不知所云了。明天晚上起要外出几天,直到下周二才能回来继续,学习进度稍微放缓一下。
本来打算早点回去,不过感觉晚上什么也没做,有些不甘心,硬着头皮继续看《基于MATLAB7.x+SIMULINK_STATEFLOW系统仿真、分析及设计》(这本书pdf很好找)后面的例子。第一个例子很简单,不过对于我这样连本科时学的一点MATLAB皮毛都忘得差不多的人来说还是有些吃力。根据例子基本搞懂了Stateflow的状态(State)、驱动状态转换的事件(Event)、数据(Data)这三个Stateflow的核心元素以及之间的关系。例子是一个简单的状态转换,有两个输入,一个输出,一个有限状态机。一开始没明白为什么是两个输入(激励信号),而且对于两个事件(on_switch和off_switch),只有特定的一个输入能触发一个事件。后来对事件对应的input端口号port进行了观察,并且分析了复用模块(mux)的工作原理(外观是一根线,但实际是两根线分别接入chart),才明白了两个输入信号分别对应两个事件的input,这才基本搞明白。附图如下:
通过搞明白这个例子,算是额外完成了点学习任务,终于初窥门径了。。。
另外补充一下状态迁移标记的一般形式:触发事件[迁移条件关系式]{条件动作}/迁移动作。
触发事件主要用于标记Event的名称;条件关系式一般是布尔表达式,为真时有效,引发迁移;条件动作表示条件关系式一旦为真就执行的动作;迁移动作是指当迁移终点已经确认有效才执行的动作,即整个迁移完成时才执行的动作。