Esempio n. 1
0
        public int GetPosition(AxisCard axisinfo)
        {
            int PositionPls = 0;
            int Res         = CPci9014.p9014_get_pos(axisinfo.Num, 0, ref PositionPls);

            return(PositionPls);
        }
Esempio n. 2
0
        public bool InitialAxisConfig(AxisCard axisinfo, ProFileType profiletype)
        {
            bool FuncResult = false;
            int  Res;

            Res = CPci9014.p9014_set_alarm(axisinfo.Num, 0, 1);
            if (Res != 0)
            {
                ShowLog("设置对应 DI 为 ALARM 输入端失败!", WriteLogType.Error);
                return(FuncResult);
            }
            Res = CPci9014.p9014_set_pls_outmode(axisinfo.Num, 0);
            if (Res != 0)
            {
                ShowLog("设置 OUT, DIR 引脚输出脉冲方式失败!", WriteLogType.Error);
                return(FuncResult);
            }
            Res = CPci9014.p9014_set_pls_iptmode(axisinfo.Num, 0);
            if (Res != 0)
            {
                ShowLog("设置 OUT, DIR 引脚输出脉冲方式失败!", WriteLogType.Error);
                return(FuncResult);
            }
            Res = CPci9014.p9014_set_el_level(axisinfo.Num, 0);
            if (Res != 0)
            {
                ShowLog("设定限位信号有效电平失败!", WriteLogType.Error);
                return(FuncResult);
            }
            Res = CPci9014.p9014_home_config(axisinfo.Num, 0, 0, 0);
            if (Res != 0)
            {
                ShowLog("配置原点开关有效电平、编码器 index 信号有效电平、回零模式失败!", WriteLogType.Error);
                return(FuncResult);
            }
            if (profiletype == ProFileType.T_Profile)
            {
                Res = CPci9014.p9014_set_t_profile(axisinfo.Num, axisinfo.MinSpeed, axisinfo.MaxSpeed, axisinfo.AccSpeed, axisinfo.DecSpeed);
                if (Res != 0)
                {
                    ShowLog("运动 T 曲线参数设定失败!", WriteLogType.Error);
                    return(FuncResult);
                }
            }
            else
            {
                Res = CPci9014.p9014_set_s_profile(axisinfo.Num, axisinfo.MinSpeed, axisinfo.MaxSpeed, axisinfo.AccSpeed, axisinfo.DecSpeed, 1);
                if (Res != 0)
                {
                    ShowLog("运动 S 曲线参数设定失败!", WriteLogType.Error);
                    return(FuncResult);
                }
            }

            FuncResult = true;
            return(FuncResult);
        }
Esempio n. 3
0
        public int AxisStop(AxisCard axisinfo, AxisStopType StopType)
        {
            int Res = CPci9014.p9014_stop(axisinfo.Num, (int)StopType);

            if (Res != 0)
            {
                //ShowLog("轴卡停止运动失败!",Color.Red,font);
            }
            return(Res);
        }
Esempio n. 4
0
        public uint CheckIOStatus(AxisCard axisinfo)
        {
            uint IOStatus = 0;
            int  Res      = CPci9014.p9014_get_io_status(axisinfo.Num, ref IOStatus);

            if (Res != 0)
            {
                return(2);
            }
            return(IOStatus);
        }
Esempio n. 5
0
        public int CheckAxisStatus(AxisCard axisinfo)
        {
            uint AxisStatus = 999;
            int  Res        = CPci9014.p9014_get_motion_status(axisinfo.Num, ref AxisStatus);

            if (Res != 0)
            {
                return(2);
            }
            return((int)AxisStatus);
        }
Esempio n. 6
0
        public int GetPosition(AxisCard axisinfo)
        {
            int PositionPls = 0;
            int Res         = CPci9014.p9014_get_pos(axisinfo.Num, 0, ref PositionPls);

            if (Res != 0)
            {
                //ShowLog("获取当前位置失败!",Color.Red,font);
                return(-1);
            }
            return(PositionPls);
        }
Esempio n. 7
0
        public uint CheckIOStatus(AxisCard axisinfo)
        {
            uint IOStatus = 0;
            int  Res      = CPci9014.p9014_get_io_status(axisinfo.Num, ref IOStatus);

            if (Res != 0)
            {
                //ShowLog("获取与驱动轴相关 I/O(如限位信号、原点信号)的状态失败!",Color.Red,font);
                return(2);
            }
            return(IOStatus);
        }
Esempio n. 8
0
        public int CheckAxisStatus(AxisCard axisinfo)
        {
            uint AxisStatus = 999;
            int  Res        = CPci9014.p9014_get_motion_status(axisinfo.Num, ref AxisStatus);

            if (Res != 0)
            {
                //ShowLog("查询指定轴的状态失败!",Color.Red,font);
                return(2);//表示Check Axis状态失败
            }
            return((int)AxisStatus);
        }
Esempio n. 9
0
        private void AxisInfoCombox_SelectedIndexChanged(object sender, EventArgs e)
        {
            string SelectAxis = this.AxisInfoCombox.SelectedItem.ToString();

            foreach (AxisCard selecAixs in context.ControlCard.AxisCard)
            {
                if (selecAixs.Name == SelectAxis)
                {
                    this.SelectAxis = selecAixs;
                    break;
                }
            }
        }
