Ejemplo n.º 1
0
        private void btHomeX_Click(object sender, EventArgs e)
        {
            string        errInfo;
            JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[0], out errInfo);

            if (null == ci)
            {
                MessageBox.Show("X轴:\"" + _axisNames[0] + "\" Home操作失败,ErrorInfo:" + errInfo);
                return;
            }
            IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq;
            IJFModule_Motion    md  = dev.GetMc(ci.ModuleIndex);
            int errCode             = md.Home(ci.ChannelIndex);

            if (0 != errCode)
            {
                MessageBox.Show("X轴:\"" + _axisNames[0] + "\" Home操作失败,ErrorInfo:" + md.GetErrorInfo(errCode));
                return;
            }
            ShowTips("X轴:\"" + _axisNames[0] + "\" Home运动开始");
        }
Ejemplo n.º 2
0
        void OnServonButtonClicked(object sender, EventArgs e)
        {
            int i = 0;

            for (i = 0; i < btServons.Length; i++)
            {
                if (sender == btServons[i])
                {
                    break;
                }
            }
            string        axisName = _axisNames[i];
            string        errInfo;
            JFDevCellInfo ci = CheckAxisDevInfo(axisName, out errInfo);

            if (null == ci)
            {
                MessageBox.Show("轴" + _axisNames[i] + "伺服操作失败,ErrorInfo:" + errInfo);
                return;
            }
            IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq;
            IJFModule_Motion    md  = dev.GetMc(ci.ModuleIndex);
            bool isCurrSerOn        = md.IsSVO(ci.ChannelIndex);
            int  errCode            = 0;

            if (isCurrSerOn)
            {
                errCode = md.ServoOff(ci.ChannelIndex);
            }
            else
            {
                errCode = md.ServoOn(ci.ChannelIndex);
            }
            if (errCode != 0)
            {
                MessageBox.Show("轴" + _axisNames[i] + "伺服操作失败,ErrorInfo:" + md.GetErrorInfo(errCode));
                return;
            }
            ShowTips("轴" + _axisNames[i] + "伺服" + (isCurrSerOn?"去使能":"使能") + "成功");
        }
Ejemplo n.º 3
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            string axisID = GetInitParamValue("轴ID") as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo = "参数项:\"轴ID\" = " + axisID + " 在设备名称表中不存在";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFInitializable dev = null;
            JFDevCellInfo    ci  = null;

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisID, out dev, out ci, out errorInfo))
            {
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }
            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            //if(!md.IsSVO(ci.ChannelIndex)) //HTM控制卡在未上电时,调用Stop会异常退出
            //{
            //    errorInfo = "\"轴ID\" = " + axisID + " 未励磁";
            //    SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
            //    return true;
            //}
            int errCode = md.StopAxis(ci.ChannelIndex);

            if (errCode != 0)
            {
                errorInfo = md.GetErrorInfo(errCode);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
Ejemplo n.º 4
0
        private void btAbsMoveR_Click(object sender, EventArgs e)
        {
            string        errInfo;
            JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[3], out errInfo);

            if (null == ci)
            {
                MessageBox.Show("R轴:\"" + _axisNames[3] + "\" 定位操作失败,ErrorInfo:" + errInfo);
                return;
            }
            IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq;
            IJFModule_Motion    md  = dev.GetMc(ci.ModuleIndex);
            double tgtPos           = Convert.ToDouble(numAbsCmdR.Value);
            int    errCode          = md.AbsMove(ci.ChannelIndex, tgtPos);

            if (errCode != 0)
            {
                MessageBox.Show("R轴:\"" + _axisNames[3] + "\" 定位操作失败,ErrorInfo:" + md.GetErrorInfo(errCode));
                return;
            }
            ShowTips("R轴:\"" + _axisNames[3] + "\" 开始移动到 :" + tgtPos);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 获取轴反馈坐标
        /// </summary>
        /// <param name="AxisName"></param>
        /// <param name="pos"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public int GetAxisFbkPos(string AxisName, out double pos, out string errMsg)
        {
            pos    = 0;
            errMsg = "";
            IJFInitializable dev;
            JFDevCellInfo    ci;
            double           UV2xy = 0;

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, AxisName, out dev, out ci, out errMsg))
            {
                return((int)ErrorDef.InvokeFailed);
            }
            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            int errCode         = md.GetFbkPos(ci.ChannelIndex, out UV2xy);

            if (errCode != (int)ErrorDef.Success)
            {
                errMsg = md.GetErrorInfo(errCode);
                return(errCode);
            }
            pos = UV2xy;
            return((int)ErrorDef.Success);
        }
