/// <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("所有轴已停止");
                }
            }
        }
Example #2
0
        /// <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());
            }
        }
Example #3
0
        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轴已停止");
        }
Example #5
0
        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);
 }