public int CaputreOneImage(string cmrName, string imageType, out HObject hObject, out string errMsg, int timeoutMilSwconds = -1)
        {
            IJFInitializable dev   = null;
            JFDevCellInfo    ci    = null;
            IJFImage         image = null;

            hObject = null;
            errMsg  = "";

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Cmr, cmrName, out dev, out ci, out errMsg))
            {
                return((int)ErrorDef.InvokeFailed);
            }

            IJFDevice_Camera cmr = (dev as IJFDevice_Camera);

            cmr.ClearBuff();
            int errCode = cmr.GrabOne(out image, timeoutMilSwconds);

            if (errCode != (int)ErrorDef.Success)
            {
                errMsg = cmr.GetErrorInfo(errCode);
                return(errCode);
            }

            if (GenImgObject(imageType, image, out hObject, out errMsg) != 0)
            {
                return((int)ErrorDef.InvokeFailed);
            }
            return((int)ErrorDef.Success);
        }
        /// <summary>
        /// 软触发
        /// </summary>
        /// <param name="TrigChnName"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public int SWPosTrig(string[] TrigChnName, out string errMsg)
        {
            IJFInitializable dev = null;
            JFDevCellInfo    ci  = null;

            errMsg = "";

            if (TrigChnName.Length == 0)
            {
                errMsg = "触发通道名称为空";
                return((int)ErrorDef.InvokeFailed);
            }

            int[] trigChns = new int[TrigChnName.Length];
            for (int i = 0; i < TrigChnName.Length; i++)
            {
                if (!JFCMFunction.CheckDevCellName(JFCMFunction.CmpTrig, TrigChnName[i], out dev, out ci, out errMsg))
                {
                    return((int)ErrorDef.InvokeFailed);
                }
                trigChns[i] = ci.ChannelIndex;
            }

            IJFModule_CmprTrigger md = (dev as IJFDevice_MotionDaq).GetCompareTrigger(ci.ModuleIndex);
            int errCode = md.SoftTrigge(trigChns);

            if (errCode != (int)ErrorDef.Success)
            {
                errMsg = md.GetErrorInfo(errCode);
                return(errCode);
            }
            return((int)ErrorDef.Success);
        }
Exemple #3
0
        /// <summary>
        /// 单轴绝对运动
        /// </summary>
        /// <param name="AxisName"></param>
        /// <param name="distance"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public int AxisAbsMove(string AxisName, double distance, out string errMsg)
        {
            errMsg = "";
            IJFInitializable dev;
            JFDevCellInfo    ci;
            string           errInfo = "";

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

            if (errCode != (int)ErrorDef.Success)
            {
                errMsg = md.GetErrorInfo(errCode);
                return(errCode);
            }

            errCode = MotionDone(AxisName, out errMsg);
            if (errCode != 0)
            {
                return(errCode);
            }
            return((int)ErrorDef.Success);
        }
Exemple #4
0
        /// <summary>
        /// 轴动作完成
        /// </summary>
        /// <param name="AxisName"></param>
        /// <param name="errMsg"></param>
        /// <param name="timeoutSelSecond"></param>
        /// <returns></returns>
        private int MotionDone(string AxisName, out string errMsg, int timeoutSelSecond = 60000)
        {
            DateTime starttime = new DateTime();

            errMsg = "";
            IJFInitializable dev;
            JFDevCellInfo    ci;

            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);

            while (true)
            {
                if (md.IsMDN(ci.ChannelIndex))
                {
                    break;
                }
                DateTime nowtime = new DateTime();
                if (nowtime.Subtract(starttime).TotalMilliseconds > timeoutSelSecond)
                {
                    return((int)ErrorDef.Timeout);
                }
                Thread.Sleep(10);
            }
            return((int)ErrorDef.Success);
        }
Exemple #5
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("正向移动");
            IJFModule_Motion md         = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex);
            int errCode = md.Jog(ci.ChannelIndex, isPositive);

            if (errCode < 0)
            {
                errorInfo = "SDK调用出错:" + md.GetErrorInfo(errCode);
                SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError);
                return(false);
            }
            errorInfo = "Success";
            SetOutputParamValue("执行结果", JFWorkCmdResult.Success);
            return(true);
        }
        public int ClearImageQueue(string cmrName, out string errMsg)
        {
            IJFInitializable dev = null;
            JFDevCellInfo    ci  = null;

            errMsg = "";

            if (!JFCMFunction.CheckDevCellName(JFCMFunction.Cmr, cmrName, out dev, out ci, out errMsg))
            {
                return((int)ErrorDef.InvokeFailed);
            }

            IJFDevice_Camera cmr = (dev as IJFDevice_Camera);
            int errCode          = cmr.ClearBuff();

            if (errCode != (int)ErrorDef.Success)
            {
                errMsg = cmr.GetErrorInfo(errCode);
                return(errCode);
            }
            return((int)ErrorDef.Success);
        }
Exemple #7
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);
        }
Exemple #8
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);
        }
        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);
        }
        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);
        }