Ejemplo n.º 1
0
        public override async Task AbsMoveAsync(uint axisindex, int position)
        {
            if (!m_isInitialed)
            {
                throw new Exception("请先初始化");
            }
            if (!m_isLoadConfigFile)
            {
                throw new Exception("未加载xml配置文件");
            }
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_ACC, acc);
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_DEC, dec);
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_VS, startv);

            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_VM, maxv);
            double maxv = 0;

            APS168.APS_get_axis_param_f((int)axisindex, (int)APS_Define.PRA_VM, ref maxv);
            await Task.Run(() =>
            {
                APS168.APS_absolute_move((int)axisindex, position, (int)maxv);
                //等待Motion Down完成
                int motionStatusMdn = 5;
                while ((APS168.APS_motion_status((int)axisindex) & 1 << motionStatusMdn) == 0)
                {
                    Thread.Sleep(100);
                }
            });
        }
Ejemplo n.º 2
0
        private void btnRelativeMove_Click(object sender, EventArgs e)
        {
            var boardId    = Convert.ToInt32(txtCardId.Text);
            var selectAxis = Convert.ToInt32(cmbSelectAxis.SelectedItem);
            var praAcc     = Convert.ToDouble(txtPraAcc.Text);
            var praDec     = Convert.ToDouble(txtPraDec.Text);
            var praVm      = Convert.ToInt32(txtPraVm.Text);
            var pulse      = Convert.ToInt32(txtRelativePulse.Text);

            _primADLink.AxisSetAcc(boardId, selectAxis, praAcc);
            _primADLink.AxisSetDec(boardId, selectAxis, praDec);

            if (_primADLink.PrimConnStat == PrimConnState.Connected)
            {
                var task = new Task(() =>
                {
                    APS168.APS_relative_move(selectAxis, pulse, praVm);

                    //等待Motion Down完成
                    var motionStatusMdn = 5;
                    while ((APS168.APS_motion_status(selectAxis) & (1 << motionStatusMdn)) == 0)
                    {
                        Thread.Sleep(100);
                    }
                    MessageBox.Show("运动完成!");
                });
                task.Start();
            }
            else
            {
                MessageBox.Show("请加载配置文件!");
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        public override async Task RelMoveAsync(uint axisindex, int distance)
        {
            if (!m_isInitialed)
            {
                throw new Exception("请先初始化");
            }
            if (!m_isLoadConfigFile)
            {
                throw new Exception("未加载xml配置文件");
            }
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_ACC, acc);
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_DEC, dec);
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_VS, startv);

            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_VM, maxv);
            int maxv = 0;

            APS168.APS_get_axis_param((int)axisindex, (int)APS_Define.PRA_VM, ref maxv);
            await Task.Run(() =>
            {
                APS168.APS_relative_move((int)axisindex, distance, (int)maxv);
                int motionStatusMdn = 5;
                while ((APS168.APS_motion_status((int)axisindex) & 1 << motionStatusMdn) == 0)
                {
                    Thread.Sleep(50);
                }
            });
        }
Ejemplo n.º 5
0
        private void btnAbsoluteMove_Click(object sender, EventArgs e)
        {
            _selectAxis = Convert.ToInt32(cmbSelectAxis.SelectedItem);
            var praAcc = Convert.ToDouble(txtPraAcc.Text);
            var praDec = Convert.ToDouble(txtPraDec.Text);
            var praVm  = Convert.ToInt32(txtPraVm.Text);
            var pulse  = Convert.ToInt32(txtAbsolutePulse.Text);

            APS168.APS_set_axis_param_f(_selectAxis, (int)APS_Define.PRA_ACC, praAcc);  // Set acceleration rate
            APS168.APS_set_axis_param_f(_selectAxis, (int)APS_Define.PRA_DEC, praDec);  // Set deceleration rate

            if (_card0.IsLoadXmlFile)
            {
                var task = new Task(() =>
                {
                    APS168.APS_absolute_move(_selectAxis, pulse, praVm);

                    //等待Motion Down完成
                    var motionStatusMdn = 5;
                    while ((APS168.APS_motion_status(_selectAxis) & (1 << motionStatusMdn)) == 0)
                    {
                        Thread.Sleep(100);
                    }
                    MessageBox.Show("运动完成!");
                });
                task.Start();
            }
            else
            {
                MessageBox.Show("请加载配置文件!");
            }
        }
