目录
- 核心控制器
- bug调试
核心控制器
这个模块主要是我在做,同时张照博在后期与我讨论一起解决了许多问题,让我加深了对问题的理解
从彭艳遇手中接到这个项目,由于对模块了解甚少,为了加快对其中的理解,我列些主控制器中的所有参数,其中为:
输入数据量:
CoffeeRemain,MilkRemain,SugarRemain,WaterRemain,WaterTemp,CupRemain
输出数据量:
CoffeeAmount,MilkAmount,SugarAmount,WaterAmount,NextStep
输入脉冲量:
AmericanCoffee,StepEvent,FeedFinishEvent,MixFinishEvent,CoffeeEvent,MilkDoserEvent,CoffeeDoserEvent,SugarDoserEvent
输出脉冲量:
GetCupEvent
最初的想法是如何把这些参数都能运用到。首先Remain系列和Recipe系列可以做一个比较,在做咖啡之前可以进行一个判断,所以我编写了一个checkall函数,如下图
分别判断材料的剩余值是否满足需求值,以及是否还有空杯,水温是不是够。如果都满足,咖啡机才会开始工作。这样,输入数据量和部分输出量就得到完全的应用。
之后是设计流程,之前对作业没有很好理解,简单理解为各种材料的混合过程,只需要设置各种延时即可。忽略传送带和feeder的作用,上来就直接建立两个主状态-工作状态和初始状态,之后在里面增加其他状态,造成逻辑混乱,频频出错。事后,我先列些所有的流程,建立了足够的状态,stateflow的建模速度大大提升,同时和张照博一起讨论,两个人互相交流自己的理解,不断修改,并增加修改一些状态,最终勾勒出最终的流程图。这一点也使我觉得一个项目,对于全局的把握是至关重要的。之后,由于对相关函数不够理解,例如send函数滥用,逻辑不够清晰,但在彭艳遇的指导下,版本更新了几次。例如张照博提议用真值表,但是由于真值表对信号的屏蔽不够理想,最终决定为三个配方设置三个状态量。
由此我们也发现stateflow状态的引入可以很好的对信号进行屏蔽。对于这个模型,在讨论中,我们想过增加其他的参数,可以更好地反映咖啡机模型,但是考虑到时间有限,先把基本功能实现再继续新的版本更新。
最后采用的模式就是
咖啡选择信号输入-配方生成-检测可行性-取杯-传送带工作-doser工作-传送带工作-取杯。中间再继续加入忙等待直接转入错误状态的模型。
最后和张照博同学一起检查无误后交付给彭艳遇同学修改bug。
bug调试
这一部分主要也是彭彦毓在做,其他成员主要也是发现问题。
首先是上面这个问题,当时对于simulink模型不是很了解,就向彭艳遇询问这个加热器为什么放在输出端口,经过交流,发现确实不合适,最终取消了这个模块,将水箱和加热器集成到一个模块。
heater模块中原本fun中时间为10^8的周期,但为了更好的持久性,(atan((u - 1e-5)*1e8) + pi / 2) / pi * 100
改成了(atan((u - 1e-5)*inf) + pi / 2) / pi * 100
之前这个地方没有退出操作,只有en:StepEvent。发现stepevent脉冲不正确。加了exit:StepEvent;
最终第一代咖啡机完美制成
心得感想
这次团队作业如此复杂,但没想到能这么快完成,在simulink/stateflow模块上,小组成员彭艳遇和李佳杰负责周围模块的编写,张照博协调全队的进度,并协助我编写核心控制器。对于simulink和stateflow我了解甚少,当彭艳遇同学将各个模块的模型交给我时,我觉得是不可思议的,周围模块内部的模型十分复杂,涉及到各种微分,积分,我也对相关参数的理解很不到位。通过几天的耐心阅读,和虚心请教,对于模块渐渐有了清晰的认识,最终完成了这个艰难的任务,同时,和组员一起相互讨论,让我明白了团队协作的乐趣,不仅可以让自己思路清晰,更可以加快编写模型速率。总之这一周收获颇丰。