private void Timer1驱动器专用接口_Tick(object sender, EventArgs e) { // '*************读取X轴有关运动信号的状态,包含专用I/O状态******************* UInt16 X轴运动信号 = Dmc2610.d2610_axis_io_status(X轴); if ((X轴运动信号 & (UInt16)Math.Pow(2, 8)) == (UInt16)Math.Pow(2, 8))// 'X轴正在加速读取,以2进制方式检测即2的8次方 { La8X轴FU.Text = "X轴正在加速ON"; La8X轴FU.ForeColor = Color.Red; } else { La8X轴FU.Text = "8X轴FU加速OFF"; La8X轴FU.ForeColor = Color.Brown; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 9)) == (UInt16)Math.Pow(2, 9))// 'X轴正在减速读取,以2进制方式检测即2的9次方 { La9X轴FD.Text = "X轴正在减速ON"; La9X轴FD.ForeColor = Color.Red; } else { La9X轴FD.Text = "9X轴FD减速OFF"; La9X轴FD.ForeColor = Color.Blue; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 10)) == (UInt16)Math.Pow(2, 10))// 'X轴正在低速读取,以2进制方式检测即2的10次方 { La10X轴FC.Text = "X轴正在恒速运行ON"; La10X轴FC.ForeColor = Color.CadetBlue; } else { La10X轴FC.Text = "10X轴FC低速OFF"; La10X轴FC.ForeColor = Color.Aqua; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 11)) == (UInt16)Math.Pow(2, 11))// 'X轴伺服报警信号读取,以2进制方式检测即2的11次方 { La11X轴ALM.Text = "X轴伺服报警信号ON"; La11X轴ALM.ForeColor = Color.Brown; } else { La11X轴ALM.Text = "11X轴ALM信号OFF"; La11X轴ALM.ForeColor = Color.Blue; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 12)) == (UInt16)Math.Pow(2, 12))//'X轴+EL正限位读取,以2进制方式检测即2的12次方 { La12X轴PEL.Text = "X轴+EL正限位信号ON"; La12X轴PEL.ForeColor = Color.Yellow; } else { La12X轴PEL.Text = "12X轴+EL信号OFF"; La12X轴PEL.ForeColor = Color.Black; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 13)) == (UInt16)Math.Pow(2, 13))// 'X轴-EL正限位读取,以2进制方式检测即2的13次方 { La13X轴MEL.Text = "X轴-EL正限位信号ON"; La13X轴MEL.ForeColor = Color.Blue; } else { La13X轴MEL.Text = "13X轴-EL信号OFF"; La13X轴MEL.ForeColor = Color.Black; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 14)) == (UInt16)Math.Pow(2, 14))//X轴ORG原点读取,以2进制方式检测即2的14次方 { La14X轴ORG.Text = "X轴ORG原点信号输入ON"; La14X轴ORG.ForeColor = Color.Blue; } else { La14X轴ORG.Text = "14X轴ORG原点OFF"; La14X轴ORG.ForeColor = Color.Brown; } if ((X轴运动信号 & (UInt16)Math.Pow(2, 15)) == (UInt16)Math.Pow(2, 15))//'X轴SD减速信号读取,以2进制方式检测即2的15次方 { La15X轴SD.Text = "X轴SD信号输入ON"; La15X轴SD.ForeColor = Color.Brown; } else { La15X轴SD.Text = "15X轴SD信号OFF"; La15X轴SD.ForeColor = Color.Green; } // '##############读取X轴的主状态######### UInt16 X轴主状态 = Dmc2610.d2610_axis_status(X轴); if ((X轴主状态 & (UInt16)Math.Pow(2, 0)) == (UInt16)Math.Pow(2, 0))//'X轴X轴启动命令读取,以2进制方式检测即2的0次方 { La0启动命令.Text = "X轴启动命令运行ON"; La0启动命令.ForeColor = Color.Green; } else { La0启动命令.Text = "X轴启动命令OFF"; La0启动命令.ForeColor = Color.Blue; } if ((X轴主状态 & (UInt16)Math.Pow(2, 1)) == (UInt16)Math.Pow(2, 1))//'X轴X轴脉冲输出读取,以2进制方式检测即2的1次方 { La1X轴脉冲输出.Text = "X轴脉冲ON输出中"; La1X轴脉冲输出.ForeColor = Color.Black; } else { La1X轴脉冲输出.Text = "X轴脉冲输出OFF"; La1X轴脉冲输出.ForeColor = Color.Blue; } //'########读取X轴的外部信号状态********** uint X轴外部信号 = Dmc2610.d2610_get_rsts(X轴); if ((X轴外部信号 & (UInt16)Math.Pow(2, 7)) == (UInt16)Math.Pow(2, 7)) //'X轴急停出读取,以2进制方式检测即2的7次方 { La7X轴急停.Text = "X轴紧急停ON输入"; La7X轴急停.ForeColor = Color.Black; } else { La7X轴急停.Text = "X轴急停OFF"; La7X轴急停.ForeColor = Color.Orchid; } if ((X轴外部信号 & (UInt16)Math.Pow(2, 8)) == (UInt16)Math.Pow(2, 8)) //8X轴PCS信号读取,以2进制方式检测即2的8次方 { La8X轴PCS信号.Text = "X轴PCS信号ON输入"; La8X轴PCS信号.ForeColor = Color.Blue; } else { La8X轴PCS信号.Text = "X轴PCS信号OFF"; La8X轴PCS信号.ForeColor = Color.Orange; } if ((X轴外部信号 & (UInt16)Math.Pow(2, 9)) == (UInt16)Math.Pow(2, 9)) //9X轴ERC信号读取,以2进制方式检测即2的9次方 { La9X轴ERC信号.Text = "X轴ERC信号ON"; La9X轴ERC信号.ForeColor = Color.Black; } else { La9X轴ERC信号.Text = "9X轴ERC信号OFF"; La9X轴ERC信号.ForeColor = Color.Coral; } if ((X轴外部信号 & (UInt16)Math.Pow(2, 15)) == (UInt16)Math.Pow(2, 15)) //15X轴ERS信号读取,以2进制方式检测即2的15次方 { La15X轴INP信号.Text = "X轴INP信号ON"; La15X轴INP信号.ForeColor = Color.Blue; } else { La15X轴INP信号.Text = "15X轴INP信号OFF"; La15X轴INP信号.ForeColor = Color.Red; } if ((X轴外部信号 & (UInt16)Math.Pow(2, 16)) == (UInt16)Math.Pow(2, 16)) //16X轴INP信号读取,以2进制方式检测即2的16次方 { La16X轴DIR信号.Text = "X轴正方向DIR信号"; La16X轴DIR信号.ForeColor = Color.Black; } else { La16X轴DIR信号.Text = "X轴DIR负方向信号"; La16X轴DIR信号.ForeColor = Color.Crimson; } // '****************急停信号******** Dmc2610.d2610_config_EMG_PIN(0, 1, 0); // '设置急停信号有效后会立即停止所有轴,指定0卡号,1允许功能,1低电平有效 //'************SD减速信号********* if (CheckSD减速.Checked) { CheckSD减速.Text = "SD减速开"; for (ushort SD轴号 = 0; SD轴号 < 6; SD轴号++) //'设置SD/PCS1端SD信号有效的逻辑电平及其工作方式(轴号,允许/禁止功能1有为有效,0低电平,3锁存SD信号,并减速到起始速度后停止。 { Dmc2610.d2610_config_SD_PIN(SD轴号, 1, 0, 3); // '设置6轴SD信号1允许,0低电平有效,3锁存SD信号,并减速到起始速度后停止。 } } else { CheckSD减速.Text = "SD减速关"; } //'**************变终点信号******** if (CheckPCS变终.Checked) { int 目标位置 = int.Parse(text改变目标位置.Text); CheckPCS变终.Text = "PCS变终开"; for (ushort PCS轴号 = 0; PCS轴号 < 6; PCS轴号++) //'设置允许、禁止PCS外部信号在运动中改变目标位置 { Dmc2610.d2610_config_PCS_PIN(PCS轴号, 1, 1); // '1有效,0低电平有效 Dmc2610.d2610_reset_target_position(X轴, 目标位置); // '单轴相对运动中改变目标位置。 } } else { CheckPCS变终.Text = "PCS变终关"; } //'#############位置到位信号########### for (ushort INP轴号 = 0; INP轴号 < 6; INP轴号++) //'设置允许、禁止INP信号的有效电平。 { Dmc2610.d2610_config_INP_PIN(INP轴号, 1, 1); // '0为无效,1为有效,0为低电平,1为高电平 } //'##############“误差清除”######## for (ushort ERC轴号 = 0; ERC轴号 < 6; ERC轴号++) // '设置允许、禁止ERC信号的有效电平和输出方式 { Dmc2610.d2610_config_ERC_PIN(ERC轴号, 1, 1, 4, 3); //'1自动输出ERC信号,0低电平有效,7电平输出,3关断时间104MS } for (ushort ERC轴号1 = 0; ERC轴号1 < 6; ERC轴号1++) // '控制指定轴“误差清除”信号的输出 { Dmc2610.d2610_write_ERC_PIN(ERC轴号1, 1); // '0为复位ERC信号,1为输出ERC信号 } //'************ALM报警信号********** for (ushort ALM轴号 = 0; ALM轴号 < 6; ALM轴号++) //'设置ALM报警信号的有效电平及其工作方式 { Dmc2610.d2610_config_ALM_PIN(ALM轴号, 0, 0); // '0低电平有效,0立即停止电机. } // '*********编码器Z相信号使用*** for (ushort EZ轴号 = 0; EZ轴号 < 6; EZ轴号++) //'设置指定轴的EZ信号的有效电平及其工作方式 { Dmc2610.d2610_config_EZ_PIN(EZ轴号, 0, 0); // '0为低电平,0为EZ信号无效。 } //'***********编码器锁存信号***** for (ushort LTC轴号 = 0; LTC轴号 < 6; LTC轴号++) //'设置指定轴的锁存信号有效电平。 { Dmc2610.d2610_config_LTC_PIN(LTC轴号, 0, 7); } //'**********各轴电机EL限位信号********* for (ushort EL轴号 = 0; EL轴号 < 6; EL轴号++) // '设置EL限位信号的有效电平及制动方式 { Dmc2610.d2610_config_EL_MODE(EL轴号, 1); // '低电平有效,减速停止 } // '******ORG原点信号*********** //'设置ORG原点的有效电平,以及允许、禁止滤波功能 Dmc2610.d2610_set_HOME_pin_logic(X轴, 0, 1); // '0为代电平,1允许滤波 Dmc2610.d2610_set_HOME_pin_logic(Y轴, 0, 1); // '0为代电平,1允许滤波 //'***********伺服电机使能信号********* int X使能 = Dmc2610.d2610_read_SEVON_PIN(X轴); //'读取指定轴的伺服电机使能信号,高低电平信号 '0为低电平,1为高电平 Dmc2610.d2610_write_SEVON_PIN(X轴, 0); // '设置伺服电机使能信号'0为低电平有效,1为高电平有效。 switch (X使能) { case 0: LaX使能.Text = "X使能SEVON1低电平"; LaX使能.ForeColor = Color.Black; break; case 1: LaX使能.ForeColor = Color.Red; LaX使能.Text = "X使能SEVON1高电平"; break; default: break; } int Y使能 = Dmc2610.d2610_read_SEVON_PIN(Y轴); //'读取指定轴的伺服电机使能信号,高低电平信号 '0为低电平,1为高电平 Dmc2610.d2610_write_SEVON_PIN(Y轴, 1); // '设置伺服电机使能信号''0为低电平有效,1为高电平有效。 switch (Y使能) { case 0: LaY使能.Text = "Y使能SEVON2低电平"; LaY使能.ForeColor = Color.Blue; break; case 1: LaY使能.Text = "Y使能SEVON2高电平"; LaY使能.ForeColor = Color.Red; break; default: break; } // '***********“伺服准备好”******** int X准备RDY = Dmc2610.d2610_read_RDY_PIN(X轴); // '读取指定轴的“伺服准备好”的信号电平 switch (X准备RDY) // '0为低电平,1为高电平 { case 0: LaX准备RDY.Text = "X伺服准备好低电平"; LaX准备RDY.ForeColor = Color.Red; break; case 1: LaX准备RDY.Text = "X伺服准备好高电平"; LaX准备RDY.ForeColor = Color.Black; break; default: break; } int Y准备RDY = Dmc2610.d2610_read_RDY_PIN(Y轴); // '读取指定轴的“伺服准备好”的信号电平 switch (Y准备RDY) // '0为低电平,1为高电平 { case 0: LaY准备RDY.Text = "Y伺服准备好低电平"; LaY准备RDY.ForeColor = Color.Red; break; case 1: LaY准备RDY.Text = "Y伺服准备好高电平"; LaY准备RDY.ForeColor = Color.Blue; break; default: break; } // '********************位置比较********************** if (Check比较.Checked)//位置比较打开 { int CMP1比较数据 = Int32.Parse(Text比较数据.Text); Dmc2610.d2610_set_comparator_data(X轴, CMP1比较数据, 0); // '预置比较器数值 Dmc2610.d2610_set_comparator_data(Y轴, CMP1比较数据, 0); // '预置比较器数值 Dmc2610.d2610_config_comparator(X轴, 3, 0, 0, 0); // '设置指定轴比较器触发条件X轴;(0关闭,1等于,2小于,3大于);保留0;0:比较器与指令脉冲计数器比较1:比较器与指令脉冲比较;保留0; Dmc2610.d2610_config_comparator(Y轴, 3, 0, 0, 0); // '设置指定轴比较器触发条件 //***********X轴配置位置*************** Dmc2610.d2610_config_CMP_PIN(X轴, 1, 0, 1); // '配置位置比较输出端口的功能,每轴只有一个比较端口CMP,轴号,1为比较端输出,0为低电平。 int X轴比较 = Dmc2610.d2610_read_CMP_PIN(X轴); // '读取指定轴的位置比较输出端口的电平 switch (X轴比较) { case 0: LaX位置比较.Text = "X轴CMP低电平"; But紧急停止_Click(sender, e); break; case 1: LaX位置比较.Text = "X轴CMP高电平"; break; default: break; } //***********Y轴配置位置*************** Dmc2610.d2610_config_CMP_PIN(Y轴, 1, 0, 0); // '配置位置比较输出端口的功能,每轴只有一个比较端口CMP,轴号,1为比较端输出,1为高电平。 int Y轴比较 = Dmc2610.d2610_read_CMP_PIN(Y轴); // '读取指定轴的位置比较输出端口的电平 switch (Y轴比较) { case 0: LaY位置比较.Text = "Y轴CMP低电平"; break; case 1: LaY位置比较.Text = "Y轴CMP高电平"; Dmc2610.d2610_emg_stop();// '所有轴紧急停止 break; default: break; } } }