Ejemplo n.º 6
0
        public override async Task HomeAsync(uint axisindex)
        {
            if (!m_isInitialed)
            {
                throw new Exception("请先初始化");
            }
            if (!m_isLoadConfigFile)
            {
                throw new Exception("未加载xml配置文件");
            }
            // APS168.APS_set_axis_param((int)axisindex, (Int32)APS_Define.PRA_HOME_DIR,Convert .ToInt32(homedir)); // Set home direction
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_HOME_ACC, acc);
            //// Set homing acceleration rate
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_HOME_VM, maxv); // Set homing maximum velocity.
            //APS168.APS_set_axis_param_f((int)axisindex, (Int32)APS_Define.PRA_HOME_VS, startv); // Set homing start speed

            await Task.Run(() =>
            {
                APS168.APS_home_move((int)axisindex);

                int motionStatusCstp = 0, motionStatusAstp = 16;
                while ((APS168.APS_motion_status((int)axisindex) & 1 << motionStatusCstp) == 0)
                {
                    Thread.Sleep(100);
                }
                Thread.Sleep(500);
                if ((APS168.APS_motion_status((int)axisindex) & 1 << motionStatusAstp) != 0)
                {
                    throw new Exception($"轴 { axisindex} 回零失败!");
                }
                // Thread.Sleep(500);
                // APS168.APS_set_position_f((int)axisindex,0);
            });
        }
Ejemplo n.º 7
0
        private int GetMotionStatus(int axisNo)
        {
            var ret = APS168.APS_motion_status(axisNo);

            if (ret < 0)
            {
                ThrowIfResultError(ret);
            }
            return(ret);
        }
Ejemplo n.º 8
0
        private void btnRun_Click(object sender, EventArgs e)
        {
            //重置触发计数
            //APS168.APS_reset_trigger_count(_card0.CardId, 0);

            //关闭触发
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TRG_EN, 0);

            //TRG 0 ~ 3 enable by bit
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TRG_EN, Convert.ToInt32("0001", 2));

            //Source Encoder0
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TCMP0_SRC, 0);
            //0=Negative direction , 1= Positive direction, 2=Bi-direction(No direction)
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TCMP0_DIR, 2);

            //Trigger output 0 (TRG0) source Bit( 1:On, 0:Off)    Bit 0: Manual  Bit 1:Reserved Bit  2:TCMP0  Bit 3:TCMP1  Bit 4:LCMP0  Bit 5:LCMP1
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TRG0_SRC, Convert.ToInt32("0100", 2));
            //TRG1 pulse width
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TRG0_PWD, 50000); //  pulse width=  value * 0.02 us
            //TRG 1 logic  0: Not inverse  1:Inverse
            APS168.APS_set_trigger_param(_card0.CardId, (short)APS_Define.TGR_TRG0_LOGIC, 0);   //设置1可能会多一次触发

            //重置触发计数
            //APS168.APS_reset_trigger_count(_card0.CardId, 0);


            //线程1,设置触发点,开始运动
            Task.Factory.StartNew(() =>
            {
                //位置比较触发点
                var CMP_x = new[]
                {
                    2000, 4000, 7000, 9000, 12000, 15000, 19000, 22000, 23000, 25000,
                    24000, 21000, 18000, 15000, 11000, 9000
                };

                APS168.APS_set_trigger_table(_card0.CardId, 0, CMP_x, CMP_x.Length);

                //运动到30000
                APS168.APS_absolute_move(_selectAxis, 30000, 30000);
                while ((APS168.APS_motion_status(_selectAxis) & (1 << 5)) == 0) //motionStatusMdn = 5
                {
                    Thread.Sleep(100);
                }

                //运动到0
                APS168.APS_absolute_move(_selectAxis, 0, 30000);
                while ((APS168.APS_motion_status(_selectAxis) & (1 << 5)) == 0) //motionStatusMdn = 5
                {
                    Thread.Sleep(100);
                }
            });
        }
