コード例 #1
0
// ReSharper disable InconsistentNaming
        public static bool XYPMoveAbsolutUseTMode(Axis axisX, Axis axisY, float x, float y)
// ReSharper restore InconsistentNaming
        {
            bool OrderIsCompeleted = false;
            int  xposition         = Convert.ToInt32(x * axisX.PulseOfPerMilMeter);
            int  yposition         = Convert.ToInt32(y * axisY.PulseOfPerMilMeter);

            if (axisX.MaxRouteDistance > xposition && (xposition >= 0))
            {
                if (axisY.MaxRouteDistance > yposition && (yposition >= 0))
                {
                    axisX.SetTModeProfile();
                }
                axisY.SetTModeProfile();
                if (AxisQueryStatus(axisX) && AxisQueryStatus(axisY))
                {
                    Dmc2610.d2610_t_pmove(axisX.AxisId, xposition, (ushort)AxisPositionMode.Absolut);
                    Dmc2610.d2610_t_pmove(axisY.AxisId, yposition, (ushort)AxisPositionMode.Absolut);
                    //while ((!GetAxisIsINPON(axisX)) && (!GetAxisIsINPON(axisY)))
                    //{

                    //}
                    while (!(GetAxisIsDoWell(axisX) && (GetAxisIsDoWell(axisY))))
                    {
                    }
                    OrderIsCompeleted = true;
                }
            }
            return(OrderIsCompeleted);
        }
コード例 #2
0
        public static void InitinalDMC2610()
        {
            // DMC2610卡的函数调用
            UInt16 nCard = 0;

            nCard = Dmc2610.d2610_board_init(); //'为控制卡分配系统资源,并初始化控制卡。
            if (nCard <= 0)                     //DMC1000控制卡初始化
            {
                MessageBox.Show("未找到DMC2610控制卡!", "警告");
                return;//退出当前程序
            }
        }
コード例 #3
0
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            timer1.Enabled = false;

            if (AxisGroup != null)
            {
                Dmc2610.d2610_board_close();
            }
            if (objThread != null)
            {
                if (objThread.IsAlive)
                {
                    objThread.Abort();
                }
            }
        }
コード例 #4
0
        public static bool SigelAxisPMoveAbsolutUseTMode(Axis axis, float dis)
        {
            bool OrderIsCompeleted = false;
            int  position          = Convert.ToInt32(dis * axis.PulseOfPerMilMeter);

            if (axis.MaxRouteDistance > position && (position >= 0))
            {
                axis.SetTModeProfile();
                if (AxisQueryStatus(axis))
                {
                    Dmc2610.d2610_t_pmove(axis.AxisId, position, (ushort)AxisPositionMode.Absolut);
                    while (!GetAxisIsDoWell(axis))
                    {
                    }
                    OrderIsCompeleted = true;
                }
            }
            return(OrderIsCompeleted);
        }
コード例 #5
0
        public Axis(AxisID id, AxisPulseOutMode axisPulseOutMode, double pulseOfMilMeter, long maxRouteDistance, long logicOrgPosition, AxisINPSIG inpsig)
        {
            _axisId             = Convert.ToUInt16(id);
            _pulseOfPerMilMeter = pulseOfMilMeter;
            _maxRouteDistance   = (long)(maxRouteDistance * PulseOfPerMilMeter);
            _logicOrgPosition   = (int)(logicOrgPosition * PulseOfPerMilMeter);
            _axisPulseOutMode   = Convert.ToUInt16(axisPulseOutMode);

            //轴脉冲输出模式
            Dmc2610.d2610_set_pulse_outmode(_axisId, Convert.ToUInt16(AxisPulseOutMode));
            //ALM信号定义: 低电平有效,触发后立即停止
            Dmc2610.d2610_config_ALM_PIN(_axisId, Convert.ToUInt16(AxisALMLogic.HighLevelVaild),
                                         Convert.ToUInt16(AxisALMAction.ImmediatelyStop));
            //INP信号低电平有效, 发送完成指令脉冲后立即置check_done 完成,无需等待,否则需得到INP为低电平才置位check_done
            if (_axisPulseOutMode < 4)
            {
                Dmc2610.d2610_config_INP_PIN(_axisId, Convert.ToUInt16(AxisINPSIG.Enable), Convert.ToUInt16(AxisINPLogic.LowLevelVaild));
            }
            else
            {
                Dmc2610.d2610_config_INP_PIN(_axisId, Convert.ToUInt16(AxisINPSIG.Enable), Convert.ToUInt16(AxisINPLogic.HighLevelVaild));
            }


            //Emergy Stop 信号定义 0为1号卡  1允许,1 高电平有效
            Dmc2610.d2610_config_EMG_PIN(0, 1, 0);

            //编码器计数方式为: AB相 EA单路信号4倍。(无卡时,初始化这一项会出现内存存储违规,故暂时取消掉)
            Dmc2610.d2610_counter_config(_axisId, Convert.ToUInt16(EnCoderCountMode.ABPhased4xEA));
            //Dmc2610.d2610_set_encoder(_axisId, 0);


            //设置Home PIN的回原点以及滤波器开关。(无卡时,初始化这一项会出现内存存储违规,故暂时取消掉)
            Dmc2610.d2610_set_HOME_pin_logic(AxisId, Convert.ToUInt16(AxisHOMEOrgLogic.LowLevelVaild), Convert.ToUInt16(AxisHOMEUseFilter.Enable));
            Dmc2610.d2610_config_home_mode(AxisId, Convert.ToUInt16(AxisHomeMode.HomeCountOnly), Convert.ToUInt16(0));
        }
