/// <summary> /// 停止XYZR轴的移动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btStop_Click(object sender, EventArgs e) { bool isOK = true; foreach (string axisName in _axisNames) { string errInfo; JFDevCellInfo ci = CheckAxisDevInfo(axisName, out errInfo); if (null != ci) { IJFModule_Motion md = (JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex); int errCode = md.StopAxis(ci.ChannelIndex); if (errCode != 0) { isOK = false; ShowTips("停止轴:\"" + axisName + "\" 失败,Errornfo: " + md.GetErrorInfo(errCode)); } } else { isOK = false; ShowTips("停止轴:\"" + axisName + "\" 失败,未找到通道信息 "); } if (isOK) { ShowTips("所有轴已停止"); } } }
/// <summary> /// 停止直线插补运动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btStopLiner_Click(object sender, EventArgs e) { if (_module == null) { ShowTips("无效操作,模块未设置"); return; } if (!_module.IsOpen) { ShowTips("无效操作,模块未打开"); return; } if (dgvLinePos.Rows.Count == 0) { MessageBox.Show("无效操作:没有设置插补轴"); return; } List <int> axisIDs = new List <int>(); foreach (DataGridViewRow row in dgvLinePos.Rows) { string axisIDTxt = row.Cells[0].Value as string; if (string.IsNullOrEmpty(axisIDTxt)) { MessageBox.Show("操作失败:存在未设置的轴序号"); return; } axisIDs.Add(Convert.ToInt32(axisIDTxt)); } bool isSuccess = true; StringBuilder sbErr = new StringBuilder(); foreach (int axisID in axisIDs) { int err = _module.StopAxis(axisID); if (err != 0) { sbErr.Append("轴" + axisID + " 停止失败,ErrorInfo:" + _module.GetErrorInfo(err) + "\n"); isSuccess = false; break; } else { //ShowTips("已停止直线插补"); //return; break; } } if (isSuccess) { ShowTips("直线插补已停止"); } else { ShowTips("停止直线插补失败:\n" + sbErr.ToString()); } }
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); }
/// <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轴已停止"); }
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 void CleanupWhenWorkExit() { _md.StopAxis(_ci.ChannelIndex); }