예제 #1
0
        public int GetEncoderCurrPos(int encChn, out double pos)
        {
            pos = 0;
            if (!IsOpen)
            {
                return((int)ErrorDef.NotOpen);
            }

            if (encChn < 0 || encChn >= EncoderChannels)
            {
                throw new ArgumentOutOfRangeException("GetEncoderCurrPos(encChn ,...) fialed By:encChn = " + encChn + " is outof range:0~" + (EncoderChannels - 1));
            }

            if ((pulseFactors[encChn]) <= 0)
            {
                throw new ArgumentOutOfRangeException("GetEncoderCurrPos(encChn ,...) fialed By:factor<=0,factor=" + pulseFactors[encChn]);
            }

            int ret = APS168.APS_get_position_f(encChn, ref pos);

            if (ret != 0)
            {
                return((int)ErrorDef.InvokeFailed);
            }

            pos = pos / ((double)pulseFactors[encChn]);
            return((int)ErrorDef.Success);
        }
예제 #2
0
        /// <summary>
        ///     读取反馈位置计数器计数值
        /// </summary>
        /// <param name="axisNo"></param>
        /// <returns></returns>
        public double GetFeedbackPosition(int axisNo)
        {
            var tmp = 0.0;

            APS168.APS_get_position_f(axisNo, ref tmp);

            return(tmp);
        }
예제 #3
0
 public override void GetAxisPosition(uint axisindex, ref double paramvalue)
 {
     if (!m_isInitialed)
     {
         throw new Exception("请先初始化");
     }
     if (!m_isLoadConfigFile)
     {
         throw new Exception("未加载xml配置文件");
     }
     APS168.APS_get_position_f((int)axisindex, ref paramvalue);
 }
예제 #4
0
        private void btnSetInt_Click(object sender, EventArgs e)
        {
            // 开启1个DI上升沿中断
            var board_id = 0;
            var item     = 9; // DI interrupt rising


            // Step 1: set interrupt factor
            var interruptId = APS168.APS_set_int_factor(board_id, item, 0, 1);

            // Step 2: set interrupt main switch
            var ret = APS168.APS_int_enable(board_id, 1); // Enable the interrupt main switch


            BeginInvoke(new Action(() => { richTextBox2.Text += "Interrupt Enabled\r\n"; }));

            //开启线程
            Task.Factory.StartNew(() =>
            {
                var count = 0;
                while (true)
                {
                    if (APS168.APS_wait_single_int(interruptId, 0x0000ff) == 0) //Wait interrupt
                    {
                        double pos = 0;
                        APS168.APS_get_position_f(0, ref pos);
                        APS168.APS_reset_int(interruptId);

                        BeginInvoke(new Action(() =>
                        {
                            richTextBox2.Text          += string.Format("Interrupt Postion[{0}] = {1}\r\n", count++, pos);
                            richTextBox2.SelectionStart = richTextBox2.TextLength;
                            richTextBox2.ScrollToCaret();
                        }));
                    }
                }
            });
        }
예제 #5
0
 public void GetPostionAbs(ref double x, ref double y)
 {
     APS168.APS_get_position_f(_selectAxisX, ref x);
     APS168.APS_get_position_f(_selectAxisY, ref y);
 }
예제 #6
0
        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;
                }
            }
        }