Ejemplo n.º 9
0
        private int GetMotionStatus(int axisNo)
        {
            var ret = APS168.APS_motion_status(axisNo);

            //if (ret < 0)
            //{
            //    var innerMsg = "";
            //    innerMsg = GetErrorCodeDesc((APS_Define)ret);
            //    if (innerMsg != "No Error")
            //        MessageBox.Show(string.Format("APS_motion_status Error:{0}", innerMsg));
            //    //ThrowIfResultError(ret);
            //}
            return(ret);
        }
Ejemplo n.º 10
0
        /// <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);
        }
Ejemplo n.º 11
0
        private void StartHoming(int boardId, int axisId, int homeMode, int homeDir, double praCurve, double praAcc, double praVm)
        {
            //
            // 1. Select home mode and config home parameters

            _primADLink.AxisSetHomeMode(boardId, axisId, homeMode);  // Set home mode
            _primADLink.AxisSetHomeDir(boardId, axisId, homeDir);    // Set home direction
            _primADLink.AxisSetHomeCurve(boardId, axisId, praCurve); // Set acceleration paten (T-curve)
            _primADLink.AxisSetHomeAcc(boardId, axisId, praAcc);     // Set homing acceleration rate
            _primADLink.AxisSetHomeMaxVel(boardId, axisId, praVm);   // Set homing maximum velocity.
            _primADLink.AxisSetHomeVO(boardId, axisId, praVm / 5);   // Set homing VO speed
            _primADLink.AxisSetHomeEZA(boardId, axisId, 0);          // Set EZ signal alignment (yes or no)
            _primADLink.AxisSetHomeShift(boardId, axisId, 0);        // Set home position shfit distance.
            _primADLink.AxisSetHomePos(boardId, axisId, 0);          // Set final home position.
            _primADLink.AxisHomeMove(boardId, axisId);               // Start Axis Home Move

            //servo on
            _primADLink.AxisSetEnable(boardId, axisId, true);
            Thread.Sleep(500); // Wait stable.


            // 2. Start home move
            //APS168.APS_home_move(axisId);
            _primADLink.AxisHomeMove(boardId, axisId); // Start Axis Home Move

            int motionStatusCstp = 0, motionStatusAstp = 16;

            while ((APS168.APS_motion_status(axisId) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }
            Thread.Sleep(500);

            //if ((APS168.APS_motion_status(axisId) & 1 << motionStatusAstp) == 0)
            if ((_primADLink.GetAxisMotionStatus(axisId) & (1 << motionStatusAstp)) == 0)
            {
                MessageBox.Show("轴" + axisId + "回零成功!");
            }
            else
            {
                MessageBox.Show("轴" + axisId + "回零失败!");
            }
        }
Ejemplo n.º 12
0
        public override int GetMotionSts(int cardId, int axisId, ref int sts)
        {
            int _sts, _rSts;

            _sts  = APS168.APS_motion_status(axisId);
            _rSts = 0;
            if (XConvert.BitEnable(_sts, XAPS_Define.MTS_ASTP))
            {
                XConvert.SetBits(ref _rSts, XAPS_Define.MTS_ASTP);
            }
            if (XConvert.BitEnable(_sts, XAPS_Define.MTS_HMV))
            {
                XConvert.SetBits(ref _rSts, XAPS_Define.MTS_HMV);
            }
            if (XConvert.BitEnable(_sts, XAPS_Define.MTS_MDN))
            {
                XConvert.SetBits(ref _rSts, XAPS_Define.MTS_MDN);
            }
            sts = _rSts;
            return(0);
        }
Ejemplo n.º 13
0
        private void StartHoming(int axisId, int homeMode, int homeDir, double praCurve, double praAcc, double praVm)
        {
            // 1. Select home mode and config home parameters
            APS168.APS_set_axis_param(axisId, (int)APS_Define.PRA_HOME_MODE, homeMode);    // Set home mode
            APS168.APS_set_axis_param(axisId, (int)APS_Define.PRA_HOME_DIR, homeDir);      // Set home direction
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_CURVE, praCurve); // Set acceleration paten (T-curve)
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_ACC, praAcc);     // Set homing acceleration rate
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_VM, praVm);       // Set homing maximum velocity.
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_VO, praVm / 5);   // Set homing VO speed
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_EZA, 0);          // Set EZ signal alignment (yes or no)
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_SHIFT, 0);        // Set home position shfit distance.
            APS168.APS_set_axis_param_f(axisId, (int)APS_Define.PRA_HOME_POS, 0);          // Set final home position.

            //servo on
            APS168.APS_set_servo_on(axisId, 1);
            Thread.Sleep(500); // Wait stable.


            // 2. Start home move
            APS168.APS_home_move(axisId);

            int motionStatusCstp = 0, motionStatusAstp = 16;

            while ((APS168.APS_motion_status(axisId) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }
            Thread.Sleep(500);

            if ((APS168.APS_motion_status(axisId) & (1 << motionStatusAstp)) == 0)
            {
                MessageBox.Show("轴" + axisId + "回零成功!");
            }
            else
            {
                MessageBox.Show("轴" + axisId + "回零失败!");
            }
        }
