コード例 #1
0
        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;
                }
            }
        }