public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName), typeof(EnumSerialPortName)); AxisThicknessMeasY = ThisAxis(EnumAxisName.ThicknessMeasY); AxisThicknessMeasY.AddPoints(typeof(EnumPointX)); SerialPort.Add(EnumCellIndex.左电芯, ThisSerialPortData(EnumSerialPortName.ThicknessSensorLeft)); SerialPort.Add(EnumCellIndex.中电芯, ThisSerialPortData(EnumSerialPortName.ThicknessSensorMid)); SerialPort.Add(EnumCellIndex.右电芯, ThisSerialPortData(EnumSerialPortName.ThicknessSensorRight)); Cylinder.Add(EnumCellIndex.左电芯, new CylinderControl(/*"左电芯压紧气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.ThicknessMeasCyLeftDown), ThisOutport(EnumOutportName.ThicknessMeasCyLeftUp), ThisInport(EnumInportName.ThicknessMeasCyLeftDown), ThisInport(EnumInportName.ThicknessMeasCyLeftUp))); Cylinder.Add(EnumCellIndex.中电芯, new CylinderControl(/*"中电芯压紧气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.ThicknessMeasCyMidDown), ThisOutport(EnumOutportName.ThicknessMeasCyMidUp), ThisInport(EnumInportName.ThicknessMeasCyMidDown), ThisInport(EnumInportName.ThicknessMeasCyMidUp))); Cylinder.Add(EnumCellIndex.右电芯, new CylinderControl(/*"右电芯压紧气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.ThicknessMeasCyRightDown), ThisOutport(EnumOutportName.ThicknessMeasCyRightUp), ThisInport(EnumInportName.ThicknessMeasCyRightDown), ThisInport(EnumInportName.ThicknessMeasCyRightUp))); ThicknessCellVacuums[EnumCellIndex.左电芯].Port = ThisOutport(EnumOutportName.ThicknessMeasVacLeft); ThicknessCellVacuums[EnumCellIndex.中电芯].Port = ThisOutport(EnumOutportName.ThicknessMeasVacMid); ThicknessCellVacuums[EnumCellIndex.右电芯].Port = ThisOutport(EnumOutportName.ThicknessMeasVacRight); CellBlow.Port = ThisOutport(EnumOutportName.ThicknessMeasBlow); CellVacSensor[EnumCellIndex.左电芯].Port = ThisInport(EnumInportName.ThicknessMeasVacSensLeft); CellVacSensor[EnumCellIndex.中电芯].Port = ThisInport(EnumInportName.ThicknessMeasVacSensMid); CellVacSensor[EnumCellIndex.右电芯].Port = ThisInport(EnumInportName.ThicknessMeasVacSensRight); ZoneSettingPanel = new SettingPanelZone厚度测量(); ZoneManualPanel = new ManualPanelZone厚度测量(); }
public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName)); AxisSortingPNPY = ThisAxis(EnumAxisName.SortingPNPY); AxisSortingPNPZ = ThisAxis(EnumAxisName.SortingPNPZ); NGBoxFullSensor[0] = ThisInport(EnumInportName.SortingPNPNGBoxFull1); NGBoxFullSensor[1] = ThisInport(EnumInportName.SortingPNPNGBoxFull2); NGBoxFullSensor[2] = ThisInport(EnumInportName.SortingPNPNGBoxFull3); NGBoxFullSensor[3] = ThisInport(EnumInportName.SortingPNPNGBoxFull4); NGBoxBackSenser = ThisInport(EnumInportName.SortingPNPNGBoxBack); NGBoxFrontSensor = ThisInport(EnumInportName.SortingPNPNGBoxFront); AxisSortingPNPY.AddPoints(typeof(EnumPointPNPY)); AxisSortingPNPZ.AddPoints(typeof(EnumPointPNPZ)); PNPCylinder.Add(EnumCellIndex.左电芯, new CylinderControl(/*"左电芯Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.SortingPNPCyLeftDown), ThisOutport(EnumOutportName.SortingPNPCyLeftUp), ThisInport(EnumInportName.SortingPNPCyLeftDown), ThisInport(EnumInportName.SortingPNPCyLeftUp))); PNPCylinder.Add(EnumCellIndex.中电芯, new CylinderControl(/*"中电芯Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.SortingPNPCyMidDown), ThisOutport(EnumOutportName.SortingPNPCyMidUp), ThisInport(EnumInportName.SortingPNPCyMidDown), ThisInport(EnumInportName.SortingPNPCyMidUp))); PNPCylinder.Add(EnumCellIndex.右电芯, new CylinderControl(/*"右电芯Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.SortingPNPCyRightDown), ThisOutport(EnumOutportName.SortingPNPCyRightUp), ThisInport(EnumInportName.SortingPNPCyRightDown), ThisInport(EnumInportName.SortingPNPCyRightUp))); CellVacuums[EnumCellIndex.左电芯].MainPort.Port = ThisOutport(EnumOutportName.SortingPNPVacLeft); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.SortingPNPVacLeftBack); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.SortingPNPVacLeftCent); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.SortingPNPVacLeftFront); CellVacuums[EnumCellIndex.中电芯].MainPort.Port = ThisOutport(EnumOutportName.SortingPNPVacMid); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.SortingPNPVacMidBack); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.SortingPNPVacMidCent); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.SortingPNPVacMidFront); CellVacuums[EnumCellIndex.右电芯].MainPort.Port = ThisOutport(EnumOutportName.SortingPNPVacRight); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.SortingPNPVacRightBack); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.SortingPNPVacRightCent); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.SortingPNPVacRightFront); CellBlow.Port = ThisOutport(EnumOutportName.SortingPNPBlow); CellVacSensor[EnumCellIndex.左电芯].Port = ThisInport(EnumInportName.SortingPNPVacSensLeft); CellVacSensor[EnumCellIndex.中电芯].Port = ThisInport(EnumInportName.SortingPNPVacSensMid); CellVacSensor[EnumCellIndex.右电芯].Port = ThisInport(EnumInportName.SortingPNPVacSensRight); ZoneSettingPanel = new SettingPanelZoneNG挑选机械手(); ZoneManualPanel = new ManualPanelZoneNG挑选机械手(); }
public void AsyncActionMotorMove(CAxisBase axis, object point, bool NeedWait = true) { if (asyncMotorMove != null) { asyncMotorMove.BeginInvoke(axis, point, NeedWait, MotorMoveAsyncReturn, asyncMotorMove); } }
private bool AxisTopAlignXSide_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisTopAlignXSide = zones.WorkZone顶封边定位.AxisTopAlignXSide; CAxisBase AxisTopAlignZClamp = zones.WorkZone顶封边定位.AxisTopAlignZClamp; if (!IsHome) { if (!CheckMotorStatus(AxisTopAlignXSide, AxisTopAlignXSide)) { return(false); } if (!CheckMotorStatus(AxisTopAlignXSide, AxisTopAlignZClamp)) { return(false); } if (IgnoreSmallStep(AxisTopAlignXSide, TargetPos)) { return(true); } } if (!zones.WorkZone顶封边定位.ThisInport(ClassZone顶封边定位.EnumInportName.TopAlignCyLeftUp).status || !zones.WorkZone顶封边定位.ThisInport(ClassZone顶封边定位.EnumInportName.TopAlignCyMidUp).status || !zones.WorkZone顶封边定位.ThisInport(ClassZone顶封边定位.EnumInportName.TopAlignCyRightUp).status) { ErrorStr = "顶封边Z夹紧气缸不在上位。"; ShowMotorError(AxisTopAlignXSide, ErrorStr); return(false); } return(true); }
private bool AxisTopAlignTop_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisTopAlignTop = zones.WorkZone顶封边定位.AxisTopAlignTop; CAxisBase AxisTopAlignZClamp = zones.WorkZone顶封边定位.AxisTopAlignZClamp; if (!IsHome) { if (!CheckMotorStatus(AxisTopAlignTop, AxisTopAlignTop)) { return(false); } if (!CheckMotorStatus(AxisTopAlignTop, AxisTopAlignZClamp)) { return(false); } if (IgnoreSmallStep(AxisTopAlignTop, TargetPos)) { return(true); } } //if (ClassCommonSetting.GreaterThanPosition(AxisTopAlignZClamp, ClassZone顶封边定位.EnumPointAlign.Clamp, -1)) //{ // ErrorStr = "顶封边Z夹紧电机在Clamp位置。"; // ShowMotorError(AxisTopAlignTop, ErrorStr); // return false; //} return(true); }
private bool AxisUnloadPNPY_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisUnloadPNPY = zones.WorkZone下料机械手.AxisUnloadPNPY; //CAxisBase AxisTransPNPX = zones.WorkZone传送机械手.AxisTransPNPX; if (!IsHome) { if (!CheckMotorStatus(AxisUnloadPNPY, AxisUnloadPNPY)) { return(false); } //if (!CheckMotorStatus(AxisUnloadPNPY, AxisTransPNPX)) return false; if (IgnoreSmallStep(AxisUnloadPNPY, TargetPos)) { return(true); } } //Cylinder is not at up position. if (!zones.WorkZone下料机械手.ThisInport(ClassZone下料机械手.EnumInportName.UnloadPNPCyUp).status) { ErrorStr = "下料气缸不在上位。"; ShowMotorError(AxisUnloadPNPY, ErrorStr); return(false); } ////Move to Pick point but Trans PNP blocks on the way. //if (GreaterThanPosition(AxisUnloadPNPY, TargetPos, ClassZone下料机械手.EnumPoint.Pick, -15) && // GreaterThanPosition(AxisTransPNPX, ClassZone传送机械手.EnumPointPNPX.Load, 15)) //{ // ShowMotorError(AxisUnloadPNPY, "传送PNP位置阻挡下料PNPY移到Pick位置。"); // return false; //} return(true); }
public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName), typeof(EnumSerialPortName)); AxisLoadInConveyor = ThisAxis(EnumAxisName.LoadInConveyor); AxisLoadInConveyor.AddPoints(typeof(EnumPointConveyor)); ZoneSettingPanel = new SettingPanelZone上料传送(); ZoneManualPanel = new ManualPanelZone上料传送(); }
public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName)); AxisLoadPNPY = ThisAxis(EnumAxisName.LoadPNPY); AxisLoadPNPY.AddPoints(typeof(EnumPointY)); AxisLoadPNPZ = ThisAxis(EnumAxisName.LoadPNPZ); AxisLoadPNPZ.AddPoints(typeof(EnumPointZ)); NGBoxFullSensor = ThisInport(EnumInportName.LoadPNPNGBoxFull); NGBoxSensor = ThisInport(EnumInportName.LoadPNPNGBox); PNPCylinder.Add(EnumCellIndex.左电芯, new CylinderControl(/*"左电芯Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.LoadPNPCyLeftDown), ThisOutport(EnumOutportName.LoadPNPCyLeftUp), ThisInport(EnumInportName.LoadPNPCyLeftDown), ThisInport(EnumInportName.LoadPNPCyLeftUp))); PNPCylinder.Add(EnumCellIndex.中电芯, new CylinderControl(/*"中电芯Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.LoadPNPCyMidDown), ThisOutport(EnumOutportName.LoadPNPCyMidUp), ThisInport(EnumInportName.LoadPNPCyMidDown), ThisInport(EnumInportName.LoadPNPCyMidUp))); PNPCylinder.Add(EnumCellIndex.右电芯, new CylinderControl(/*"右电芯Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.LoadPNPCyRightDown), ThisOutport(EnumOutportName.LoadPNPCyRightUp), ThisInport(EnumInportName.LoadPNPCyRightDown), ThisInport(EnumInportName.LoadPNPCyRightUp))); CellVacuums[EnumCellIndex.左电芯].MainPort.Port = ThisOutport(EnumOutportName.LoadPNPVacLeft); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.LoadPNPVacLeftBack); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.LoadPNPVacLeftCent); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.LoadPNPVacLeftFront); CellVacuums[EnumCellIndex.中电芯].MainPort.Port = ThisOutport(EnumOutportName.LoadPNPVacMid); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.LoadPNPVacMidBack); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.LoadPNPVacMidCent); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.LoadPNPVacMidFront); CellVacuums[EnumCellIndex.右电芯].MainPort.Port = ThisOutport(EnumOutportName.LoadPNPVacRight); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.LoadPNPVacRightBack); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.LoadPNPVacRightCent); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.LoadPNPVacRightFront); CellBlow[EnumCellIndex.左电芯].Port = ThisOutport(EnumOutportName.LoadPNPBlowLeft); CellBlow[EnumCellIndex.中电芯].Port = ThisOutport(EnumOutportName.LoadPNPBlowMid); CellBlow[EnumCellIndex.右电芯].Port = ThisOutport(EnumOutportName.LoadPNPBlowRight); CellVacSensor[EnumCellIndex.左电芯].Port = ThisInport(EnumInportName.LoadPNPVacSensLeft); CellVacSensor[EnumCellIndex.中电芯].Port = ThisInport(EnumInportName.LoadPNPVacSensMid); CellVacSensor[EnumCellIndex.右电芯].Port = ThisInport(EnumInportName.LoadPNPVacSensRight); ZoneSettingPanel = new SettingPanelZone上料机械手(); ZoneManualPanel = new ManualPanelZone上料机械手(); DoUpdateNGBox(); ProductChangeHandler(null, null); }
protected string MotorReset(CAxisBase axis, object StartPos) { //if (axis.HomeFinish) //{ // if (!axis.MoveTo(StartPos)) return DispMotionError(axis, StartPos).Message; //} //else return(axis.Home(StartPos.ToString())); }
private bool AxisUnloadOutConveyor_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisUnloadOutConveyor = zones.WorkZone下料传送.AxisUnloadOutConveyor; CAxisBase AxisSortingPNPZ = zones.WorkZoneNG挑选机械手.AxisSortingPNPZ; CAxisBase AxisSortingPNPY = zones.WorkZoneNG挑选机械手.AxisSortingPNPY; CAxisBase AxisUnloadPNPY = zones.WorkZone下料机械手.AxisUnloadPNPY; if (!IsHome) { if (!CheckMotorStatus(AxisUnloadOutConveyor, AxisUnloadPNPY)) { return(false); } if (!CheckMotorStatus(AxisUnloadOutConveyor, AxisSortingPNPZ)) { return(false); } if (!CheckMotorStatus(AxisUnloadOutConveyor, AxisSortingPNPY)) { return(false); } if (!CheckMotorStatus(AxisUnloadOutConveyor, AxisUnloadOutConveyor)) { return(false); } if (IgnoreSmallStep(AxisUnloadOutConveyor, TargetPos)) { return(true); } } //Sorting PNP Y is at pick position and Z position is lower than Up point. if (InPositionRange(AxisSortingPNPY, ClassZoneNG挑选机械手.EnumPointPNPY.Pick) && !ClassCommonSetting.CheckTimeOut(() => GreaterThanPosition(AxisSortingPNPZ, ClassZoneNG挑选机械手.EnumPointPNPZ.Up, -5))) { ErrorStr = "NG挑选PNP在Pick位置,但是Z电机低于Up位置5mm。"; ShowMotorError(AxisUnloadOutConveyor, ErrorStr); return(false); } //Unload PNP Y is at place position and cylinder is not at up position. if (InPositionRange(AxisUnloadPNPY, ClassZone下料机械手.EnumPoint.Place) && !zones.WorkZone下料机械手.ThisInport(ClassZone下料机械手.EnumInportName.UnloadPNPCyUp).status) { ErrorStr = "下料PNP气缸不在上位。"; ShowMotorError(AxisUnloadOutConveyor, ErrorStr); return(false); } ////Unload position has part //if (zones.WorkZone下料传送.ThisInport(ClassZone下料传送.EnumInportName.UnloadOutUnload).status) //{ // ErrorStr = "右边下料传感器检测有物料。"; // ShowMotorError(AxisUnloadOutConveyor, ErrorStr); // return false; //} return(true); }
//private bool IgnoreSmallStep(CAxisBase axis, object TargetPoint) //{ // return InPositionRange(axis, TargetPoint); //} private bool CheckMotorStatus(CAxisBase source, CAxisBase axis) { bool res = axis.ServoOn && axis.HomeFinish; if (!res) { ShowMotorError(source, axis.Name + "电机未上电或是未复位。"); } return(res); }
private void comboBoxAxis_SelectedIndexChanged(object sender, EventArgs e) { ComboBox comboBoxAxis = (ComboBox)sender; if (comboBoxAxis.SelectedIndex >= 0) { CAxisBase axis = HardwarePool.SystemHardware.instance.GetAxis(comboBoxAxis.Text); axis.ConfigurationControl.BringToFront(); } }
private bool AxisOutlineMeasX_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisOutlineMeasX = zones.WorkZone尺寸测量.AxisOutlineMeasX; CAxisBase AxisUnloadPNPY = zones.WorkZone下料机械手.AxisUnloadPNPY; CAxisBase AxisTransPNPX = zones.WorkZone传送机械手.AxisTransPNPX; if (!IsHome) { if (!CheckMotorStatus(AxisOutlineMeasX, AxisOutlineMeasX)) { return(false); } if (!CheckMotorStatus(AxisOutlineMeasX, AxisUnloadPNPY)) { return(false); } if (IgnoreSmallStep(AxisOutlineMeasX, TargetPos)) { return(true); } } //Trans PNP cylinder is not at up position when Trans PNP is at unload position. if (InPositionRange(AxisTransPNPX, ClassZone传送机械手.EnumPointPNPX.Unload, 0, 15) && !zones.WorkZone传送机械手.ThisInport(ClassZone传送机械手.EnumInportName.TransPNPCyUp).status) { ErrorStr = "传送PNP在Unload位置但是气缸不在上位。"; ShowMotorError(AxisOutlineMeasX, ErrorStr); return(false); } //Unload PNP is at pick position and cylinder is not at up position. bool pos = InPositionRange(AxisUnloadPNPY, ClassZone下料机械手.EnumPoint.Pick, 0, 15); bool cylin = !zones.WorkZone下料机械手.ThisInport(ClassZone下料机械手.EnumInportName.UnloadPNPCyUp).status; if (pos && cylin) { for (int i = 0; i < 10; i++) { System.Threading.Thread.Sleep(100); pos = InPositionRange(AxisUnloadPNPY, ClassZone下料机械手.EnumPoint.Pick, 0, 15); cylin = !zones.WorkZone下料机械手.ThisInport(ClassZone下料机械手.EnumInportName.UnloadPNPCyUp).status; if (!pos || !cylin) { break; } } } if (pos && cylin) { ErrorStr = "下料PNP在Pick位置(" + AxisUnloadPNPY.CurrentPosition.ToString() + "),但是气缸不在上位。"; ShowMotorError(AxisOutlineMeasX, ErrorStr); return(false); } return(true); }
/// <summary> /// 添加一个电机类CaxisBase实例。 /// </summary> /// <param name="axis">电机类实例</param> public void AddHardware(CAxisBase axis) { if (axis == null) { return; } if (_AxisCollection.ContainsKey(axis.Name)) { return; } _AxisCollection.Add(axis.Name, axis); }
private bool AxisLoadPNPY_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisLoadPNPY = zones.WorkZone上料机械手.AxisLoadPNPY; CAxisBase AxisLoadPNPZ = zones.WorkZone上料机械手.AxisLoadPNPZ; CAxisBase AxisTransPNPX = zones.WorkZone传送机械手.AxisTransPNPX; if (!IsHome) { if (!CheckMotorStatus(AxisLoadPNPY, AxisLoadPNPZ)) { return(false); } if (!CheckMotorStatus(AxisLoadPNPY, AxisTransPNPX)) { return(false); } if (!CheckMotorStatus(AxisLoadPNPY, AxisLoadPNPY)) { return(false); } if (IgnoreSmallStep(AxisLoadPNPY, TargetPos)) { return(true); } } //Z position is lower than Idle point. if (!ClassCommonSetting.CheckTimeOut(() => GreaterThanPosition(AxisLoadPNPZ, ClassZone上料机械手.EnumPointZ.Idle, -5))) { ErrorStr = "上料PNPZ电机低于Idle位置5mm。"; ShowMotorError(AxisLoadPNPY, ErrorStr); return(false); } //Cylinders are not at up position. if (!zones.WorkZone上料机械手.ThisInport(ClassZone上料机械手.EnumInportName.LoadPNPCyLeftUp).status || !zones.WorkZone上料机械手.ThisInport(ClassZone上料机械手.EnumInportName.LoadPNPCyMidUp).status || !zones.WorkZone上料机械手.ThisInport(ClassZone上料机械手.EnumInportName.LoadPNPCyRightUp).status) { ErrorStr = "上料PNP有气缸不在上位。"; ShowMotorError(AxisLoadPNPY, ErrorStr); return(false); } //Move to place point but TransPNP is at block position. if (GreaterThanPosition(AxisLoadPNPY, TargetPos, ClassZone上料机械手.EnumPointY.SafeLimit, 0) && !ClassCommonSetting.CheckTimeOut(() => GreaterThanPosition(AxisTransPNPX, ClassZone传送机械手.EnumPointPNPX.SafeLimit, 0))) { ErrorStr = "传送PNP位置阻挡上料PNPY移到Place位置。"; ShowMotorError(AxisLoadPNPY, ErrorStr); return(false); } return(true); }
private bool AxisTransPNPX_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisTransPNPX = zones.WorkZone传送机械手.AxisTransPNPX; CAxisBase AxisLoadPNPY = zones.WorkZone上料机械手.AxisLoadPNPY; //CAxisBase AxisUnloadPNPY = zones.WorkZone下料机械手.AxisUnloadPNPY; if (!IsHome) { if (!CheckMotorStatus(AxisTransPNPX, AxisTransPNPX)) { return(false); } if (!CheckMotorStatus(AxisTransPNPX, AxisLoadPNPY)) { return(false); } //if (!CheckMotorStatus(AxisTransPNPX, AxisUnloadPNPY)) return false; if (IgnoreSmallStep(AxisTransPNPX, TargetPos)) { return(true); } } //传送PNP气缸不在上位 if (!zones.WorkZone传送机械手.ThisInport(ClassZone传送机械手.EnumInportName.TransPNPCyUp).status) { System.Threading.Thread.Sleep(100); if (!zones.WorkZone传送机械手.ThisInport(ClassZone传送机械手.EnumInportName.TransPNPCyUp).status) { ErrorStr = "传送PNP气缸不在上位。"; ShowMotorError(AxisTransPNPX, ErrorStr); return(false); } } //上料时上料PNP在Place位置 if (LessThanPosition(AxisTransPNPX, TargetPos, ClassZone传送机械手.EnumPointPNPX.SafeLimit, 0) && !ClassCommonSetting.CheckTimeOut(() => LessThanPosition(AxisLoadPNPY, ClassZone上料机械手.EnumPointY.SafeLimit, 0))) { ErrorStr = "上料PNPY阻挡传送PNPX移到Load位置。"; ShowMotorError(AxisTransPNPX, ErrorStr); return(false); } ////下料时下料PNP在Pick位置 //if (!GreaterThanPosition(AxisTransPNPX, TargetPos, ClassZone传送机械手.EnumPointPNPX.Unload, -15) && // GreaterThanPosition(AxisUnloadPNPY, ClassZone下料机械手.EnumPoint.Pick, -15)) //{ // ShowMotorError(AxisTransPNPX, "下料PNPY阻挡传送PNPX移到Unload位置。"); // return false; //} return(true); }
public ErrorInfoWithPause ActionMotorMove(CAxisBase axis, object point, bool NeedWait = true) { ErrorInfoWithPause res = null; while (!axis.MoveTo(point, NeedWait)) //return DispMotionError(AxisOutlineMeasX, EnumPointX.GetPart); { res = DispMotionError(axis, point); if (res != null) { return(res); } } return(null); }
private bool AxisLoadPNPZ_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisLoadPNPZ = zones.WorkZone上料机械手.AxisLoadPNPZ; if (!IsHome) { if (!CheckMotorStatus(AxisLoadPNPZ, AxisLoadPNPZ)) { return(false); } if (IgnoreSmallStep(AxisLoadPNPZ, TargetPos)) { return(true); } } return(true); }
private bool AxisTopAlignZClamp_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisTopAlignZClamp = zones.WorkZone顶封边定位.AxisTopAlignZClamp; if (!IsHome) { if (!CheckMotorStatus(AxisTopAlignZClamp, AxisTopAlignZClamp)) { return(false); } if (IgnoreSmallStep(AxisTopAlignZClamp, TargetPos)) { return(true); } } return(true); }
private bool AxisLoadInConveyor_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisLoadInConveyor = zones.WorkZone上料传送.AxisLoadInConveyor; CAxisBase AxisLoadPNPZ = zones.WorkZone上料机械手.AxisLoadPNPZ; CAxisBase AxisLoadPNPY = zones.WorkZone上料机械手.AxisLoadPNPY; if (!IsHome) { if (!CheckMotorStatus(AxisLoadInConveyor, AxisLoadPNPZ)) { return(false); } if (!CheckMotorStatus(AxisLoadInConveyor, AxisLoadPNPY)) { return(false); } if (!CheckMotorStatus(AxisLoadInConveyor, AxisLoadInConveyor)) { return(false); } if (IgnoreSmallStep(AxisLoadInConveyor, TargetPos)) { return(true); } } //Load PNP Y is at Pick point and Z position is lower than Idle point. if (InPositionRange(AxisLoadPNPY, ClassZone上料机械手.EnumPointY.Pick, 0, 15) && !ClassCommonSetting.CheckTimeOut(() => GreaterThanPosition(AxisLoadPNPZ, ClassZone上料机械手.EnumPointZ.Idle, -5))) { ErrorStr = "上料PNP位于Pick位置,但是Z电机低于Idle位置5mm。"; ShowMotorError(AxisLoadInConveyor, ErrorStr); return(false); } if (TargetPos > AxisLoadInConveyor.CurrentPosition) { //InPosition has part if (ClassWorkFlow.Instance.WorkMode != EnumWorkMode.空跑 && zones.WorkZone上料传送.ThisInport(ClassZone上料传送.EnumInportName.LoadInConvInPosRight).status) { ErrorStr = "右边到位传感器检测有物料。"; ShowMotorError(AxisLoadInConveyor, ErrorStr); return(false); } } return(true); }
public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName)); AxisUnloadPNPY = ThisAxis(EnumAxisName.UnloadPNPY); AxisUnloadPNPY.AddPoints(typeof(EnumPoint)); PNPCylinder = new CylinderControl(/*"Z气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.UnloadPNPCyDown), ThisOutport(EnumOutportName.UnloadPNPCyUp), ThisInport(EnumInportName.UnloadPNPCyDown), ThisInport(EnumInportName.UnloadPNPCyUp)); CellVacuums[EnumCellIndex.左电芯].MainPort.Port = ThisOutport(EnumOutportName.UnloadPNPVacLeft); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacLeftBack); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacLeftCent); CellVacuums[EnumCellIndex.左电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacLeftFront); CellVacuums[EnumCellIndex.中电芯].MainPort.Port = ThisOutport(EnumOutportName.UnloadPNPVacMid); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacMidBack); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacMidCent); CellVacuums[EnumCellIndex.中电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacMidFront); CellVacuums[EnumCellIndex.右电芯].MainPort.Port = ThisOutport(EnumOutportName.UnloadPNPVacRight); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.后真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacRightBack); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.中真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacRightCent); CellVacuums[EnumCellIndex.右电芯].AirPorts[(int)EnumVacuumIndex.前真空].Port = ThisOutport(EnumOutportName.UnloadPNPVacRightFront); CellBlow.Port = ThisOutport(EnumOutportName.UnloadPNPBlow); CellVacSensor[EnumCellIndex.左电芯].Port = ThisInport(EnumInportName.UnloadPNPVacSensLeft); CellVacSensor[EnumCellIndex.中电芯].Port = ThisInport(EnumInportName.UnloadPNPVacSensMid); CellVacSensor[EnumCellIndex.右电芯].Port = ThisInport(EnumInportName.UnloadPNPVacSensRight); ZoneSettingPanel = new SettingPanelZone下料机械手(); ZoneManualPanel = new ManualPanelZone下料机械手(); }
public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName), typeof(EnumSerialPortName)); AxisOutlineMeasX = ThisAxis(EnumAxisName.OutlineMeasX); AxisOutlineMeasX.AddPoints(typeof(EnumPointX)); CellVacuums[EnumCellIndex.左电芯].Port = ThisOutport(EnumOutportName.OutlineMeasVacLeft); CellVacuums[EnumCellIndex.中电芯].Port = ThisOutport(EnumOutportName.OutlineMeasVacMid); CellVacuums[EnumCellIndex.右电芯].Port = ThisOutport(EnumOutportName.OutlineMeasVacRight); CellBlow.Port = ThisOutport(EnumOutportName.OutlineMeasBlow); CellVacSensor[EnumCellIndex.左电芯].Port = ThisInport(EnumInportName.OutlineMeasVacSensLeft); CellVacSensor[EnumCellIndex.中电芯].Port = ThisInport(EnumInportName.OutlineMeasVacSensMid); CellVacSensor[EnumCellIndex.右电芯].Port = ThisInport(EnumInportName.OutlineMeasVacSensRight); ZoneSettingPanel = new SettingPanelZone尺寸测量(); ZoneManualPanel = new ManualPanelZone尺寸测量(); for (int i = 0; i <= CELLCOUNT; i++) { MeasDone[i] = true; } BufferDatas[CELLCOUNT] = ClassDataInfo.NewCellData(); }
private bool AxisThicknessMeasY_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisThicknessMeasY = zones.WorkZone厚度测量.AxisThicknessMeasY; if (!IsHome) { if (!CheckMotorStatus(AxisThicknessMeasY, AxisThicknessMeasY)) { return(false); } if (IgnoreSmallStep(AxisThicknessMeasY, TargetPos)) { return(true); } } //Trans PNP cylinder is not at up position. if (!zones.WorkZone传送机械手.ThisInport(ClassZone传送机械手.EnumInportName.TransPNPCyUp).status) { System.Threading.Thread.Sleep(100); if (!zones.WorkZone传送机械手.ThisInport(ClassZone传送机械手.EnumInportName.TransPNPCyUp).status) { ErrorStr = "传送PNP气缸不在上位。"; ShowMotorError(AxisThicknessMeasY, ErrorStr); return(false); } } //Thickness cylinder is not at up position. if (!zones.WorkZone厚度测量.ThisInport(ClassZone厚度测量.EnumInportName.ThicknessMeasCyLeftUp).status || !zones.WorkZone厚度测量.ThisInport(ClassZone厚度测量.EnumInportName.ThicknessMeasCyMidUp).status || !zones.WorkZone厚度测量.ThisInport(ClassZone厚度测量.EnumInportName.ThicknessMeasCyRightUp).status) { ErrorStr = "厚度检测气缸不在上位。"; ShowMotorError(AxisThicknessMeasY, ErrorStr); return(false); } return(true); }
private bool AxisSortingPNPY_CheckSafety(bool IsHome, double TargetPos, ref string ErrorStr) { CAxisBase AxisSortingPNPY = zones.WorkZoneNG挑选机械手.AxisSortingPNPY; CAxisBase AxisSortingPNPZ = zones.WorkZoneNG挑选机械手.AxisSortingPNPZ; if (!IsHome) { if (!CheckMotorStatus(AxisSortingPNPY, AxisSortingPNPZ)) { return(false); } if (!CheckMotorStatus(AxisSortingPNPY, AxisSortingPNPY)) { return(false); } if (IgnoreSmallStep(AxisSortingPNPY, TargetPos)) { return(true); } } //Z position is lower than Up point. if (!ClassCommonSetting.CheckTimeOut(() => GreaterThanPosition(AxisSortingPNPZ, ClassZoneNG挑选机械手.EnumPointPNPZ.Up, -5))) { ErrorStr = "NG挑选PNPZ电机低于Up位置5mm。"; ShowMotorError(AxisSortingPNPY, ErrorStr); return(false); } //Cylinders are not at up position. if (!zones.WorkZoneNG挑选机械手.ThisInport(ClassZoneNG挑选机械手.EnumInportName.SortingPNPCyLeftUp).status || !zones.WorkZoneNG挑选机械手.ThisInport(ClassZoneNG挑选机械手.EnumInportName.SortingPNPCyMidUp).status || !zones.WorkZoneNG挑选机械手.ThisInport(ClassZoneNG挑选机械手.EnumInportName.SortingPNPCyRightUp).status) { ErrorStr = "NG挑选PNP气缸不在上位。"; ShowMotorError(AxisSortingPNPY, ErrorStr); return(false); } return(true); }
public override void ZoneInit() { base.ZoneInit(); AssignHardware(typeof(EnumAxisName), typeof(EnumInportName), typeof(EnumOutportName)); AxisTopAlignBottom = ThisAxis(EnumAxisName.TopAlignBottom); AxisTopAlignBottom.AddPoints(typeof(EnumPointAlign)); AxisTopAlignSide = ThisAxis(EnumAxisName.TopAlignSide); AxisTopAlignSide.AddPoints(typeof(EnumPointAlign)); AxisTopAlignTop = ThisAxis(EnumAxisName.TopAlignTop); AxisTopAlignTop.AddPoints(typeof(EnumPointAlign)); AxisTopAlignXSide = ThisAxis(EnumAxisName.TopAlignXSide); AxisTopAlignXSide.AddPoints(typeof(EnumPointX)); AxisTopAlignZClamp = ThisAxis(EnumAxisName.TopAlignZClamp); AxisTopAlignZClamp.AddPoints(typeof(EnumPointAlign)); Cylinder.Add(EnumCellIndex.左电芯, new CylinderControl(/*"左电芯压紧气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.TopAlignCyLeftDown), ThisOutport(EnumOutportName.TopAlignCyLeftUp), ThisInport(EnumInportName.TopAlignCyLeftDown), ThisInport(EnumInportName.TopAlignCyLeftUp))); Cylinder.Add(EnumCellIndex.中电芯, new CylinderControl(/*"中电芯压紧气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.TopAlignCyMidDown), ThisOutport(EnumOutportName.TopAlignCyMidUp), ThisInport(EnumInportName.TopAlignCyMidDown), ThisInport(EnumInportName.TopAlignCyMidUp))); Cylinder.Add(EnumCellIndex.右电芯, new CylinderControl(/*"右电芯压紧气缸", "下降", "上升",*/ ThisOutport(EnumOutportName.TopAlignCyRightDown), ThisOutport(EnumOutportName.TopAlignCyRightUp), ThisInport(EnumInportName.TopAlignCyRightDown), ThisInport(EnumInportName.TopAlignCyRightUp))); TopAlignCellVacuums[EnumCellIndex.左电芯].Port = ThisOutport(EnumOutportName.TopAlignVacLeft); TopAlignCellVacuums[EnumCellIndex.中电芯].Port = ThisOutport(EnumOutportName.TopAlignVacMid); TopAlignCellVacuums[EnumCellIndex.右电芯].Port = ThisOutport(EnumOutportName.TopAlignVacRight); CellVacSensor[EnumCellIndex.左电芯].Port = ThisInport(EnumInportName.TopAlignVacSensLeft); CellVacSensor[EnumCellIndex.中电芯].Port = ThisInport(EnumInportName.TopAlignVacSensMid); CellVacSensor[EnumCellIndex.右电芯].Port = ThisInport(EnumInportName.TopAlignVacSensRight); CellBlow.Port = ThisOutport(EnumOutportName.TopAlignBlow); ZoneSettingPanel = new SettingPanelZone顶封边定位(); ZoneManualPanel = new ManualPanelZone顶封边定位(); AxisTopAlignXSide.HomeLimitReturnDis = 10; }
//public static bool LessThanPosition(CAxisBase axis, double TargetPos, double Offset) //{ // return LessThanPosition(axis, axis.CurrentPosition, TargetPos, Offset); //} public static bool LessThanPosition(CAxisBase axis, object TargetPoint, double Offset) { return(LessThanTarget(axis.CurrentPosition, axis.PointList[TargetPoint].Position, Offset)); }
//public static bool OutPositionRange(CAxisBase axis, object TargetPoint, double Tolerance = 5) //{ // return CheckErrPosTimeOut(() => { return !InPositionTarget(axis.CurrentPosition, axis.PointList[TargetPoint].Position, Tolerance); }, 1000); //} public static bool InPositionRange(CAxisBase axis, double SourcePos, object TargetPoint, double Offset = 0, double Tolerance = 5) { return(InPositionTarget(SourcePos, axis.PointList[TargetPoint].Position + Offset, Tolerance)); }
public static bool GreaterThanPosition(CAxisBase axis, double SourcePos, object TargetPoint, double Offset) { return(GreaterThanTarget(SourcePos, axis.PointList[TargetPoint].Position, Offset)); }
private bool IgnoreSmallStep(CAxisBase axis, double TargetPos) { return(Math.Abs(axis.CurrentPosition - TargetPos) <= 5); }
private void ShowMotorError(CAxisBase axis, string error) { ClassErrorHandle.ShowError(axis.Name, "电机复位或移动安全检测失败: " + error, ErrorLevel.Alarm); }