Ejemplo n.º 14
0
        public void MoveRelative(int x, int y)
        {
            double praAcc = 1000000;
            double praDec = 1000000;
            int    praVm  = 1000;
            int    pulseX = x;
            int    pulseY = y;

            if (IsInitialed == false)
            {
                return;
            }

            APS168.APS_set_axis_param_f(_selectAxisX, (Int32)APS_Define.PRA_ACC, praAcc); // Set acceleration rate
            APS168.APS_set_axis_param_f(_selectAxisX, (Int32)APS_Define.PRA_DEC, praDec); // Set deceleration rate

            APS168.APS_set_axis_param_f(_selectAxisY, (Int32)APS_Define.PRA_ACC, praAcc); // Set acceleration rate
            APS168.APS_set_axis_param_f(_selectAxisY, (Int32)APS_Define.PRA_DEC, praDec); // Set deceleration rate


            //if (_card0.IsLoadXmlFile)
            {
                Task task = new Task(() =>
                {
                    APS168.APS_relative_move(_selectAxisX, pulseX, praVm);
                    APS168.APS_relative_move(_selectAxisY, pulseY, praVm);

                    //等待Motion Down完成
                    int motionStatusMdn = 5;
                    while ((APS168.APS_motion_status(_selectAxisX) & 1 << motionStatusMdn) == 0 && (APS168.APS_motion_status(_selectAxisY) & 1 << motionStatusMdn) == 0)
                    {
                        Thread.Sleep(100);
                    }
                    //MessageBox.Show("运动完成!");
                });
                task.Start();
            }
        }
