public override int GetMotionIoSts(int cardId, int axisId, ref int sts) { int _sts, _rSts; _sts = APS168.APS_motion_io_status(axisId); _rSts = 0; if (XConvert.BitEnable(_sts, XAPS_Define.MIO_ALM)) { XConvert.SetBits(ref _rSts, XAPS_Define.MIO_ALM); } if (XConvert.BitEnable(_sts, XAPS_Define.MIO_EMG)) { XConvert.SetBits(ref _rSts, XAPS_Define.MIO_MEL); } if (XConvert.BitEnable(_sts, XAPS_Define.MIO_ORG)) { XConvert.SetBits(ref _rSts, XAPS_Define.MIO_ORG); } if (XConvert.BitEnable(_sts, XAPS_Define.MIO_PEL)) { XConvert.SetBits(ref _rSts, XAPS_Define.MIO_PEL); } if (XConvert.BitEnable(_sts, XAPS_Define.MIO_SVON)) { XConvert.SetBits(ref _rSts, XAPS_Define.MIO_SVON); } sts = _rSts; return(0); }
/// <summary> /// 是否停止移动 /// </summary> /// <returns></returns> public bool IsDown(int axisNo, bool hasExtEncode = false) { var status = APS168.APS_motion_status(axisNo); //判断是否停止 if (((status >> (int)APS_Define.MTS_NSTP) & 1) == 0) { return(false); } //判断是否正常停止 if (((status >> (int)APS_Define.MTS_ASTP) & 1) == 1) { var reason = GetStopReason(axisNo); return(false); } //判断INP鑫海 if (hasExtEncode) { var inp = APS168.APS_motion_io_status(axisNo); if (((inp >> (int)APS_Define.MIO_INP) & 1) == 0) { return(false); } } return(true); }
private int GetMotionIoStatus(int axisNo) { var ret = APS168.APS_motion_io_status(axisNo); if (ret < 0) { ThrowIfResultError(ret); } return(ret); }
private int GetMotionIoStatus(int axisNo) { var ret = APS168.APS_motion_io_status(axisNo); //if (ret < 0) //{ // var innerMsg = ""; // innerMsg = GetErrorCodeDesc((APS_Define)ret); // if (innerMsg != "No Error") // MessageBox.Show(string.Format("APS_motion_io_status Error:{0}", innerMsg)); // //ThrowIfResultError(ret); //} return(ret); }
private void lblServoOn_Click(object sender, EventArgs e) { if (!_card0.IsLoadXmlFile) { MessageBox.Show("请先加载配置文件!"); return; } _selectAxis = Convert.ToInt32(cmbSelectAxis.SelectedItem); var motionIoStatus = APS168.APS_motion_io_status(_selectAxis); var status = (motionIoStatus & (1 << 7)) != 0; APS168.APS_set_servo_on(_selectAxis, Convert.ToInt32(!status)); }
/// <summary> /// 检测指定轴的运动状态 /// </summary> /// <param name="axisNo"></param> /// <param name="hasExtEncode">是否有编码器接入(步进电机无外部编码器)</param> /// <remarks>判断INP鑫海</remarks> public int CheckDone(int axisNo, double timeoutLimit, bool hasExtEncode = false) { var status = 0; var inp = 1; var strtime = new Stopwatch(); strtime.Start(); do { //判断是否正常停止 status = APS168.APS_motion_status(axisNo); if (((status >> (int)APS_Define.MTS_ASTP) & 1) == 1) { return(-1); } status = (status >> (int)APS_Define.MTS_NSTP) & 1; //判断INP鑫海 if (hasExtEncode) { inp = APS168.APS_motion_io_status(axisNo); inp = (inp >> (int)APS_Define.MIO_INP) & 1; } //break条件是否满足 if ((status == 1) && (inp == 1)) { break; } //检查是否超时 strtime.Stop(); if (strtime.ElapsedMilliseconds / 1000.0 > timeoutLimit) { APS168.APS_emg_stop(axisNo); return(-2); } strtime.Start(); //延时 Thread.Sleep(20); } while (true); return(0); }
public void ServoOn(bool onOff) { bool status; if (IsInitialed == false) { return; } int motionIoStatusX = APS168.APS_motion_io_status(_selectAxisX); //if (motionIoStatusX == 0) { status = (motionIoStatusX & (1 << 7)) != 0; APS168.APS_set_servo_on(_selectAxisX, Convert.ToInt32(!status)); } Thread.Sleep(100); int motionIoStatusY = APS168.APS_motion_io_status(_selectAxisY); //if (motionIoStatusY == 0) { status = (motionIoStatusY & (1 << 7)) != 0; APS168.APS_set_servo_on(_selectAxisY, Convert.ToInt32(!status)); } }
public override void GetAxisIoData(uint axisindex, ref int value) { value = APS168.APS_motion_io_status((int)axisindex); }
/// <summary> /// To the home position. /// </summary> /// <returns>System.Int32.</returns> public override int ToHome() { int err = -1; err = APS168.APS_set_axis_param(mCardPara.AxisID, (Int32)APS_Define.PRA_HOME_MODE, 0); //Set home mode if (err != (Int32)APS_Define.ERR_NoError) { return(err); } err = APS168.APS_set_axis_param(mCardPara.AxisID, (Int32)APS_Define.PRA_HOME_DIR, 0); //Set home direction if (err != (Int32)APS_Define.ERR_NoError) { return(err); } err = APS168.APS_set_axis_param(mCardPara.AxisID, (Int32)APS_Define.PRA_HOME_CURVE, 0); // Set acceleration pattern (T-curve) if (err != (Int32)APS_Define.ERR_NoError) { return(err); } err = APS168.APS_set_axis_param(mCardPara.AxisID, (Int32)APS_Define.PRA_HOME_ACC, 2000000); //Set homing acceleration rate if (err != (Int32)APS_Define.ERR_NoError) { return(err); } err = APS168.APS_set_axis_param(mCardPara.AxisID, (Int32)APS_Define.PRA_HOME_VM, 200000); //Set homing maximum velocity. if (err != (Int32)APS_Define.ERR_NoError) { return(err); } err = APS168.APS_set_axis_param(mCardPara.AxisID, (Int32)APS_Define.PRA_HOME_VO, 200000); //Set homing leave home velocity if (err != (Int32)APS_Define.ERR_NoError) { return(err); } /* * err = APS168.APS_set_axis_param(axisID, (Int32)APS_Define.PRA_HOME_EZA, 0); // Set EZ signal alignment (yes or no) * if (err != (Int32)APS_Define.ERR_NoError) return err; * err = APS168.APS_set_axis_param(axisID, (Int32)APS_Define.PRA_HOME_SHIFT, 0); // Set home position shfit distance. * if (err != (Int32)APS_Define.ERR_NoError) return err; * err = APS168.APS_set_axis_param(axisID, (Int32)APS_Define.PRA_HOME_POS, 0); // Set final home position. * if (err != (Int32)APS_Define.ERR_NoError) return err; */ /* * err = APS168.APS_set_axis_param_f(axisID, (Int32)APS_Define.PRA_HOME_CURVE, 0.5); //Set s-factor to 0.5 * if (err != (Int32)APS_Define.ERR_NoError) return err; * err = APS168.APS_set_axis_param_f(axisID, (Int32)APS_Define.PRA_HOME_ACC, 10000.0); //Set homing acceleration rate * if (err != (Int32)APS_Define.ERR_NoError) return err; * err = APS168.APS_set_axis_param_f(axisID, (Int32)APS_Define.PRA_HOME_VM, 100000.0); //Set homing maximum velocity. * if (err != (Int32)APS_Define.ERR_NoError) return err; * err = APS168.APS_set_axis_param_f(axisID, (Int32)APS_Define.PRA_HOME_VO, 20000.0); //Set homing leave home velocity * if (err != (Int32)APS_Define.ERR_NoError) return err; */ err = APS168.APS_home_move(mCardPara.AxisID); if (err != (Int32)APS_Define.ERR_NoError) { return(err); } Int32 check = -1; do { check = APS168.APS_motion_io_status(mCardPara.AxisID); }while(check != 0x88); return(err); }
/// <summary> /// Gets the status. /// </summary> /// <returns>System.Int32.</returns> public override int GetStatus() { return(APS168.APS_motion_io_status(mCardPara.AxisID)); }
private void tmrUpdateUi_Tick(object sender, EventArgs e) { if (_card0.IsLoadXmlFile) { _selectAxis = Convert.ToInt32(cmbSelectAxis.SelectedItem); double d = 0; APS168.APS_get_position_f(_selectAxis, ref d); txtFeedbackPos.Text = d.ToString("f0"); txtFeedbackPosition.Text = d.ToString("f0"); switch (tabControl1.SelectedTab.Name) { case "tabMotion": int index; bool status; int motionIoStatus, motionStatus; //刷新MotionIoStatus motionIoStatus = APS168.APS_motion_io_status(_selectAxis); foreach (var label in grpMotionIo.Controls.OfType <Label>()) { if (label.BorderStyle == BorderStyle.FixedSingle) { index = Convert.ToInt32(label.Tag); status = (motionIoStatus & (1 << index)) != 0; label.BackColor = status ? Color.LawnGreen : Color.DimGray; } } //刷新MotionStatus motionStatus = APS168.APS_motion_status(_selectAxis); foreach (var label in grpMotion.Controls.OfType <Label>()) { if (label.BorderStyle == BorderStyle.FixedSingle) { index = Convert.ToInt32(label.Tag); status = (motionStatus & (1 << index)) != 0; label.BackColor = status ? Color.LawnGreen : Color.DimGray; } } //刷新Feedback信息 double value = 0; APS168.APS_get_command_f(_selectAxis, ref value); txtCommandPosition.Text = value.ToString("f0"); //APS168.APS_get_position_f(_selectAxis, ref value); //txtFeedbackPos.Text = value.ToString("f0"); //txtFeedbackPosition.Text = value.ToString("f0"); APS168.APS_get_target_position_f(_selectAxis, ref value); txtTargetPosition.Text = value.ToString("f0"); APS168.APS_get_error_position_f(_selectAxis, ref value); txtErrorPosition.Text = value.ToString("f0"); APS168.APS_get_command_velocity_f(_selectAxis, ref value); txtCommandVelocity.Text = value.ToString("f0"); APS168.APS_get_feedback_velocity_f(_selectAxis, ref value); txtFeedbackVelocity.Text = value.ToString("f0"); //刷新ServoOn, motionIoStatus第7位 status = (motionIoStatus & (1 << 7)) != 0; lblServoOn.BackColor = status ? Color.LawnGreen : Color.DimGray; //刷新JOG正 和 JOG负 var jogPostive = (motionStatus & (1 << 15)) != 0 && (motionStatus & (1 << 4)) != 0; var jogNegative = (motionStatus & (1 << 15)) != 0 && (motionStatus & (1 << 4)) == 0; lblJogPostive.BackColor = jogPostive ? Color.LawnGreen : Color.DimGray; lblJogNegative.BackColor = jogNegative ? Color.LawnGreen : Color.DimGray; break; case "tabIo": var diValue = 0; APS168.APS_read_d_input(_card0.CardId, 0, ref diValue); foreach (var label in grpDi.Controls.OfType <Label>()) { if (label.BorderStyle == BorderStyle.FixedSingle) { index = Convert.ToInt32(label.Tag); status = (diValue & (1 << index)) != 0; label.BackColor = status ? Color.LawnGreen : Color.DimGray; } } var doValue = 0; APS168.APS_read_d_output(_card0.CardId, 0, ref doValue); foreach (var label in grpDo.Controls.OfType <Label>()) { if (label.BorderStyle == BorderStyle.FixedSingle) { index = Convert.ToInt32(label.Tag); status = (doValue & (1 << index)) != 0; label.BackColor = status ? Color.LawnGreen : Color.DimGray; } } break; case "tabTrigger": { var count = 0; APS168.APS_get_trigger_count(0, 0, ref count); txtTriggerCount0.Text = count.ToString(); APS168.APS_get_trigger_count(0, 1, ref count); txtTriggerCount1.Text = count.ToString(); } break; case "tabPtline": { if (_ptEnabled) { txtTotalPoint.Text = _bufTotalPoint.ToString(); txtBufFreeSpace.Text = _bufFreeSpace.ToString(); txtbufUsageSpace.Text = _bufUsageSpace.ToString(); txtRunningCnt.Text = _bufRunningCnt.ToString(); } } break; } } }