第二周周报
本周进行了模型的设计和建模,并与核心控制模块完成联调,生成了代码。
模型总体设计
模型定义(来自概要设计)
Container
液体容器,用于保存各种液体
Doser
定量器,用于量取一定量的液体
Heater
加热器,用于提供热水
Brewing Assembly
混合器,用于将咖啡,牛奶,糖和热水混合
Cup Feeder
杯架,用于提供纸杯
Conveyor Belt
传输带,用于物体传输
Control System
核心控制模块,用于各模块之间的调度
模块间接口定义(来自概要设计)
Container
SettingFlow(Input)
当前出口开关大小
Amount(Output)
当前液体余量
OutFlow(Output)
当前液体实际流出流量
Doser
Inflow(Input)
当前液体实际流入流量
SettingAmount(Input)
液体需要量取的量
OutFlow
当前液体实际流出流量
***DoserEvent(Output)
Doser完成操作的事件
FlowControl(Output)
控制对应容器的出口流量
Heater
SettingFlow(Input)
当前出口开关大小
OutFlow(Output)
当前热水实际流出流量
WaterAmount(Output)
当前可用热水余量
WaterTemp(Output)
当前热水温度
Brewing Assembly
WaterInput(Input)
热水流入流量
CoffeeInput(Input)
咖啡流入流量
MilkInput(Input)
牛奶流入流量
SugarInput(Input)
糖流入流量
Mixtrue(Output)
混合液体输出流量
MixFinishEvent(Output)
混合完成的事件
Cup Feeder
GetCup(Input)
需要杯子的事件
JustaCup(Output)
杯子的输出
FeedFinishEvent(Output)
供应杯子完成的事件
CupRemain(Output)
当前是否有杯子剩余
Conveyor Belt
Step(Input)
每次步进的距离
AddMixtrue(Input)
混合液体入口
AddCup(Input)
杯子入口
TakeOutEvent(Input)
杯子被拿走的事件
JustaCupofCoffee(Output)
一杯咖啡的输出
StepEvent(Output)
步进完成的事件
Control System
CoffeeRemain(Input)
当前剩余咖啡的输入
MilkRemain(Input)
当前剩余牛奶的输入
SugarRemain(Input)
当前剩糖的输入
WaterRemain(Input)
当前剩余水的输入
WaterTemp(Input)
当前水温的输入
CoffeeAmount(Output)
需要咖啡的量
MilkAmount(Output)
需要牛奶的量
SugarAmount(Output)
需要糖的量
WaterAmount(Output)
需要水的量
NextStep(Output)
每次步进的量
GetCupEvent(Output)
需要被子的事件
整体设计图
模块细节设计
Container
设计思路
容器有初始量InitAmount,最大输出流量量不超过MaxFlow
对所需输出流量进行积分即为液体量减少的值
模块设计图
Doser
设计思路
接收到SettingAmount后,为简便,保证在3s内完成。控制流量为SettingAmount/3,等待三秒后关闭流量
模块设计图
内部流程图
Heater
设计思路
加热器采用两段加热,避免长时间沸腾或者功率太大。
预设输入流量无上限,设定为SettingInFlow,减去当前输出流量,经积分后得当前可用热水余量
加热功率和输入流量带入的热量,以及输出流量带走的热量,积分的当前热水中所含热量,除以可用余量,得当前热水温度。
由于两段加热,可以保证输出的热水一定为100度。
模块设计图
内部流程图
Brewing Assembly
设计思路
当各个液体流量大于0的时候开始积分,等流量回落到0之后,开始混合,等待一段时间后输出即可。
模块设计图
内部流程图
Cup Feeder
设计思路
当接收到NeedCupEvent,并且当前仍有杯子,取出一个杯子并输出
模块设计图
内部流程图
Conveyor Belt
设计思路
如果有杯子进入传送带,杯子位置更新。如果有混合液体进入且当前杯子在指定位置,则存下混合液体。
每有一次Step,等待一段与Step成正比的时间。
如果杯子到达终点,则将杯子和混合液体一并输出,并等待TakeOutEvent。