コード例 #6
0
 public static void CloseDMC2610()
 {
     Dmc2610.d2610_board_close();
 }
コード例 #7
0
        private void btnLoadAxisPara_Click(object sender, EventArgs e)
        {
            // DMC2610卡的函数调用

            nCard = Dmc2610.d2610_board_init(); //'为控制卡分配系统资源,并初始化控制卡。
            if (nCard <= 0)                     //DMC1000控制卡初始化
            {
                MessageBox.Show("未找到DMC2610控制卡!", "警告");
                return;//退出当前程序
            }

            string connectionString = @"Data Source=.\AOI;Initial Catalog=aoi5sys;Integrated Security=True";

            SqlConnection connection = new SqlConnection(connectionString);
            //string sql=@"SELECT * FROM AXIS_PARAM WHERE NAME='#1HOST'";
            string sql = @"SELECT [NAME]
      ,[AXIS]
      ,[AXIS_ID]
      ,[PULSE_MODE]
      ,[MAX_DIST]
      ,[ORG_POSITION]
      ,[RESET_SPEED]
      ,[START_SPEED]
      ,[MAX_SPEED]
      ,[ADD_SPEED]
      ,[ADD_MODE]
      ,[PULSE_PER_MM]
  FROM [aoi5sys].[dbo].[AXIS_PARAM]
  WHERE	NAME='#1HOST'";

            try
            {
                connection.Open();

                SqlCommand cmd = new SqlCommand(sql, connection);

                SqlDataReader dataReader = cmd.ExecuteReader();


                AxisGroup = new List <Axis>();

                while (dataReader.Read())
                {
                    string           tempstr  = dataReader.GetValue(1).ToString();
                    AxisPulseOutMode PoutMode = dataReader.GetInt32(3) == 0
                              ? AxisPulseOutMode.PM_PLDL
                              : AxisPulseOutMode.PM_PHDHPHDH;
                    double     pulseOfMilMeter   = Convert.ToDouble(dataReader.GetValue(11).ToString());
                    long       maxRouterDistance = Convert.ToInt64(dataReader.GetValue(4));
                    long       logicOrgPosition  = Convert.ToInt64(dataReader.GetValue(5));
                    AxisINPSIG axisInpsig        = AxisINPSIG.Enable;

                    double ResetVelocity = Convert.ToDouble(dataReader.GetValue(6));
                    double startVelocity = Convert.ToDouble(dataReader.GetValue(7));
                    double maxVelocity   = Convert.ToDouble(dataReader.GetValue(8));
                    double accVelocity   = Convert.ToDouble(dataReader.GetValue(9));
                    double decVelocity   = Convert.ToDouble(dataReader.GetValue(9));
                    float  scale         = (float)0.75;

                    if (tempstr.Contains("X_"))
                    {
                        this.XAxis = new Axis(AxisID.XAxis, PoutMode, pulseOfMilMeter, maxRouterDistance, logicOrgPosition, axisInpsig);
                        XAxis.AxisSetResetMoveParameters(ResetVelocity / 2, ResetVelocity, ResetVelocity / 2, ResetVelocity / 2);
                        XAxis.AxisSetTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity);
                        XAxis.AxisSetSPMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        XAxis.AxisSetSTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        // XAxis.AxisSetVectorMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, (float)0.6);
                        AxisGroup.Add(XAxis);
                    }
                    if (tempstr.Contains("Y_"))
                    {
                        this.YAxis = new Axis(AxisID.YAxis, PoutMode, pulseOfMilMeter, maxRouterDistance, logicOrgPosition, axisInpsig);
                        YAxis.AxisSetResetMoveParameters(ResetVelocity / 2, ResetVelocity, ResetVelocity / 2, ResetVelocity / 2);
                        YAxis.AxisSetTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity);
                        YAxis.AxisSetSPMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        YAxis.AxisSetSTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        // YAxis.AxisSetVectorMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, (float)0.6);
                        AxisGroup.Add(YAxis);
                    }
                    if (tempstr.Contains("C_"))
                    {
                        this.CAxis = new Axis(AxisID.ZAxis, PoutMode, pulseOfMilMeter, maxRouterDistance, logicOrgPosition, axisInpsig);
                        CAxis.AxisSetResetMoveParameters(ResetVelocity / 2, ResetVelocity, ResetVelocity / 2, ResetVelocity / 2);
                        CAxis.AxisSetTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity);
                        CAxis.AxisSetSPMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        CAxis.AxisSetSTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        //CAxis.AxisSetVectorMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, (float)0.6);
                        AxisGroup.Add(CAxis);
                    }
                    if (tempstr.Contains("L_"))
                    {
                        this.LAxis = new Axis(AxisID.UAxis, PoutMode, pulseOfMilMeter, maxRouterDistance, logicOrgPosition, axisInpsig);
                        LAxis.AxisSetResetMoveParameters(ResetVelocity / 2, ResetVelocity, ResetVelocity / 2, ResetVelocity / 2);
                        LAxis.AxisSetTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity);
                        LAxis.AxisSetSPMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        LAxis.AxisSetSTMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, scale);
                        // LAxis.AxisSetVectorMoveParameters(startVelocity, maxVelocity, accVelocity, decVelocity, (float)0.6);
                        AxisGroup.Add(LAxis);
                    }
                }
                timer1.Enabled = true;
            }
            catch (DataException dataException)
            {
                MessageBox.Show(dataException.ToString());
            }
            finally
            {
                connection.Close();
                this.btnLoadAxisPara.Enabled = false;
            }

            for (int i = 0; i < 2; i++)
            {
                InputinitStatus[i] = Motion2610Control.ReadInputKey((ushort)(i + 1));
                InputiskeyDown[i]  = InputinitStatus[i];
            }
        }
