public PolishCleanFun(string name) : base(name + "打磨清洗模块") { switch (name.ToString()) { case "左": ID = 0; break; case "右": ID = 1; break; } Axis = new IOandAxisFun(); }
public SolderPlatform(string name) : base(name + "焊锡平台") { SolderClean = new TinCleanFun(name); SolderCT = new SolderCTFun(name); Solder = new SolderFun(name); Axis = new IOandAxisFun(); switch (name) { case "左": ID = 0; break; case "右": ID = 1; break; } }
public PolishPlatform(string name) : base(name + "打磨平台") { PolishCT = new PolishCTFun(name); Polish = new PolishFun(name); PolishClean = new PolishCleanFun(name); switch (name) { case "左": ID = 0; break; case "右": ID = 1; break; } Axis = new IOandAxisFun(); }
public ResetLogicDef() : base("整机复位") { Axis = new IOandAxisFun(); }
protected override void LogicImpl() { var ProcessData = ProjectData.Instance.SaveData.processdata; switch (LG.Step) { case 1: //RZ到位 ProcessData.SolderList[ID].Clear(); if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0) { NUM = 0; Axis.SolderR[ID].MC_MoveAbs(0); Axis.SolderZ[ID].MC_MoveAbs(ProjectData.Instance.SaveData.SolderData[ID].SafeZ); LG.ImmediateStepNext(2); } break; case 2: //XY到位 if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0) { if (ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Ban) { NUM++; break; } Axis.SolderX[ID].MC_MoveAbs(ProcessData.SolderCTPos[ID][NUM].X); Axis.SolderY[ID].MC_MoveAbs(ProcessData.SolderCTPos[ID][NUM].Y); LG.ImmediateStepNext(3); } break; case 3: //拍照 if (Axis.SolderX[ID].status == 0 && Axis.SolderY[ID].status == 0 && LG.Delay(ProjectData.Instance.SaveData.SolderData[ID].CTDelay)) { LG.ImmediateStepNext(4); } break; case 4: //获取相机数据 if (/*VisionProject.Instance.visionApi.TrigComplete()||*/ TaskManager.Default.FSM.MODE == 1) { if (TaskManager.Default.FSM.MODE == 1) { SolderPosData _pos = new SolderPosData(); _pos.Pos.X = ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X; _pos.Pos.Y = ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y; _pos.Pos.R = 0; if (ProjectData.Instance.SaveData.processdata.Agingdataforsolder == null) { ProjectData.Instance.SaveData.processdata.Agingdataforsolder = new SolderDef(); } ProjectData.Instance.SaveData.processdata.Agingdataforsolder.Z = 25; _pos.Pos = IOandAxisFun.CameraToSolderPos(ID, _pos.Pos); _pos.SolderData = ProjectData.Instance.SaveData.processdata.Agingdataforsolder; ProcessData.SolderList[ID].Add(_pos); //增加到list里 NUM++; if (NUM < ProjectData.Instance.SaveData.processdata.SolderCTPos[ID].Count) { LG.ImmediateStepNext(2); //还有打磨拍照点继续打磨i拍照 } else { NUM = 0; LG.ImmediateStepNext(5); } } else if (true) { foreach (var p in VisionInteraction.Instance.WhichSolder(ID).listModel) { int type = p.modelindex; int num = 0; foreach (var item in ProjectData.Instance.SaveData.processdata.WhichSolderMedol(ID)) { float Tx = 0; float Ty = 0; float Tr = 0; float x = 0; float y = 0; float cAng = (float)(p.ListPos[num].R * Math.PI / 180); if (ProjectData.Instance.SaveData.SolderPlatform[ID].UseR) //使用旋转中心 { x = p.ModelPos.X + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X; y = p.ModelPos.Y + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y; IOandAxisFun.Transorm(ID, x, y, x + p.ListPos[num].X, y + p.ListPos[num].Y, cAng, out Tx, out Ty); } else { Tx = p.ListPos[num].X + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X; Ty = p.ListPos[num].Y + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y; Tr = 0; } SolderPosData _pos = new SolderPosData(); _pos.Pos.X = Tx; _pos.Pos.Y = Ty; _pos.Pos.R = Tr; _pos.Pos = IOandAxisFun.CameraToSolderPos(ID, _pos.Pos); _pos.SolderData = ProjectData.Instance.SaveData.processdata.WhichSolderMedol(ID)[type].solderdata[num].Clone(); num++; SolderOrderList.Add(_pos); //增加到list里 } } foreach (SolderPosData data in SolderOrderList.OrderBy(a => a.Pos.X).ThenBy(a => a.Pos.Y)) //排序 { ProcessData.SolderList[ID].Add(data); //加到上锡位置 } NUM++; if (ProcessData.SolderCTPos[ID].Count() > NUM) { LG.ImmediateStepNext(2); //去下一个拍照位置 } else { LG.ImmediateStepNext(5); } } } break; case 5: //判断上锡列表里的数据 if (ProcessData.SolderList[ID].Count() > 0) { LG.ImmediateStepNext(0xef); } else if (TaskManager.Default.FSM.MODE == 1) { LG.ImmediateStepNext(0xef); } else { string mes = ID.ToString() + "平台无上锡点"; MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes); LG.StepNext(0xef, FSMStaDef.RUN); } break; case 0xef: //结束 LG.End(); break; } }
public LogicLoopRun() : base("报警等循环扫描") { Axis = new IOandAxisFun(); }
protected override void LogicImpl() { var para = ProjectData.Instance.SaveData.PolishData[ID]; switch (LG.Step) { case 1: //RZ到拍照位 ProjectData.Instance.SaveData.processdata.PolishList[ID].Clear(); if (Axis.PolishR[ID].status == 0 && Axis.PolishZ[ID].status == 0) { NUM = 0; Axis.PolishR[ID].MC_MoveAbs(0); Axis.PolishZ[ID].MC_MoveAbs(para.SafeZ); LG.ImmediateStepNext(2); } break; case 2: //XY到拍照位 if (Axis.PolishR[ID].status == 0 && Axis.PolishZ[ID].status == 0) { if (ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Ban) { NUM++; break; } Axis.PolishX[ID].MC_MoveAbs(ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X); Axis.PolishY[ID].MC_MoveAbs(ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y); LG.ImmediateStepNext(3); } break; case 3: //延时拍照 if (Axis.PolishX[ID].status == 0 && Axis.PolishY[ID].status == 0 && LG.Delay(para.CTDelay)) { LG.ImmediateStepNext(4); } break; case 4: //获取相机数据 if (/*VisionInteraction.Instance.TriggerCamera(ID)*/ true) { if (TaskManager.Default.FSM.MODE == 1) { PolishPosData _pos = new PolishPosData(); _pos.Pos.X = ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X; _pos.Pos.Y = ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y; _pos.Pos.R = 0; //_pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos); if (ProjectData.Instance.SaveData.processdata.Agingdataforpolish == null) { ProjectData.Instance.SaveData.processdata.Agingdataforpolish = new PolishDef(); } _pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos); ProjectData.Instance.SaveData.processdata.Agingdataforpolish.Z = 20; _pos.polishData = ProjectData.Instance.SaveData.processdata.Agingdataforpolish; NUM++; ProjectData.Instance.SaveData.processdata.PolishList[ID].Add(_pos); if (NUM < ProjectData.Instance.SaveData.processdata.PolishCTPos[ID].Count) { LG.ImmediateStepNext(2); //还有打磨拍照点继续打磨i拍照 } else { NUM = 0; LG.ImmediateStepNext(5); } } else if (true) { foreach (var p in VisionInteraction.Instance.WhichPolish(ID).listModel) { int type = p.modelindex; int num = 0; foreach (var item in ProjectData.Instance.SaveData.processdata.WhichPolishMedol(ID)) { PolishPosData _pos = new PolishPosData(); _pos.Pos.X = p.ListPos[num].X + ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X; _pos.Pos.Y = p.ListPos[num].Y + ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y; _pos.Pos.R = p.ListPos[num].R; _pos.polishData = ProjectData.Instance.SaveData.processdata.WhichPolishMedol(ID)[type].polishData[num].Clone(); _pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos); num++; PolishOrderList.Add(_pos); //增加到list里 } } foreach (PolishPosData data in PolishOrderList.OrderBy(a => a.Pos.X).ThenBy(a => a.Pos.Y)) //对list里的点进行排序 { ProjectData.Instance.SaveData.processdata.PolishList[ID].Add(data); //把排列好的点写进打磨list里 } if (NUM < ProjectData.Instance.SaveData.processdata.PolishCTPos[ID].Count) { LG.ImmediateStepNext(2); //还有打磨拍照点继续打磨i拍照 } else { NUM = 0; LG.ImmediateStepNext(5); } } } break; case 5: //判断打磨列表里的数据 if (ProjectData.Instance.SaveData.processdata.PolishList[ID].Count() > 0) { LG.ImmediateStepNext(0xef); } else if (TaskManager.Default.FSM.MODE == 1) { LG.ImmediateStepNext(0xef); } else { string mes = ID.ToString() + "平台没有打磨点"; MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes); LG.StepNext(0xef, FSMStaDef.RUN); } break; case 0xef: //结束 LG.End(); break; } }