using log4net.Core; using Rs.Controls; using Rs.Framework; using Rs.MotionPlat.Commom; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Rs.MotionPlat.Flow { /// /// 周转流程步序 /// enum ETurnoverFlowStep { 等待命令, 到周转盘取料位上方, 等待运动到周转盘取料位上方, 到周转盘下方取料位, 等待运动到周转盘下方取料位, 到周转盘取料破真空位, 等待到周转盘取料破真空位, 周转盘取料完成抬起, 等待周转盘取料完成抬起, 周转盘取料完成真空检测, 到测试放料位上方, 等待运动到测试放料位上方, 到测试放料位下方, 等待运动到到测试放料位下方, 测试位放料完成抬起, 等待测试位放料完成抬起, 测试位放料完成真空检测, 到测试保压位上方, 等待到测试保压位上方, 到测试保压位下方, 等待到测试保压位下方, 测试完成抬起, 等待测试完成抬起, 到测试取料位上方, 等待到测试取料位上方, 到测试取料位下方, 等待到测试取料位下方, 到测试破真空位, 等待到测试破真空位, 测试位取料完成抬起, 等待测试位取料完成抬起, 测试位取料完成后真空检测, 到周转盘放料位上方, 等待到周转盘放料位上方, 到周转盘放料位下方, 等待到周转盘放料位下方, 周转盘放料完成后真空检测, 周转盘放料完成抬起, 等待周转盘放料完成抬起, 到安全位, 等待到安全位, } enum ETestLoadStep { } enum ETestUnloadStep { } /// /// 周转流程 /// public class TurnoverFlow:BaseFlow { private static TurnoverFlow instance; public static TurnoverFlow Instance { get { if(instance == null) instance = new TurnoverFlow(); return instance; } } private TurnoverFlow() { slots.Add(1); slots.Add(2); slots.Add(3); slots.Add(4); slots.Add(5); slots.Add(6); slots.Add(7); slots.Add(8); } /// /// 保压位上料 /// private bool pressLoad = false; /// /// 保压位下料 /// private bool pressUnload = false; private bool loadOk = false; private bool unloadOk = false; string logInfo = ""; List slots = new List(); List ngList = new List(); ETurnoverFlowStep Step = ETurnoverFlowStep.等待命令; double targetPos = 0.0; Motion.ErrorCode errCode = Motion.ErrorCode.Ok; public override void Run() { switch (Step) { case ETurnoverFlowStep.等待命令: if(pressLoad)//测试位上料 { pressLoad = false; Step = ETurnoverFlowStep.到周转盘取料位上方; } if(pressUnload)//测试位下料 { pressUnload = false; Step = ETurnoverFlowStep.测试完成抬起; } break; case ETurnoverFlowStep.到周转盘取料位上方: targetPos = SysConfigParam.GetValue("TurnoverTakeY"); errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到周转盘取料位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到周转盘取料位上方; } break; case ETurnoverFlowStep.等待运动到周转盘取料位上方: if (Ops.IsStop(AxisControl.TurnoverY)) { logInfo = $"已运动到周转盘取料位上方 TurnoverY at:{Ops.GetCurPosition( AxisAlias.TurnoverY)}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到周转盘下方取料位; } break; case ETurnoverFlowStep.到周转盘下方取料位: targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到周转盘下方取料位"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到周转盘下方取料位; } break; case ETurnoverFlowStep.等待运动到周转盘下方取料位: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"已运动到周转盘下方取料位 at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); //打开真空吸 foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空吸"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacSuctionDelaytime); //关闭周转盘真空吸 foreach (var slot in slots) { Ops.Off($"周转盘{slot}号穴位真空吸"); } Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime); //打开周转盘真空破 foreach (var slot in slots) { Ops.On($"周转盘{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime); Step = ETurnoverFlowStep.到周转盘取料破真空位; } break; case ETurnoverFlowStep.到周转盘取料破真空位: targetPos = SysConfigParam.GetValue("TurnoverTakeZ")+GlobalVar.CloseVacOffsetHeight; errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok) { logInfo = $"到周转盘取料破真空位"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘取料破真空位; } break; case ETurnoverFlowStep.等待到周转盘取料破真空位: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"已到周转盘取料破真空位"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); //关闭周转盘真空破 foreach (var slot in slots) { Ops.Off($"周转盘{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime); Step = ETurnoverFlowStep.周转盘取料完成抬起; } break; case ETurnoverFlowStep.周转盘取料完成抬起: targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"周转盘取料完成抬起"; MessageQueue.Instance.Insert (logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待周转盘取料完成抬起; } break; case ETurnoverFlowStep.等待周转盘取料完成抬起: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"已周转盘取料完成抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.周转盘取料完成真空检测; } break; case ETurnoverFlowStep.周转盘取料完成真空检测: ngList = CheckNozzleVac(); if(ngList.Count==0||GlobalVar.RunSpace) { logInfo = $"真空检测OK"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试放料位上方; } else { string msg = string.Join(",", ngList.ToArray()); logInfo = $"周转吸嘴 {msg} 真空值未达到"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Msg.ShowError($"周转吸嘴 {msg} 真空值未达到,请处理后点击确定"); Step = ETurnoverFlowStep.到测试放料位上方; } break; case ETurnoverFlowStep.到测试放料位上方: targetPos = SysConfigParam.GetValue("PressDumpY"); errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到测试放料位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到测试放料位上方; } break; case ETurnoverFlowStep.等待运动到测试放料位上方: if (Ops.IsStop(AxisControl.TurnoverY)) { logInfo = $"已运动到测试放料位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试放料位下方; } break; case ETurnoverFlowStep.到测试放料位下方: targetPos = SysConfigParam.GetValue("PressDumpZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到测试放料位下方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到到测试放料位下方; } break; case ETurnoverFlowStep.等待运动到到测试放料位下方: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"已运动到到测试放料位下方 at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); OpenPressVac(); Thread.Sleep(GlobalVar.PressOpenVacSuctionDelaytime); CloseNozzleVac(); Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacSuctionDelaytime); foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime); foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime); Step = ETurnoverFlowStep.测试位放料完成抬起; } break; case ETurnoverFlowStep.测试位放料完成抬起: targetPos = SysConfigParam.GetValue("PressSafeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"测试位放料完成抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试位放料完成抬起; } break; case ETurnoverFlowStep.等待测试位放料完成抬起: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"测试位放料完成抬起完成"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); if(GlobalVar.RunSpace) { Step = ETurnoverFlowStep.到测试保压位上方; } else { Step = ETurnoverFlowStep.测试位放料完成真空检测; } } break; case ETurnoverFlowStep.测试位放料完成真空检测: ngList = TestVacCheck(); if(ngList.Count==0) { Step = ETurnoverFlowStep.到测试保压位上方; } else { string msg = string.Join(",", ngList.ToArray()); logInfo = $"测试穴位 {msg} 真空异常"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Msg.ShowError($"测试穴位 {msg} 真空异常,请处理后点击确定"); Step = ETurnoverFlowStep.到测试保压位上方; } break; case ETurnoverFlowStep.到测试保压位上方: targetPos = SysConfigParam.GetValue("PressY"); errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到测试保压位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到测试保压位上方; } break; case ETurnoverFlowStep.等待到测试保压位上方: if (Ops.IsStop(AxisControl.TurnoverY)) { logInfo = $"已运动到测试保压位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试保压位下方; } break; case ETurnoverFlowStep.到测试保压位下方: targetPos = SysConfigParam.GetValue("PressZ"); errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到测试保压位下方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到测试保压位下方; } break; case ETurnoverFlowStep.等待到测试保压位下方: if (Ops.IsStop(AxisControl.PressZ)) { logInfo = $"已到测试保压位下方 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); ClosePressVac(); Thread.Sleep(GlobalVar.PresseCloseVacSuctionDelaytime); loadOk = true; Step = ETurnoverFlowStep.等待命令; } break; //-----------------------------------------------测试位下料 case ETurnoverFlowStep.测试完成抬起: targetPos = SysConfigParam.GetValue("PressSafeZ"); errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = "测试完成准备抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试完成抬起; } break; case ETurnoverFlowStep.等待测试完成抬起: if (Ops.IsStop(AxisControl.PressZ)) { logInfo = $"测试完成已抬起 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试取料位上方; } break; case ETurnoverFlowStep.到测试取料位上方: targetPos = SysConfigParam.GetValue("PressTakeY"); errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到测试取料位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); MessageQueue.Instance.Insert($"goto press take product up position"); Step = ETurnoverFlowStep.等待到测试取料位上方; } break; case ETurnoverFlowStep.等待到测试取料位上方: if (Ops.IsStop(AxisControl.TurnoverY)) { logInfo = $"已运动到测试取料位上方 TurnoverY at:{Ops.GetCurPosition(AxisAlias.TurnoverY)}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试取料位下方; } break; case ETurnoverFlowStep.到测试取料位下方: targetPos = SysConfigParam.GetValue("PressTakeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到测试取料位下方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到测试取料位下方; } break; case ETurnoverFlowStep.等待到测试取料位下方: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"已运动到测试取料位下方 TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); //打开吸嘴真空吸 foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空吸"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacSuctionDelaytime); foreach (var slot in slots) { Ops.On($"测试{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.PresseOpenVacBreakDelaytime); Step = ETurnoverFlowStep.到测试破真空位; } break; case ETurnoverFlowStep.到测试破真空位: logInfo = $"到测试破真空位"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); targetPos = SysConfigParam.GetValue("PressTakeZ")+1; errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok) { Step = ETurnoverFlowStep.等待到测试破真空位; } break; case ETurnoverFlowStep.等待到测试破真空位: if(Ops.IsStop(AxisAlias.TurnoverZ)) { logInfo = $"已运动到测试破真空位"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); foreach (var slot in slots) { Ops.Off($"测试{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.PressCloseVacBreakDelaytime); Step = ETurnoverFlowStep.测试位取料完成抬起; } break; case ETurnoverFlowStep.测试位取料完成抬起: targetPos = SysConfigParam.GetValue("PressSafeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"测试位取料完成准备抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试位取料完成抬起; } break; case ETurnoverFlowStep.等待测试位取料完成抬起: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"测试位取料完成已抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.测试位取料完成后真空检测; } break; case ETurnoverFlowStep.测试位取料完成后真空检测: ngList = CheckNozzleVac(); if (ngList.Count==0 || GlobalVar.RunSpace) { Step = ETurnoverFlowStep.到周转盘放料位上方; } else { string msg = string.Join(",", ngList.ToArray()); Msg.ShowError($"吸嘴{msg}真空值未达到,请处理后点击确定"); Step = ETurnoverFlowStep.到周转盘放料位上方; } break; case ETurnoverFlowStep.到周转盘放料位上方: targetPos = SysConfigParam.GetValue("TurnoverDumpY"); //targetPos = SysConfigParam.GetValue("TurnoverTakeY"); errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到周转盘放料位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘放料位上方; } break; case ETurnoverFlowStep.等待到周转盘放料位上方: if (Ops.IsStop(AxisControl.TurnoverY)) { logInfo = $"已运动到周转盘放料位上方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到周转盘放料位下方; } break; case ETurnoverFlowStep.到周转盘放料位下方: //targetPos = SysConfigParam.GetValue("TurnoverDumpZ"); targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos+1, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"到周转盘放料位下方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘放料位下方; } break; case ETurnoverFlowStep.等待到周转盘放料位下方: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"已运动到周转盘放料位下方"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); //打开周转盘真空吸 foreach (var slot in slots) { Ops.On($"周转盘{slot + 8}号穴位真空吸"); } Thread.Sleep(GlobalVar.TurnoverTrayOpenVacSuctionDelaytime); //关闭吸嘴真空吸 foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空吸"); } Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacSuctionDelaytime); //打开吸嘴真空破 foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime); foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime); Step = ETurnoverFlowStep.周转盘放料完成抬起; } break; case ETurnoverFlowStep.周转盘放料完成抬起: targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok) { logInfo = $"周转盘放料完成准备抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待周转盘放料完成抬起; } break; case ETurnoverFlowStep.等待周转盘放料完成抬起: if (Ops.IsStop(AxisControl.TurnoverZ)) { logInfo = $"周转盘放料完成已抬起"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.周转盘放料完成后真空检测; } break; case ETurnoverFlowStep.周转盘放料完成后真空检测: ngList = TurnoverTrayVacCheck(); if (ngList.Count == 0 || GlobalVar.RunSpace) { Step = ETurnoverFlowStep.到安全位; //判断周转盘是否有需要测试的穴位 //List haveSlots = GlobalTray.TurnoverTray.GetSlots(ESlotStatus.Have); //var loadList = haveSlots.Where(slot => ((slot.Index >= 1 && slot.Index <= 8) || (slot.Index >= 17 && slot.Index <= 24))); //if (loadList.Count()==0) //{ // //周转盘没有需要测试的穴位,把轴移动到安全位 // Step = ETurnoverFlowStep.到安全位; //} //else //{ // unloadOk = true; // Step = ETurnoverFlowStep.等待命令; //} } else { string msg = string.Join(",", ngList); Msg.ShowError($"周转穴位{msg}真空异常,请处理后点击确定"); Step = ETurnoverFlowStep.到安全位; //判断周转盘是否有需要测试的穴位 //List haveSlots = GlobalTray.TurnoverTray.GetSlots(ESlotStatus.Have); //var loadList = haveSlots.Where(slot => ((slot.Index >= 1 && slot.Index <= 8) || (slot.Index >= 17 && slot.Index <= 24))); //if (loadList.Count() == 0) //{ // //周转盘没有需要测试的穴位,把轴移动到安全位 // Step = ETurnoverFlowStep.到安全位; //} //else //{ // unloadOk = true; // Step = ETurnoverFlowStep.等待命令; //} } break; case ETurnoverFlowStep.到安全位: errCode = AxisControl.TurnoverY.MovePos(SysConfigParam.GetValue("PressY"), GlobalVar.WholeSpeed); if ((errCode> Motion.ErrorCode.Ok)) { Msg.ShowError($"TurnoverY move fail ret:{errCode}"); } else { logInfo = $"到安全位"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到安全位; } break; case ETurnoverFlowStep.等待到安全位: if(Ops.IsStop("TurnoverY")) { logInfo = $"已运动到安全位,任务结束"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); unloadOk = true; Step = ETurnoverFlowStep.等待命令; } break; } } public bool LoadFinished() { return loadOk; } public bool UnloadFinished() { return unloadOk; } public void PressLoad(List taskList) { slots.Clear(); foreach(var slot in taskList) { slots.Add(slot.FromIndex+1); } pressLoad = true; loadOk= false; } /// /// 周转盘真空吸检测 /// /// public List TurnoverTrayVacCheck() { List result = new List(); foreach (var slot in slots) { if (!Ops.IsOn($"周转盘{slot+8}号穴位真空吸检测")) { result.Add(slot+8); } } return result; } /// /// 测试穴位真空吸检测 /// /// public List TestVacCheck() { List result = new List(); foreach (var slot in slots) { if (!Ops.IsOn($"测试{slot}号穴位真空吸检测")) { result.Add(slot); } } return result; } public void PressUnload(List taskList) { slots.Clear(); foreach (var item in taskList) { slots.Add(item.FromIndex+1); } pressUnload = true; unloadOk= false; } /// /// 吸嘴真空吸检测 /// /// List CheckNozzleVac() { List ngList = new List(); //周转1号吸嘴真空吸检测 foreach (var slot in slots) { if (!Ops.IsOn($"周转{slot}号吸嘴真空吸检测")) { ngList.Add(slot); } } return ngList; } void OpenNozzleVac() { foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空吸"); } } void CloseNozzleVac() { foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空吸"); } } void OpenTurnoverTrayVac() { foreach (var slot in slots) { Ops.On($"周转盘{slot}号穴位真空吸"); } } void CloseTurnoverTrayVac() { foreach (var slot in slots) { Ops.Off($"周转盘{slot}号穴位真空吸"); } } void OpenPressVac() { foreach (var slot in slots) { Ops.On($"测试{slot}号穴位真空吸"); } } void ClosePressVac() { foreach (var slot in slots) { Ops.Off($"测试{slot}号穴位真空吸"); } } } }