diff --git a/BPASmartClient.MorkT/Control_MorkT.cs b/BPASmartClient.MorkT/Control_MorkT.cs index 7e60ce0d..09a87c9a 100644 --- a/BPASmartClient.MorkT/Control_MorkT.cs +++ b/BPASmartClient.MorkT/Control_MorkT.cs @@ -174,6 +174,282 @@ namespace BPASmartClient.MorkT } + + + private void OrderChange(string subid, ORDER_STATUS oRDER_STATUS) + { + EventBus.EventBus.GetInstance().Publish(new OrderStatusChangedEvent() { Status = oRDER_STATUS, SubOrderId = subid, deviceClientType = DeviceType }); + } + + private void Wait(int value = 101) + { + while (!(morkT.lebai.Ok && morkT.lebai.Value == value)) + { + Thread.Sleep(5); + } + } + + /// + /// 是否可以开始制作咖啡 + /// + /// + private bool CoffeeCanMake() + { + bool canMake = (IsHealth && morkT.morkOrderPushesCoffee.Count > 0 && !morkT.IsCoffeeMake) ? true : false; + return canMake; + + } + + /// + /// 制作咖啡流程 + /// + private void MakeCoffeeProcess() + { + if (CoffeeCanMake()) + { + if (morkT.morkOrderPushesCoffee.TryDequeue(out OrderLocInfo orderLoc)) + { + DeviceProcessLogShow($"开始制作 [咖啡] 订单[{orderLoc.SortNum}]"); + GetAndCheeckCoffe(orderLoc); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_接咖啡后回原点);//把咖啡杯放到咖啡机机的位置后回原点 + Wait(); + LebaiRobot.GetInstance.SetValue(1); + new DRCoffee_MakeCoffeeEvent() { DrinkCode = (Model.咖啡机.Enum.DrCoffeeDrinksCode)int.Parse(orderLoc.Loc) }.Publish(); //接咖啡控制 + DeviceProcessLogShow($"发送咖啡机制作{orderLoc.Loc}!"); + morkT.IsCoffeeMake = true; morkT.MakeCoffeeOrder = orderLoc; + } + + } + + + } + /// + /// 咖啡机制作完咖啡,取走并放到取餐口,最后回原点 + /// + private void MakeCoffeeComplete() + { + if (morkT.IsCoffeeMake && IsHealth) + { + if (morkT.MakeCoffeeOrder != null && morkT.MakeCoffeeOrder.OrderStatus == 1) + { + DeviceProcessLogShow($"将咖啡移动到取餐位 [咖啡] 订单[{morkT.MakeCoffeeOrder.SortNum}]"); + DoCoffeeQC(morkT.MakeCoffeeOrder); + morkT.MakeCoffeeOrder = null; + morkT.IsCoffeeMake = false; + } + } + } + + + /// + /// 将咖啡杯从咖啡机 取走到 取餐口 + /// + private void DoCoffeeQC(OrderLocInfo order) + { + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_取咖啡出餐); + Wait(); + LebaiRobot.GetInstance.SetValue(1); + //订单状态改变:完成 + OrderChange(order.SuborderId, ORDER_STATUS.COMPLETED_COOK); + DeviceProcessLogShow($"{order.GoodsName}等待取餐"); + //WaitTakeMealOrder.Enqueue(order); + + } + + /// + /// 取咖啡杯&&咖啡杯检测 若检测失败机器人回原点 + /// + /// + private void GetAndCheeckCoffe(OrderLocInfo order) + { + LebaiRobot.GetInstance.SetValue(0); + OrderChange(order.SuborderId, ORDER_STATUS.COOKING); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_取咖啡杯); + Wait(); + new SCChip_TakeCupEvent() { Cup = IC_CUP.CUP_COFFEE }.Publish();//落碗控制 + Thread.Sleep(500); + DeviceProcessLogShow("尝试取咖啡杯!"); + LebaiRobot.GetInstance.SetValue(1); + int count = 2; + p: + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_咖啡杯检测); + Wait(); + LebaiRobot.GetInstance.SetValue(1); + + if (!LebaiRobot.GetInstance.GetInput()) + { + if (count >= 3) + { + //退出循环回到初始位置 + DeviceProcessLogShow($"执行{count}次取咖啡杯,仍为成功,订单默认废弃,机器人回到初始位置!"); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_咖啡杯回原点); + Wait(); + LebaiRobot.GetInstance.SetValue(1); + return; + } + DeviceProcessLogShow("执行二次取咖啡杯"); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_二次取咖啡杯); + Wait(); + new SCChip_TakeCupEvent() { Cup = IC_CUP.CUP_COFFEE }.Publish();//落碗控制 + LebaiRobot.GetInstance.SetValue(1); + count++; + goto p; + } + DeviceProcessLogShow("取咖啡杯完成"); + } + + /// + /// 冰淇淋是否可以开始制作 + /// + /// + private bool IceCreamCanMake() + { + bool canMake = (IsHealth && morkT.morkOrderPushesIceCream.Count > 0) ? true : false; + return canMake; + } + + /// + /// 制作冰淇淋流程 + /// + private void MakeIceCreamProcess() + { + if (IceCreamCanMake()) + { + if (MorkIStatus.GetInstance().CurrentMode != MORKI_MODE.制冷模式) new GSIceCream_ModeSetEvent() { Mode = MORKI_MODE.制冷模式 }.Publish(); + if (MorkIStatus.GetInstance().CXB >= 86 && morkT.morkOrderPushesIceCream.Count > 0)//成型比大于86才可以制作 + { + if (LebaiRobot.GetInstance.GetInput(3)) + { + if (morkT.IceIsOK) DeviceProcessLogShow("请检查冰淇淋出料口有无遮挡"); + morkT.IceIsOK = false; + + } + else if (morkT.morkOrderPushesIceCream.TryDequeue(out OrderLocInfo order)) + { + morkT.IceIsOK = true; + DeviceProcessLogShow($"开始制作 [冰淇淋] 订单[{order.SortNum}]"); + DoIceCream(order); + } + } + } + } + + + /// + /// 做冰淇淋 + /// + private void DoIceCream(OrderLocInfo order) + { + GetIceCreamCup(); + CheckICeCreaCup(); + GetIceCream(order); + PutIceCream(order); + } + + /// + /// 取冰淇淋杯 + /// + private void GetIceCreamCup() + { + LebaiRobot.GetInstance.SetValue(0); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_取冰淇淋杯); + Wait(); + new SCChip_TakeCupEvent() { Cup = IC_CUP.CUP_ICECREAM }.Publish();//落碗控制 + Thread.Sleep(500); + DeviceProcessLogShow("尝试取冰淇淋杯!"); + + } + + /// + /// 冰淇淋杯检测,失败后机器人回到原点 + /// + private void CheckICeCreaCup() + { + int count = 2; + LebaiRobot.GetInstance.SetValue(1); + p: + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_冰淇淋杯检测); + Wait(); + LebaiRobot.GetInstance.SetValue(1); + if (!LebaiRobot.GetInstance.GetInput()) + { + if (count >= 3) + { + //退出循环回到初始位置 + DeviceProcessLogShow($"执行{count}次取冰淇淋杯,仍未成功,订单默认废弃,机器人回到初始位置!"); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_冰淇淋杯回原点); + Wait(); + LebaiRobot.GetInstance.SetValue(1); + return; + } + DeviceProcessLogShow($"执行{count}次取冰淇淋杯!"); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_二次取冰淇淋杯); + new SCChip_TakeCupEvent() { Cup = IC_CUP.CUP_ICECREAM }.Publish();//落碗控制 + Wait(); + LebaiRobot.GetInstance.SetValue(1); + count++; + goto p; + } + DeviceProcessLogShow("冰淇淋杯检测完成"); + } + + /// + /// 机器人取接冰淇淋 + /// + /// + private void GetIceCream(OrderLocInfo order) + { + //制冷模式 + new GSIceCream_ModeSetEvent() { Mode = MORKI_MODE.制冷模式 }.Publish(); + LebaiRobot.GetInstance.SetValue(0); + OrderChange(order.SuborderId, ORDER_STATUS.COOKING); + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_接1号冰淇淋); + Wait(); + bool doItResult = true; + //出料 + new GSIceCream_DischargeEvent().Publish(delegate (object[] args) + { + doItResult = (bool)args[0]; + }); + if (doItResult) + { + IceCreamCookCheck(); + } + else + { + int count_1 = 0; + while (MorkIStatus.GetInstance().CXB <= 86) + { + Thread.Sleep(5); + count_1++; + if (count_1 >= 2000) + break; + } + IceCreamCookCheck(); + } + LebaiRobot.GetInstance.SetValue(1); + } + + /// + /// 把冰淇淋放到取餐位后回原点 + /// + /// + private void PutIceCream(OrderLocInfo order) + { + while (LebaiRobot.GetInstance.GetInput()) + { + Thread.Sleep(500); + } + LebaiRobot.GetInstance.Scene(LebaiRobot.SENCE_放冰淇淋位置); + Wait(); + LebaiRobot.GetInstance.SetValue(1); + //订单状态改变:完成 + OrderChange(order.SuborderId, ORDER_STATUS.COMPLETED_COOK); + DeviceProcessLogShow($"{order.GoodsName}等待取餐"); + //WaitTakeMealOrder.Enqueue(order); + + } + /// /// 冰淇淋机器制作冰淇淋 /// diff --git a/BPASmartClient/App.config b/BPASmartClient/App.config index e789e97e..08824b61 100644 --- a/BPASmartClient/App.config +++ b/BPASmartClient/App.config @@ -12,7 +12,7 @@ - + @@ -36,7 +36,7 @@ --> - +