using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Threading; using System.Collections.Concurrent; using System.Diagnostics; using System.Threading.Tasks; using BPASmartClient.Device; using BPA.Message.Enum; using BPA.Message; using BPASmartClient.Helper; using BPASmartClient.Model.咖啡机.Enum; using BPASmartClient.Model; using BPASmartClient.EventBus; using static BPASmartClient.EventBus.EventBus; using BPASmartClient.Model.PLC; using BPASmartClient.Model.单片机; using BPASmartClient.Message; namespace BPASmartClient.MorktJAKAJC { public class Control_MORKJC : BaseDevice { GVL_MORKJC morkTJakaJC = new GVL_MORKJC(); //物料存放位置 private Dictionary batchings = new Dictionary(); //容器位置 private string holderLoc; //主料位置 private string mainMaterialLoc; public override global::BPA.Message.Enum.DeviceClientType DeviceType { get { return BPA.Message.Enum.DeviceClientType.MORKT; } } /// /// 果汁机做法,true:热饮,false:冷饮 /// private bool GuMake = false; private void OrderChange(string subid, ORDER_STATUS oRDER_STATUS) { EventBus.EventBus.GetInstance().Publish(new OrderStatusChangedEvent() { Status = oRDER_STATUS, SubOrderId = subid, deviceClientType = DeviceType }); } public override void DoMain() { if (Json.Data.IsVerify) { IsHealth = true; } IsHealth = true; serverInit(); DataParse(); } 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; } }); } 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}次订单"); batchings = PolymerBatching.BuildAll(); //商品类型 GOODS_TYPE currentGoodsType = GOODS_TYPE.NEITHER; foreach (var item in order.MorkOrder.GoodBatchings) { var res = orderMaterialDelivery?.BatchingInfo?.FirstOrDefault(p => p.BatchingId == item.BatchingId); if (res != null) { //验证商品是做的某种饮料 if (ValidateGoodsByBatching(res.BatchingLoc) != GOODS_TYPE.NEITHER) { //获取当前物料所属商品类型 currentGoodsType = ValidateGoodsByBatching(res.BatchingLoc); } // switch (batchings[res.BatchingLoc].BatchingClass) { case BATCHING_CLASS.HOLDER: holderLoc = res.BatchingLoc; break; case BATCHING_CLASS.MAIN_MATERIAL: mainMaterialLoc = res.BatchingLoc; break; } //根据商品类型执行具体制作流程 switch (currentGoodsType) { case GOODS_TYPE.COFFEE: if (morkTJakaJC.morkOrderPushesCoffee.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) { morkTJakaJC.morkOrderPushesCoffee.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, BatchingId = res.BatchingId, Loc = ushort.Parse(mainMaterialLoc), GoodName = order.MorkOrder.GoodsName, }); } break; case GOODS_TYPE.JUICE: GuMake = order.MorkOrder.MakeID == "2";//判断果汁的冷热 if (morkTJakaJC.morkOrderPushesJuicer.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) { morkTJakaJC.morkOrderPushesJuicer.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, BatchingId = res.BatchingId, Loc = ushort.Parse(mainMaterialLoc), GoodName = order.MorkOrder.GoodsName, }); } break; case GOODS_TYPE.TEA: if (morkTJakaJC.morkOrderPushesTea.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) { morkTJakaJC.morkOrderPushesTea.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, BatchingId = res.BatchingId, Loc = ushort.Parse(mainMaterialLoc), GoodName = order.MorkOrder.GoodsName, }); } break; case GOODS_TYPE.WATER: if (morkTJakaJC.morkOrderPushesWater.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) { morkTJakaJC.morkOrderPushesWater.Enqueue(new OrderLocInfo() { SuborderId = order.MorkOrder.SuborderId, BatchingId = res.BatchingId, Loc = ushort.Parse(mainMaterialLoc), GoodName = order.MorkOrder.GoodsName, }); } break; case GOODS_TYPE.NEITHER: DeviceProcessLogShow("未知的商品类型"); break; } } } } }); } private bool bFirstTrig_TeaWater = false; private bool bFirstTrig_Coffee = false; DateTime delayTimeOut_Coffee; private bool bFirstTrig_Juice = false; DateTime delayTimeOut_Juice; /// /// 判断接咖啡的位置是否有杯子 /// bool pickUpCoffeeHaveCup = false; /// /// 判断接果汁的位置是否有杯子 /// bool pickUpJuiceHaveCup = false; /// /// 判断接开水的位置是否有杯子 /// bool pickUpHotWaterHaveCup = false; public override void MainTask() { EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) { if (morkTJakaJC.IsHaveCoffeeCup) morkTJakaJC.MakeCoffeeEnd = true; }); if (pickUpCoffeeHaveCup) { if (!bFirstTrig_Coffee) { bFirstTrig_Coffee = true; delayTimeOut_Coffee = DateTime.Now; } else if (DateTime.Now.Subtract(delayTimeOut_Coffee).TotalSeconds > 180 && bFirstTrig_Coffee == true) { bFirstTrig_Coffee = false; if (morkTJakaJC.IsHaveCoffeeCup) morkTJakaJC.MakeCoffeeEnd = true; } } if (morkTJakaJC.IsHaveJuiceCup) { var Juicestate = GetStatus("GetDeviceStatus"); if (Juicestate != null) { if (Juicestate.Length > 0) { var Juicestate1 = Convert.ToString(Juicestate[0], 2); var Juicestate2 = Juicestate[1]; if (Juicestate1.IndexOf("0") == 1 && Juicestate2 == 0) { morkTJakaJC.MakeJuiceEnd = true; } } } //若无状态返回 则加延迟 if (!bFirstTrig_Juice) { bFirstTrig_Juice = true; delayTimeOut_Juice = DateTime.Now; } else if (DateTime.Now.Subtract(delayTimeOut_Juice).TotalSeconds > 30 && bFirstTrig_Juice == true) { bFirstTrig_Juice = false; morkTJakaJC.MakeJuiceEnd = true; } } if (morkTJakaJC.IsHaveTeaWaterCup) { if (!bFirstTrig_TeaWater) { bFirstTrig_TeaWater = true; delayTimeOut = DateTime.Now; } else if (DateTime.Now.Subtract(delayTimeOut).TotalSeconds >= 50 && bFirstTrig_TeaWater == true) { bFirstTrig_TeaWater = false; morkTJakaJC.MakeTeaEnd = true; } } DoCoffee(); DoJuice(); DoBoiledTea(); DoBoiledWater(); } /// /// 验证当前是做咖啡还是做冰淇淋 /// /// 物料位置 private GOODS_TYPE ValidateGoodsByBatching(string batchingLoc) { if (batchings.ContainsKey(batchingLoc)) return batchings[batchingLoc].GoodsType; return GOODS_TYPE.NEITHER; } private AutoResetEvent are = new AutoResetEvent(false); private T GetStatus(string key) { if (peripheralStatus.ContainsKey(key)) { if (peripheralStatus[key] != null) { return (T)(peripheralStatus[key]); } } return default; } private void Wait(int value) { while (!((GetStatus("Get_RobotAO1") == value) && GetStatus("GetProgramStatus") == 0))//判断文件是否已经执行结束 且 文件末端变量值==文件名 { Thread.Sleep(5); } } int[] devStatusBy = new int[2] { 0, 0 }; private bool IsMakeCoffee() { bool bMake = (IsHealth && morkTJakaJC.morkOrderPushesCoffee.Count > 0 && !morkTJakaJC.IsHaveCoffeeCup) ? true : false; return bMake; } private bool IsMakeJuice() { bool bMake = (IsHealth && morkTJakaJC.morkOrderPushesJuicer.Count > 0 && !morkTJakaJC.IsHaveJuiceCup) ? true : false; return bMake; } private bool IsMakeTeaWater() { bool bMake = (IsHealth && morkTJakaJC.morkOrderPushesTea.Count > 0 && !morkTJakaJC.IsHaveTeaWaterCup) ? true : false; return bMake; } private bool IsMakeWater() { bool bMake = (IsHealth && morkTJakaJC.morkOrderPushesWater.Count > 0 && !morkTJakaJC.IsHaveTeaWaterCup) ? true : false; return bMake; } /// /// 传感器的输入信号 0:无意义 1:有信号 2:无信号 3:信号不正确 /// int bSensorInput; /// /// 延迟的超时时间 /// DateTime delayTimeOut; /// /// 做咖啡 /// private void DoCoffee() { if (IsMakeCoffee()) { if (morkTJakaJC.morkOrderPushesCoffee.TryDequeue(out OrderLocInfo orderLoc)) { PickUpCoffee();//接咖啡 morkTJakaJC.IsHaveCoffeeCup = true; } } else if (morkTJakaJC.MakeCoffeeEnd) { PutCoffeeCup(); pickUpCoffeeHaveCup = false; morkTJakaJC.IsHaveCoffeeCup = false; } } private void DoJuice() { if (IsMakeJuice()) { if (morkTJakaJC.morkOrderPushesJuicer.TryDequeue(out OrderLocInfo orderLoc)) { PickUpJuicer(); morkTJakaJC.IsHaveJuiceCup = true; } } else if (morkTJakaJC.MakeJuiceEnd) { Thread.Sleep(5000);//延迟五秒,防止接饮料口滴饮料 putJuice(); pickUpJuiceHaveCup = false; morkTJakaJC.IsHaveJuiceCup = false; morkTJakaJC.MakeJuiceEnd = false; } } private void DoBoiledTea() { if (IsMakeTeaWater()) { if (morkTJakaJC.morkOrderPushesTea.TryDequeue(out OrderLocInfo orderLoc)) { PickUpTea(); morkTJakaJC.IsHaveTeaWaterCup = true; } } else if (morkTJakaJC.MakeTeaEnd) { PutWaterCup(); pickUpHotWaterHaveCup = false; morkTJakaJC.IsHaveTeaWaterCup = false; morkTJakaJC.MakeTeaEnd = false; } } private void DoBoiledWater() { if (IsMakeWater()) { if (morkTJakaJC.morkOrderPushesWater.TryDequeue(out OrderLocInfo orderLoc)) { PickUpWater(); } } else if (morkTJakaJC.MakeTeaEnd) { PutWaterCup(); pickUpHotWaterHaveCup = false; morkTJakaJC.IsHaveTeaWaterCup = false; morkTJakaJC.MakeTeaEnd = false; } } private void PickUpCoffee() { if (!pickUpCoffeeHaveCup) { OrderChange(morkTJakaJC.morkOrderPushesCoffee.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COOKING); int resultTakeCup = takeCup(); if (resultTakeCup == 1) { DeviceProcessLogShow("咖啡杯取杯完成"); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接咖啡 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接咖啡)); new DRCoffee_MakeCoffeeEvent() { DeviceId = DeviceId, DrinkCode = (DrCoffeeDrinksCode)int.Parse(mainMaterialLoc) }.Publish(); //接咖啡控制 //DrCoffeeDrinksCode.热水 are.WaitOne(1000 * 180); } else { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); } } } private void PutCoffeeCup() { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放咖啡杯 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放咖啡杯)); int resultputCup = putCup(); if (resultputCup == 1) { //订单状态改变:完成 new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); OrderChange(morkTJakaJC.morkOrderPushesCoffee.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COMPLETED_TAKE); } else { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); } } /// /// 接开水 /// private void PickUpWater() { #region 接水流程 if (!pickUpHotWaterHaveCup) { OrderChange(morkTJakaJC.morkOrderPushesWater.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COOKING); int resultTakeCup = takeCup(); if (resultTakeCup == 1) { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接水 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接水)); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "4" }.Publish(); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "3" }.Publish(); Thread.Sleep(100); new WriteMcu() { TagName = "OutputControl", Value = true, Address = "3" }.Publish(); Thread.Sleep(3000); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "3" }.Publish(); Thread.Sleep(100); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "4" }.Publish(); Thread.Sleep(100); new WriteMcu() { TagName = "OutputControl", Value = true, Address = "4" }.Publish(); Thread.Sleep(500); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "4" }.Publish(); } else if (resultTakeCup == 2 || resultTakeCup == 3) { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); } } #endregion } /// /// 放水杯 /// private void PutWaterCup() { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放茶水杯 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放茶水杯)); int resultputCup = putCup(); if (resultputCup == 1) { //订单状态改变:完成 new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); OrderChange(morkTJakaJC.morkOrderPushesCoffee.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COMPLETED_TAKE); } else { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); } } /// /// 做茶 /// private void PickUpTea() { #region 接茶流程 if (!pickUpHotWaterHaveCup) { OrderChange(morkTJakaJC.morkOrderPushesTea.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COOKING); int resultTakeCup = takeCup(); if (resultTakeCup == 1) { DeviceProcessLogShow("取茶杯完成"); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接茶 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接茶)); new WriteMcu() { TagName = "ServoControl", Address = "1", Value = 105 }.Publish(); Thread.Sleep(1000); new WriteMcu() { TagName = "ServoControl", Address = "1", Value = 130 }.Publish(); Thread.Sleep(1000); new WriteMcu() { TagName = "ServoControl", Address = "1", Value = 105 }.Publish(); Thread.Sleep(3000); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接茶_接水 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接茶_接水)); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "4" }.Publish(); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "3" }.Publish(); Thread.Sleep(100); new WriteMcu() { TagName = "OutputControl", Value = true, Address = "3" }.Publish(); Thread.Sleep(3000); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "3" }.Publish(); Thread.Sleep(100); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "4" }.Publish(); Thread.Sleep(100); new WriteMcu() { TagName = "OutputControl", Value = true, Address = "4" }.Publish(); Thread.Sleep(500); new WriteMcu() { TagName = "OutputControl", Value = false, Address = "4" }.Publish(); } else if (resultTakeCup == 2 || resultTakeCup == 3) { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); } } #endregion } /// /// 果汁机控制信号 /// private byte JuicerNum; private int JuiceCH; private void PickUpJuicer() { #region 接果汁流程 if (!pickUpJuiceHaveCup) { OrderChange(morkTJakaJC.morkOrderPushesWater.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COOKING); int resultTakeCup = takeCup(); JuiceCH = int.Parse(mainMaterialLoc); if (resultTakeCup == 1) { switch (JuiceCH) { case 52: if (GuMake) { JuicerNum = 0x00; } else { JuicerNum = 0x01; } new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接果汁1 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接果汁1)); break; case 53: if (GuMake) { JuicerNum = 0x02; } else { JuicerNum = 0x03; } new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接果汁2 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接果汁2)); break; case 54: if (GuMake) { JuicerNum = 0x04; } else { JuicerNum = 0x05; } new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接果汁3 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接果汁3)); break; case 55: if (GuMake) { JuicerNum = 0x06; } else { JuicerNum = 0x07; } new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接果汁4 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接果汁4)); break; default: JuicerNum = 0x00; new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_接果汁1 }.Publish(); Wait(int.Parse(JakaModel.SENCE_接果汁1)); break; } new WriteJuicer() { Value = JuicerNum }.Publish(); pickUpJuiceHaveCup = true; } else { return; } } #endregion } private void putJuice() { switch (JuiceCH) { case 52: new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放果汁杯1 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放果汁杯1)); break; case 53: new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放果汁杯2 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放果汁杯2)); break; case 54: new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放果汁杯3 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放果汁杯3)); break; case 55: new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放果汁杯4 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放果汁杯4)); break; default: new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放果汁杯1 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放果汁杯1)); break; } int resultputCup = putCup(); if (resultputCup == 1) { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); OrderChange(morkTJakaJC.morkOrderPushesWater.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COMPLETED_TAKE); } else { new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); } } private int getCup_cnt; /// /// 取杯流程 /// /// 0:无意义,1:取杯成功 2:机构有杯子,取杯失败 3:机构没有杯子 private int takeCup() { #region 单片机控制的IO //try //{ // getCup_cnt = 0;//取杯次数复位 // new WriteJaka() { TagName = "Set_RobotAO1", Value = 0 }.Publish(); // Wait(0); // new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); // Wait(int.Parse(JakaModel.SENCE_初始位)); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = true }.Publish(); // Thread.Sleep(10); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = true }.Publish(); // new WriteJaka() { TagName = "Set_RobotAO1", Value = 0 }.Publish(); // Wait(0); // new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯 }.Publish(); // Wait(int.Parse(JakaModel.SENCE_取杯)); // bSensorInput = sensor_Sign(1); // if (bSensorInput == 2) // { // Thread.Sleep(100); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = false }.Publish(); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = false }.Publish(); // Thread.Sleep(100); // new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯检测 }.Publish(); // Wait(int.Parse(JakaModel.SENCE_取杯检测)); // DeviceProcessLogShow("落杯器没有纸杯了"); // return 3; // } // if (bSensorInput == 1) // { // Thread.Sleep(100); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = false }.Publish(); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = false }.Publish(); // Thread.Sleep(100); // new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯检测 }.Publish(); // Wait(int.Parse(JakaModel.SENCE_取杯检测)); // bSensorInput = sensor_Sign(1); // while (getCup_cnt < 4 && (bSensorInput == 2 || bSensorInput == 3)) // { // DeviceProcessLogShow($"第{getCup_cnt}次取杯失败"); // Thread.Sleep(100); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = true }.Publish(); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = true }.Publish(); // Thread.Sleep(100); // new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯 }.Publish(); // Wait(int.Parse(JakaModel.SENCE_取杯)); // getCup_cnt = getCup_cnt + 1; // Thread.Sleep(100); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = false }.Publish(); // new WriteMcu() { TagName = "OutputControl", Address = "1", Value = false }.Publish(); // Thread.Sleep(100); // new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯检测 }.Publish(); // Wait(int.Parse(JakaModel.SENCE_取杯检测)); // bSensorInput = sensor_Sign(1); // } // if (bSensorInput == 1) // { // return 1; // } // else // { // return 2; // } // } // return 1; //} //catch (Exception ex) //{ // MessageLog.GetInstance.ShowEx(ex.ToString()); // return 0; //} #endregion try { getCup_cnt = 0;//取杯次数复位 new WriteJaka() { TagName = "Set_RobotAO1", Value = 0 }.Publish(); Wait(0); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); new WriteJaka() { TagName = "JakaDOutput", DO_Index=0, Value = true }.Publish(); Thread.Sleep(100); new WriteJaka() { TagName = "Set_RobotAO1", Value = 0 }.Publish(); Wait(0); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯 }.Publish(); Wait(int.Parse(JakaModel.SENCE_取杯)); //取杯到位,使用落杯器 new WriteJaka() { TagName = "JakaDOutput", DO_Index = 1, Value = true }.Publish(); if (sensor_Sign(1)==1 ) { new WriteJaka() { TagName = "JakaDOutput", DO_Index = 1, Value = false }.Publish(); Thread.Sleep(2000); bSensorInput = sensor_Sign(0); if (bSensorInput == 2) { Thread.Sleep(100); new WriteJaka() { TagName = "JakaDOutput", DO_Index = 0, Value = false }.Publish(); Thread.Sleep(100); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯检测 }.Publish(); Wait(int.Parse(JakaModel.SENCE_取杯检测)); DeviceProcessLogShow("落杯器没有纸杯了"); return 3; } if (bSensorInput == 1) { Thread.Sleep(100); new WriteJaka() { TagName = "JakaDOutput", DO_Index = 0, Value = false }.Publish(); Thread.Sleep(100); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯检测 }.Publish(); Wait(int.Parse(JakaModel.SENCE_取杯检测)); bSensorInput = sensor_Sign(1); while (getCup_cnt < 4 && (bSensorInput == 2 || bSensorInput == 3)) { DeviceProcessLogShow($"第{getCup_cnt}次取杯失败"); Thread.Sleep(100); new WriteJaka() { TagName = "JakaDOutput", DO_Index = 0, Value = true }.Publish(); Thread.Sleep(100); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯 }.Publish(); Wait(int.Parse(JakaModel.SENCE_取杯)); getCup_cnt = getCup_cnt + 1; Thread.Sleep(100); new WriteJaka() { TagName = "JakaDOutput", DO_Index = 0, Value = false }.Publish(); Thread.Sleep(100); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_取杯检测 }.Publish(); Wait(int.Parse(JakaModel.SENCE_取杯检测)); bSensorInput = sensor_Sign(1); } if (bSensorInput == 1) { return 1; } else { return 2; } } } return 1; } catch (Exception ex) { MessageLog.GetInstance.ShowEx(ex.ToString()); return 0; } } /// /// 放杯 /// /// 0:无意义 1:执行成功 2:执行失败(传感器还有信号) private int putCup() { try { while (checkCup() == 2) { Thread.Sleep(100); } new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放杯 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放杯)); Thread.Sleep(10); new WriteJaka() { TagName = "JakaDOutput", DO_Index = 0, Value = true }.Publish(); Thread.Sleep(10); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_放杯检测 }.Publish(); Wait(int.Parse(JakaModel.SENCE_放杯检测)); bSensorInput = sensor_Sign(3); delayTimeOut = DateTime.Now; while (bSensorInput == 2) { Thread.Sleep(100); bSensorInput = sensor_Sign(3); if (DateTime.Now.Subtract(delayTimeOut).TotalSeconds >= 2) return 2; } if (bSensorInput == 2) { DeviceProcessLogShow("放杯失败传感器没有信号"); new WriteJaka() { TagName = "JaKaProgramName", Value = JakaModel.SENCE_初始位 }.Publish(); Wait(int.Parse(JakaModel.SENCE_初始位)); return 1; } return 1; } catch (Exception ex) { MessageLog.GetInstance.ShowEx(ex.ToString()); return 0; } } private int cnt_Check; /// /// 检测放杯位,是否有杯子 /// /// 0:无意义 1:没有杯子 2:有杯子 private int checkCup() { try { bSensorInput = sensor_Sign(2); if (bSensorInput == 2) { DeviceProcessLogShow($"放杯位传感器没有信号:{cnt_Check}"); return 1; } else if (bSensorInput == 1) { DeviceProcessLogShow($"放杯位传感器有信号:{cnt_Check}"); return 2; } return 2; } catch (Exception ex) { MessageLog.GetInstance.ShowEx(ex.ToString()); return 0; } } private T McuRead(string tagName, object par) { new ReadMcu() { DeviceId = DeviceId, TagName = tagName, ReadPar = par }; if (peripheralStatus.ContainsKey(tagName)) { if (peripheralStatus[tagName] != null) { return (T)peripheralStatus[tagName]; } } return default; } /// /// 传感器防抖0.2s内检测20次, /// /// /// private int sensor_Sign(byte num) { DeviceProcessLogShow($"开始检测{num}号传感器信号"); int cnt = 0; cnt_Check = 0; while (true) { Thread.Sleep(10); if (num == 0) { bSensorInput = GetStatus("Get_RobotDI0") ? 1 : 2; } else if (num == 1) { bSensorInput = GetStatus("Get_RobotDI1") ? 1 : 2; } else if (num == 2) { bSensorInput = GetStatus("Get_RobotDI2") ? 1 : 2; } else if (num == 3) { bSensorInput = GetStatus("Get_RobotDI3") ? 1 : 2; } if (bSensorInput == 1) { cnt_Check = cnt_Check + 1; cnt = cnt + 1; } else if (bSensorInput == 2) { cnt_Check = cnt_Check - 1; cnt = cnt + 1; } if (cnt >= 20) { break; } } if (cnt_Check >= 0) { DeviceProcessLogShow($"{num}传感器有信号:{cnt_Check}"); return 1; } else { DeviceProcessLogShow($"{num}传感器没有信号:{cnt_Check}"); return 2; } } private void DRCoffee_CoffeEndCookEventHandle(IEvent @event, EventCallBackHandle callBack) { are.Set(); } public void SimOrder(T simOrder) { } public override void Stop() { } public override void ReadData() { } public override void ResetProgram() { } public override void SimOrder() { } } }