// 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); }
public static void InitinalDMC2610() { // DMC2610卡的函数调用 UInt16 nCard = 0; nCard = Dmc2610.d2610_board_init(); //'为控制卡分配系统资源,并初始化控制卡。 if (nCard <= 0) //DMC1000控制卡初始化 { MessageBox.Show("未找到DMC2610控制卡!", "警告"); return;//退出当前程序 } }
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(); } } }
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); }
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)); }
public static void CloseDMC2610() { Dmc2610.d2610_board_close(); }
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]; } }
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(); }
public static void AllAxisEMGStop() { Dmc2610.d2610_emg_stop(); }
public static bool ReadInputKey(ushort inum) { return((Dmc2610.d2610_read_inbit(0, inum) == 0)? false : true); }
public void SetVectorModeProfile() { Dmc2610.d2610_set_vector_profile(axisVectorModeMoveParameters.StartVelocity, axisVectorModeMoveParameters.MaxVelocity, axisVectorModeMoveParameters.TimeofAcc, axisVectorModeMoveParameters.TimeofDec); }
public void SetSTModeProfile() { Dmc2610.d2610_set_st_profile(AxisId, axisSPModeMoveParameters.StartVelocity, axisSPModeMoveParameters.MaxVelocity, axisSPModeMoveParameters.TimeofAcc, axisSPModeMoveParameters.TimeofDec, axisSPModeMoveParameters.TimeofAcc, axisSPModeMoveParameters.TimeofDec); }
public static void ResetDMC2610() { Dmc2610.d2610_board_reset(); }
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 !"); } }
public void SetResetModeProfile() { Dmc2610.d2610_set_profile(AxisId, Convert.ToDouble(axisResetModeMoveParameters.StartVelocity), Convert.ToDouble(axisResetModeMoveParameters.MaxVelocity), Convert.ToDouble(axisResetModeMoveParameters.TimeofAcc), Convert.ToDouble(axisResetModeMoveParameters.TimeofDec)); }
public static bool GetAxisIsDoWell(Axis axis) { bool result = (Dmc2610.d2610_check_done(axis.AxisId) == 1) ? true : false; return(result); }
public static bool GetAxisIsReadyPIN(Axis axis) { bool result = (Dmc2610.d2610_read_RDY_PIN(axis.AxisId) == (ushort)AxisReadyPINLogic.IsReady) ? true : false; return(result); }
public static bool GetAxisIsNELON(Axis axis) { bool result = ((Dmc2610.d2610_axis_io_status(axis.AxisId) & (1 << 13)) == (1 << 13)) ? true : false; return(result); }
public static bool GetAxisIsINPON(Axis axis) { bool result = ((((ushort)Dmc2610.d2610_get_rsts(axis.AxisId)) & (1 << 15)) == (1 << 15)) ? true : false; return(result); }