Esempio n. 10
0
        public int HomeMove(AxisCard axisinfo, int BackCondition = 0)
        {
            int time = 0;

            CPci9014.p9014_set_t_profile(axisinfo.Num, axisinfo.MinSpeed, axisinfo.MaxSpeed / 2, axisinfo.AccSpeed, axisinfo.DecSpeed);
            int Res = CPci9014.p9014_home_move(axisinfo.Num, BackCondition);

            if (Res != 0)
            {
                return(Res);
            }
            while (time <= 100)
            {
                time++;
                if (CheckAxisStatus(axisinfo) == 0)
                {
                    break;
                }
            }
            return(Res);
        }
Esempio n. 11
0
        public int HomeMove(AxisCard axisinfo, int BackCondition = 0)
        {
            int time = 0;

            CPci9014.p9014_set_t_profile(axisinfo.Num, axisinfo.MinSpeed, axisinfo.MaxSpeed / 2, axisinfo.AccSpeed, axisinfo.DecSpeed);
            int Res = CPci9014.p9014_home_move(axisinfo.Num, BackCondition);

            if (Res != 0)
            {
                ShowLog("回原运动失败!", WriteLogType.Error);
            }
            while (time <= 100)
            {
                time++;
                if (CheckAxisStatus(axisinfo) == 0)
                {
                    break;
                }
            }
            ShowLog($"{axisinfo.Name}-手动回原成功!!", WriteLogType.Action);
            return(Res);
        }
Esempio n. 12
0
        public int PMove(AxisCard axisinfo, int MovePulse, ProFileType MoveStyle)
        {
            int Res         = 0;
            int BefPosition = this.GetPosition(axisinfo);

            if (MoveStyle == ProFileType.T_Profile)
            {
                Res = CPci9014.p9014_set_t_profile(axisinfo.Num, axisinfo.MinSpeed, axisinfo.MaxSpeed, axisinfo.AccSpeed, axisinfo.DecSpeed);
            }
            else
            {
                Res = CPci9014.p9014_set_s_profile(axisinfo.Num, axisinfo.MinSpeed, axisinfo.MaxSpeed, axisinfo.AccSpeed, axisinfo.DecSpeed, 1);
            }
            Res = CPci9014.p9014_pmove(axisinfo.Num, MovePulse, axisinfo.MoveStyle, 2);
            if (Res != 0)
            {
                ShowLog($"{axisinfo.Name} 运动到脉冲距离:{MovePulse} 失败!", WriteLogType.Error);
                return(2);
            }
            while (true)
            {
                if (this.CheckAxisStatus(axisinfo) == 0)
                {
                    break;
                }
                Thread.Sleep(500);
            }
            int AfPosition = this.GetPosition(axisinfo);

            if (Math.Abs(AfPosition - BefPosition) - Math.Abs(MovePulse) > 1000)
            {
                ShowLog($"{axisinfo.Name}-实际运动脉冲数与目标运动脉冲数误差过大!!", WriteLogType.Error);
            }

            ShowLog($"{axisinfo.Name}-运动到脉冲距离:{MovePulse} 成功!", WriteLogType.Action);
            return(Res);
        }
Esempio n. 13
0
 public int AxisStop(AxisCard axisinfo, AxisStopType StopType)
 {
     return(CPci9014.p9014_stop(axisinfo.Num, (int)StopType));
 }
Esempio n. 14
0
        public bool AxisReset(AxisCard axiscard)
        {
            try
            {
                int Res       = 999;
                int WaitTimes = 0;
                //Thread.Sleep(2000);
                PrinterLog($"{axiscard.Name}轴开始回原点....", WriteLogType.Action);

                //Different Control Card.The HomeMode will Change PCI9014 :1/Forward,0/Opposite  DMC2C80:1/Forward 2/Opposite;
                int LocalPosition = ControlcardObj.GetPosition(axiscard);

                if (Math.Abs(LocalPosition) <= axiscard.HomeBackDis)
                {
                    if (axiscard.HomeModel == 1)
                    {
                        axiscard.HomeModel *= -1;
                    }
                    Res = ControlcardObj.PMove(axiscard, axiscard.HomeBackDis, ProFileType.T_Profile);
                    //PCI9014:0/Free 1/working     DMC2C80:0/working 1/Free;
                    while (ControlcardObj.CheckAxisStatus(axiscard) == 1)
                    {
                        WaitTimes++;
                        if (WaitTimes == 300)
                        {
                            PrinterLog($"{axiscard.Name} 运动到 [{axiscard.HomeBackDis}]超时!", WriteLogType.Error);
                            return(false);
                        }
                        Thread.Sleep(100);
                    }
                    LocalPosition = ControlcardObj.GetPosition(axiscard);
                    if (LocalPosition != axiscard.HomeBackDis)
                    {
                        PrinterLog($"{axiscard.Name} 未运动到指定位置:{axiscard.HomeBackDis}!", WriteLogType.Error);
                        return(false);
                    }
                }
                WaitTimes = 0;
                Res       = ControlcardObj.HomeMove(axiscard);
                while (ControlcardObj.CheckAxisStatus(axiscard) == 1)
                {
                    WaitTimes++;
                    if (WaitTimes == 300)
                    {
                        PrinterLog($"{axiscard.Name} 回原运动超时!", WriteLogType.Error);
                        return(false);
                    }
                    Thread.Sleep(100);
                }
                LocalPosition = ControlcardObj.GetPosition(axiscard);
                if (LocalPosition != 0 || Res != 0)
                {
                    PrinterLog($"{axiscard.Name}回原运动后未到达原点位置,轴卡现在所在位置脉冲:{LocalPosition}", WriteLogType.Error);
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                PrinterLog(ex.Message, WriteLogType.Error);
                throw new Exception(ex.Message);
            }
        }