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