Ejemplo n.º 15
0
        public void MoveAbs(int x, int y)
        {
            //_selectAxis = Convert.ToInt32(cmbSelectAxis.SelectedItem);
            double praAcc = 1000000;
            double praDec = 1000000;
            int    praVm  = 1000;
            int    pulseX = x;
            int    pulseY = y;

            if (IsInitialed == false)
            {
                return;
            }

            APS168.APS_set_axis_param_f(_selectAxisX, (Int32)APS_Define.PRA_ACC, praAcc); // Set acceleration rate
            APS168.APS_set_axis_param_f(_selectAxisX, (Int32)APS_Define.PRA_DEC, praDec); // Set deceleration rate

            APS168.APS_set_axis_param_f(_selectAxisY, (Int32)APS_Define.PRA_ACC, praAcc); // Set acceleration rate
            APS168.APS_set_axis_param_f(_selectAxisY, (Int32)APS_Define.PRA_DEC, praDec); // Set deceleration rate

            //if (_card0.IsLoadXmlFile)
            {
                Task task = new Task(() =>
                {
                    APS168.APS_absolute_move(_selectAxisX, pulseX, praVm);
                    APS168.APS_absolute_move(_selectAxisY, pulseY, praVm);

                    //等待Motion Down完成
                    int motionStatusMdn = 5;
                    while ((APS168.APS_motion_status(_selectAxisX) & 1 << motionStatusMdn) == 0 && (APS168.APS_motion_status(_selectAxisY) & 1 << motionStatusMdn) == 0)
                    {
                        Thread.Sleep(100);
                    }
                });
                task.Start();
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        ///     检查回零是否完成
        /// </summary>
        /// <param name="axisNo"></param>
        /// <returns></returns>
        public int CheckHomeDone(int axisNo, double timeoutLimit)
        {
            var status = 0;

            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_HMV) & 1;
                if (status == 0)
                {
                    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);
        }
Ejemplo n.º 17
0
        public void GetLineValues(int pxStart, int pyStart, int pxEnd, int pyEnd, ref List <LineData> data)
        {
            LineData tempDate = new LineData();

            int[] Axis_ID = new int[2] {
                _selectAxisX, _selectAxisY
            };
            double[] PositionStart = new double[2] {
                pxStart, pyStart
            };
            double[] PositionEnd = new double[2] {
                pxEnd, pyEnd
            };

            Class_8338.Interpolation_2D_line_move(Axis_ID, PositionStart, false);
            //add start
            tempDate.X = pxStart;
            tempDate.Y = pyStart;
            tempDate.Z = ReadSickValue();
            data.Add(tempDate);

            Class_8338.Interpolation_2D_line_moveNowait(Axis_ID, PositionEnd, false);
            int motionStatusMdn = 5;

            while ((APS168.APS_motion_status(Axis_ID[0]) & 1 << motionStatusMdn) == 0 && (APS168.APS_motion_status(Axis_ID[1]) & 1 << motionStatusMdn) == 0)
            {
                Thread.Sleep(300);
                tempDate.Z = ReadSickValue();
                GetPostionAbs(ref tempDate.X, ref tempDate.Y);
                data.Add(tempDate);
            }
            //add end
            tempDate.X = pxEnd;
            tempDate.Y = pyEnd;
            tempDate.Z = ReadSickValue();
            data.Add(tempDate);
        }
Ejemplo n.º 18
0
 public override void GetAxisStatue(uint axisindex, ref int value)
 {
     value = APS168.APS_motion_status((int)axisindex);
 }
Ejemplo n.º 19
0
        private void PointTableMove(double x, double y)
        {
            PTSTS  ptStatus = new PTSTS();
            PTLINE Line     = new PTLINE();
            PTDWL  dwell    = new PTDWL();

            dwell.DwTime = 200;
            int _bufTotalPoint, _bufFreeSpace, _bufUsageSpace, _bufRunningCnt;

            Int32 ptbId = 0, dimension = 2;

            int[] axisIdArray = new int[] { 0, 1 };

            double vStart = 5000;
            double vMax   = 40000;
            double vEnd   = 5000;


            int ret = APS168.APS_pt_disable(0, 0);

            ret = APS168.APS_pt_enable(0, ptbId, dimension, axisIdArray);

            ret = APS168.APS_pt_set_absolute(0, ptbId);
            ret = APS168.APS_pt_set_trans_buffered(0, ptbId);
            ret = APS168.APS_pt_set_acc(0, ptbId, 500000);
            ret = APS168.APS_pt_set_dec(0, ptbId, 500000);

            {
                {
                    ret            = APS168.APS_get_pt_status(0, ptbId, ref ptStatus);
                    _bufFreeSpace  = ptStatus.PntBufFreeSpace;
                    _bufUsageSpace = ptStatus.PntBufUsageSpace;
                    _bufRunningCnt = (int)ptStatus.RunningCnt;
                    if (ptStatus.PntBufFreeSpace > 10)
                    {
                        ret = APS168.APS_pt_set_vm(0, ptbId, 1000); //最大速度
                        ret = APS168.APS_pt_set_ve(0, ptbId, 1000); //结束速度

                        Line.Dim = dimension;
                        Line.Pos = new Double[] { x, y, 0, 0, 0, 0 };
                        ret      = APS168.APS_pt_line(0, ptbId, ref Line, ref ptStatus);
                        ret      = APS168.APS_pt_ext_set_do_ch(0, ptbId, 8, 1);
                        ret      = APS168.APS_pt_dwell(0, ptbId, ref dwell, ref ptStatus);
                        ret      = APS168.APS_pt_ext_set_do_ch(0, ptbId, 8, 0);
                        ret      = APS168.APS_pt_dwell(0, ptbId, ref dwell, ref ptStatus);
                    }
                    else
                    {
                        Thread.Sleep(1);
                    }
                }
            }
            APS168.APS_pt_start(0, 0);
            //等待buffer跑完, motionStatus的ptbFlag=false则连续运动结束。
            bool ptbFlag = true;

            while (ptbFlag)
            {
                int motionStatus = APS168.APS_motion_status(axisIdArray[0]);
                ptbFlag = (motionStatus & (1 << 11)) != 0;

                ret            = APS168.APS_get_pt_status(0, ptbId, ref ptStatus);
                _bufFreeSpace  = ptStatus.PntBufFreeSpace;
                _bufUsageSpace = ptStatus.PntBufUsageSpace;
                _bufRunningCnt = (int)ptStatus.RunningCnt;
                Thread.Sleep(100);
            }
        }
Ejemplo n.º 20
0
        private void PointTableMove()
        {
            var ptStatus = new PTSTS();
            var Line     = new PTLINE();
            var dwell    = new PTDWL();

            dwell.DwTime = 200;

            int ptbId = 0, dimension = 2;
            var axisIdArray = new[] { 0, 1 };

            //double vStart = 5000;
            //double vMax = 40000;
            //double vEnd = 5000;


            var ret = APS168.APS_pt_disable(_card0.CardId, ptbId);

            ret = APS168.APS_pt_enable(_card0.CardId, ptbId, dimension, axisIdArray);

            ret = APS168.APS_pt_set_absolute(_card0.CardId, ptbId);
            ret = APS168.APS_pt_set_trans_buffered(_card0.CardId, ptbId);
            ret = APS168.APS_pt_set_acc(_card0.CardId, ptbId, 500000);
            ret = APS168.APS_pt_set_dec(_card0.CardId, ptbId, 500000);


            foreach (DataRow row in _pointTable.Rows)
            {
                while (true)
                {
                    ret            = APS168.APS_get_pt_status(_card0.CardId, ptbId, ref ptStatus);
                    _bufFreeSpace  = ptStatus.PntBufFreeSpace;
                    _bufUsageSpace = ptStatus.PntBufUsageSpace;
                    _bufRunningCnt = (int)ptStatus.RunningCnt;
                    if (ptStatus.PntBufFreeSpace > 10)
                    {
                        //ret = APS168.APS_pt_set_vs(_card0.CardId, ptbId, vStart);
                        ret = APS168.APS_pt_set_vm(_card0.CardId, ptbId, Convert.ToDouble(row[4]));
                        ret = APS168.APS_pt_set_ve(_card0.CardId, ptbId, Convert.ToDouble(row[5]));

                        Line.Dim = dimension;
                        Line.Pos = new[] { Convert.ToDouble(row[1]), Convert.ToDouble(row[2]), 0, 0, 0, 0 };
                        ret      = APS168.APS_pt_line(_card0.CardId, ptbId, ref Line, ref ptStatus);
                        ret      = APS168.APS_pt_ext_set_do_ch(_card0.CardId, ptbId, 8, 1);
                        ret      = APS168.APS_pt_dwell(_card0.CardId, ptbId, ref dwell, ref ptStatus);
                        ret      = APS168.APS_pt_ext_set_do_ch(_card0.CardId, ptbId, 8, 0);
                        ret      = APS168.APS_pt_dwell(_card0.CardId, ptbId, ref dwell, ref ptStatus);
                        break;
                    }

                    Thread.Sleep(1);
                }
            }

            //等待buffer跑完, motionStatus的ptbFlag=false则连续运动结束。
            var ptbFlag = true;

            while (ptbFlag)
            {
                var motionStatus = APS168.APS_motion_status(axisIdArray[0]);
                ptbFlag = (motionStatus & (1 << 11)) != 0;

                ret            = APS168.APS_get_pt_status(_card0.CardId, ptbId, ref ptStatus);
                _bufFreeSpace  = ptStatus.PntBufFreeSpace;
                _bufUsageSpace = ptStatus.PntBufUsageSpace;
                _bufRunningCnt = (int)ptStatus.RunningCnt;
                Thread.Sleep(100);
            }
        }
Ejemplo n.º 21
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;
                }
            }
        }
