private void btHomeR_Click(object sender, EventArgs e) { string errInfo; JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[3], out errInfo); if (null == ci) { MessageBox.Show("R轴:\"" + _axisNames[3] + "\" 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("R轴:\"" + _axisNames[3] + "\" Home操作失败,ErrorInfo:" + md.GetErrorInfo(errCode)); return; } ShowTips("R轴:\"" + _axisNames[3] + "\" Home运动开始"); }
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); }
protected override void OnResume() { _md.Home(_ci.ChannelIndex); }
protected override bool ActionGenuine(out string errorInfo) { _isRunning = true; string axisID = GetInitParamValue(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)GetInitParamValue(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 isHomeDone = false; errCode = _md.IsHomeDone(_ci.ChannelIndex, out isHomeDone); if (errCode != 0) { errorInfo = "获取HomeDone状态失败!" + _md.GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } if (isHomeDone) { errorInfo = "Success"; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.Success); return(true); } // 其他状态检查 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 (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)//当前为恢复状态 { int errCode = 0; errCode = _md.Home(_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 (-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; } } }