using BPA.Message; using BPA.Message.Enum; using BPASmartClient.Device; using BPASmartClient.EventBus; using BPASmartClient.Helper; using BPASmartClient.Message; using BPASmartClient.Model; using BPASmartClient.Model.PLC; using BPA.Models; using static BPASmartClient.EventBus.EventBus; using BPASmartClient.Model.小炒机; using BPASmartClient.MorkF.Model; namespace BPASmartClient.MorkF { public class Control_MorkF : BaseDevice { public override DeviceClientType DeviceType => DeviceClientType.MORKCS; public AutoResetEvent minorReset = new AutoResetEvent(false); public AutoResetEvent mainReset = new AutoResetEvent(false); GVL_MorkF morkF = new GVL_MorkF();//全局对象声明 public StirFryBom stirFryBom = new StirFryBom();//创建获取流程的对象 List stirFryGoods = new List();//创建商品对象 List resultorder = new List();//调试变量 /// /// 入口 /// public override void DoMain() { CommandRegist();//调试 ServerInit(); DataParse();//数据解析 DeviceProcessLogShow("MORKF 设备初始化完成"); } #region 调试代码 public void CommandRegist() { ActionManage.GetInstance.Register(PLCInite, "InitCommand"); ActionManage.GetInstance.Register(InitialData, "SimultaorOrder"); ActionManage.GetInstance.Register(MaterialOne, "MaterialOne"); ActionManage.GetInstance.Register(MaterialTwo, "MaterialTwo"); ActionManage.GetInstance.Register(MaterialThree, "MaterialThree"); ActionManage.GetInstance.Register(MaterialFour, "MaterialFour"); ActionManage.GetInstance.Register(MaterialFive, "MaterialFive"); ActionManage.GetInstance.Register(ManualOpenExhaust, "OpenExhaust"); ActionManage.GetInstance.Register(CloseExhaust, "CloaseExhaust"); ActionManage.GetInstance.Register(StartQX, "StartQXOne"); ActionManage.GetInstance.Register(StartQX, "StartQXTwo"); ActionManage.GetInstance.Register(ShreddCabbage, "ShreddCabbage"); ActionManage.GetInstance.Register(FryPork, "FryPork"); ActionManage.GetInstance.Register(XingBaoGu, "XingBaoGu"); ActionManage.GetInstance.Register(TakePot, "TakePot"); ActionManage.GetInstance.Register(TakePotReset, "TakePotReset"); ActionManage.GetInstance.Register(TakeMaterial, "TakeMaterial"); ActionManage.GetInstance.Register(ManualOutMeal, "OutMeal"); ActionManage.GetInstance.Register(AddOil, "AddOil"); ActionManage.GetInstance.Register(TakeOff, "TakeOff"); ActionManage.GetInstance.Register(OneBlock, "OneBlock"); ActionManage.GetInstance.Register(TwoBlock, "TwoBlock"); ActionManage.GetInstance.Register(ThreeBlock, "ThreeBlock"); ActionManage.GetInstance.Register(OverTurnOff, "OverTurnOff"); ActionManage.GetInstance.Register(OverOneBlock, "OverOneBlock"); ActionManage.GetInstance.Register(OverTwoBlock, "OverTwoBlock"); ActionManage.GetInstance.Register(OverThreeBlock, "OverThreeBlock"); ActionManage.GetInstance.Register(OverGoOn, "OverGoOn"); ActionManage.GetInstance.Register(OverGoDown, "OverGoDown"); ActionManage.GetInstance.Register(AutoModel, "AutoModel"); ActionManage.GetInstance.Register(ManualModel, "ManualModel"); ActionManage.GetInstance.Register(AddOil, "SecAddOil"); ActionManage.GetInstance.Register(TakeOff, "SecTakeOff"); ActionManage.GetInstance.Register(OneBlock, "SecOneBlock"); ActionManage.GetInstance.Register(TwoBlock, "SecTwoBlock"); ActionManage.GetInstance.Register(ThreeBlock, "SecThreeBlock"); ActionManage.GetInstance.Register(OverTurnOff, "SecOverTurnOff"); ActionManage.GetInstance.Register(OverOneBlock, "SecOverOneBlock"); ActionManage.GetInstance.Register(OverTwoBlock, "SecOverTwoBlock"); ActionManage.GetInstance.Register(OverThreeBlock, "SecOverThreeBlock"); ActionManage.GetInstance.Register(OverGoOn, "SecOverGoOn"); ActionManage.GetInstance.Register(OverGoDown, "SecOverGoDown"); ActionManage.GetInstance.Register(AutoModel, "SecAutoModel"); ActionManage.GetInstance.Register(ManualModel, "SecManualModel"); } /// /// 手撕包菜流程 /// public void ShreddCabbage() { if (stirFryBom.StirFryActions.Count > 0) { stirFryBom.StirFryActions.Clear(); } //流程 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T1, RobotActions = new List() { StirFryRobotAction.清洗槽取锅 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T2, PotActions = new List() { StirFryPotAction.大火持续 }, During = 5 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T3, RobotActions = new List() { StirFryRobotAction.取A料 }, PotActions = new List() { StirFryPotAction.加油, StirFryPotAction.搅拌臂下位, StirFryPotAction.低速旋转 }, During = 6 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T4, PotActions = new List() { StirFryPotAction.停止旋转, StirFryPotAction.停止火力, StirFryPotAction.搅拌臂上位 } });//加A料 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T5, RobotActions = new List() { StirFryRobotAction.取B料 }, PotActions = new List() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 6 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, PotActions = new List() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加B料 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T7, RobotActions = new List() { StirFryRobotAction.取C料 }, PotActions = new List() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 9 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T8, PotActions = new List() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加C料 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T9, PotActions = new List() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 30 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T10, PotActions = new List() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T11, RobotActions = new List() { StirFryRobotAction.灶取锅 } }); } /// /// 盐煎肉流程 /// public void FryPork() { if (stirFryBom.StirFryActions.Count > 0) { stirFryBom.StirFryActions.Clear(); } //流程 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T1, RobotActions = new List() { StirFryRobotAction.清洗槽取锅 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T2, PotActions = new List() { StirFryPotAction.停止火力, StirFryPotAction.搅拌臂下位, StirFryPotAction.低速旋转 }, During = 15 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T3, PotActions = new List() { StirFryPotAction.加油, StirFryPotAction.停止火力 }, During = 19 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T4, PotActions = new List() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T5, RobotActions = new List() { StirFryRobotAction.加入A料 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, PotActions = new List() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 20 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T7, PotActions = new List() { StirFryPotAction.停止火力 }, During = 35 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T8, PotActions = new List() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位, } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T9, RobotActions = new List() { StirFryRobotAction.加入B料 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T10, PotActions = new List() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 22 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T11, PotActions = new List() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T12, RobotActions = new List() { StirFryRobotAction.加入C料 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T13, PotActions = new List() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 70 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T14, PotActions = new List() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T15, RobotActions = new List() { StirFryRobotAction.灶取锅 } }); } /// /// 酱烧杏鲍菇流程 /// public void XingBaoGu() { if (stirFryBom.StirFryActions.Count > 0) { stirFryBom.StirFryActions.Clear(); } //流程 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T1, RobotActions = new List() { StirFryRobotAction.清洗槽取锅 } }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T2, RobotActions = new List() { StirFryRobotAction.加入A料 }, PotActions = new List() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.低速旋转 }, During = 5 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T3, PotActions = new List() { StirFryPotAction.加油 }, During = 12 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T4, PotActions = new List() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加A料 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, RobotActions = new List() { StirFryRobotAction.加入B料 }, PotActions = new List() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 25 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T7, PotActions = new List() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加B料 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T9, RobotActions = new List() { StirFryRobotAction.加入C料 }, PotActions = new List() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 30 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T10, PotActions = new List() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加C料 stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, PotActions = new List() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 55 }); stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T11, RobotActions = new List() { StirFryRobotAction.灶取锅 } }); } public void StartQX(object obj) { if ((int)obj == 1) WriteData("M1.4", true); if ((int)obj == 2) WriteData("M1.7", true); } public void ManualOpenExhaust() { WriteData("M0.7", true); } public void CloseExhaust() { WriteData("M0.7", false); } public void TakeMaterial() { WriteData("M14.1", true); } public void ManualOutMeal() { WriteData("M14.2", true); } public void MaterialOne() { WriteData("M13.0", true); } public void MaterialTwo() { WriteData("M13.1", true); } public void MaterialThree() { WriteData("M13.2", true); } public void MaterialFour() { WriteData("M13.3", true); } public void MaterialFive() { WriteData("M13.4", true); } public void AutoModel(object obj) { WriteData("0.3", true); } public void ManualModel() { WriteData("0.2", true); } public void AddOil(object obj) { if ((int)obj == 1) { Task.Run(() => { WriteData("M2.7", true); Task.Delay(4000).Wait(); WriteData("M2.7", false); }); } if ((int)obj == 2) { Task.Run(() => { WriteData("M3.1", true); Task.Delay(4000).Wait(); WriteData("M3.1", false); }); } } public void TakePot(object obj) { WriteData("M14.0", true); } public void TakePotReset(object obj) { WriteData("M14.0", false); } public void TakeOff(object obj) { if ((int)obj == 1) WriteData("M4.0", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 if ((int)obj == 2) WriteData("M5.0", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 } public void OneBlock(object obj) { if ((int)obj == 1) WriteData("M4.0", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 if ((int)obj == 2) WriteData("M5.0", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 } public void TwoBlock(object obj) { if ((int)obj == 1) WriteData("M4.0", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 if ((int)obj == 2) WriteData("M5.0", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 } public void ThreeBlock(object obj) { if ((int)obj == 1) WriteData("M4.0", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 if ((int)obj == 2) WriteData("M5.0", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 } public void OverTurnOff(object obj) { if ((int)obj == 1) WriteData("M7.0", true); if ((int)obj == 2) WriteData("M7.4", true); } public void OverOneBlock(object obj) { if ((int)obj == 1) WriteData("M7.1", true); if ((int)obj == 2) WriteData("M7.5", true); } public void OverTwoBlock(object obj) { if ((int)obj == 1) WriteData("M7.2", true); if ((int)obj == 2) WriteData("M7.6", true); } public void OverThreeBlock(object obj) { if ((int)obj == 1) WriteData("M7.3", true); if ((int)obj == 2) WriteData("M7.7", true); } public void OverGoOn(object obj) { if ((int)obj == 1) WriteData("M8.0", true); if ((int)obj == 2) WriteData("M8.4", true); } public void OverGoDown(object obj) { if ((int)obj == 1) WriteData("M8.2", true); if ((int)obj == 2) WriteData("M8.6", true); } public void FlowInite() { } /// /// 订单初始化 /// private void InitialData() { //单个订单 string subId = Guid.NewGuid().ToString(); morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List() { 1 } });//A料 morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List() { 2 } });//B料 morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List() { 3 } });//C料 morkF.TakePlateQueue.Enqueue(new OrderLocInfo() { SuborderId = subId }); resultorder.AddRange(new int[] { 1, 2, 3 }); morkF.listStirBom.Add(stirFryBom); //多个订单 //string subId = Guid.NewGuid().ToString(); //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List() { 1 } });//A料 //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List() { 2 } });//B料 //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List() { 3 } });//C料 //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1, MaterialLoc = new List() { 1 } });//A料 //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1, MaterialLoc = new List() { 2 } });//B料 //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1, MaterialLoc = new List() { 3 } });//C料 //morkF.TakePlateQueue.Enqueue(new OrderLocInfo() { SuborderId = subId }); //morkF.TakePlateQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1 }); //resultorder.AddRange(new int[] { 1, 2, 3 }); //resultorder.AddRange(new int[] { 1, 2, 3 }); //morkF.listStirBom.Add(stirFryBom); //morkF.listStirBom.Add(stirFryBom); } #endregion public override void ResetProgram() { morkF = null; morkF = new GVL_MorkF(); } /// /// PLC数据读取 /// public override void ReadData() { GetStatus("M0.1", new Action((bools) => { Initing = bools[0]; morkF.InitialComplete = Initing; })); GetStatus("M1.0", new Action((bools) => { morkF.ProvidePlateModule = bools[0]; morkF.ProvidePlateComplete = bools[2]; morkF.CleanModule = bools[3]; morkF.CleanComplete = bools[5]; })); GetStatus("M2.0", new Action((bools) => { morkF.KitchenOneStatus = bools[1]; morkF.KitchenSecondStatus = bools[4]; morkF.FallOilComplete = bools[8]; })); GetStatus("M8.0", new Action((bools) => { morkF.TurnMachineUpComplete = bools[1]; morkF.TurnMachineDownComplete = bools[3]; })); GetStatus("M13.5", new Action((bools) => { morkF.MaterialArriveComplete = bools[0]; })); GetStatus("M16.0", new Action((bools) => { morkF.PutPotToKitchenComlete = bools[1]; morkF.TakeMaterialComplete = bools[2]; morkF.FallMaterialComplete = bools[3]; morkF.PlaceRinseTableComplete = bools[5]; morkF.RoobotIdle = bools[6]; })); } private void ServerInit() { //物料信息 EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) { if (@event == null) return; if (@event is MaterialDeliveryEvent material) { orderMaterialDelivery = material.orderMaterialDelivery; } }); //配方数据信息 EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) { if (@event == null) return; if (@event is RecipeBomEvent recipe) { recipeBoms = recipe.recipeBoms; WriteRecipeBoms(); } }); //小炒流程信息 EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callback) { if (@event == null) return; if (@event is StirFryGoodsEvent stirFry) { stirFryGoods = stirFry.stirFrymessage.stirFryGoods; MessageLog.GetInstance.Show("接收到小炒流程信息"); //流程解析 foreach (var item in stirFryGoods) { MessageLog.GetInstance.ShowEx($"执行菜谱{item.GoodsKey}"); // morkF.listStirBom.Add(item.StirFryBomInfo);//添加订单制作流程 foreach (var items in item.StirFryBomInfo.StirFryActions) { MessageLog.GetInstance.Show($"执行流程{items.Time}"); foreach (var pro in items.RobotActions) { switch (pro) { case StirFryRobotAction.等待: MessageLog.GetInstance.Show($"等待"); break; case StirFryRobotAction.清洗槽取锅: MessageLog.GetInstance.Show($"清洗槽取锅"); break; case StirFryRobotAction.灶放锅: MessageLog.GetInstance.Show($"灶放锅"); break; case StirFryRobotAction.清洗槽放锅: MessageLog.GetInstance.Show($"清洗槽放锅"); break; case StirFryRobotAction.取A料: MessageLog.GetInstance.Show($"取A料"); break; case StirFryRobotAction.取B料: MessageLog.GetInstance.Show($"取B料"); break; case StirFryRobotAction.取C料: MessageLog.GetInstance.Show($"取C料"); break; case StirFryRobotAction.加入A料: MessageLog.GetInstance.Show($"加入A料"); break; case StirFryRobotAction.加入B料: MessageLog.GetInstance.Show($"加入B料"); break; case StirFryRobotAction.加入C料: MessageLog.GetInstance.Show($"加入C料"); break; case StirFryRobotAction.切换快速: MessageLog.GetInstance.Show($"切换快速"); break; case StirFryRobotAction.切换中速: MessageLog.GetInstance.Show($"切换中速"); break; case StirFryRobotAction.丢料盒: MessageLog.GetInstance.Show($"丢料盒"); break; case StirFryRobotAction.倒菜: MessageLog.GetInstance.Show($"倒菜"); break; case StirFryRobotAction.灶取锅: MessageLog.GetInstance.Show($"灶取锅"); break; } } foreach (var pro in items.PotActions) { switch (pro) { case StirFryPotAction.NONE: break; case StirFryPotAction.加热: MessageLog.GetInstance.Show($"加热"); break; case StirFryPotAction.大火t1s: MessageLog.GetInstance.Show($"大火1s"); break; case StirFryPotAction.加油: MessageLog.GetInstance.Show($"加油"); break; case StirFryPotAction.中火t2s: MessageLog.GetInstance.Show($"中火2s"); break; case StirFryPotAction.小火持续: MessageLog.GetInstance.Show($"小火持续"); break; case StirFryPotAction.中火持续: MessageLog.GetInstance.Show($"中火持续"); break; case StirFryPotAction.大火持续: MessageLog.GetInstance.Show($"大火持续"); break; case StirFryPotAction.停止火力: MessageLog.GetInstance.Show($"停止火力"); break; case StirFryPotAction.搅拌臂上位: MessageLog.GetInstance.Show($"搅拌臂上位"); break; case StirFryPotAction.搅拌臂中位: MessageLog.GetInstance.Show($"搅拌臂中位"); break; case StirFryPotAction.搅拌臂下位: MessageLog.GetInstance.Show($"搅拌臂下位"); break; case StirFryPotAction.低速旋转: MessageLog.GetInstance.Show($"低速旋转"); break; case StirFryPotAction.快速旋转: MessageLog.GetInstance.Show($"快速旋转"); break; case StirFryPotAction.停止旋转: MessageLog.GetInstance.Show($"停止旋转"); break; } } } } } }); } /// /// 订单状态发布 /// /// /// private void OrderChange(string subid, ORDER_STATUS oRDER_STATUS) { EventBus.EventBus.GetInstance().Publish(new OrderStatusChangedEvent() { Status = oRDER_STATUS, SubOrderId = subid }); } /// /// 数据解析 /// private void DataParse() { EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBackHandle) { if (@event == null) return; if (@event is DoOrderEvent order) { if (order.MorkOrder.GoodBatchings == null) return; OrderCount++; DeviceProcessLogShow($"接收到{OrderCount}次订单"); var res = stirFryGoods?.FirstOrDefault(p => p.GoodsKey == order.MorkOrder.RecipeId);//匹配订单对应制作流程 if (res != null) { morkF.listStirBom.Add(res.StirFryBomInfo);//添加订单制作流程 if (morkF.TakeMaterialQueue.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) { morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, MaterialLoc = res.StirFryBomInfo.ALoc }); morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, MaterialLoc = res.StirFryBomInfo.BLoc }); morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, MaterialLoc = res.StirFryBomInfo.CLoc }); } //foreach (var item in order.MorkOrder.GoodBatchings) //{ if (morkF.TakePlateQueue.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) { morkF.TakePlateQueue.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, }); } //} } } }); } //} /// /// 主任务 /// public override void MainTask() { TakePlatelTask(); TurntableControl(); MainProcessExecute(); MinorProcessExcute(); SingleProcess(); } //辅流程执行 private void MinorProcessExcute() { if (!morkF.MinorProcessExcuteLock) { morkF.MinorProcessExcuteLock = true; Task.Run(() => { if (morkF.MinorProcessFlag && !morkF.RoobotIdle && morkF.TakeMaterialQueue.Count > 0 && morkF.listStirBom.Count > 0 ) { morkF.MinorProessStatus = true; morkF.MainProcessStatus = false; StirFryBom bom = morkF.listStirBom.ElementAt(0); morkF.listStirBom.RemoveAt(0); foreach (var res in bom.StirFryActions) { DeviceProcessLogShow($"执行流程{res.Time}"); //机器人线程 Task taskRobot = Task.Run(new Action(() => { foreach (var temp in res.RobotActions) { switch (temp) { case StirFryRobotAction.清洗槽取锅: TakePotTask();//执行取锅操作 break; case StirFryRobotAction.取A料: TakeBurdenATask();//执行取A料操作 break; case StirFryRobotAction.取B料: TakeBurdenATask();//执行取B料操作 break; case StirFryRobotAction.取C料: TakeBurdenCTask();//执行取C料操作 break; case StirFryRobotAction.灶取锅: MinorProcessOutDishTask();//执行出餐操作 MinorProcessCleanPotTask();//洗锅操作 break; } } })); //炒锅线程操作 Task taskPot = Task.Run(new Action(() => { foreach (var temp in res.PotActions) { switch (temp) { case StirFryPotAction.NONE: break; case StirFryPotAction.大火t1s: MinorProcessKitchenAdjustGears(3); // Task.Delay(1000).Wait(); //大火加热1s//执行大火锅干操作 break; case StirFryPotAction.加油: AddOil();//注油//执行加油操作 break; case StirFryPotAction.中火t2s: MinorProcessKitchenAdjustGears(2); Task.Delay(2000).Wait();//执行操作 break; case StirFryPotAction.小火持续: MinorProcessKitchenAdjustGears(1); break; case StirFryPotAction.中火持续: MinorProcessKitchenAdjustGears(5); break; case StirFryPotAction.大火持续: MinorProcessKitchenAdjustGears(7); break; case StirFryPotAction.停止火力: MinorProcessKitchenAdjustGears(0);//关闭灶加热 break; case StirFryPotAction.搅拌臂上位: MinorProcessTurnUpStatusDetect();//执行搅拌臂上位操作 break; case StirFryPotAction.搅拌臂下位: MinorProcessTurnDownStatusDetect();//执行搅拌臂下位操作 break; case StirFryPotAction.低速旋转: MinorProcessTurnMachineGearsControl(1);//执行搅拌臂速度1挡操作 break; case StirFryPotAction.快速旋转: MinorProcessTurnMachineGearsControl(2);//执行搅拌臂速度3挡操作 break; case StirFryPotAction.停止旋转: MinorProcessTurnMachineGearsControl(0);//执行搅拌臂速度0挡操作 break; } } })); Task.WhenAll(taskRobot, taskPot).Wait();//等待所有线程结束 Task.Delay(res.During * 1000).Wait();//当前流程延迟 if (morkF.MainProcessWait) { if (morkF.MainHasTakeMaterial) { } else { MinorProcessKitchenAdjustGears(0);//关闭灶加热 //阻塞辅流程 minorReset.WaitOne(); //morkF.MinorProessStatus = true; //morkF.MainProcessStatus = false; } } } morkF.MinorOutMealComplete = true; } else { morkF.MinorProcessExcuteLock = false;//解除辅流程自锁 } }); } } //机器人,锅灶主流程执行 public void MainProcessExecute() { if (!morkF.MainProcessExcuteLock) { morkF.MainProcessExcuteLock = true; Task.Run(new Action(() => { if (!morkF.RoobotIdle && morkF.InitialComplete && morkF.TakeMaterialQueue.Count > 0 && morkF.MainProcessFlag&& morkF.listStirBom.Count > 0) { morkF.MainProcessStatus = true; morkF.MinorProessStatus = false; StirFryBom bom = morkF.listStirBom.ElementAt(0); morkF.listStirBom.RemoveAt(0); foreach (var res in bom.StirFryActions)//遍历所有流程 { DeviceProcessLogShow($"执行流程{res.Time}"); //机器人线程 Task taskRobot = Task.Run(new Action(() => { foreach (var temp in res.RobotActions) { switch (temp) { case StirFryRobotAction.清洗槽取锅: TakePotTask();//执行取锅操作 break; case StirFryRobotAction.取A料: TakeBurdenATask();//执行取A料操作 break; case StirFryRobotAction.取B料: TakeBurdenATask();//执行取B料操作 break; case StirFryRobotAction.取C料: TakeBurdenCTask();//执行取C料操作 break; case StirFryRobotAction.灶取锅: MainProcessOutDishTask();//执行出餐操作 MainProcessCleanPotTask();//洗锅操作 break; } } })); //炒锅线程操作 Task taskPot = Task.Run(new Action(() => { foreach (var temp in res.PotActions) { switch (temp) { case StirFryPotAction.NONE: break; case StirFryPotAction.大火t1s: MainProcessKitchenAdjustGears(3); // Task.Delay(1000).Wait(); //大火加热1s//执行大火锅干操作 break; case StirFryPotAction.加油: AddOil();//注油//执行加油操作 break; case StirFryPotAction.中火t2s: MainProcessKitchenAdjustGears(2); Task.Delay(2000).Wait();//执行操作 break; case StirFryPotAction.小火持续: MainProcessKitchenAdjustGears(1); break; case StirFryPotAction.中火持续: MainProcessKitchenAdjustGears(5); break; case StirFryPotAction.大火持续: MainProcessKitchenAdjustGears(7); break; case StirFryPotAction.停止火力: MainProcessKitchenAdjustGears(0);//关闭灶加热 break; case StirFryPotAction.搅拌臂上位: MainProcessTurnUpStatusDetect();//执行搅拌臂上位操作 break; case StirFryPotAction.搅拌臂下位: MainProcessTurnDownStatusDetect();//执行搅拌臂下位操作 break; case StirFryPotAction.低速旋转: MainProcessTurnMachineGearsControl(1);//执行搅拌臂速度1挡操作 break; case StirFryPotAction.快速旋转: MainProcessTurnMachineGearsControl(2);//执行搅拌臂速度3挡操作 break; case StirFryPotAction.停止旋转: MainProcessTurnMachineGearsControl(0);//执行搅拌臂速度0挡操作 break; } } })); Task.WhenAll(taskRobot, taskPot).Wait();//等待所有线程结束 Task.Delay(res.During * 1000).Wait();//当前流程延迟 #region 两口锅逻辑 //if (morkF.MinorProcessWait) //{ // if (morkF.MinorHasTakeMaterial)//针对主流程准备出餐但辅流程机器人忙碌情况下,辅流程不阻塞 // { // } // else // { // MainProcessKitchenAdjustGears(0);//关闭灶加热 // //阻塞主流程 // mainReset.WaitOne(); // //morkF.MinorProessStatus = false; // //morkF.MainProcessStatus = true; // } //} #endregion } morkF.MainOutMealComplete = true; } else { morkF.MainProcessExcuteLock = false;//解除流程自锁 } })); } } /// /// 信号处理 /// private void SingleProcess() { //主流程出餐完成,相应变量复位 if (morkF.MainOutMealComplete) { morkF.MainOutMealComplete = false; morkF.TakePlateLock = false; morkF.MainProcessExcuteLock = false; morkF.MainOrderMaterialCom = false; morkF.MainProcessWait = false;//主流程出餐完成取消辅流程线程阻塞 #region 单口锅逻辑 morkF.PotInPlace = false; #endregion #region 两口锅逻辑 //if (morkF.MainProcessPotLoc == 1) //{ // morkF.PotInPlace = false; //} //else if (morkF.MainProcessPotLoc == 2) //{ // morkF.SecondPotInPlace = false; //} #endregion } //辅流程出餐完成,相应变量复位 if (morkF.MinorOutMealComplete) { morkF.MinorOutMealComplete = false; morkF.TakePlateLock = false; morkF.MinorProcessExcuteLock = false; morkF.MinorOrderMaterialCom = false; morkF.MinorProcessWait = false;//辅流程出餐完成取消主流程线程阻塞 if (morkF.MinorProcessPotLoc == 1) { morkF.PotInPlace = false; } else if (morkF.MinorProcessPotLoc == 2) { morkF.SecondPotInPlace = false; } } } /// /// 转台控制 /// private void TurntableControl() { //模拟订单 if (morkF.TakeMaterialQueue.Count > 0 && !morkF.TurnTableLock && General_Config.SimOrderAllow) { if (resultorder != null) { TurnMaterialStore(resultorder[0]); DeviceProcessLogShow($"转台转到【{resultorder[0]}】位置"); resultorder.RemoveAt(0); morkF.TurnTableLock = true; //取料完成后置false } else { DeviceProcessLogShow("当前订单未找到可用的物料信息"); } } //正式订单 if (morkF.TakeMaterialQueue.Count > 0 && !morkF.TurnTableLock) { //var result = orderMaterialDelivery.BatchingInfo.Where(p => p.BatchingId == morkF.TakeMaterialQueue.ElementAt(0).BatchingId).ToList(); var materialLoc = morkF.TakeMaterialQueue.ElementAt(0).MaterialLoc; if (materialLoc.Count != 0) { TurnMaterialStore(materialLoc[0]); DeviceProcessLogShow($"转台转到【{materialLoc[0]}】位置"); morkF.TurnTableLock = true; //取料完成后置false } else { DeviceProcessLogShow("当前订单未找到可用的物料信息"); } } } /// /// 供盘 /// /// private void TakePlatelTask() { if (!morkF.RoobotIdle && morkF.InitialComplete && morkF.TakePlateQueue.Count > 0 && !morkF.ProvidePlateModule && !morkF.TakePlateLock) { if (morkF.TakePlateQueue.TryDequeue(out OrderLocInfo order)) { StartTakePlate(); #region 两口锅逻辑 //if (morkF.MainProcessStatus) // morkF.MainCurrentOrderId = order.SuborderId; //if (morkF.MinorProessStatus) // morkF.MinorCurrentOrderId = order.SuborderId; #endregion #region 单口锅逻辑 morkF.CurrentOrderId = order.SuborderId; #endregion morkF.TakePlateLock = true; //订单完成后置false DeviceProcessLogShow($"订单【{order.SuborderId}】执行取碗控制"); } } } /// /// 取锅到灶台 /// /// private void TakePotTask() { while (morkF.CleanModule || morkF.KitchenOneStatus || !morkF.CleanComplete || morkF.RoobotIdle)//等待取锅条件满足 { Task.Delay(5).Wait(); } #region 单口锅逻辑 //if (!morkF.CleanModule && !morkF.KitchenOneStatus && morkF.CleanComplete) //{ //取1号锅到1号灶台 TakePotToKitchen(1); WriteData("M1.5", false);//清洗模组1完成复位 DeviceProcessLogShow($"订单【{morkF.CurrentOrderId}】执行取锅到灶台控制"); while (!morkF.PutPotToKitchenComlete) { Task.Delay(5).Wait(); } morkF.PotInPlace = true;//锅到位 WriteData("M14.0", false);//机器人取锅完成复位 //} #endregion #region 两口锅逻辑 //while (!((!morkF.CleanModule || !morkF.SecondCleanModule) && (!morkF.KitchenOneStatus || !morkF.KitchenSecondStatus) && (morkF.CleanComplete || morkF.SecondCleanComplete)))//等待取锅条件满足 //{ // Task.Delay(5).Wait(); //} //while (morkF.RoobotIdle)//等待机器人空闲 //{ // Task.Delay(5).Wait(); //} //if (!morkF.CleanModule && !morkF.KitchenOneStatus && morkF.CleanComplete) //{ // //取1号锅到1号灶台 // TakePotToKitchen(1); // morkF.CurrentPutPotLoc = 1; // WriteData("M1.5", false);//清洗模组1完成复位 // DeviceProcessLogShow($"订单【{morkF.CurrentOrderId}】执行取锅到灶台控制"); //} //else if (!morkF.SecondCleanModule && !morkF.KitchenOneStatus && morkF.SecondCleanComplete) //{ // //取2号锅到1号灶台 // TakePotToKitchen(1); // morkF.CurrentPutPotLoc = 1; // WriteData("M2.0", false);//清洗模组2完成复位 //} //if (!morkF.SecondCleanModule && !morkF.KitchenSecondStatus && morkF.SecondCleanComplete) //{ // //取2号锅到2号灶台 // TakePotToKitchen(2); // morkF.CurrentPutPotLoc = 2; // WriteData("M2.0", false);//清洗模组2完成复位 //} //else if (!morkF.CleanModule && !morkF.KitchenSecondStatus && morkF.CleanComplete) //{ // //取1号锅到2号灶台 // TakePotToKitchen(2); // morkF.CurrentPutPotLoc = 2; // WriteData("M2.0", false);//清洗模组1完成复位 //} //if (morkF.MainProcessStatus) //{ // morkF.MainProcessPotLoc = morkF.CurrentPutPotLoc; // DeviceProcessLogShow($"订单【{morkF.MainCurrentOrderId}】执行取锅到灶台控制"); //} //if (morkF.MinorProessStatus) //{ // morkF.MinorProcessPotLoc = morkF.CurrentPutPotLoc; // DeviceProcessLogShow($"订单【{morkF.MinorCurrentOrderId}】执行取锅到灶台控制"); //} //if (morkF.CurrentPutPotLoc == 1) //{ // while (!morkF.PutPotToKitchenComlete) // { // Task.Delay(5).Wait(); // } // morkF.PotInPlace = true;//锅到位 // WriteData("M14.0", false);//机器人取锅完成复位 //} //if (morkF.CurrentPutPotLoc == 2) //{ // while (!morkF.PutPotToSecondKitchenComlete) // { // Task.Delay(5).Wait(); // } // morkF.SecondPotInPlace = true; // WriteData("M14.4", false);//机器人取锅完成复位 //} #endregion Thread.Sleep(2000); } /// /// 写入配方数据到 PLC /// private void WriteRecipeBoms() { //List recipeBoms = new List(); //if (this.recipeBoms == null) return; //foreach (var item in this.recipeBoms.RecipeIds) //{ // foreach (var rec in item.Recipes) // { // recipeBoms.Add((ushort)rec); // } //} //if (recipeBoms.Count > 0) //{ // //配方数据地址范围:VW2000 - VW2278 // WriteData("VW2000", recipeBoms.ToArray()); //} //else {DeviceProcessLogShow("配方数据为空"); } } /// /// 转台复位 /// /// public void TurnReset(int loc) { switch (loc) { case 1: WriteData("M13.0", false); break; case 2: WriteData("M13.1", false); break; case 3: WriteData("M13.2", false); break; case 4: WriteData("M13.3", false); break; case 5: WriteData("M13.4", false); break; } } /// /// 取素菜A料 /// private void TakeBurdenATask() { int loc = 0; #region 单口锅逻辑 while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 { Task.Delay(5).Wait(); } if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) { loc = order.MaterialLoc[0]; TakeBurden(); TurnReset(loc);//转台复位 DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); } //等待取料完成 while (!morkF.TakeMaterialComplete) { Task.Delay(5).Wait(); } WriteData("M14.1", false);//机器人取料完成复位 #endregion #region 两口锅逻辑 //if (morkF.MainProcessStatus) //{ // if (morkF.MainProcessPotLoc == 1) // { // while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 // { // Task.Delay(5).Wait(); // } // } // else // { // while (morkF.RoobotIdle || !morkF.SecondPotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅2到位 // { // Task.Delay(5).Wait(); // } // } // if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) // { // loc = order.MaterialLoc[0]; // TakeBurden(); // TurnReset(loc);//转台复位 // DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); // } // //等待取料完成 // while (!morkF.TakeMaterialComplete) // { // Task.Delay(5).Wait(); // } // morkF.MainOrderMaterialCom = false; // morkF.MainHasTakeMaterial = true; // WriteData("M14.1", false);//机器人取料完成复位 //} //if (morkF.MinorProessStatus) //{ // if (morkF.MinorProcessPotLoc == 1) // { // while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 // { // Task.Delay(5).Wait(); // } // } // else // { // while (morkF.RoobotIdle || !morkF.SecondPotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅2到位 // { // Task.Delay(5).Wait(); // } // } // if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) // { // loc = order.MaterialLoc[0]; // TakeBurden(); // TurnReset(loc);//转台复位 // DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); // } // //等待取料完成 // while (!morkF.TakeMaterialComplete) // { // Task.Delay(5).Wait(); // } // morkF.MinorOrderMaterialCom = false; // morkF.MinorHasTakeMaterial = true; // WriteData("M14.5", false);//机器人取料完成复位 //} #endregion morkF.TurnTableLock = false;//转台互锁解除 } /// /// 取素菜B料 /// private void TakeBurdenBTask() { int loc = 0; //while (morkF.RoobotIdle || (!morkF.PotInPlace && !morkF.SecondPotInPlace) || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅到位 //{ // Task.Delay(5).Wait(); //} if (morkF.MainProcessStatus) { if (morkF.MainProcessPotLoc == 1) { while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 { Task.Delay(5).Wait(); } } else { while (morkF.RoobotIdle || !morkF.SecondPotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅2到位 { Task.Delay(5).Wait(); } } if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) { loc = order.MaterialLoc[0]; TakeBurden(); TurnReset(loc);//转台复位 DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); } //等待取料完成 while (!morkF.TakeMaterialComplete) { Task.Delay(5).Wait(); } morkF.MainOrderMaterialCom = false; morkF.MainHasTakeMaterial = true; WriteData("M14.1", false);//机器人取料完成复位 } if (morkF.MinorProessStatus) { if (morkF.MinorProcessPotLoc == 1) { while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 { Task.Delay(5).Wait(); } } else { while (morkF.RoobotIdle || !morkF.SecondPotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅2到位 { Task.Delay(5).Wait(); } } if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) { loc = order.MaterialLoc[0]; TakeBurden(); TurnReset(loc);//转台复位 DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); } //等待取料完成 while (!morkF.TakeMaterialComplete) { Task.Delay(5).Wait(); } morkF.MinorOrderMaterialCom = false; morkF.MinorHasTakeMaterial = true; WriteData("M14.5", false);//机器人取料完成复位 } morkF.TurnTableLock = false;//转台互锁解除 } /// /// 取调味品C料 /// /// private void TakeBurdenCTask() { #region 单口锅逻辑 int loc = 0; while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 { Task.Delay(5).Wait(); } if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) { loc = order.MaterialLoc[0]; TakeBurden(); TurnReset(loc);//转台复位 DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); } //等待取料完成 while (!morkF.TakeMaterialComplete) { Task.Delay(5).Wait(); } WriteData("M14.1", false);//机器人取料完成复位 morkF.TurnTableLock = false;//转台互锁解除 #endregion #region 两口锅逻辑 //int loc = 0; //if (morkF.MainProcessStatus) //{ // if (morkF.MainProcessPotLoc == 1) // { // while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 // { // Task.Delay(5).Wait(); // } // } // else // { // while (morkF.RoobotIdle || !morkF.SecondPotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅2到位 // { // Task.Delay(5).Wait(); // } // } // if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) // { // loc = order.MaterialLoc[0]; // TakeBurden(); // TurnReset(loc);//转台复位 // DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); // } // //等待取料完成 // while (!morkF.TakeMaterialComplete) // { // Task.Delay(5).Wait(); // } // morkF.MainOrderMaterialCom = false; // morkF.MainHasTakeMaterial = true; // WriteData("M14.1", false);//机器人取料完成复位 //} //if (morkF.MinorProessStatus) //{ // if (morkF.MinorProcessPotLoc == 1) // { // while (morkF.RoobotIdle || !morkF.PotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅1到位 // { // Task.Delay(5).Wait(); // } // } // else // { // while (morkF.RoobotIdle || !morkF.SecondPotInPlace || !morkF.MaterialArriveComplete)//等待机器人空闲以及锅2到位 // { // Task.Delay(5).Wait(); // } // } // if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) // { // loc = order.MaterialLoc[0]; // TakeBurden(); // TurnReset(loc);//转台复位 // DeviceProcessLogShow($"订单【{order.SuborderId}】,执行到转台{loc}位置取料"); // } // //等待取料完成 // while (!morkF.TakeMaterialComplete) // { // Task.Delay(5).Wait(); // } // morkF.MinorOrderMaterialCom = false; // morkF.MinorHasTakeMaterial = true; // WriteData("M14.5", false);//机器人取料完成复位 //} //morkF.TurnTableLock = false;//转台互锁解除 #endregion } /// /// 主流程出餐 /// private void MainProcessOutDishTask() { //while (morkF.RoobotIdle || morkF.CleanModule || !morkF.ProvidePlateComplete)//等待条件满足 //{ // Task.Delay(5).Wait(); //} #region 单口锅逻辑 while (morkF.RoobotIdle || morkF.CleanModule || !morkF.ProvidePlateComplete)//等待条件满足 { Task.Delay(5).Wait(); } if (morkF.TakePlateQueue.Count == 0) { WriteData("M0.7", false);//无订单关闭抽风机 } MainProcessRobotOutMeal(); WriteData("M1.2", false);//供盘复位 DeviceProcessLogShow($"订单【{morkF.CurrentOrderId}】执行取锅到清洗台控制"); #endregion #region 两口锅逻辑 //while (morkF.RoobotIdle || (morkF.CleanModule && morkF.SecondCleanModule) || !morkF.ProvidePlateComplete)//等待条件满足 //{ // Task.Delay(5).Wait(); //} //if (morkF.TakePlateQueue.Count == 0) //{ // WriteData("M0.7", false);//无订单关闭抽风机 //} //MainProcessRobotOutMeal(); //WriteData("M1.2", false);//供盘复位 //DeviceProcessLogShow($"订单【{morkF.MainCurrentOrderId}】执行取锅到清洗台控制"); #endregion } /// /// 复流程流程出餐 /// private void MinorProcessOutDishTask() { //while (morkF.RoobotIdle || morkF.CleanModule || !morkF.ProvidePlateComplete)//等待条件满足 //{ // Task.Delay(5).Wait(); //} while (morkF.RoobotIdle || (morkF.CleanModule && morkF.SecondCleanModule) || !morkF.ProvidePlateComplete)//等待条件满足 { Task.Delay(5).Wait(); } if (morkF.TakePlateQueue.Count == 0) { WriteData("M0.7", false);//无订单关闭抽风机 } MinorProcessRobotOutMeal(); WriteData("M1.2", false);//供盘复位 DeviceProcessLogShow($"订单【{morkF.MinorCurrentOrderId}】执行取锅到清洗台控制"); } /// /// 主流程洗锅放锅 /// private void MainProcessCleanPotTask() { #region 单口锅逻辑 while (!morkF.PlaceRinseTableComplete || morkF.CleanModule) { Task.Delay(5).Wait(); } WriteData("M14.2", false);//机器人出餐完成复位 CleanModuleControl("Start", 1); DeviceProcessLogShow($"订单【{morkF.CurrentOrderId}】执行清洗操作"); #endregion #region 两口锅逻辑 //while ((!morkF.PlaceRinseTableComplete || morkF.CleanModule) && (!morkF.PlaceRinseSecondTableComplete || morkF.SecondCleanModule)) //{ // Task.Delay(5).Wait(); //} //WriteData("M14.2", false);//机器人出餐完成复位 //if (morkF.PlaceRinseTableComplete && !morkF.CleanModule) //{ // CleanModuleControl("Start", 1); //} //if (morkF.PlaceRinseSecondTableComplete && !morkF.SecondCleanModule) //{ // CleanModuleControl("Start", 2); //} //DeviceProcessLogShow($"订单【{morkF.MainCurrentOrderId}】执行清洗操作"); //morkF.MainProcessFlag = false; //minorReset.Set(); #endregion //OrderChange(morkF.CurrentOrderId, ORDER_STATUS.COMPLETED_COOK); } /// /// 辅流程洗锅放锅 /// private void MinorProcessCleanPotTask() { while ((!morkF.PlaceRinseTableComplete || morkF.CleanModule) && (!morkF.PlaceRinseSecondTableComplete || morkF.SecondCleanModule)) { Task.Delay(5).Wait(); } WriteData("M14.6", false);//机器人出餐完成复位 if (morkF.PlaceRinseTableComplete && !morkF.CleanModule) { CleanModuleControl("Start", 1); } if (morkF.PlaceRinseSecondTableComplete && !morkF.SecondCleanModule) { CleanModuleControl("Start", 2); } DeviceProcessLogShow($"订单【{morkF.MinorCurrentOrderId}】执行清洗操作"); morkF.MinorProcessFlag = false; mainReset.Set(); //OrderChange(morkF.CurrentOrderId, ORDER_STATUS.COMPLETED_COOK); } /// /// 任务复位重启 /// //private void ResetProgram() //{ // ThreadManage.GetInstance().StartLong(new Action(() => // { // if (RTrig.GetInstance("ResetProgram").Start(morkF.DevicDataInite)) // { // ThreadManage.GetInstance().StopTask("MainTask", new Action(() => // { // ThreadManage.GetInstance().StopTask("ReadPLCData", new Action(() => // { // morkF = null; // morkF = new GVL_MorkF(); // ActionManage.GetInstance.Send("ResetProgram"); // ActionManage.GetInstance.Send("ClearOrders"); // ReadData(); // Main(); // })); // })); // } // Thread.Sleep(10); // }), "ResetProgram"); //} /// /// 主流程翻转机下降及状态检测 /// public void MainProcessTurnDownStatusDetect() { int potLoc = MainProcessTurnMachineOrientControl("Down"); if (potLoc == 1) { while (!morkF.TurnMachineDownComplete)//等待翻转机下降完成 { Task.Delay(5).Wait(); } WriteData("M8.3", false);//下降完成复位 } if (potLoc == 2) { while (!morkF.SecondTurnMachineDownComplete)//等待翻转机下降完成 { Task.Delay(5).Wait(); } WriteData("M8.7", false);//下降完成复位 } DeviceProcessLogShow($"翻转机下降完成"); } /// /// 辅流程翻转机下降及状态检测 /// public void MinorProcessTurnDownStatusDetect() { int potLoc = MinorProcessTurnMachineOrientControl("Down"); if (potLoc == 1) { while (!morkF.TurnMachineDownComplete)//等待翻转机下降完成 { Task.Delay(5).Wait(); } WriteData("M8.3", false);//下降完成复位 } if (potLoc == 2) { while (!morkF.SecondTurnMachineDownComplete)//等待翻转机下降完成 { Task.Delay(5).Wait(); } WriteData("M8.7", false);//下降完成复位 } DeviceProcessLogShow($"翻转机下降完成"); //if (morkF.MaterialCount == 3 && morkF.MainProcessStatus) //{ // morkF.MainProcessWait = true; //} //else if (morkF.MaterialCount == 3 && morkF.MinorProessStatus) //{ // morkF.MinorProcessWait = true; //} } /// /// 主流程翻转机上升及状态检测 /// public void MainProcessTurnUpStatusDetect() { //while (morkF.RoobotIdle)//机器人忙碌 //{ // Task.Delay(5).Wait(); //} MainProcessTurnMachineOrientControl("Top");//翻转机上升 #region 单口锅逻辑 while (!morkF.TurnMachineUpComplete)//等待翻转机上升完成以及取料完成 { Task.Delay(5).Wait(); } WriteData("M8.1", false);//上升完成复位 WriteData("M14.3", true);//倒料 while (!morkF.FallMaterialComplete)//等待倒料完成 { Task.Delay(5).Wait(); } WriteData("M14.3", false);//倒料复位 DeviceProcessLogShow($"订单【{morkF.CurrentOrderId}】,配料倒料完成"); #endregion #region 两口锅逻辑 //if (morkF.MainProcessPotLoc == 1) //{ // while (!morkF.TurnMachineUpComplete)//等待翻转机上升完成以及取料完成 // { // Task.Delay(5).Wait(); // } // WriteData("M8.1", false);//上升完成复位 // if (!morkF.MainOrderMaterialCom) // { // WriteData("M14.3", true);//倒料 // while (!morkF.FallMaterialComplete)//等待倒料完成 // { // Task.Delay(5).Wait(); // } // morkF.MaterialCount++; // WriteData("M14.3", false);//倒料复位 // if (morkF.MaterialCount == 3) // { // //允许执行下一个订单流程 // morkF.MaterialCount = 0; // morkF.MinorProcessFlag = true; // } // morkF.MainOrderMaterialCom = true; // morkF.MainHasTakeMaterial = false; // DeviceProcessLogShow($"订单【{morkF.MainCurrentOrderId}】,配料倒料完成"); // } // else //辅程准备阻塞 // { // morkF.MainProcessWait = true; // } //} //if (morkF.MainProcessPotLoc == 2) //{ // while (!morkF.SecondTurnMachineUpComplete)//等待翻转机上升完成以及取料完成 // { // Task.Delay(5).Wait(); // } // WriteData("M8.5", false);//上升完成复位 // if (!morkF.MainOrderMaterialCom) // { // WriteData("M14.7", true);//倒料 // while (!morkF.SecondFallMaterialComplete)//等待倒料完成 // { // Task.Delay(5).Wait(); // } // morkF.MaterialCount++; // WriteData("M14.7", false);//倒料复位 // if (morkF.MaterialCount == 3) // { // //允许执行下一个订单流程 // morkF.MaterialCount = 0; // morkF.MinorProcessFlag = true; // } // morkF.MainOrderMaterialCom = true; // morkF.MainHasTakeMaterial = false; // DeviceProcessLogShow($"订单【{morkF.MinorCurrentOrderId}】,配料倒料完成"); // } // else //辅流程准备阻塞 // { // morkF.MainProcessWait = true; // } //} #endregion DeviceProcessLogShow("翻转机上升完成"); } /// /// 辅流程翻转机上升及状态检测 /// public void MinorProcessTurnUpStatusDetect() { while (morkF.RoobotIdle)//机器人忙碌 { Task.Delay(5).Wait(); } MinorProcessTurnMachineOrientControl("Top");//翻转机上升 if (morkF.MinorProcessPotLoc == 1) { while (!morkF.TurnMachineUpComplete)//等待翻转机上升完成以及取料完成 { Task.Delay(5).Wait(); } WriteData("M8.1", false);//上升完成复位 if (!morkF.MinorOrderMaterialCom) { WriteData("M14.3", true);//倒料 while (!morkF.FallMaterialComplete)//等待倒料完成 { Task.Delay(5).Wait(); } morkF.MaterialCount++; WriteData("M14.3", false);//倒料复位 if (morkF.MaterialCount == 3) { //允许执行下一个订单流程 morkF.MaterialCount = 0; morkF.MainProcessFlag = true; } morkF.MinorOrderMaterialCom = true; morkF.MinorHasTakeMaterial = false; DeviceProcessLogShow($"订单【{morkF.MainCurrentOrderId}】,配料倒料完成"); } else //主程准备阻塞 { morkF.MinorProcessWait = true; } } if (morkF.MinorProcessPotLoc == 2) { while (!morkF.SecondTurnMachineUpComplete)//等待翻转机上升完成以及取料完成 { Task.Delay(5).Wait(); } WriteData("M8.5", false);//上升完成复位 if (!morkF.MinorOrderMaterialCom) { WriteData("M14.7", true);//倒料 while (!morkF.SecondFallMaterialComplete)//等待倒料完成 { Task.Delay(5).Wait(); } morkF.MaterialCount++; WriteData("M14.7", false);//倒料复位 if (morkF.MaterialCount == 3) { //允许执行下一个订单流程 morkF.MaterialCount = 0; morkF.MainProcessFlag = true; } morkF.MinorOrderMaterialCom = true; morkF.MinorHasTakeMaterial = false; DeviceProcessLogShow($"订单【{morkF.MinorCurrentOrderId}】,配料倒料完成"); } else //主流程准备阻塞 { morkF.MinorProcessWait = true; } } DeviceProcessLogShow("翻转机上升完成"); } private void GetStatus(string key, Action action) { if (peripheralStatus.ContainsKey(key)) { action((bool[])peripheralStatus[key]);//获取PLC指定地址的状态值 } } /// /// 写数据 /// /// /// private void WriteData(string address, object value) { EventBus.EventBus.GetInstance().Publish(new WriteModel() { DeviceId = DeviceId, Address = address, Value = value }); } public void FirstPotGears(int number) { switch (number) { case 0: //if (morkF.MainProcessStatus && morkF.PotInPlace) WriteData("M4.0", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 //if (morkF.MinorProessStatus && morkF.SecondPotInPlace) // WriteData("M5.0", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 break; case 1: // if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 break; case 2: //if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 break; case 3: //if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 break; case 4: // if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { false, false, true, false, false, false, false, false });//0000 0100 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, false, true, false, false, false, false, false });//0000 0100 break; case 5: if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { true, false, true, false, false, false, false, false });//0000 0101 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, false, true, false, false, false, false, false });//0000 0101 break; case 6: // if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { false, true, true, false, false, false, false, false });//0000 0110 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, true, true, false, false, false, false, false });//0000 0110 break; case 7: // if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { true, true, true, false, false, false, false, false });//0000 0111 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, true, true, false, false, false, false, false });//0000 0111 break; case 8: //if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { false, false, false, true, false, false, false, false });//0000 1000 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, false, false, true, false, false, false, false });//0000 1000 break; case 9: //if (morkF.MainProcessStatus) WriteData("M4.0", new bool[] { true, false, false, true, false, false, false, false });//0000 1001 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, false, false, true, false, false, false, false });//0000 1001 break; } } public void SecondPotGears(int number) { switch (number) { case 0: //if (morkF.MainProcessStatus && morkF.PotInPlace) WriteData("M5.0", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 //if (morkF.MinorProessStatus && morkF.SecondPotInPlace) // WriteData("M5.0", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 break; case 1: // if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 break; case 2: //if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 break; case 3: //if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 break; case 4: // if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { false, false, true, false, false, false, false, false });//0000 0100 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, false, true, false, false, false, false, false });//0000 0100 break; case 5: if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { true, false, true, false, false, false, false, false });//0000 0101 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, false, true, false, false, false, false, false });//0000 0101 break; case 6: // if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { false, true, true, false, false, false, false, false });//0000 0110 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, true, true, false, false, false, false, false });//0000 0110 break; case 7: // if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { true, true, true, false, false, false, false, false });//0000 0111 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, true, true, false, false, false, false, false });//0000 0111 break; case 8: //if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { false, false, false, true, false, false, false, false });//0000 1000 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { false, false, false, true, false, false, false, false });//0000 1000 break; case 9: //if (morkF.MainProcessStatus) WriteData("M5.0", new bool[] { true, false, false, true, false, false, false, false });//0000 1001 //if (morkF.MinorProessStatus) // WriteData("M5.0", new bool[] { true, false, false, true, false, false, false, false });//0000 1001 break; } } /// /// 主流程灶台档位调节 /// public void MainProcessKitchenAdjustGears(int number) { #region 单口锅逻辑 while (!morkF.PotInPlace) { Task.Delay(5).Wait(); } FirstPotGears(number); DeviceProcessLogShow($"灶台【{morkF.CurrentOrderId}】档位调节至【{number}】挡"); #endregion #region 两口锅逻辑 //if (morkF.MainProcessPotLoc == 1) //{ // while (!morkF.PotInPlace) // { // Task.Delay(5).Wait(); // } // FirstPotGears(number); //} //if (morkF.MainProcessPotLoc == 2) //{ // while (!morkF.SecondPotInPlace) // { // Task.Delay(5).Wait(); // } // SecondPotGears(number); //} //DeviceProcessLogShow($"灶台【{morkF.MainProcessPotLoc}】档位调节至【{number}】挡"); #endregion } /// /// 辅流程灶台档位调节 /// public void MinorProcessKitchenAdjustGears(int number) { if (morkF.MinorProcessPotLoc == 1) { while (!morkF.PotInPlace) { Task.Delay(5).Wait(); } FirstPotGears(number); } if (morkF.MinorProcessPotLoc == 2) { while (!morkF.SecondPotInPlace) { Task.Delay(5).Wait(); } SecondPotGears(number); } DeviceProcessLogShow($"灶台【{morkF.MinorProcessPotLoc}】档位调节至【{number}】挡"); } /// /// PLC转台控制 /// /// public void TurnMaterialStore(int loc) { switch (loc) { case 1: WriteData("M13.0", true); break; case 2: WriteData("M13.1", true); break; case 3: WriteData("M13.2", true); break; case 4: WriteData("M13.3", true); break; case 5: WriteData("M13.4", true); break; } } public void PLCInite() { WriteData("M0.0", true); } /// /// 供盘启动 /// public void StartTakePlate() { WriteData("M1.1", true); } /// /// 取锅到灶台 /// public void TakePotToKitchen(int loc) { if (loc == 1) WriteData("M14.0", true); if (loc == 2) WriteData("M14.4", true); } /// /// 主流程机器人出餐并将锅放置清洗台位置 /// public void MainProcessRobotOutMeal() { #region 单口锅逻辑 WriteData("M14.2", true);//1号锅出餐 #endregion #region 两口锅逻辑 //if (morkF.MainProcessPotLoc == 1) //{ // WriteData("M14.2", true);//1号锅出餐 //} //else if (morkF.MainProcessPotLoc == 2) //{ // WriteData("M14.6", true);//2号锅出餐 //} #endregion } /// /// 复流程机器人出餐并将锅放置清洗台位置 /// public void MinorProcessRobotOutMeal() { if (morkF.MinorProcessPotLoc == 1) { WriteData("M14.2", true);//1号锅出餐 } else if (morkF.MinorProcessPotLoc == 2) { WriteData("M14.6", true);//2号锅出餐 } } public void OpenDraft() { WriteData("M0.7", true);//打开抽风机 } /// /// 注油 /// public void AddOil() { #region 单口锅逻辑 while (!morkF.PotInPlace) { Task.Delay(5).Wait(); } WriteData("M2.7", true);//加油 OpenDraft(); DeviceProcessLogShow("开始注油"); while (!morkF.FallOilComplete) { Task.Delay(5).Wait(); } #endregion #region 两口锅逻辑 //if (morkF.MainProcessStatus) //{ // if (morkF.MainProcessPotLoc == 1) // { // while (!morkF.PotInPlace) // { // Task.Delay(5).Wait(); // } // WriteData("M2.7", true);//加油 // OpenDraft(); // DeviceProcessLogShow("开始注油"); // while (!morkF.FallOilComplete) // { // Task.Delay(5).Wait(); // } // } // if (morkF.MainProcessPotLoc == 2) // { // while (!morkF.SecondPotInPlace) // { // Task.Delay(5).Wait(); // } // WriteData("M3.1", true);//加油 // OpenDraft(); // DeviceProcessLogShow("开始注油"); // while (!morkF.SecondOilComplete) // { // Task.Delay(5).Wait(); // } // } //} //if (morkF.MinorProessStatus) //{ // if (morkF.MinorProcessPotLoc == 1) // { // while (!morkF.PotInPlace) // { // Task.Delay(5).Wait(); // } // WriteData("M2.7", true);//加油 // OpenDraft(); // DeviceProcessLogShow("开始注油"); // while (!morkF.FallOilComplete) // { // Task.Delay(5).Wait(); // } // } // if (morkF.MinorProcessPotLoc == 2) // { // while (!morkF.SecondPotInPlace) // { // Task.Delay(5).Wait(); // } // WriteData("M3.1", true);//加油 // OpenDraft(); // DeviceProcessLogShow("开始注油"); // while (!morkF.SecondOilComplete) // { // Task.Delay(5).Wait(); // } // } //} #endregion //while (!morkF.FallOilComplete || !morkF.SecondOilComplete) //{ // Task.Delay(5).Wait(); //} DeviceProcessLogShow("注油完成"); } public void FirstPotTurnMachine(string orientation) { switch (orientation) { case "Top": WriteData("M8.0", true); break; case "Down": WriteData("M8.2", true); break; } } public void SecondPotTurnMachine(string orientation) { switch (orientation) { case "Top": WriteData("M8.4", true); break; case "Down": WriteData("M8.6", true); break; } } /// /// 主流程翻转机方向控制 /// /// public int MainProcessTurnMachineOrientControl(string orientation) { int potLoc = 0; #region 单口锅逻辑 FirstPotTurnMachine(orientation); potLoc = 1; #endregion #region 两口锅逻辑 //if (morkF.MainProcessPotLoc == 1) //{ // FirstPotTurnMachine(orientation); // potLoc = 1; //} //if (morkF.MainProcessPotLoc == 2) //{ // SecondPotTurnMachine(orientation); // potLoc = 2; //} #endregion DeviceProcessLogShow($"翻转机执行{orientation}操作"); return potLoc; } /// /// 辅流程翻转机方向控制 /// /// public int MinorProcessTurnMachineOrientControl(string orientation) { int potLoc = 0; if (morkF.MinorProcessPotLoc == 1) { FirstPotTurnMachine(orientation); potLoc = 1; } if (morkF.MinorProcessPotLoc == 2) { SecondPotTurnMachine(orientation); potLoc = 2; } DeviceProcessLogShow($"翻转机执行{orientation}操作"); return potLoc; } public void FirstPotTurnMachine(int gear) { while (!morkF.PotInPlace) { Task.Delay(5).Wait(); } switch (gear) { case 0: WriteData("M7.0", true); Task.Delay(1000).Wait(); break;//关闭翻炒机 case 1: WriteData("M7.1", true); break;//翻炒机1挡 case 2: WriteData("M7.2", true); break;//翻炒机2挡 case 3: WriteData("M7.3", true); break;//翻炒机3挡 } } public void SecondPotTurnMachine(int gear) { while (!morkF.SecondPotInPlace) { Task.Delay(5).Wait(); } switch (gear) { case 0: WriteData("M7.4", true); Task.Delay(1000).Wait(); break;//关闭翻炒机 case 1: WriteData("M7.5", true); break;//翻炒机1挡 case 2: WriteData("M7.6", true); break;//翻炒机2挡 case 3: WriteData("M7.7", true); break;//翻炒机3挡 } } /// /// 主流程翻转机档位控制 /// public void MainProcessTurnMachineGearsControl(int gear) { #region 单口锅逻辑 FirstPotTurnMachine(gear); DeviceProcessLogShow($"炒锅【{morkF.CurrentOrderId}】翻转机档位调至{gear}挡"); #endregion #region 两口锅逻辑 //if (morkF.MainProcessPotLoc == 1) //{ // FirstPotTurnMachine(gear); //} //if (morkF.MainProcessPotLoc == 2) //{ // SecondPotTurnMachine(gear); //} //DeviceProcessLogShow($"炒锅【{morkF.MainProcessPotLoc}】翻转机档位调至{gear}挡"); #endregion } /// /// 辅流程翻转机档位控制 /// public void MinorProcessTurnMachineGearsControl(int gear) { if (morkF.MinorProcessPotLoc == 1) { FirstPotTurnMachine(gear); } if (morkF.MinorProcessPotLoc == 2) { SecondPotTurnMachine(gear); } DeviceProcessLogShow($"炒锅【{morkF.MinorProcessPotLoc}】翻转机档位调至{gear}挡"); } /// /// 取A,B,C料 /// public void TakeBurden() { #region 单口锅逻辑 WriteData("M14.1", true);//机器人取料至1号锅 #endregion #region 两口锅逻辑 //if (morkF.PotInPlace) // WriteData("M14.1", true);//机器人取料至1号锅 //if (morkF.SecondPotInPlace) // WriteData("M14.5", true);//机器人取料至2号锅 #endregion } /// /// 清洗模组1启停控制 /// public void CleanModuleControl(string status, int loc) { if (loc == 1) { if (status == "Start") { WriteData("M1.4", true); } if (status == "Stop") { WriteData("M1.4", false); } DeviceProcessLogShow($"清洗模组1执行【{status}】操作"); } if (loc == 2) { if (status == "Start") { WriteData("M1.7", true); } if (status == "Stop") { WriteData("M1.7", false); } DeviceProcessLogShow($"清洗模组2执行【{status}】操作"); } } public override void Stop() { } public override void SimOrder() { } } }