Ejemplo n.º 6
0
        private void btPY_MouseDown(object sender, MouseEventArgs e)
        {
            if (cbMoveMode.SelectedIndex != 1) //未选中连续模式
            {
                return;
            }
            string        errInfo;
            JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[1], out errInfo);

            if (null == ci)
            {
                MessageBox.Show("Y轴正向连续运动失败!配置中没有通道信息,Name = \"" + _axisNames[1] + "\" ErrorInfo:" + errInfo);
                return;
            }
            IJFModule_Motion md = (JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            int errCode         = md.VelMove(ci.ChannelIndex, _dVelParam, true);

            if (errCode != 0)
            {
                MessageBox.Show("Y轴正向连续运动失败!Name = \"" + _axisNames[1] + "\" ErrorInfo:" + errInfo);
                return;
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 停止连续运动X
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btPX_MouseUp(object sender, MouseEventArgs e)
        {
            if (cbMoveMode.SelectedIndex != 1) //未选中连续模式
            {
                return;
            }
            string        errInfo;
            JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[0], out errInfo);

            if (null == ci)
            {
                return;
            }
            IJFModule_Motion md = (JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            int errCode         = md.StopAxis(ci.ChannelIndex);

            if (errCode != 0)
            {
                ShowTips("X轴停止运动失败!Name = \"" + _axisNames[0] + "\" ErrorInfo:" + errInfo);
                return;
            }
            ShowTips("X轴已停止");
        }
Ejemplo n.º 8
0
        JFDevCellInfo CheckAxisDevInfo(string axisName, out string errorInfo)
        {
            JFDevCellInfo ci = JFHubCenter.Instance.MDCellNameMgr.GetAxisCellInfo(axisName); //在命名表中的通道信息

            if (null == ci)
            {
                errorInfo = "未找到轴:\"" + axisName + "\"设备信息";
                return(null);
            }
            IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq;

            if (null == dev)
            {
                errorInfo = "未找到轴:\"" + axisName + "\"所属设备:\"" + ci.DeviceID + "\"";
                return(null);
            }
            if (!dev.IsDeviceOpen)
            {
                errorInfo = "轴:\"" + axisName + "\"所属设备:\"" + ci.DeviceID + "\"未打开";
                return(null);
            }
            if (ci.ModuleIndex >= dev.McCount)
            {
                errorInfo = "轴:\"" + axisName + "\"模块序号:\"" + ci.ModuleIndex + "\"超出限制!";
                return(null);
            }
            IJFModule_Motion md = dev.GetMc(ci.ModuleIndex);

            if (ci.ChannelIndex >= md.AxisCount)
            {
                errorInfo = "轴:\"" + axisName + "\"通道序号:\"" + ci.ChannelIndex + "\"超出限制!";
                return(null);
            }

            errorInfo = "";
            return(ci);
        }
Ejemplo n.º 9
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            IJFInitializable dev    = null;
            JFDevCellInfo    ci     = null;
            string           axisID = GetInitParamValue("轴ID") as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo = "参数项:\"轴ID\" = " + axisID + " 在设备名称表中不存在";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisID, out dev, out ci, out errorInfo))
            {
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            bool   isPositive = (bool)GetInitParamValue("正向移动");
            double velocity   = Convert.ToDouble(GetInitParamValue("移动速度"));

            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);

            bool[] AxisStatus = null;
            int    err        = md.GetMotionStatus(ci.ChannelIndex, out AxisStatus);

            if (err != 0)
            {
                errorInfo = "开始运动前检测轴状态失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            //if(md.IsSVO)
            if (!AxisStatus[md.MSID_SVO])
            {
                errorInfo = "轴伺服未上电";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (AxisStatus[md.MSID_ALM])
            {
                errorInfo = "轴伺服已报警";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!AxisStatus[md.MSID_MDN])
            {
                errorInfo = "轴当前运动未完成";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            int errCode = md.VelMove(ci.ChannelIndex, velocity, isPositive);

            if (errCode < 0)
            {
                errorInfo = "SDK调用出错:" + md.GetErrorInfo(errCode);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
Ejemplo n.º 10
0
 public void SetAxis(IJFModule_Motion module, int axis)
 {
     motionModule = module;
     axisIndex    = axis;
 }
Ejemplo n.º 11
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            IJFInitializable dev    = null;
            JFDevCellInfo    ci     = null;
            string           axisID = GetInitParamValue("轴ID") as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo = "参数项:\"轴ID\" = " + axisID + " 在设备名称表中不存在";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisID, out dev, out ci, out errorInfo))
            {
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }
            JFMotionParam mp = (JFMotionParam)GetInitParamValue("运动参数");

            /*
             * public double vs { get; set; }
             * /// <summary>最大速度</summary>
             * public double vm { get; set; }
             * /// <summary>结束速度</summary>
             * public double ve { get; set; }
             * /// <summary>加速度</summary>
             * public double acc { get; set; }
             * /// <summary>减速度</summary>
             * public double dec { get; set; }
             * /// <summary>s曲线因子(0~1.0)</summary>
             * public double curve { get; set; }
             * /// <summary>加加速</summary>
             * public double jerk { get; set; }
             */
            if (mp.vs < 0)
            {
                errorInfo = "起始速度参数vs < 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (mp.vm <= 0)
            {
                errorInfo = "运行速度参数vm <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (mp.ve < 0)
            {
                errorInfo = "终点速度参数ve < 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (mp.acc <= 0)
            {
                errorInfo = "加速度参数acc <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (mp.dec <= 0)
            {
                errorInfo = "减速度参数dec <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (mp.curve < 0 || mp.curve > 1)
            {
                errorInfo = "加速度曲线段系数不在允许范围0~1";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            int errCode         = md.SetMotionParam(ci.ChannelIndex, mp);

            if (errCode < 0)
            {
                errorInfo = "SDK调用出错:" + md.GetErrorInfo(errCode);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
Ejemplo n.º 12
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            IJFInitializable dev    = null;
            JFDevCellInfo    ci     = null;
            string           axisID = GetInitParamValue("轴ID") as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo = "参数项:\"轴ID\" = " + axisID + " 在设备名称表中不存在";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisID, out dev, out ci, out errorInfo))
            {
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }
            JFHomeParam hp = (JFHomeParam)GetInitParamValue("轴归零参数");

            /*
             * 归零模式  0:使用Org(原点)作为归零参考   1:使用限位信号作为归零参考   2:仅使用EZ信号作为归零参考
             */
            if (hp.mode != 0 && hp.mode != 1 && hp.mode != 2 && hp.mode != -1 && hp.mode != -2)
            {
                errorInfo = "归零模式设置错误,mode=" + hp.mode;
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (hp.acc <= 0)
            {
                errorInfo = "加速度/减速度acc <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (hp.vm <= 0)
            {
                errorInfo = "最大速度参数vm <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (hp.vo <= 0)
            {
                errorInfo = "寻找原点速度vo <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (hp.va <= 0)
            {
                errorInfo = "接近速度va <= 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (hp.shift < 0)
            {
                errorInfo = "回零偏移量sift < 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (hp.offset < 0)
            {
                errorInfo = "回零补偿值offset < 0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            int errCode         = md.SetHomeParam(ci.ChannelIndex, hp);

            if (errCode < 0)
            {
                errorInfo = "SDK调用出错:" + md.GetErrorInfo(errCode);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }
            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
Ejemplo n.º 13
0
        ///// <summary>
        ///// 使通道可用(如伺服上电,光源/触发可用)
        ///// 建议在 打开设备->检查通道可用性 之后调用
        ///// </summary>
        ///// <param name="errorInfo"></param>
        ///// <returns></returns>
        public bool EnabledChannel(out string errorInfo)
        {
            errorInfo = "Unknown-Error";
            bool isOK = false;

            if (!CheckAvalid(out errorInfo))
            {
                return(false);
            }
            int       errorCode = 0;
            IJFDevice dev       = Device();

            switch (CellType)
            {
            case JFDevCellType.DI:
                isOK      = true;
                errorInfo = "Success";
                break;

            case JFDevCellType.DO:
                errorInfo = "Success";
                isOK      = true;
                break;

            case JFDevCellType.Axis:
            {
                IJFDevice_MotionDaq devMD = Device() as IJFDevice_MotionDaq;
                JFDevCellInfo       ci    = CellInfo();
                IJFModule_Motion    mm    = devMD.GetMc(ci.ModuleIndex);
                errorCode = mm.ServoOn(ci.ChannelIndex);
                if (errorCode != 0)
                {
                    errorInfo = mm.GetErrorInfo(errorCode);
                }
                else
                {
                    isOK      = true;
                    errorInfo = "Success";
                }
            }
            break;

            case JFDevCellType.AI:
                errorInfo = "Success";
                isOK      = true;
                break;

            case JFDevCellType.AO:
                errorInfo = "Success";
                isOK      = true;
                break;

            case JFDevCellType.CmpTrig:
                errorInfo = "Success";
                isOK      = true;
                break;

            case JFDevCellType.Light:
                dev = Device();
                if (dev is IJFDevice_LightControllerWithTrig)    //光源控制器
                {
                    IJFDevice_LightControllerWithTrig devLT = dev as IJFDevice_LightControllerWithTrig;
                    errorCode = devLT.SetWorkMode(JFLightWithTrigWorkMode.TurnOnOff);     //切换为开关模式
                    if (errorCode != 0)
                    {
                        errorInfo = "切换为开关模式失败:" + devLT.GetErrorInfo(errorCode);
                        break;
                    }
                }
                IJFDevice_LightController devl = dev as IJFDevice_LightController;
                errorCode = devl.SetLightChannelEnable(CellInfo().ChannelIndex, true);
                if (errorCode != 0)
                {
                    errorInfo = "通道使能失败:" + devl.GetErrorInfo(errorCode);
                    break;
                }
                isOK      = true;
                errorInfo = "Success";
                break;

            case JFDevCellType.Trig:
                dev = Device();
                if (dev is IJFDevice_LightControllerWithTrig)     //光源控制器
                {
                    IJFDevice_LightControllerWithTrig devLT = dev as IJFDevice_LightControllerWithTrig;
                    errorCode = devLT.SetWorkMode(JFLightWithTrigWorkMode.Trigger);     //切换为触发模式
                    if (errorCode != 0)
                    {
                        errorInfo = "切换为触发模式失败:" + devLT.GetErrorInfo(errorCode);
                        break;
                    }
                }
                IJFDevice_TrigController devt = dev as IJFDevice_TrigController;
                errorCode = devt.SetTrigChannelEnable(CellInfo().ChannelIndex, true);
                if (errorCode != 0)
                {
                    errorInfo = "通道使能失败:" + devt.GetErrorInfo(errorCode);
                    break;
                }
                isOK      = true;
                errorInfo = "Success";
                break;

            default:
                errorInfo = "未定义的通道类型";
                break;
            }
            return(isOK);
        }
Ejemplo n.º 14
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            IJFInitializable dev    = null;
            JFDevCellInfo    ci     = null;
            string           axisID = GetInitParamValue("轴ID") as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo = "参数项:\"轴ID\"的值:\"" + axisID + "\"在设备名称表中不存在";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisID, out dev, out ci, out errorInfo))
            {
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);

            bool[] AxisStatus = null;
            int    err        = md.GetMotionStatus(ci.ChannelIndex, out AxisStatus);

            if (err != 0)
            {
                errorInfo = "归0前获取轴状态失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            //if(md.IsSVO)
            if (!AxisStatus[md.MSID_SVO])
            {
                errorInfo = "轴伺服未上电";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (AxisStatus[md.MSID_ALM])
            {
                errorInfo = "轴伺服已报警";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            //if (!AxisStatus[md.MSID_MDN])
            //{
            //    errorInfo = "轴当前运动未完成";
            //    SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
            //    return false;
            //}


            err = md.Home(ci.ChannelIndex);
            if (err != 0)
            {
                errorInfo = "调用SDK失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
Ejemplo n.º 15
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            IJFInitializable dev    = null;
            JFDevCellInfo    ci     = null;
            string           axisID = GetInitParamValue("轴ID") as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo = "参数:\"轴ID\" = " + axisID + " 在设备名称表中不存在";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisID, out dev, out ci, out errorInfo))
            {
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);

            bool[] AxisStatus = null;
            int    err        = md.GetMotionStatus(ci.ChannelIndex, out AxisStatus);

            if (err != 0)
            {
                errorInfo = "开始运动前检测轴状态失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            //if(md.IsSVO)
            if (!AxisStatus[md.MSID_SVO])
            {
                errorInfo = "轴伺服未上电";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (AxisStatus[md.MSID_ALM])
            {
                errorInfo = "轴伺服已报警";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!AxisStatus[md.MSID_MDN])
            {
                errorInfo = "轴当前运动未完成";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            double dPos      = Convert.ToDouble(GetInitParamValue("目标位置"));
            bool   IsAbsMove = Convert.ToBoolean(GetInitParamValue("绝对位置模式"));

            if (IsAbsMove)
            {
                err = md.AbsMove(ci.ChannelIndex, dPos);
            }
            else
            {
                err = md.RelMove(ci.ChannelIndex, dPos);
            }
            if (err != 0)
            {
                errorInfo = (IsAbsMove?"绝对":"相对") + "位置运动失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
Ejemplo n.º 16
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            _isRunning = true;
            string axisID = GetMethodInputValue(PN_AxisID) as string;

            if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisID))
            {
                errorInfo  = "参数项:\"轴ID\" = " + axisID + " 在设备名称表中不存在";
                _workCmd   = 0;
                _isRunning = false;
                SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                return(false);
            }

            int          timeoutMilSeconds = (int)GetMethodInputValue(PN_TimeoutMilliSeconds);
            int          cycleMilliSeconds = (int)GetInitParamValue(PN_CycleMilliSeconds);;
            JFDevChannel axisChn           = new JFDevChannel(JFDevCellType.Axis, axisID);

            if (!axisChn.CheckAvalid(out errorInfo))
            {
                _workCmd   = 0;
                _isRunning = false;
                SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFDevice_MotionDaq _dev = null;
            IJFModule_Motion    _md  = null;
            JFDevCellInfo       _ci  = null;

            _dev = axisChn.Device() as IJFDevice_MotionDaq;
            _ci  = axisChn.CellInfo();
            _md  = _dev.GetMc(_ci.ModuleIndex);

            DateTime startTime = DateTime.Now;

            while (true)
            {
                if (0 == _workCmd) //正常工作
                {
                    int    errCode = 0;
                    bool[] axisStatus;
                    errCode = _md.GetMotionStatus(_ci.ChannelIndex, out axisStatus);
                    if (errCode != 0)
                    {
                        errorInfo  = "获取轴状态失败!" + _md.GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }
                    if (axisStatus[_md.MSID_ALM])
                    {
                        errorInfo  = "轴已报警!";
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }

                    if (_md.MSID_EMG > -1 && axisStatus[_md.MSID_EMG])
                    {
                        errorInfo  = "轴已急停!";
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }

                    if (!axisStatus[_md.MSID_SVO])
                    {
                        errorInfo  = "轴伺服已断电!";
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }

                    if (axisStatus[_md.MSID_MDN])
                    {
                        ActionErrorInfo = "Success";
                        _workCmd        = 0;
                        _isRunning      = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.Success);
                        return(true);
                    }

                    if (timeoutMilSeconds >= 0)
                    {
                        TimeSpan ts = DateTime.Now - startTime;
                        if (ts.TotalMilliseconds >= timeoutMilSeconds)
                        {
                            errorInfo  = "超时未等到轴:\" " + axisID + "\"归零完成 ";
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.Timeout);
                            return(true);
                        }
                    }
                    Thread.Sleep(cycleMilliSeconds);
                }
                else if (1 == _workCmd)//当前为暂停状态
                {
                    int errCode = 0;
                    errCode = _md.StopAxis(_ci.ChannelIndex);
                    if (0 != errCode)
                    {
                        errorInfo  = "停止轴归零运动失败:" + _md.GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }
                    _workCmd = 0;
                    continue;
                }
                else if (2 == _workCmd)//当前为恢复状态
                {
                    double tgtPos  = 0;
                    int    errCode = _md.GetCmdPos(_ci.ChannelIndex, out tgtPos);
                    if (0 != errCode)
                    {
                        errorInfo  = "恢复运行时获取目标位置失败:" + _md.GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }
                    errCode = _md.AbsMove(_ci.ChannelIndex, tgtPos);
                    if (0 != errCode)
                    {
                        errorInfo  = "恢复轴P2P运动失败:" + _md.GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }

                    _workCmd = 0;
                    continue;
                }
                else if (-1 == _workCmd)//指令退出
                {
                    int errCode = 0;
                    errCode = _md.StopAxis(_ci.ChannelIndex);
                    if (0 != errCode)
                    {
                        errorInfo  = "停止轴归零运动失败:" + _md.GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }

                    errorInfo  = "收到退出指令";
                    _workCmd   = 0;
                    _isRunning = false;
                    SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                    return(false);
                }
                else
                {
                    Thread.Sleep(cycleMilliSeconds);
                    continue;
                }
            }
        }
Ejemplo n.º 17
0
        protected bool JFMotionDone(string AxisName, out string errorInfo, int delaytime)
        {
            errorInfo = "";
            JFDevChannel axisChn = new JFDevChannel(JFDevCellType.Axis, AxisName);

            if (!axisChn.CheckAvalid(out errorInfo))
            {
                _workCmd   = 0;
                _isRunning = false;
                return(false);
            }

            IJFDevice_MotionDaq _dev = null;
            IJFModule_Motion    _md  = null;
            JFDevCellInfo       _ci  = null;

            _dev = axisChn.Device() as IJFDevice_MotionDaq;
            _ci  = axisChn.CellInfo();
            _md  = _dev.GetMc(_ci.ModuleIndex);

            DateTime startTime = DateTime.Now;

            while (true)
            {
                if (0 == _workCmd) //正常工作
                {
                    int    errCode = 0;
                    bool[] axisStatus;
                    errCode = _md.GetMotionStatus(_ci.ChannelIndex, out axisStatus);
                    if (errCode != 0)
                    {
                        errorInfo  = "获取轴状态失败!" + _md.GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        return(false);
                    }
                    if (axisStatus[_md.MSID_ALM])
                    {
                        errorInfo  = "轴已报警!";
                        _workCmd   = 0;
                        _isRunning = false;
                        return(false);
                    }

                    if (_md.MSID_EMG > -1 && axisStatus[_md.MSID_EMG])
                    {
                        errorInfo  = "轴已急停!";
                        _workCmd   = 0;
                        _isRunning = false;
                        return(false);
                    }

                    //if (!axisStatus[_md.MSID_SVO])
                    //{
                    //    errorInfo = "轴伺服已断电!";
                    //    _workCmd = 0;
                    //    _isRunning = false;
                    //    SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                    //    return false;
                    //}

                    if (axisStatus[_md.MSID_MDN])
                    {
                        ActionErrorInfo = "Success";
                        _workCmd        = 0;
                        _isRunning      = false;
                        return(true);
                    }
                    TimeSpan ts = DateTime.Now - startTime;
                    if (ts.TotalMilliseconds >= delaytime)
                    {
                        errorInfo  = "超时未等到轴:\" " + AxisName + "\"动作完成 ";
                        _workCmd   = 0;
                        _isRunning = false;
                        return(false);
                    }

                    Thread.Sleep(10);
                }
                else if (1 == _workCmd)//当前为暂停状态
                {
                    _station.StopAxis(LeftClampName);
                    _station.StopAxis(LeftPushName);

                    _isRunning = false;
                    _workCmd   = 0;
                    continue;
                }
                else if (2 == _workCmd)//当前为恢复状态
                {
                    _workCmd = 0;
                    continue;
                }
                else if (-1 == _workCmd)//指令退出
                {
                    _station.StopAxis(LeftClampName);
                    _station.StopAxis(LeftPushName);

                    errorInfo  = "收到退出指令";
                    _workCmd   = 0;
                    _isRunning = false;
                    return(false);
                }
                else
                {
                    Thread.Sleep(10);
                    continue;
                }
            }
        }
Ejemplo n.º 18
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            _isRunning = true;
            string[] axisIDList = GetInitParamValue(PN_AxisID) as string[];
            if (axisIDList == null)
            {
                errorInfo = "轴ID列表长度为空";
                return(false);
            }

            int[] iAxisIDList = new int[axisIDList.Length];
            if (axisIDList.Length <= 0)
            {
                errorInfo = "轴ID列表长度<=0";
                return(false);
            }

            IJFModule_Motion     _md        = null;
            JFDevCellInfo        _ci        = null;
            IJFDevice_MotionDaq  _dev       = null;
            IJFDevice_MotionDaq  _devBuff   = null;
            List <JFDevCellInfo> cibuffList = new List <JFDevCellInfo>();

            _mdList = new List <IJFModule_Motion>();
            _ciList = new List <JFDevCellInfo>();

            //检查轴参数合法性
            for (int i = 0; i < axisIDList.Length; i++)
            {
                if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisIDList[i]))
                {
                    errorInfo = "参数项:\"轴ID\" = " + axisIDList[i] + " 在设备名称表中不存在";
                    return(false);
                }
                JFDevChannel axisChn = new JFDevChannel(JFDevCellType.Axis, axisIDList[1]);

                if (!axisChn.CheckAvalid(out errorInfo))
                {
                    return(false);
                }

                _dev = axisChn.Device() as IJFDevice_MotionDaq;
                _ci  = axisChn.CellInfo();
                _md  = _dev.GetMc(_ci.ModuleIndex);

                if (_devBuff != null)
                {
                    if (_devBuff != _dev)
                    {
                        errorInfo = "轴ID列表中的所有轴并不来源于同一个设备";
                        return(false);
                    }
                }
                _devBuff = _dev;

                foreach (JFDevCellInfo jFDevCellInfo in cibuffList)
                {
                    if (jFDevCellInfo.ChannelIndex == _ci.ChannelIndex)
                    {
                        errorInfo = "轴ID列表中存在重复的轴名称";
                        return(false);
                    }
                }
                cibuffList.Add(_ci);

                _ciList.Add(_ci);
                _mdList.Add(_md);
                iAxisIDList[i] = _ci.ChannelIndex;
            }

            int  timeoutMilSeconds = (int)GetMethodInputValue(PN_TimeoutMilliSeconds);
            int  cycleMilliSeconds = (int)GetInitParamValue(PN_CycleMilliSeconds);
            bool isAbs             = (bool)GetMethodInputValue(PN_AbsMode);

            DateTime startTime = DateTime.Now;

            while (true)
            {
                if (0 == _workCmd) //正常工作
                {
                    int errCode = 0;
                    // 其他状态检查
                    bool[] axisStatus;
                    bool   isMotionDone = true;
                    for (int i = 0; i < _ciList.Count; i++)
                    {
                        errCode = _mdList[i].GetMotionStatus(_ciList[i].ChannelIndex, out axisStatus);
                        if (errCode != 0)
                        {
                            errorInfo  = "获取轴状态失败!" + _mdList[i].GetErrorInfo(errCode);
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }
                        if (axisStatus[_mdList[i].MSID_ALM])
                        {
                            errorInfo  = "轴已报警!";
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }

                        if (_mdList[i].MSID_EMG > -1 && axisStatus[_mdList[i].MSID_EMG])
                        {
                            errorInfo  = "轴已急停!";
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }

                        if (!axisStatus[_mdList[i].MSID_SVO])
                        {
                            errorInfo  = "轴伺服已断电!";
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }

                        if (!axisStatus[_mdList[i].MSID_MDN])
                        {
                            isMotionDone = false;
                            break;
                        }
                    }

                    if (isMotionDone)
                    {
                        errorInfo  = "Success";
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.Success);
                        return(true);
                    }

                    if (timeoutMilSeconds >= 0)
                    {
                        TimeSpan ts = DateTime.Now - startTime;
                        if (ts.TotalMilliseconds >= timeoutMilSeconds)
                        {
                            errorInfo  = "超时未等到直线插补运动完成 ";
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.Timeout);
                            return(true);
                        }
                    }
                    Thread.Sleep(cycleMilliSeconds);
                }
                else if (1 == _workCmd)//当前为暂停状态
                {
                    int errCode = 0;
                    for (int i = 0; i < _ciList.Count; i++)
                    {
                        errCode = _mdList[i].StopAxis(_ciList[i].ChannelIndex);
                        if (0 != errCode)
                        {
                            errorInfo  = "停止轴归零运动失败:" + _mdList[i].GetErrorInfo(errCode);
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }
                    }
                    _workCmd = 0;
                    continue;
                }
                else if (2 == _workCmd)//当前为恢复状态
                {
                    double[] dPosList = new double[_ciList.Count];
                    double   tgtPos   = 0;
                    int      errCode  = 0;
                    for (int i = 0; i < _ciList.Count; i++)
                    {
                        errCode = _mdList[i].GetCmdPos(_ciList[i].ChannelIndex, out tgtPos);
                        if (0 != errCode)
                        {
                            errorInfo  = "恢复直线插补运行时获取目标位置失败:" + _mdList[i].GetErrorInfo(errCode);
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }
                        dPosList[i] = tgtPos;
                    }
                    if (isAbs)
                    {
                        errCode = _mdList[0].AbsLine(iAxisIDList, dPosList);
                    }
                    else
                    {
                        errCode = _mdList[0].RelLine(iAxisIDList, dPosList);
                    }
                    if (0 != errCode)
                    {
                        errorInfo  = "恢复轴" + (isAbs ? "绝对式" : "相对式") + "直线插补运动失败:" + _mdList[0].GetErrorInfo(errCode);
                        _workCmd   = 0;
                        _isRunning = false;
                        SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                        return(false);
                    }
                    _workCmd = 0;
                    continue;
                }
                else if (-1 == _workCmd)//指令退出
                {
                    int errCode = 0;
                    for (int i = 0; i < _ciList.Count; i++)
                    {
                        errCode = _mdList[i].StopAxis(_ciList[i].ChannelIndex);
                        if (0 != errCode)
                        {
                            errorInfo  = "停止轴归零运动失败:" + _mdList[i].GetErrorInfo(errCode);
                            _workCmd   = 0;
                            _isRunning = false;
                            SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                            return(false);
                        }
                    }

                    errorInfo  = "收到退出指令";
                    _workCmd   = 0;
                    _isRunning = false;
                    SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError);
                    return(false);
                }
                else
                {
                    Thread.Sleep(cycleMilliSeconds);
                    continue;
                }
            }
        }
Ejemplo n.º 19
0
        protected override bool ActionGenuine(out string errorInfo)
        {
            string[] axisIDList = GetInitParamValue("轴ID列表") as string[];
            double[] dPosList   = GetMethodInputValue("目标位置列表") as double[];
            bool     IsAbsMove  = (bool)GetMethodInputValue("绝对位置模式");

            if (axisIDList == null || dPosList == null)
            {
                errorInfo = "轴ID列表长度或者目标位置列表长度为空";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            int[] iaxisIDList = new int[axisIDList.Length];
            if (axisIDList.Length <= 0)
            {
                errorInfo = "轴ID列表长度<=0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (dPosList.Length <= 0)
            {
                errorInfo = "目标位置列表<=0";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (axisIDList.Length != dPosList.Length)
            {
                errorInfo = "轴ID列表长度为" + axisIDList.ToString() + "与目标列表长度" + dPosList.Length.ToString() + "不一致。";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            IJFInitializable     dev        = null;
            IJFInitializable     devbuff    = null;
            JFDevCellInfo        ci         = null;
            List <JFDevCellInfo> cibuffList = new List <JFDevCellInfo>();

            for (int m = 0; m < axisIDList.Length; m++)
            {
                if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisIDList[m]))
                {
                    errorInfo = "参数项:\"轴ID\" = " + axisIDList[m] + " 在设备名称表中不存在";
                    SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                    return(false);
                }
                if (!JFCMFunction.CheckDevCellName(JFCMFunction.Axis, axisIDList[m], out dev, out ci, out errorInfo))
                {
                    SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                    return(false);
                }
                iaxisIDList[m] = ci.ChannelIndex;
                if (devbuff != null)
                {
                    if (devbuff != dev)
                    {
                        errorInfo = "轴ID列表中的所有轴并不来源于同一个设备";
                        SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                        return(false);
                    }
                }
                devbuff = dev;

                if (cibuffList.Contains(ci))
                {
                    errorInfo = "轴ID列表中存在重复的轴名称";
                    SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                    return(false);
                }
                cibuffList.Add(ci);
            }

            IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);

            bool[] AxisStatus = null;
            int    err        = md.GetMotionStatus(ci.ChannelIndex, out AxisStatus);

            if (err != 0)
            {
                errorInfo = "开始运动前检测轴状态失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            //if(md.IsSVO)
            if (!AxisStatus[md.MSID_SVO])
            {
                errorInfo = "轴伺服未上电";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (AxisStatus[md.MSID_ALM])
            {
                errorInfo = "轴伺服已报警";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (!AxisStatus[md.MSID_MDN])
            {
                errorInfo = "轴当前运动未完成";
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            if (IsAbsMove)
            {
                err = md.AbsLine(iaxisIDList, dPosList);
            }
            else
            {
                err = md.RelLine(iaxisIDList, dPosList);
            }
            if (err != 0)
            {
                errorInfo = (IsAbsMove ? "绝对" : "相对") + "直线插补运动失败:" + md.GetErrorInfo(err);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }

            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }