|
- 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> stirFryGoods = new List<StirFryGoods>();//创建商品对象
- List<int> resultorder = new List<int>();//调试变量
- /// <summary>
- /// 入口
- /// </summary>
- public override void DoMain()
- {
- CommandRegist();//调试
- ServerInit();
- DataParse();//数据解析
- DeviceProcessLogShow("MORKF 设备初始化完成");
- }
- #region 调试代码
- public void CommandRegist()
- {
- #region 设备控制
- ActionManage.GetInstance.Register(PLCInite, "InitCommand");
- ActionManage.GetInstance.Register(InitialData, "SimultaorOrder");
-
- #endregion
- ActionManage.GetInstance.Register(ShreddCabbage, "ShreddCabbage");
- ActionManage.GetInstance.Register(FryPork, "FryPork");
- ActionManage.GetInstance.Register(XingBaoGu, "XingBaoGu");
-
- #region 配料控制
- ActionManage.GetInstance.Register(OutMaterials, "OutMaterials");
- #endregion
-
- #region 炒锅1
- ActionManage.GetInstance.Register<Action>(AddOil, "AddOil");
- ActionManage.GetInstance.Register(StartFire, "StartFire");
- ActionManage.GetInstance.Register(StopFire, "StopFire");
- ActionManage.GetInstance.Register(StartStir, "StartStir");
- ActionManage.GetInstance.Register(StopStir, "StopStir");
- ActionManage.GetInstance.Register(OutFood, "OutFood");
- ActionManage.GetInstance.Register(StirArmGoOrigin, "StirArmGoOrigin");
- ActionManage.GetInstance.Register(StirArmGoWork, "StirArmGoWork");
- ActionManage.GetInstance.Register(HBOTGoWork, "HBOTGoWork");
- ActionManage.GetInstance.Register(OutMeal, "OutMeal");
- ActionManage.GetInstance.Register(SetFire, "SetFire");
- ActionManage.GetInstance.Register(SetStir, "SetStir");
- #endregion
-
-
- }
-
-
- /// <summary>
- /// 手撕包菜流程
- /// </summary>
- public void ShreddCabbage()
- {
- if (stirFryBom.StirFryActions.Count > 0)
- {
- stirFryBom.StirFryActions.Clear();
- }
- //流程
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T1, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.清洗槽取锅 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T2, PotActions = new List<StirFryPotAction>() { StirFryPotAction.大火持续 }, During = 5 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T3, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.取A料 }, PotActions = new List<StirFryPotAction>() { StirFryPotAction.加油, StirFryPotAction.搅拌臂下位, StirFryPotAction.低速旋转 }, During = 6 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T4, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止旋转, StirFryPotAction.停止火力, StirFryPotAction.搅拌臂上位 } });//加A料
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T5, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.取B料 }, PotActions = new List<StirFryPotAction>() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 6 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加B料
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T7, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.取C料 }, PotActions = new List<StirFryPotAction>() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 9 });
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T8, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加C料
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T9, PotActions = new List<StirFryPotAction>() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 30 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T10, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T11, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.灶取锅 } });
- morkF.listStirBom.Add(stirFryBom);
- }
- /// <summary>
- /// 盐煎肉流程
- /// </summary>
- public void FryPork()
- {
- if (stirFryBom.StirFryActions.Count > 0)
- {
- stirFryBom.StirFryActions.Clear();
- }
- //流程
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T1, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.清洗槽取锅 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T2, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力, StirFryPotAction.搅拌臂下位, StirFryPotAction.低速旋转 }, During = 15 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T3, PotActions = new List<StirFryPotAction>() { StirFryPotAction.加油, StirFryPotAction.停止火力 }, During = 19 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T4, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T5, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.加入A料 } });
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, PotActions = new List<StirFryPotAction>() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 20 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T7, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力 }, During = 35 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T8, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位, } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T9, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.加入B料 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T10, PotActions = new List<StirFryPotAction>() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 22 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T11, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T12, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.加入C料 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T13, PotActions = new List<StirFryPotAction>() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 70 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T14, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T15, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.灶取锅 } });
- }
- /// <summary>
- /// 酱烧杏鲍菇流程
- /// </summary>
- public void XingBaoGu()
- {
- if (stirFryBom.StirFryActions.Count > 0)
- {
- stirFryBom.StirFryActions.Clear();
- }
- //流程
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T1, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.清洗槽取锅 } });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T2, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.加入A料 }, PotActions = new List<StirFryPotAction>() { StirFryPotAction.中火持续, StirFryPotAction.搅拌臂下位, StirFryPotAction.低速旋转 }, During = 5 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T3, PotActions = new List<StirFryPotAction>() { StirFryPotAction.加油 }, During = 12 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T4, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加A料
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.加入B料 }, PotActions = new List<StirFryPotAction>() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 25 });
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T7, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加B料
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T9, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.加入C料 }, PotActions = new List<StirFryPotAction>() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 30 });
-
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T10, PotActions = new List<StirFryPotAction>() { StirFryPotAction.停止火力, StirFryPotAction.停止旋转, StirFryPotAction.搅拌臂上位 } });//加C料
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T6, PotActions = new List<StirFryPotAction>() { StirFryPotAction.搅拌臂下位, StirFryPotAction.快速旋转 }, During = 55 });
- stirFryBom.AddAction(new StirFryAction() { Time = StirFryTime.T11, RobotActions = new List<StirFryRobotAction>() { StirFryRobotAction.灶取锅 } });
- }
- //出配料
- public void OutMaterials(object o)
- {
- if (o == null) return;
- if (o is List<int> ints && ints.Count == 2)
- {
- WriteControl(morkF.PassWayValue[ints[0]], ints[1]);//写入通道值
- Thread.Sleep(500);
- WriteControl(morkF.StartPassWay[ints[0]], true);//开启通道
- }
- }
-
- #region 炒锅1
- //加热启动
- public void StartFire()
- {
- WriteControl("M0.1", true);
- }
- //加热停止
- public void StopFire()
- {
- WriteControl("M0.1", false);
- }
- //搅拌启动
- public void StartStir()
- {
- WriteControl("M0.2", true);
- }
- //搅拌启停止
- public void StopStir()
- {
- WriteControl("M0.2", false);
- }
- //倒菜
- public void OutFood()
- {
- WriteControl("M0.3", true);
- }
- //搅拌臂去原点位
- public void StirArmGoOrigin()
- {
- WriteControl("M0.5", true);
- }
-
- //搅拌臂去炒制位
- public void StirArmGoWork()
- {
- WriteControl("M0.6", true);
- }
- //HBOT放盒子到位
- public void HBOTGoWork()
- {
- WriteControl("M0.7", true);
- }
- //出餐启动
- public void OutMeal()
- {
- WriteControl("M0.4", true);
- }
- //加热挡位设定
- public void SetFire(object o)
- {
- if(o == null) return;
- if(o is List<int> ints&&ints.Count == 1)
- {
- WriteControl("VW228",ints[0]);
-
- }
-
- }
- //搅拌挡位设定
- public void SetStir(object o)
- {
- if (o == null) return;
- if (o is List<int> ints && ints.Count == 1)
- {
- WriteControl("VW230", ints[0]);
-
- }
- }
-
- #endregion
-
-
-
- /// <summary>
- /// 订单初始化
- /// </summary>
- private void InitialData()
- {
- string subId = Guid.NewGuid().ToString();
- //单个订单
- //string subId = Guid.NewGuid().ToString();
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List<int>() { 1 } });//A料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List<int>() { 2 } });//B料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List<int>() { 3 } });//C料
- //morkF.TakePlateQueue.Enqueue(new OrderLocInfo() { SuborderId = subId });
- //resultorder.AddRange(new int[] { 1, 2, 3 });
-
- for (int i = 0; i < morkF.listStirBom.Count; i++)
- {
- morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+i, MaterialLoc = new List<int>() { 1 } });//A料
- morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+i, MaterialLoc = new List<int>() { 2 } });//B料
- morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+i, MaterialLoc = new List<int>() { 3 } });//C料
- morkF.TakePlateQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+i });
- //resultorder.AddRange(new int[] { 1, 2, 3 });
- }
-
- //多个订单
- //string subId = Guid.NewGuid().ToString();
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List<int>() { 1 } });//A料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List<int>() { 2 } });//B料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId, MaterialLoc = new List<int>() { 3 } });//C料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1, MaterialLoc = new List<int>() { 1 } });//A料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1, MaterialLoc = new List<int>() { 2 } });//B料
- //morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { SuborderId = subId+1, MaterialLoc = new List<int>() { 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 });
-
- }
- #endregion
-
- public override void ResetProgram()
- {
- morkF = null;
- morkF = new GVL_MorkF();
- }
-
- /// <summary>
- /// PLC数据读取
- /// </summary>
- public override void ReadData()
- {
-
- GetStatus("M0.1", new Action<bool[]>((bools) =>
- {
- Initing = bools[0];
- morkF.InitialComplete = Initing;
- }));
- GetStatus("M1.0", new Action<bool[]>((bools) =>
- {
- morkF.ProvidePlateModule = bools[0];
- morkF.ProvidePlateComplete = bools[2];
- morkF.CleanModule = bools[3];
- morkF.CleanComplete = bools[5];
- }));
- GetStatus("M2.0", new Action<bool[]>((bools) =>
- {
- morkF.KitchenOneStatus = bools[1];
- morkF.KitchenSecondStatus = bools[4];
- morkF.FallOilComplete = bools[8];
- }));
- GetStatus("M8.0", new Action<bool[]>((bools) =>
- {
- morkF.TurnMachineUpComplete = bools[1];
- morkF.TurnMachineDownComplete = bools[3];
- }));
- GetStatus("M13.5", new Action<bool[]>((bools) =>
- {
- morkF.MaterialArriveComplete = bools[0];
- }));
- GetStatus("M16.0", new Action<bool[]>((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<MaterialDeliveryEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
- {
- if (@event == null) return;
- if (@event is MaterialDeliveryEvent material)
- {
- orderMaterialDelivery = material.orderMaterialDelivery;
-
- }
- });
-
- //配方数据信息
- EventBus.EventBus.GetInstance().Subscribe<RecipeBomEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
- {
- if (@event == null) return;
- if (@event is RecipeBomEvent recipe)
- {
- recipeBoms = recipe.recipeBoms;
- WriteRecipeBoms();
- }
- });
- //小炒流程信息
- EventBus.EventBus.GetInstance().Subscribe<StirFryGoodsEvent>(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;
- }
- }
- }
- }
- }
- });
- }
- /// <summary>
- /// 订单状态发布
- /// </summary>
- /// <param name="subid"></param>
- /// <param name="oRDER_STATUS"></param>
- private void OrderChange(string subid, ORDER_STATUS oRDER_STATUS)
- {
- EventBus.EventBus.GetInstance().Publish(new OrderStatusChangedEvent() { Status = oRDER_STATUS, SubOrderId = subid });
- }
-
-
-
- /// <summary>
- /// 数据解析
- /// </summary>
- private void DataParse()
- {
- EventBus.EventBus.GetInstance().Subscribe<DoOrderEvent>(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,
- });
- }
- //}
- }
- }
-
- });
- }
- //}
- /// <summary>
- /// 主任务
- /// </summary>
- 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;//解除流程自锁
- }
- }));
- }
-
- }
- /// <summary>
- /// 信号处理
- /// </summary>
- 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;
- }
- }
-
- }
-
- /// <summary>
- /// 转台控制
- /// </summary>
- private void TurntableControl()
- {
- //模拟订单
- if (morkF.TakeMaterialQueue.Count > 0 && !morkF.TurnTableLock && General_Config.SimOrderAllow)
- {
- if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo info))
- {
- TurnMaterialStore(info.MaterialLoc[0]);
- DeviceProcessLogShow($"转台转到【{info.MaterialLoc[0]}】位置");
- morkF.TurnTableLock = true;
- }
- 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("当前订单未找到可用的物料信息");
- }
-
- }
-
-
- }
-
-
- /// <summary>
- /// 供盘
- /// </summary>
- /// <exception cref="NotImplementedException"></exception>
- 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}】执行取碗控制");
- }
- }
- }
-
- /// <summary>
- /// 取锅到灶台
- /// </summary>
- /// <exception cref="NotImplementedException"></exception>
- 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);
-
-
-
-
- }
-
- /// <summary>
- /// 写入配方数据到 PLC
- /// </summary>
- private void WriteRecipeBoms()
- {
- //List<ushort> recipeBoms = new List<ushort>();
- //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("配方数据为空"); }
- }
- /// <summary>
- /// 转台复位
- /// </summary>
- /// <param name="loc"></param>
- 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;
- }
- }
- /// <summary>
- /// 取素菜A料
- /// </summary>
- 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;//转台互锁解除
-
-
- }
-
- /// <summary>
- /// 取素菜B料
- /// </summary>
- 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;//转台互锁解除
- }
- /// <summary>
- /// 取调味品C料
- /// </summary>
- /// <exception cref="NotImplementedException"></exception>
- 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
- }
- /// <summary>
- /// 主流程出餐
- /// </summary>
- 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
-
- }
- /// <summary>
- /// 复流程流程出餐
- /// </summary>
- 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}】执行取锅到清洗台控制");
- }
- /// <summary>
- /// 主流程洗锅放锅
- /// </summary>
- 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);
- }
-
- /// <summary>
- /// 辅流程洗锅放锅
- /// </summary>
- 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);
- }
- /// <summary>
- /// 任务复位重启
- /// </summary>
- //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");
- //}
- /// <summary>
- /// 主流程翻转机下降及状态检测
- /// </summary>
- 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($"翻转机下降完成");
-
- }
- /// <summary>
- /// 辅流程翻转机下降及状态检测
- /// </summary>
- 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;
- //}
-
- }
- /// <summary>
- /// 主流程翻转机上升及状态检测
- /// </summary>
- 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("翻转机上升完成");
- }
- /// <summary>
- /// 辅流程翻转机上升及状态检测
- /// </summary>
- 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<bool[]> action)
- {
- if (peripheralStatus.ContainsKey(key))
- {
- action((bool[])peripheralStatus[key]);//获取PLC指定地址的状态值
- }
- }
- /// <summary>
- /// 写数据
- /// </summary>
- /// <param name="address"></param>
- /// <param name="value"></param>
- 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;
-
- }
- }
- /// <summary>
- /// 主流程灶台档位调节
- /// </summary>
- 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
-
- }
- /// <summary>
- /// 辅流程灶台档位调节
- /// </summary>
- 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}】挡");
- }
- /// <summary>
- /// PLC转台控制
- /// </summary>
- /// <param name="loc"></param>
- 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);
-
- }
- /// <summary>
- /// 供盘启动
- /// </summary>
- public void StartTakePlate()
- {
- WriteData("M1.1", true);
- }
- /// <summary>
- /// 取锅到灶台
- /// </summary>
- public void TakePotToKitchen(int loc)
- {
- if (loc == 1)
- WriteData("M14.0", true);
- if (loc == 2)
- WriteData("M14.4", true);
- }
- /// <summary>
- /// 主流程机器人出餐并将锅放置清洗台位置
- /// </summary>
- 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
- }
-
- /// <summary>
- /// 复流程机器人出餐并将锅放置清洗台位置
- /// </summary>
- 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);//打开抽风机
- }
- /// <summary>
- /// 注油
- /// </summary>
- 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;
- }
- }
-
- /// <summary>
- /// 主流程翻转机方向控制
- /// </summary>
- /// <param name="orientation"></param>
- 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;
- }
- /// <summary>
- /// 辅流程翻转机方向控制
- /// </summary>
- /// <param name="orientation"></param>
- 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挡
- }
- }
-
- /// <summary>
- /// 主流程翻转机档位控制
- /// </summary>
- 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
- }
- /// <summary>
- /// 辅流程翻转机档位控制
- /// </summary>
- public void MinorProcessTurnMachineGearsControl(int gear)
- {
- if (morkF.MinorProcessPotLoc == 1)
- {
- FirstPotTurnMachine(gear);
- }
- if (morkF.MinorProcessPotLoc == 2)
- {
- SecondPotTurnMachine(gear);
- }
-
- DeviceProcessLogShow($"炒锅【{morkF.MinorProcessPotLoc}】翻转机档位调至{gear}挡");
- }
- /// <summary>
- /// 取A,B,C料
- /// </summary>
- 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
- }
- /// <summary>
- /// 清洗模组1启停控制
- /// </summary>
- 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()
- {
-
- }
- }
- }
|