コード例 #8
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            long   pos, pos2;
            int    checkStauts;
            string str_DisplayPos;

            pos            = Dmc2610.d2610_get_position(0);//读取指定轴的当前位置
            str_DisplayPos = "X=" + Convert.ToString(pos) + "     " + (!Convert.ToBoolean(Dmc2610.d2610_check_done((ushort)AxisID.XAxis)) ? "...Run..." : "...Stop...");
            pos            = Dmc2610.d2610_get_position(1);
            str_DisplayPos = str_DisplayPos + "   Y=" + Convert.ToString(pos) + "     " + (!Convert.ToBoolean(Dmc2610.d2610_check_done((ushort)AxisID.YAxis)) ? "...Run..." : "...Stop...");

            str_DisplayPos += "\n";

            pos2           = Dmc2610.d2610_get_position(2);
            str_DisplayPos = str_DisplayPos + "Z=" + Convert.ToString(pos2) + "     " + (!Convert.ToBoolean(Dmc2610.d2610_check_done((ushort)AxisID.ZAxis)) ? "...Run..." : "...Stop...");
            pos2           = Dmc2610.d2610_get_position(3);
            str_DisplayPos = str_DisplayPos + "   U=" + Convert.ToString(pos2) + "     " + (!Convert.ToBoolean(Dmc2610.d2610_check_done((ushort)AxisID.UAxis)) ? "...Run..." : "...Stop...");


            //str_DisplayPos += "\n"  + ((Motion2610Control.GetAxisIsORGON(XAxis)) ? "X ORG IS ON" : "X ORG IS OFF");
            str_DisplayPos += "\n" + ((Motion2610Control.GetAxisIsORGON(XAxis)) ? "X ORG IS ON" : "X ORG IS OFF") + "   " + ((Motion2610Control.GetAxisIsORGON(YAxis)) ? "Y ORG IS ON" : "Y ORG IS OFF") + "   " + ((Motion2610Control.GetAxisIsORGON(CAxis)) ? "C ORG IS ON" : "C ORG IS OFF") + "   " + ((Motion2610Control.GetAxisIsORGON(LAxis)) ? "L ORG IS ON" : "L ORG IS OFF");

            str_DisplayPos += "\n" + ((Motion2610Control.GetAxisIsNELON(XAxis)) ? "X EL- IS ON" : "X EL- IS OFF") + "   " + ((Motion2610Control.GetAxisIsNELON(YAxis)) ? "Y EL- IS ON" : "Y EL- IS OFF") + "   " + ((Motion2610Control.GetAxisIsNELON(CAxis)) ? "C EL- IS ON" : "C EL- IS OFF") + "   " + ((Motion2610Control.GetAxisIsNELON(LAxis)) ? "L EL- IS ON" : "L EL- IS OFF");

            str_DisplayPos += "\n" + ((Motion2610Control.GetAxisIsPELON(XAxis)) ? "X EL+ IS ON" : "X EL+ IS OFF") + "   " + ((Motion2610Control.GetAxisIsPELON(YAxis)) ? "Y EL+ IS ON" : "Y EL+ IS OFF") + "   " + ((Motion2610Control.GetAxisIsPELON(CAxis)) ? "C EL+ IS ON" : "C EL+ IS OFF") + "   " + ((Motion2610Control.GetAxisIsPELON(LAxis)) ? "L EL+ IS ON" : "L EL+ IS OFF");

            str_DisplayPos += "\n\n" + ((Motion2610Control.GetAxisIsINPON(XAxis)) ? "X INP IS ON" : "X INP IS OFF") +
                              "   " + ((Motion2610Control.GetAxisIsINPON(YAxis)) ? "Y INP IS ON" : "Y INP IS OFF");

            Label_POSITION.Text = str_DisplayPos;//显示位置信

            StringBuilder axisStautsDetail = new StringBuilder();

            foreach (Axis axis in AxisGroup)
            {
                if (!Motion2610Control.AxisQueryStatus(axis))
                {
                    while (axis.AxisStatusStack.Count > 0)
                    {
                        axisStautsDetail.Append(axis.AxisStatusStack.Pop());
                    }
                }
            }
            if (axisStautsDetail.Length <= 0)
            {
                lbAxisStatus.Text = "Axis Status : \n" + "Every Axis is OK!";
            }
            else
            {
                lbAxisStatus.Text = "Axis Status : \n" + axisStautsDetail;
            }

            StringBuilder sb2 = new StringBuilder();

            for (int i = 0; i < 2; i++)
            {
                if (Motion2610Control.ReadInputKey((ushort)(i + 1)) != InputiskeyDown[i])
                {
                    InputiskeyDown[i] = Motion2610Control.ReadInputKey((ushort)(i + 1));
                    if (InputiskeyDown[i] != InputinitStatus[i])
                    {
                        inputstartTime[i] = DateTime.Now;
                        string str1 = "input  " + i.ToString() + ": StartTime= " + inputstartTime[i].ToString();
                        sb2.AppendLine(str1);
                    }
                    else
                    {
                        InputEndTime[i] = DateTime.Now;

                        string str1 = "input  " + i.ToString() + ": EndTime = " + InputEndTime[i].ToString();


                        sb2.AppendLine(str1);
                    }
                }
            }

            this.tbinputsig.Text += sb2.ToString();
        }
