private void btHomeX_Click(object sender, EventArgs e) { string errInfo; JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[0], out errInfo); if (null == ci) { MessageBox.Show("X轴:\"" + _axisNames[0] + "\" 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("X轴:\"" + _axisNames[0] + "\" Home操作失败,ErrorInfo:" + md.GetErrorInfo(errCode)); return; } ShowTips("X轴:\"" + _axisNames[0] + "\" Home运动开始"); }
void OnServonButtonClicked(object sender, EventArgs e) { int i = 0; for (i = 0; i < btServons.Length; i++) { if (sender == btServons[i]) { break; } } string axisName = _axisNames[i]; string errInfo; JFDevCellInfo ci = CheckAxisDevInfo(axisName, out errInfo); if (null == ci) { MessageBox.Show("轴" + _axisNames[i] + "伺服操作失败,ErrorInfo:" + errInfo); return; } IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq; IJFModule_Motion md = dev.GetMc(ci.ModuleIndex); bool isCurrSerOn = md.IsSVO(ci.ChannelIndex); int errCode = 0; if (isCurrSerOn) { errCode = md.ServoOff(ci.ChannelIndex); } else { errCode = md.ServoOn(ci.ChannelIndex); } if (errCode != 0) { MessageBox.Show("轴" + _axisNames[i] + "伺服操作失败,ErrorInfo:" + md.GetErrorInfo(errCode)); return; } ShowTips("轴" + _axisNames[i] + "伺服" + (isCurrSerOn?"去使能":"使能") + "成功"); }
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); }
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); }
/// <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); }
private void btPY_MouseDown(object sender, MouseEventArgs e) { if (cbMoveMode.SelectedIndex != 1) //未选中连续模式 { return; } string errInfo; JFDevCellInfo ci = CheckAxisDevInfo(_axisNames[1], out errInfo); if (null == ci) { MessageBox.Show("Y轴正向连续运动失败!配置中没有通道信息,Name = \"" + _axisNames[1] + "\" ErrorInfo:" + errInfo); return; } IJFModule_Motion md = (JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex); int errCode = md.VelMove(ci.ChannelIndex, _dVelParam, true); if (errCode != 0) { MessageBox.Show("Y轴正向连续运动失败!Name = \"" + _axisNames[1] + "\" ErrorInfo:" + errInfo); return; } }
/// <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轴已停止"); }
JFDevCellInfo CheckAxisDevInfo(string axisName, out string errorInfo) { JFDevCellInfo ci = JFHubCenter.Instance.MDCellNameMgr.GetAxisCellInfo(axisName); //在命名表中的通道信息 if (null == ci) { errorInfo = "未找到轴:\"" + axisName + "\"设备信息"; return(null); } IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq; if (null == dev) { errorInfo = "未找到轴:\"" + axisName + "\"所属设备:\"" + ci.DeviceID + "\""; return(null); } if (!dev.IsDeviceOpen) { errorInfo = "轴:\"" + axisName + "\"所属设备:\"" + ci.DeviceID + "\"未打开"; return(null); } if (ci.ModuleIndex >= dev.McCount) { errorInfo = "轴:\"" + axisName + "\"模块序号:\"" + ci.ModuleIndex + "\"超出限制!"; return(null); } IJFModule_Motion md = dev.GetMc(ci.ModuleIndex); if (ci.ChannelIndex >= md.AxisCount) { errorInfo = "轴:\"" + axisName + "\"通道序号:\"" + ci.ChannelIndex + "\"超出限制!"; return(null); } errorInfo = ""; return(ci); }
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); }
public void SetAxis(IJFModule_Motion module, int axis) { motionModule = module; axisIndex = axis; }
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); } JFMotionParam mp = (JFMotionParam)GetInitParamValue("运动参数"); /* * public double vs { get; set; } * /// <summary>最大速度</summary> * public double vm { get; set; } * /// <summary>结束速度</summary> * public double ve { get; set; } * /// <summary>加速度</summary> * public double acc { get; set; } * /// <summary>减速度</summary> * public double dec { get; set; } * /// <summary>s曲线因子(0~1.0)</summary> * public double curve { get; set; } * /// <summary>加加速</summary> * public double jerk { get; set; } */ if (mp.vs < 0) { errorInfo = "起始速度参数vs < 0"; SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError); return(false); } if (mp.vm <= 0) { errorInfo = "运行速度参数vm <= 0"; SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError); return(false); } if (mp.ve < 0) { errorInfo = "终点速度参数ve < 0"; SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError); return(false); } if (mp.acc <= 0) { errorInfo = "加速度参数acc <= 0"; SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError); return(false); } if (mp.dec <= 0) { errorInfo = "减速度参数dec <= 0"; SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError); return(false); } if (mp.curve < 0 || mp.curve > 1) { errorInfo = "加速度曲线段系数不在允许范围0~1"; SetOutputParamValue("执行结果", JFWorkCmdResult.ActionError); return(false); } IJFModule_Motion md = (dev as IJFDevice_MotionDaq).GetMc(ci.ModuleIndex); int errCode = md.SetMotionParam(ci.ChannelIndex, mp); 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); } 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); }
///// <summary> ///// 使通道可用(如伺服上电,光源/触发可用) ///// 建议在 打开设备->检查通道可用性 之后调用 ///// </summary> ///// <param name="errorInfo"></param> ///// <returns></returns> public bool EnabledChannel(out string errorInfo) { errorInfo = "Unknown-Error"; bool isOK = false; if (!CheckAvalid(out errorInfo)) { return(false); } int errorCode = 0; IJFDevice dev = Device(); switch (CellType) { case JFDevCellType.DI: isOK = true; errorInfo = "Success"; break; case JFDevCellType.DO: errorInfo = "Success"; isOK = true; break; case JFDevCellType.Axis: { IJFDevice_MotionDaq devMD = Device() as IJFDevice_MotionDaq; JFDevCellInfo ci = CellInfo(); IJFModule_Motion mm = devMD.GetMc(ci.ModuleIndex); errorCode = mm.ServoOn(ci.ChannelIndex); if (errorCode != 0) { errorInfo = mm.GetErrorInfo(errorCode); } else { isOK = true; errorInfo = "Success"; } } break; case JFDevCellType.AI: errorInfo = "Success"; isOK = true; break; case JFDevCellType.AO: errorInfo = "Success"; isOK = true; break; case JFDevCellType.CmpTrig: errorInfo = "Success"; isOK = true; break; case JFDevCellType.Light: dev = Device(); if (dev is IJFDevice_LightControllerWithTrig) //光源控制器 { IJFDevice_LightControllerWithTrig devLT = dev as IJFDevice_LightControllerWithTrig; errorCode = devLT.SetWorkMode(JFLightWithTrigWorkMode.TurnOnOff); //切换为开关模式 if (errorCode != 0) { errorInfo = "切换为开关模式失败:" + devLT.GetErrorInfo(errorCode); break; } } IJFDevice_LightController devl = dev as IJFDevice_LightController; errorCode = devl.SetLightChannelEnable(CellInfo().ChannelIndex, true); if (errorCode != 0) { errorInfo = "通道使能失败:" + devl.GetErrorInfo(errorCode); break; } isOK = true; errorInfo = "Success"; break; case JFDevCellType.Trig: dev = Device(); if (dev is IJFDevice_LightControllerWithTrig) //光源控制器 { IJFDevice_LightControllerWithTrig devLT = dev as IJFDevice_LightControllerWithTrig; errorCode = devLT.SetWorkMode(JFLightWithTrigWorkMode.Trigger); //切换为触发模式 if (errorCode != 0) { errorInfo = "切换为触发模式失败:" + devLT.GetErrorInfo(errorCode); break; } } IJFDevice_TrigController devt = dev as IJFDevice_TrigController; errorCode = devt.SetTrigChannelEnable(CellInfo().ChannelIndex, true); if (errorCode != 0) { errorInfo = "通道使能失败:" + devt.GetErrorInfo(errorCode); break; } isOK = true; errorInfo = "Success"; break; default: errorInfo = "未定义的通道类型"; break; } return(isOK); }
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 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); }
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 bool JFMotionDone(string AxisName, out string errorInfo, int delaytime) { errorInfo = ""; JFDevChannel axisChn = new JFDevChannel(JFDevCellType.Axis, AxisName); if (!axisChn.CheckAvalid(out errorInfo)) { _workCmd = 0; _isRunning = false; 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; return(false); } if (axisStatus[_md.MSID_ALM]) { errorInfo = "轴已报警!"; _workCmd = 0; _isRunning = false; return(false); } if (_md.MSID_EMG > -1 && axisStatus[_md.MSID_EMG]) { errorInfo = "轴已急停!"; _workCmd = 0; _isRunning = false; 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; return(true); } TimeSpan ts = DateTime.Now - startTime; if (ts.TotalMilliseconds >= delaytime) { errorInfo = "超时未等到轴:\" " + AxisName + "\"动作完成 "; _workCmd = 0; _isRunning = false; return(false); } Thread.Sleep(10); } else if (1 == _workCmd)//当前为暂停状态 { _station.StopAxis(LeftClampName); _station.StopAxis(LeftPushName); _isRunning = false; _workCmd = 0; continue; } else if (2 == _workCmd)//当前为恢复状态 { _workCmd = 0; continue; } else if (-1 == _workCmd)//指令退出 { _station.StopAxis(LeftClampName); _station.StopAxis(LeftPushName); errorInfo = "收到退出指令"; _workCmd = 0; _isRunning = false; return(false); } else { Thread.Sleep(10); continue; } } }
protected override bool ActionGenuine(out string errorInfo) { _isRunning = true; string[] axisIDList = GetInitParamValue(PN_AxisID) as string[]; if (axisIDList == null) { errorInfo = "轴ID列表长度为空"; return(false); } int[] iAxisIDList = new int[axisIDList.Length]; if (axisIDList.Length <= 0) { errorInfo = "轴ID列表长度<=0"; return(false); } IJFModule_Motion _md = null; JFDevCellInfo _ci = null; IJFDevice_MotionDaq _dev = null; IJFDevice_MotionDaq _devBuff = null; List <JFDevCellInfo> cibuffList = new List <JFDevCellInfo>(); _mdList = new List <IJFModule_Motion>(); _ciList = new List <JFDevCellInfo>(); //检查轴参数合法性 for (int i = 0; i < axisIDList.Length; i++) { if (!JFHubCenter.Instance.MDCellNameMgr.ContainAxisName(axisIDList[i])) { errorInfo = "参数项:\"轴ID\" = " + axisIDList[i] + " 在设备名称表中不存在"; return(false); } JFDevChannel axisChn = new JFDevChannel(JFDevCellType.Axis, axisIDList[1]); if (!axisChn.CheckAvalid(out errorInfo)) { return(false); } _dev = axisChn.Device() as IJFDevice_MotionDaq; _ci = axisChn.CellInfo(); _md = _dev.GetMc(_ci.ModuleIndex); if (_devBuff != null) { if (_devBuff != _dev) { errorInfo = "轴ID列表中的所有轴并不来源于同一个设备"; return(false); } } _devBuff = _dev; foreach (JFDevCellInfo jFDevCellInfo in cibuffList) { if (jFDevCellInfo.ChannelIndex == _ci.ChannelIndex) { errorInfo = "轴ID列表中存在重复的轴名称"; return(false); } } cibuffList.Add(_ci); _ciList.Add(_ci); _mdList.Add(_md); iAxisIDList[i] = _ci.ChannelIndex; } int timeoutMilSeconds = (int)GetMethodInputValue(PN_TimeoutMilliSeconds); int cycleMilliSeconds = (int)GetInitParamValue(PN_CycleMilliSeconds); bool isAbs = (bool)GetMethodInputValue(PN_AbsMode); DateTime startTime = DateTime.Now; while (true) { if (0 == _workCmd) //正常工作 { int errCode = 0; // 其他状态检查 bool[] axisStatus; bool isMotionDone = true; for (int i = 0; i < _ciList.Count; i++) { errCode = _mdList[i].GetMotionStatus(_ciList[i].ChannelIndex, out axisStatus); if (errCode != 0) { errorInfo = "获取轴状态失败!" + _mdList[i].GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } if (axisStatus[_mdList[i].MSID_ALM]) { errorInfo = "轴已报警!"; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } if (_mdList[i].MSID_EMG > -1 && axisStatus[_mdList[i].MSID_EMG]) { errorInfo = "轴已急停!"; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } if (!axisStatus[_mdList[i].MSID_SVO]) { errorInfo = "轴伺服已断电!"; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } if (!axisStatus[_mdList[i].MSID_MDN]) { isMotionDone = false; break; } } if (isMotionDone) { errorInfo = "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 = "超时未等到直线插补运动完成 "; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.Timeout); return(true); } } Thread.Sleep(cycleMilliSeconds); } else if (1 == _workCmd)//当前为暂停状态 { int errCode = 0; for (int i = 0; i < _ciList.Count; i++) { errCode = _mdList[i].StopAxis(_ciList[i].ChannelIndex); if (0 != errCode) { errorInfo = "停止轴归零运动失败:" + _mdList[i].GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } } _workCmd = 0; continue; } else if (2 == _workCmd)//当前为恢复状态 { double[] dPosList = new double[_ciList.Count]; double tgtPos = 0; int errCode = 0; for (int i = 0; i < _ciList.Count; i++) { errCode = _mdList[i].GetCmdPos(_ciList[i].ChannelIndex, out tgtPos); if (0 != errCode) { errorInfo = "恢复直线插补运行时获取目标位置失败:" + _mdList[i].GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } dPosList[i] = tgtPos; } if (isAbs) { errCode = _mdList[0].AbsLine(iAxisIDList, dPosList); } else { errCode = _mdList[0].RelLine(iAxisIDList, dPosList); } if (0 != errCode) { errorInfo = "恢复轴" + (isAbs ? "绝对式" : "相对式") + "直线插补运动失败:" + _mdList[0].GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } _workCmd = 0; continue; } else if (-1 == _workCmd)//指令退出 { int errCode = 0; for (int i = 0; i < _ciList.Count; i++) { errCode = _mdList[i].StopAxis(_ciList[i].ChannelIndex); if (0 != errCode) { errorInfo = "停止轴归零运动失败:" + _mdList[i].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) { 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); }