Ejemplo n.º 22
0
        private void button7_Click(object sender, EventArgs e)
        {
            var boardId = Convert.ToInt32(txtCardId.Text);
            int motionStatusCstp = 0, motionStatusAstp = 16;

            APS168.APS_absolute_move(0, -220000, 50000);
            while ((APS168.APS_motion_status(0) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }

            if ((APS168.APS_motion_status(0) & (1 << motionStatusAstp)) == 0)
            {
                MessageBox.Show("轴" + "到位成功!");
            }
            else
            {
                MessageBox.Show("轴" + "到位失败!");
            }

            Thread.Sleep(500);

            APS168.APS_absolute_move(1, 30000, 10000);
            while ((APS168.APS_motion_status(1) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }

            if ((APS168.APS_motion_status(1) & (1 << motionStatusAstp)) == 0)
            {
                MessageBox.Show("轴" + "到位成功!");
            }
            else
            {
                MessageBox.Show("轴" + "到位失败!");
            }

            APS168.APS_absolute_move(2, 0, 10000);
            while ((APS168.APS_motion_status(2) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }

            if ((APS168.APS_motion_status(2) & (1 << motionStatusAstp)) == 0)
            {
                MessageBox.Show("轴" + "到位成功!");
            }
            else
            {
                MessageBox.Show("轴" + "到位失败!");
            }

            APS168.APS_absolute_move(1, -15000, 10000);

            //关闭触发
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG_EN, 0);
            //TRG 0 ~ 3 enable by bit
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG_EN, Convert.ToInt32("0001", 2));
            //Source Encoder0
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TCMP0_SRC, 0);
            //Bi-direction(No direction)
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TCMP0_DIR, 1);
            //Trigger output 0 (TRG0) source Bit( 1:On, 0:Off)    Bit 0: Manual  Bit 1:Reserved Bit  2:TCMP0  Bit 3:TCMP1  Bit 4:LCMP0  Bit 5:LCMP1
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG0_SRC, Convert.ToInt32("0100", 2));
            //TRG1 pulse width
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG0_PWD, 1500); //  pulse width=  value * 0.02 us
            //TRG 1 logic  0: Not inverse  1:Inverse
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG0_LOGIC, 0);

            //add points to 1th
            //int[] xPoint = new int[] { 100000, 90000, 80000 };


            var xPoint  = new int[330];
            var csvFile = new CsvReader("x1.csv");

            var xTable = csvFile.ReadIntoDataTable(new[] { typeof(int) });

            for (var i = 0; i < 330; i++)
            {
                xPoint[i] = Convert.ToInt32(xTable.Rows[i][0]);                           //表格行的数据
            }
            APS168.APS_set_trigger_table(boardId, 0, xPoint, 330);
        }