コード例 #9
0
 public static void AllAxisEMGStop()
 {
     Dmc2610.d2610_emg_stop();
 }
コード例 #10
0
 public static bool ReadInputKey(ushort inum)
 {
     return((Dmc2610.d2610_read_inbit(0, inum) == 0)? false : true);
 }
コード例 #11
0
 public void SetVectorModeProfile()
 {
     Dmc2610.d2610_set_vector_profile(axisVectorModeMoveParameters.StartVelocity,
                                      axisVectorModeMoveParameters.MaxVelocity, axisVectorModeMoveParameters.TimeofAcc,
                                      axisVectorModeMoveParameters.TimeofDec);
 }
コード例 #12
0
 public void SetSTModeProfile()
 {
     Dmc2610.d2610_set_st_profile(AxisId, axisSPModeMoveParameters.StartVelocity,
                                  axisSPModeMoveParameters.MaxVelocity, axisSPModeMoveParameters.TimeofAcc,
                                  axisSPModeMoveParameters.TimeofDec, axisSPModeMoveParameters.TimeofAcc, axisSPModeMoveParameters.TimeofDec);
 }
コード例 #13
0
 public static void ResetDMC2610()
 {
     Dmc2610.d2610_board_reset();
 }
コード例 #14
0
        public static void HomeMove(Axis axis)
        {
            if ((axis.axisTModeMoveParameters.MaxVelocity > 0) && (axis.axisTModeMoveParameters.MaxVelocity < 50000000))
            {
                if (!((Dmc2610.d2610_read_RDY_PIN(axis.AxisId) == 0) && (GetAxisIsALMON(axis)) && (GetAxisIsEMGON(axis))))
                {
                    if (!(GetAxisIsNELON(axis) && GetAxisIsPELON(axis)))
                    {
                        if (!(GetAxisIsORGON(axis)))
                        {
                            axis.SetResetModeProfile();
                            Dmc2610.d2610_home_move(axis.AxisId, (ushort)AxisHomeMoveDirection.Reverse,
                                                    (ushort)AxisHomeVelocityMode.SlowlySpeedandStop);
                        }
                        else
                        {
                            if ((GetAxisIsORGON(axis)))
                            {
                                axis.SetResetModeProfile();
                                Dmc2610.d2610_t_pmove(axis.AxisId, 10000, (ushort)AxisPositionMode.Relation);
                                while (!GetAxisIsDoWell(axis))
                                {
                                }
                                axis.SetResetModeProfile();
                                Dmc2610.d2610_home_move(axis.AxisId, (ushort)AxisHomeMoveDirection.Reverse,
                                                        (ushort)AxisHomeVelocityMode.SlowlySpeedandStop);

                                while (!GetAxisIsDoWell(axis))
                                {
                                }
                                Dmc2610.d2610_set_position(axis.AxisId, 0);
                            }
                        }
                    }
                    else
                    {
                        if (GetAxisIsNELON(axis) && (!GetAxisIsPELON(axis)))
                        {
                            axis.SetResetModeProfile();
                            Dmc2610.d2610_t_pmove(axis.AxisId, 10000, (ushort)AxisPositionMode.Relation);
                            while (!GetAxisIsDoWell(axis))
                            {
                            }
                            axis.SetResetModeProfile();
                            Dmc2610.d2610_home_move(axis.AxisId, (ushort)AxisHomeMoveDirection.Reverse,
                                                    (ushort)AxisHomeVelocityMode.SlowlySpeedandStop);
                        }
                        else
                        {
                            axis.SetResetModeProfile();
                            Dmc2610.d2610_home_move(axis.AxisId, (ushort)AxisHomeMoveDirection.Reverse,
                                                    (ushort)AxisHomeVelocityMode.SlowlySpeedandStop);
                        }
                    }
                    while (!GetAxisIsDoWell(axis))
                    {
                    }
                    //axis.SetTModeProfile();
                    //Dmc2610.d2610_t_pmove(axis.AxisId, axis.LogicOrgPosition, (ushort)AxisPositionMode.Relation);
                    axis.SetResetModeProfile();
                    Dmc2610.d2610_set_position(axis.AxisId, 0);
                    Dmc2610.d2610_t_pmove(axis.AxisId, axis.LogicOrgPosition, (ushort)AxisPositionMode.Absolut);
                    while (!GetAxisIsDoWell(axis))
                    {
                    }
                    Thread.Sleep(500);
                    Dmc2610.d2610_set_position(axis.AxisId, 0);
                }
                else
                {
                    MessageBox.Show("Axis is Not Ready or occur  EMG Stop !");
                }
            }
            else
            {
                MessageBox.Show("Axis Parameters of AcclerateVelocity is Incorrect !");
            }
        }
