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