Ejemplo n.º 23
0
        private void btnLineTrigTest_Click(object sender, EventArgs e)
        {
            int motionStatusCstp = 0, motionStatusAstp = 16;
            var boardId = Convert.ToInt32(txtCardId.Text);

            var praAcc = Convert.ToDouble(txtPraAcc.Text);
            var praDec = Convert.ToDouble(txtPraDec.Text);

            APS168.APS_set_axis_param_f(0, (int)APS_Define.PRA_ACC, praAcc); // Set acceleration rate
            APS168.APS_set_axis_param_f(0, (int)APS_Define.PRA_DEC, praDec); // Set deceleration rate

            //回起始点
            APS168.APS_absolute_move(0, -220000, 100000);
            APS168.APS_absolute_move(1, -15000, 100000);
            APS168.APS_absolute_move(2, 0, 10000);

            while ((APS168.APS_motion_status(0) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }

            if ((APS168.APS_motion_status(0) & (1 << motionStatusAstp)) == 0)
            {
            }

            APS168.APS_absolute_move(0, -62000, 50000);

            while ((APS168.APS_motion_status(0) & (1 << motionStatusCstp)) == 0)
            {
                Thread.Sleep(100);
            }

            if ((APS168.APS_motion_status(0) & (1 << motionStatusAstp)) == 0)
            {
            }

            //关闭触发
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG_EN, 0);
            //TRG 0 ~ 3 enable by bit
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG_EN, Convert.ToInt32("0001", 2));
            //Source Encoder0
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TCMP0_SRC, 0);
            //Bi-direction(No direction)
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TCMP0_DIR, 1);
            //Trigger output 0 (TRG0) source Bit( 1:On, 0:Off)    Bit 0: Manual  Bit 1:Reserved Bit  2:TCMP0  Bit 3:TCMP1  Bit 4:LCMP0  Bit 5:LCMP1
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG0_SRC, Convert.ToInt32("11000", 2));
            //TRG1 pulse width
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG0_PWD, 2000); //  pulse width=  value * 0.02 us
            //TRG 1 logic  0: Not inverse  1:Inverse
            APS168.APS_set_trigger_param(boardId, (short)APS_Define.TGR_TRG0_LOGIC, 0);

            //重置触发计数
            APS168.APS_reset_trigger_count(boardId, 0);
            APS168.APS_reset_trigger_count(boardId, 1);

            APS168.APS_set_trigger_linear(boardId, 0, -61000, 900, 11);
            APS168.APS_relative_move(0, 20000, 5000);

            //Int32 ptbId = 0;          //Point table id 0
            //Int32 dimension = 3;      //2D point table
            //Int32 i = 0;
            //Int32 ret = 0;

            //int[] Axis_ID_Array = new int[] { 0, 1, 2 };

            //PTSTS Status = new PTSTS();
            //PTLINE Line = new PTLINE();

            ////Enable point table
            //ret = APS168.APS_pt_disable(boardId, ptbId);
            ///////////////////////////ret = APS168.APS_pt_enable(boardId, ptbId, dimension, Axis_ID_Array);
            //ret = APS168.APS_pt_enable(boardId, ptbId, dimension, Axis_ID_Array);

            ////Configuration
            //ret = APS168.APS_pt_set_absolute(boardId, ptbId); //Set to absolute mode
            //ret = APS168.APS_pt_set_trans_buffered(boardId, ptbId); //Set to buffer mode
            //ret = APS168.APS_pt_set_acc(boardId, ptbId, 5000000); //Set acc
            //ret = APS168.APS_pt_set_dec(boardId, ptbId, 5000000); //Set dec

            //ret = APS168.APS_get_pt_status(boardId, ptbId, ref Status);
            //if ((Status.BitSts & 0x02) == 0) //Buffer is not Full
            //{

            //    Line.Dim = 3;
            //    double Vslow = 300000;

            //    {
            //        PTDWL pwdell = new PTDWL();
            //        pwdell.DwTime = 2000;

            //        //1st line


            //        ret = APS168.APS_pt_set_vm(boardId, ptbId, Vslow);
            //        ret = APS168.APS_pt_set_ve(boardId, ptbId, Vslow);
            //        Line.Pos = new double[] { -218000, -22000, 50, 0, 0, 0 };
            //        ret = APS168.APS_pt_line(boardId, ptbId, ref Line, ref Status);//1段起始点

            //        APS168.APS_set_trigger_linear(boardId, 0, -72000, 900, 11);

            //        double praAcc = Convert.ToDouble(txtPraAcc.Text);
            //        double praDec = Convert.ToDouble(txtPraDec.Text);

            //        APS168.APS_set_axis_param_f(1, (Int32)APS_Define.PRA_ACC, praAcc); // Set acceleration rate
            //        APS168.APS_set_axis_param_f(1, (Int32)APS_Define.PRA_DEC, praDec); // Set deceleration rate

            //        APS168.APS_relative_move(0, 20000, 100000);
            //    }
            //}
        }