コード例 #15
0
 public void SetResetModeProfile()
 {
     Dmc2610.d2610_set_profile(AxisId, Convert.ToDouble(axisResetModeMoveParameters.StartVelocity),
                               Convert.ToDouble(axisResetModeMoveParameters.MaxVelocity), Convert.ToDouble(axisResetModeMoveParameters.TimeofAcc),
                               Convert.ToDouble(axisResetModeMoveParameters.TimeofDec));
 }
コード例 #16
0
        public static bool GetAxisIsDoWell(Axis axis)
        {
            bool result = (Dmc2610.d2610_check_done(axis.AxisId) == 1) ? true : false;

            return(result);
        }
コード例 #17
0
        public static bool GetAxisIsReadyPIN(Axis axis)
        {
            bool result = (Dmc2610.d2610_read_RDY_PIN(axis.AxisId) == (ushort)AxisReadyPINLogic.IsReady) ? true : false;

            return(result);
        }
コード例 #18
0
        public static bool GetAxisIsNELON(Axis axis)
        {
            bool result = ((Dmc2610.d2610_axis_io_status(axis.AxisId) & (1 << 13)) == (1 << 13)) ? true : false;

            return(result);
        }
コード例 #19
0
        public static bool GetAxisIsINPON(Axis axis)
        {
            bool result = ((((ushort)Dmc2610.d2610_get_rsts(axis.AxisId)) & (1 << 15)) == (1 << 15)) ? true : false;

            return(result);
        }