示例#1
0
 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厚度测量();
 }
示例#2
0
 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挑选机械手();
 }
示例#3
0
 public void AsyncActionMotorMove(CAxisBase axis, object point, bool NeedWait = true)
 {
     if (asyncMotorMove != null)
     {
         asyncMotorMove.BeginInvoke(axis, point, NeedWait, MotorMoveAsyncReturn, asyncMotorMove);
     }
 }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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上料传送();
 }
示例#8
0
 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);
 }
示例#9
0
 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()));
 }
示例#10
0
        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);
        }
示例#11
0
        //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);
        }
示例#12
0
        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();
            }
        }
示例#13
0
        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);
        }
示例#14
0
 /// <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);
 }
示例#15
0
        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);
        }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#18
0
        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);
        }
示例#19
0
        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);
        }
示例#20
0
        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);
        }
示例#21
0
 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下料机械手();
 }
示例#22
0
        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();
        }
示例#23
0
        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);
        }
示例#24
0
        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);
        }
示例#25
0
        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;
        }
示例#26
0
 //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));
 }
示例#27
0
 //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));
 }
示例#28
0
 public static bool GreaterThanPosition(CAxisBase axis, double SourcePos, object TargetPoint, double Offset)
 {
     return(GreaterThanTarget(SourcePos, axis.PointList[TargetPoint].Position, Offset));
 }
示例#29
0
 private bool IgnoreSmallStep(CAxisBase axis, double TargetPos)
 {
     return(Math.Abs(axis.CurrentPosition - TargetPos) <= 5);
 }
示例#30
0
 private void ShowMotorError(CAxisBase axis, string error)
 {
     ClassErrorHandle.ShowError(axis.Name, "电机复位或移动安全检测失败: " + error, ErrorLevel.Alarm);
 }