四工位自动攻丝机自动控制

/**************进料检测********************/
/***缺料无限次循环 手动退出 超时报警*******/
              void check_Pon()
              {
              zstatus=0;                         //缺料报警计数器归零
              Signauto=1;                        //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=1;                          //进料检测
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//
              while(Signauto)                    /**/
              {
               OutPut2=0;                        //闸门3开
               RstKey();
               for(;kcounter<10;)                //按键循环10
               {
                if(!IntPut2)                     //按键低电平
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut2)               //按键高电平
                {
                RstKey();                        //按键计数器 状态计数器归零
                }
                delay1(2);                       //2023
                if(kstatus>=8)                   /*按键状态标志大于等于8为有效值*/
                {     
                OutPut2=1;                       //闸门3关
                Signauto=0;                      /*行程输入信号连续检测到3次Signauto=0退出循环*/
                }
                if(RUN_Flag==0)                  //手动标志
                {
                Signauto=0;                      //Signauto=0退出循环
                break;
                }
                zstatus++;                          //缺料报警计数器加一
                delay10ms(5);
                if(zstatus>val9)                 //250秒 打油次数改缺料计时
                {  
                delay10ms(50);
                OutPut20=~OutPut20;              //缺料退刀及润滑退未到位报警
                delay10ms(50);
                OutPut20=~OutPut20;              //缺料退刀及润滑退未到位报警
                delay10ms(50);
                OutPut20=~OutPut20;              //缺料报警
                RstKey();
                }
               }
              }
              }    
/*************电机一前进限位检测*************/
              void MotorAForward()
              {    
               Signauto=1;                       //行程开关循环标志
               while(Signauto)                   /**/
               {                                 //MotoraRun_Flag
                RstKey();                          //IntPut9
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut9)                    //进一停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut9)              //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotoraRun_Flag=0;              //关闭电机A自动运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机二前进限位检测********************/
              void MotorBForward()
              {
               Signauto=1;                       //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //IntPut9
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut10)                   //进二停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut10)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotorbRun_Flag=0;               //关闭电机A自动运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机三前进限位检测********************/
              void MotorCForward()
              {
              Signauto=1;                        //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //IntPut11
                for(;kcounter<5;)                //按键循环11
                {
                 if(!IntPut11)                   //进三停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut11)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotorcRun_Flag=0;               //关闭电机A自动运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机四前进限位检测********************/
              void MotorDForward()
              {
              Signauto=1;                        //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //IntPut9
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut12)                   //进四停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut12)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotordRun_Flag=0;               //关闭电机四运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机一后退限位检测*************/
              void MotorABackInt()
              {
               Signauto=1;                       //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut13)                   //退一停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut13)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotoraRun_Flag=0;               //关闭电机A自动运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机二后退限位检测*************/
              void MotorBBackInt()
              {
              Signauto=1;                        //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut14)                   //退二停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut14)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotorbRun_Flag=0;               //关闭电机二运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机三后退限位检测*************/
              void MotorCBackInt()
              {
               Signauto=1;                       //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut15)                   //退三停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut15)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotorcRun_Flag=0;               //关闭电机三运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/*************电机四后退限位检测*************/
              void MotorDBackInt()
              {
               Signauto=1;                       //行程开关循环标志
               while(Signauto)                   /**/
               {
                RstKey();                          //
                for(;kcounter<5;)                //按键循环10
                {
                 if(!IntPut16)                   //退四停止
                 {
                 LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!IntPut16)             //按键高电平
                 {
                 RstKey() ;                      //按键计数器 状态计数器归零
                 }
                 if(kstatus>=3)                  /*按键状态标志大于等于8为有效值*/
                 {
                 MotordRun_Flag=0;               //关闭电机四运行标志
                 Signauto=0;                     //行程开关循环标志    
                 }
                }
               }
              }
/****按开启电机数检测输入信号关闭电机****/
/***关闭报警启用标志检测到手动退出循环***/              
              void CheckMotorA()
              {
              RstKey();
               for(;kcounter<5;)                 //按键循环10
               {
                if(!IntPut9)                     //进一停止
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut9)               //按键高电平
                {
                RstKey() ;                       //按键计数器 状态计数器归零
                }
                if(kstatus>=3)                   /*按键状态标志大于等于8为有效值*/
                {
                Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;                             //
               }
              }
/***检测电机A电机B限位信号   各自到位关闭***/    
/***低电平状态计数器   循环计数器加一*******/
/***高电平状态计数器循环计数器归零 死循环***/
/***关闭报警启用标志检测到手动退出循环***/
//FLAG_M=1;                       //闸门一开    
//printf("r0.val=%d\xff\xff\xff",FLAG_M);//r0.val=1      
              void CheckMotorB()
              {
               FLAG_M=1;
               printf("r0.val=%d\xff\xff\xff",FLAG_M);//r0.val=1     单选框
               RstKey_1();
               RstKey_2();
               Forward1=1;
               Forward2=1;
               while(Forward1==1||Forward2==1)     //
               {
                if(!IntPut9)                     //进一停止
                {
                LowVoltKey_1();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut9)               //按键高电平
                {
                RstKey_1() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_1>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward1=0;                         //关电机A运行标志
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机A
                if(!IntPut10)                    //进二停止
                {
                LowVoltKey_2();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut10)              //按键高电平
                {
                RstKey_2() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_2>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward2=0;                         //关电机B运行标志
                MotorbAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机B
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;
               }
               Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
               MotoraAuto_Flag=0;                //关闭电机A自动运行标志
               MotorbAuto_Flag=0;                //关闭电机B自动运行标志
              }
/***检测电机ABC限位信号      各自到位关闭***/    
/***低电平状态计数器   循环计数器加一*******/
/***高电平状态计数器循环计数器归零 死循环***/
/***关闭报警启用标志检测到手动退出循环***/              
              void CheckMotorC()
              {
               RstKey_1();
               RstKey_2();
               RstKey_3();
               Forward1=1;
               Forward2=1;
               Forward3=1;
               while(Forward1==1||Forward2==1||Forward3==1)
               {
                if(!IntPut9)                     //进一停止
                {
                LowVoltKey_1();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut9)               //按键高电平
                {
                RstKey_1() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_1>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward1=0;                         //关电机A运行标志
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机A
                if(!IntPut10)                    //进二停止
                {
                LowVoltKey_2();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut10)              //按键高电平
                {
                RstKey_2() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_2>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward2=0;                         //关电机B运行标志
                MotorbAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机B
                if(!IntPut11)                    //进三停止
                {
                LowVoltKey_3();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut11)              //按键高电平
                {
                RstKey_3() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_3>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward3=0;                         //关电机C运行标志
                MotorcAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机C              
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;
               }
               Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
               MotoraAuto_Flag=0;                //关闭电机A自动运行标志
               MotorbAuto_Flag=0;                //关闭电机B自动运行标志
               MotorcAuto_Flag=0;                //关闭电机C自动运行标志
              }
/***检测电机ABCD  限位信号   各自到位关闭***/    
/***低电平状态计数器   循环计数器加一*******/
/***高电平状态计数器循环计数器归零 死循环***/
/***关闭报警启用标志检测到手动退出循环***/              
              void CheckMotorD()
              {
               RstKey_1();
               RstKey_2();
               RstKey_3();
               RstKey_4();
               Forward1=1;
               Forward2=1;
               Forward3=1;
               Forward4=1;
               while(Forward1==1||Forward2==1||Forward3==1||Forward4)
               {
                if(!IntPut9)                     //进一停止
                {
                LowVoltKey_1();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut9)               //按键高电平
                {
                RstKey_1() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_1>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward1=0;                         //关电机A运行标志
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机A
                if(!IntPut10)                    //进二停止
                {
                LowVoltKey_2();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut10)              //按键高电平
                {
                RstKey_2() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_2>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward2=0;                         //关电机B运行标志
                MotorbAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机B
                if(!IntPut11)                    //进三停止
                {
                LowVoltKey_3();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut11)              //按键高电平
                {
                RstKey_3() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_3>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward3=0;                         //关电机C运行标志
                MotorcAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机C
                if(!IntPut12)                    //进四停止
                {
                LowVoltKey_4();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut12)              //按键高电平
                {
                RstKey_4() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_4>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Forward4=0;                         //关电机D运行标志
                MotordAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机d
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;
               }
               Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
               MotoraAuto_Flag=0;                //关闭电机A自动运行标志
               MotorbAuto_Flag=0;                //关闭电机B自动运行标志
               MotorcAuto_Flag=0;                //关闭电机C自动运行标志
               MotordAuto_Flag=0;                //关闭电机D自动运行标志
              }    
/***************检测电机A工位***********************/
/****************到位关闭 手动退出******************/
              void MotoraBack()
              {
               RstKey();
               for(;kcounter<5;)                 //按键循环10
               {
                if(!IntPut13)                    //退一停止
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut13)              //按键高电平
                {
                RstKey() ;                       //按键计数器 状态计数器归零
                }
                if(kstatus>=3)                   /*按键状态标志大于等于8为有效值*/
                {
                Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;                             //
               }
              }
/*************检测电机AB工位**********************/
/********先到先关 全关及手动退出******************/
              void MotorbBack()
              {
               RstKey_1();
               RstKey_2();
               Back1=1;
               Back2=1;
               while(Back1==1||Back2==1)     //
               {
                if(!IntPut13)                    //进一停止
                {
                LowVoltKey_1();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut13)              //按键高电平
                {
                RstKey_1() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_1>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back1=0;
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机A
                if(!IntPut14)                    //进二停止
                {
                LowVoltKey_2();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut14)              //按键高电平
                {
                RstKey_2() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_2>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back2=0;
                MotorbAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机B
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;
               }
               Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
               MotoraAuto_Flag=0;                //关闭电机A自动运行标志
               MotorbAuto_Flag=0;                //关闭电机B自动运行标志
              }
/*************检测电机ABC工位*********************/
/********先到先关 全关及手动退出******************/
              void MotorcBack()
              {
               RstKey_1();
               RstKey_2();
               RstKey_3();
               Back1=1;
               Back2=1;
               Back3=1;
               while(Back1==1||Back2==1||Back3==1)
               {
                if(!IntPut13)                    //进一停止
                {
                LowVoltKey_1();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut13)              //按键高电平
                {
                RstKey_1() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_1>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back1=0;
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机A
                if(!IntPut14)                    //进二停止
                {
                LowVoltKey_2();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut14)              //按键高电平
                {
                RstKey_2() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_2>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back2=0;
                MotorbAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机B
                if(!IntPut15)                    //进三停止
                {
                LowVoltKey_3();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut15)              //按键高电平
                {
                RstKey_3() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_3>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back3=0;
                MotorcAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机C              
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;
               }
               Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
               MotoraAuto_Flag=0;                //关闭电机A自动运行标志
               MotorbAuto_Flag=0;                //关闭电机B自动运行标志
               MotorcAuto_Flag=0;                //关闭电机C自动运行标志
              }
/*************检测电机ABCD工位********************/
/********先到先关 全关及手动退出******************/
              void MotordBack()
              {
               RstKey_1();
               RstKey_2();
               RstKey_3();
               RstKey_4();
               Back1=1;
               Back2=1;
               Back3=1;
               Back4=1;
               while(Back1==1||Back2==1||Back3==1||Back4)
               {
                if(!IntPut13)                    //退一停止
                {
                LowVoltKey_1();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut13)              //按键高电平
                {
                RstKey_1() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_1>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back1=0;
                MotoraAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机A
                if(!IntPut14)                    //退二停止
                {
                LowVoltKey_2();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut14)              //按键高电平
                {
                RstKey_2() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_2>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back2=0;
                MotorbAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机B
                if(!IntPut15)                    //退三停止
                {
                LowVoltKey_3();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut15)              //按键高电平
                {
                RstKey_3() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_3>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back3=0;
                MotorcAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机C
                if(!IntPut16)                    //退四停止
                {
                LowVoltKey_4();                  //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut16)              //按键高电平
                {
                RstKey_4() ;                     //按键计数器 状态计数器归零
                }
                if(kstatus_4>=3)                 /*按键状态标志大于等于8为有效值*/
                {
                Back4=0;
                MotordAuto_Flag=0;               //关闭电机A自动运行标志    
                }
//电机d
                if(RUN_Flag==0)                     //自动运行标志为0 退出循环
                break;
               }
               Time_Flag=0;                       //关闭攻丝超时报警标志由定时器计数
               MotoraAuto_Flag=0;                //关闭电机A自动运行标志
               MotorbAuto_Flag=0;                //关闭电机B自动运行标志
               MotorcAuto_Flag=0;                //关闭电机C自动运行标志
               MotordAuto_Flag=0;                //关闭电机D自动运行标志
              }    
/**************按计数器顺序开电机1234**************/                  
              void MotorOpen()
              {
               OutPut3=0;                         //机座进
               OutPut5=0;                        //闸门1开
               OutPut2=0;                        //闸门3开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=10;                        //机座检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               delay10ms(10);                    
//判断计数器 0开第一只电机1开第一第二只电机2第一第二第三只电机大于2开四只电机
               Time_Flag=1;                       //启动攻丝超时报警标志由定时器计数
               Time_Warning=val11;                  //报警缓冲定时器比较值
               if(Counter==0)                     //第一件
               {
               Delay_100ms(val4);                     //    3 20
               DIR0=1;                             //电机A正转
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               CheckMotorA();                     //检测电机A正转攻丝位置检测
               delay10ms(10);                     //
               DIR0=0;                             //电机A 反转方向
               Time_Flag=1;                       //启动攻丝超时报警标志由定时器计数
               Time_Warning=val13;                  //报警缓冲定时器比较值
               FLAG_M=11;                        //电机退
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotoraBack();                     //检测电机A反转
               }
               else if(Counter==1)               //第二件
               {
               Delay_100ms(val4);                     //    3 20
               DIR0=1;                             //电机A正转
               DIR1=1;                             //电机B正转
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotorbAuto_Flag=1;                //电机B自动运行标志置一
               Delay_100ms(5);                     //    3 20
               CheckMotorB();                     //检测电机AB攻丝位置
               delay10ms(10);
               DIR0=0;                             //电机A反转
               DIR1=0;
               Time_Flag=1;                       //启动攻丝超时报警标志由定时器计数
               Time_Warning=val13;                  //报警缓冲定时器比较值
               FLAG_M=11;                        //电机退
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotorbAuto_Flag=1;                //电机B自动运行标志置一
               MotorbBack();                     //检测电机A反转
               }
               else if(Counter==2)               //第三件
               {
               Delay_100ms(val4);                     //    3 20
               DIR0=1;                             //电机A正转
               DIR1=1;                             //电机B正转
               DIR2=0;                             //电机C正转
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotorbAuto_Flag=1;                //电机B自动运行标志置一
               MotorcAuto_Flag=1;                //电机C自动运行标志置一
               Delay_100ms(5);                     //    3 20
               CheckMotorC();                     //检测电机ABC攻丝位置
               delay10ms(10);
               DIR0=0;                             //电机A反转
               DIR1=0;                             //电机B反转
               DIR2=1;                             //电机C反转
               Time_Flag=1;                       //启动攻丝超时报警标志由定时器计数
               Time_Warning=val13;                  //报警缓冲定时器比较值
               FLAG_M=11;                        //电机退
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotorbAuto_Flag=1;                //电机B自动运行标志置一
               MotorcAuto_Flag=1;                //电机C自动运行标志置一
               MotorcBack();                     //检测电机A反转
               }
               else if(Counter>2)                 //大于第三件
               {
               Voice();                          //提示声
               DIR0=1;                             //电机A正转
               DIR1=1;                             //电机B正转
               DIR2=0;                             //电机C正转
               DIR3=1;                             //电机D正转
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotorbAuto_Flag=1;                //电机B自动运行标志置一
               MotorcAuto_Flag=1;                //电机C自动运行标志置一
               MotordAuto_Flag=1;                //电机D自动运行标志置一
               delay10ms(val4);
               CheckMotorD();                     //检测电机ABCD攻丝位置
               DIR0=0;                             //电机A反转
               DIR1=0;                             //电机B反转
               DIR2=1;                             //电机C反转
               DIR3=0;                             //电机D反转
               Time_Flag=1;                       //启动攻丝超时报警标志由定时器计数
               Time_Warning=val13;                  //报警缓冲定时器比较值
               FLAG_M=11;                        //电机退
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               MotoraAuto_Flag=1;                //电机A自动运行标志置一
               MotorbAuto_Flag=1;                //电机B自动运行标志置一
               MotorcAuto_Flag=1;                //电机C自动运行标志置一
               MotordAuto_Flag=1;                //电机D自动运行标志置一
               MotordBack();                     //检测电机A反转
               }
//判断计数器 选择电机后退反转机座后退产量计数器加一    
               MotorBack();                          //退丝 2024 3 19
               OutPut3=1;                        //机座后退
               OutPut5=1;                        //闸门1关
               OutPut2=1;                        //闸门3关
              }    
/***进料检测无限循环,计数十次退出子程序********/
              void Check_Stop()
              {
               RstKey();
               for(;kcounter<10;)       //检测按键 kcounter小于10循环
               {
                if(!IntPut6)               //工位零点信号按键低电平
                {
                 kcounter++;
                 kstatus++;              //按键低电平 计数器加一状态标志加一
                }
                else if(~!IntPut6)         //按键高电平
                {
                 kcounter=0;             //按键计数器加一 状态标志归零
                 kstatus=0;              //按键低电平 计数器加一状态标志加一                       
                }
               }
              }                                                              
/*------------自动运行----------------------*/    
              void Run_start()                     //
              {
//工位一      
               do   //自动循环起点
               {
                Pump_Counter++;                     //油泵打油计数器加一
                lub_Counter++;                     //润滑计数器加一
                if(Pump_Counter>=val10)
                {
                 Pump_Counter=0;                 //
                 Voice();                        //提示声
                 OutPut21=0;
                 delay5ms(val6);                 //间隙时间
                 OutPut21=1;
                }
                if(lub_Counter>=val9)
                {
                 lub_Counter=0;                 //
                 Voice();                        //提示声
                 OutPut18=0;
                 delay5ms(val6);                 //间隙时间
                 OutPut18=1;
                }
//油泵上油
                RstKey();
//缺料报警检测
                check_Pon();                     //进料检测
                OutPut20=1;                         //关 报警
                if(RUN_Flag==1)                     //自动运行标志为一 运行进料程序
                {
                OutPut10=1;                         //夹具二关
                OutPut15=0;                      //出料口吹气一开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                FLAG_M=12;                       //闸门一开
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                OutPut5=0;                       //闸门一开
                OutPut16=0;                      //吹气二开     进料
                delay10ms(50);
                OutPut15=1;                      //出料口吹气一关
                OutPut5=1;                       //闸门一关
                OutPut4=0;                         //过桥开
                FLAG_M=14;                       //
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//过桥开
                delay10ms(30);                     //
                OutPut6=0;                       //闸门二开
                Check_Stop();                     //进料到位检测    2024 4 9
                Delay_100ms(val15);                 //过桥开延时2024 4 10
                OutPut16=1;                      //吹气二关     进料  2024 3 24
                OutPut6=1;                       //闸门二关
                OutPut4=1;                         //过桥关
                OutPut9=0;                          //夹具一开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                FLAG_M=4;                        //夹具一开
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                }
                else
                break;
//进料结束 工位旋转 机座推进 电机自动攻丝标志置一
                if(RUN_Flag==1)                     //自动运行标志为一 运行
                {
                 RstKey();
//电机座润滑退检测
                 zstatus=0;                         //缺料报警计数器归零
                 Signauto=1;                     //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                 FLAG_M=3;                       //机座检测
                 printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                 ReadIntPut();                      //检测机座 润滑 过桥位置
                 OutPut20=1;                     //关 报警
                 OutPut1=0;                      //工位旋转 外部中断0关电机
                 OutPut17=0;                     //工位旋转 外部中断0关电机
                 Signauto=1;                     /*行程输入信号检测标志无输入为1,永久循环*/
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                 FLAG_M=2;                       //旋转检测
                 printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                 RstKey();
                 Time_Error=0;                     //定时器触发超时报警计数器归零
                 Time_Flag=1;                       //启动工位旋转报警标志由定时器计数
                 Time_Warning=val12;              //报警缓冲定时器比较值
//工位旋转            
                 do                              /*行程输入信号检测标志无输入为1,永久循环*/
                 {
                  delay10ms(10);                 //
                  if(Error_Flag==1)                 //定时器计数超设置值
                  {
                  OutPut20=~OutPut20;              //旋转超时报警
                  }
                  if(RUN_Flag==0)                //手动标志
                  {
                  Error_Flag=0;                  //关闭工位旋转报警标志  
                  Signauto=0;                    //Signauto=0退出循环
                  break;
                  }
                 }     
                 while(Signauto);                //外部中断0检测到输入信号 退出循环
//工位二机座进 电机运行
                 OutPut11=1;                     //夹具三关     2024 3 27
                 MotorOpen();                     //攻丝进退
                 Counter++;                         //产量计数器加1
                 printf("n0.val=%d\xff\xff\xff",Counter);     //
                }
//检测机座后退
//缺料报警检测
                check_Pon();                     //进料检测
                OutPut20=1;                         //关 报警
                if(RUN_Flag==1)                     //
                {
                OutPut15=0;                      //出料口吹气一开  2024 3 24
            //    OutPut11=1;                         //夹具三关     2024 3 27
                OutPut5=0;                       //闸门一开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                FLAG_M=12;                       //
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//闸门一开
                OutPut16=0;                      //吹气进料二开 2024 3 24
                delay10ms(50);
                OutPut15=1;                      //出料口吹气一关2024  3 24
                OutPut5=1;                       //闸门一关
                OutPut4=0;                         //过桥开
                FLAG_M=14;                       //
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//过桥开
                delay10ms(30);                     //
                OutPut6=0;                       //闸门二开
                Check_Stop();                     //进料到位检测    2024 4 9
                Delay_100ms(val15);                 //过桥开延时2024 4 10
                OutPut16=1;                      //吹气二关     进料  2024 3 24
                OutPut6=1;                       //闸门二关
                OutPut4=1;                         //过桥关
                OutPut10=0;                      //夹具二开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                FLAG_M=5;                        //夹具二开
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                }
                else
                break;
//进料结束 工位旋转 机座推进 电机自动攻丝标志置一
                if(RUN_Flag==1)                     //自动运行标志为一 运行
                {
                RstKey();
//电机座润滑退检测
                zstatus=0;                         //缺料报警计数器归零
                Signauto=1;                      //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                FLAG_M=3;                        //机座检测
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                ReadIntPut();                      //检测机座 润滑 过桥位置
                OutPut20=1;                         //关 报警
                OutPut1=0;                       //工位旋转 外部中断0关电机
                OutPut17=0;                      //工位旋转 外部中断0关电机
                Signauto=1;                         /*行程输入信号检测标志无输入为1,永久循环*/
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
                FLAG_M=2;                        //旋转检测
                printf("va1.val=%d\xff\xff\xff",FLAG_M);//
                RstKey();
                Time_Error=0;                     //定时器触发超时报警计数器归零
                Time_Flag=1;                       //启动工位旋转报警标志由定时器计数
                Time_Warning=val12;              //报警缓冲定时器比较值
//工位旋转            
                do                               /*行程输入信号检测标志无输入为1,永久循环*/
                {
                 delay10ms(10);                     //
                 if(Error_Flag==1)                 //定时器计数超设置值
                 {
                 OutPut20=~OutPut20;              //旋转超时报警
                 }
                 if(RUN_Flag==0)                 //手动标志
                 {
                 Error_Flag=0;                   //关闭工位旋转报警标志  
                 Signauto=0;                     //Signauto=0退出循环
                 break;
                 }
                }     
               while(Signauto);                  //外部中断0检测到输入信号 退出循环
//工位三
//机座进 电机运行
              OutPut12=1;                         //夹具四关 2024 3 27
              MotorOpen();                         //攻丝进退
              Counter++;                         //产量计数器加1
              printf("n0.val=%d\xff\xff\xff",Counter);     //
              }
//缺料报警检测
              check_Pon();                         //进料检测
              OutPut20=1;                         //关 报警
              if(RUN_Flag==1)                     //2 10
              {
              OutPut15=0;                        //出料口吹气一开     2024 3 24
        //      OutPut12=1;                         //夹具四关
              OutPut5=0;                         //闸门一开
              OutPut16=0;                        //吹气二开    进料 2024 3 24
              delay10ms(50);
              OutPut15=1;                        //出料口吹气一关2024 324
              OutPut5=1;                         //闸门一关
              OutPut4=0;                         //过桥开
              FLAG_M=14;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//过桥开
              delay10ms(30);                     //
              OutPut6=0;                         //闸门二开
              Check_Stop();                         //进料到位检测    2024 4 9
              Delay_100ms(val15);                 //过桥开延时2024 4 10
              OutPut16=1;                        //吹气二关     进料  2024 3 24
              OutPut6=1;                         //闸门二关
              OutPut4=1;                         //过桥关
              OutPut11=0;                          //夹具三开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=6;                          //夹具三开
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//
              RstKey();
              }
              else
              break;
//电机座润滑退检测
              //进料结束 工位旋转 机座推进 电机自动攻丝标志置一
              if(RUN_Flag==1)                     //自动运行标志为一 运行
              {
               RstKey();
//电机座润滑退检测
               zstatus=0;                         //缺料报警计数器归零
               Signauto=1;                        //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=3;                         //机座检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               ReadIntPut();                      //检测机座 润滑 过桥位置
               OutPut20=1;                         //关 报警
               OutPut1=0;                         //工位旋转 外部中断0关电机
               OutPut17=0;                        //工位旋转 外部中断0关电机
               Signauto=1;                         /*行程输入信号检测标志无输入为1,永久循环*/
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=2;                          //旋转检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               RstKey();
               Time_Error=0;                     //定时器触发超时报警计数器归零
               Time_Flag=1;                       //启动工位旋转报警标志由定时器计数
               Time_Warning=val12;                  //报警缓冲定时器比较值
//工位旋转            
               do                                 /*行程输入信号检测标志无输入为1,永久循环*/
               {
                delay10ms(10);                     //
                if(Error_Flag==1)                 //定时器计数超设置值
                {
                 OutPut20=~OutPut20;              //旋转超时报警
                }
                if(RUN_Flag==0)                  //手动标志
                {
                Error_Flag=0;                    //关闭工位旋转报警标志  
                Signauto=0;                      //Signauto=0退出循环
                break;
                }
               }     
              while(Signauto);                   //外部中断0检测到输入信号 退出循环
//机座进 电机运行
               OutPut13=1;                          //夹具五关    2024 3 27
               MotorOpen();                         //攻丝进退
               Counter++;                         //产量计数器加1
               printf("n0.val=%d\xff\xff\xff",Counter);     //
              }
//工位四
//缺料报警检测
              check_Pon();                         //进料检测
              OutPut20=1;                         //关 报警
              if(RUN_Flag==1)                     //
              {
              OutPut15=0;                        //出料口吹气一开  2024 3 24
        //      OutPut13=1;                          //夹具五关
              OutPut5=0;                         //闸门一开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=12;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//闸门一开
              OutPut16=0;                        //吹气二开     进料 2024 3 24
              delay10ms(50);
              OutPut15=1;                        //出料口吹气一关 2024 324
              OutPut5=1;                         //闸门一关
              OutPut4=0;                         //过桥开
              FLAG_M=14;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//过桥开
              delay10ms(30);                     //
              OutPut6=0;                         //闸门二开
              Check_Stop();                         //进料到位检测    2024 4 9
              Delay_100ms(val15);                 //过桥开延时2024 4 10
              OutPut16=1;                        //吹气二关     进料  2024 3 24
              OutPut6=1;                         //闸门二关
              OutPut4=1;                         //过桥关
              OutPut12=0;                          //夹具四开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=7;                          //夹具四开
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//
              RstKey();
              }
              else
              break;
//电机座润滑退检测
              //进料结束 工位旋转 机座推进 电机自动攻丝标志置一
              if(RUN_Flag==1)                     //自动运行标志为一 运行
              {
               RstKey();
//电机座润滑退检测
               zstatus=0;                         //缺料报警计数器归零
               Signauto=1;                        //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=3;                         //机座检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               ReadIntPut();                      //检测机座 润滑 过桥位置
               OutPut20=1;                         //关 报警
               OutPut1=0;                        //工位旋转 外部中断0关电机
               OutPut17=0;                       //工位旋转 外部中断0关电机
               Signauto=1;                         /*行程输入信号检测标志无输入为1,永久循环*/
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=2;                          //旋转检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               RstKey();
               Time_Error=0;                     //定时器触发超时报警计数器归零
               Time_Flag=1;                       //启动工位旋转报警标志由定时器计数
               Time_Warning=val12;                  //报警缓冲定时器比较值
//工位旋转            
               do                                /*行程输入信号检测标志无输入为1,永久循环*/
               {
                delay10ms(10);                     //
                if(Error_Flag==1)                 //定时器计数超设置值
                {
                 OutPut20=~OutPut20;              //旋转超时报警
                }
                if(RUN_Flag==0)                  //手动标志
                {
                Error_Flag=0;                    //关闭工位旋转报警标志  
                Signauto=0;                      //Signauto=0退出循环
                break;
                }
               }     
              while(Signauto);                   //外部中断0检测到输入信号 退出循环
//工位五
//机座进 电机运行
               OutPut14=1;                          //夹具六关2024 3 27
               MotorOpen();                         //攻丝进退
               Counter++;                         //产量计数器加1
               printf("n0.val=%d\xff\xff\xff",Counter);     //
              }
//缺料报警检测
              check_Pon();                         //进料检测
              OutPut20=1;                         //关 报警
              if(RUN_Flag==1)                     //
              {
              OutPut15=0;                        //出料口吹气一开2024 3 24
        //      OutPut14=1;                          //夹具六关
              OutPut5=0;                         //闸门一开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=12;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//闸门一开
              OutPut16=0;                        //吹气二开    进料2024 3 24
              delay10ms(50);
              OutPut15=1;                        //出料口吹气一关2024 324
              OutPut5=1;                         //闸门一关
              OutPut4=0;                         //过桥开
              FLAG_M=14;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//过桥开
              delay10ms(30);                     //
              OutPut6=0;                         //闸门二开
              Check_Stop();                         //进料到位检测    2024 4 9
              Delay_100ms(val15);                 //过桥开延时2024 4 10
              OutPut16=1;                        //吹气二关     进料  2024 3 24
              OutPut6=1;                         //闸门二关
              OutPut4=1;                         //过桥关
              OutPut13=0;                          //夹具五开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=8;                          //夹具五开
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//
              }
              else
              break;
              //进料结束 工位旋转 机座推进 电机自动攻丝标志置一
              if(RUN_Flag==1)                     //自动运行标志为一 运行
              {
               RstKey();
//电机座润滑退检测
               zstatus=0;                         //缺料报警计数器归零
               Signauto=1;                        //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=3;                         //机座检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               ReadIntPut();                      //检测机座 润滑 过桥位置
               OutPut20=1;                         //关 报警
               OutPut1=0;                         //工位旋转 外部中断0关电机
               OutPut17=0;                        //工位旋转 外部中断0关电机
               Signauto=1;                         /*行程输入信号检测标志无输入为1,永久循环*/
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=2;                          //旋转检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               RstKey();
               Time_Error=0;                     //定时器触发超时报警计数器归零
               Time_Flag=1;                       //启动工位旋转报警标志由定时器计数
               Time_Warning=val12;                  //报警缓冲定时器比较值
//工位旋转            
               do                                 /*行程输入信号检测标志无输入为1,永久循环*/
               {
                delay10ms(10);                     //
                if(Error_Flag==1)                 //定时器计数超设置值
                {
                 OutPut20=~OutPut20;              //旋转超时报警
                }
                if(RUN_Flag==0)                  //手动标志
                {
                Error_Flag=0;                    //关闭工位旋转报警标志  
                Signauto=0;                      //Signauto=0退出循环
                break;
                }
               }     
              while(Signauto);                   //外部中断0检测到输入信号 退出循环
//机座进 电机运行
              OutPut9=1;                          //夹具一关2024 3 27
              MotorOpen();                     //攻丝进退
              Counter++;                         //产量计数器加1
              printf("n0.val=%d\xff\xff\xff",Counter);     //
              }
//工位六
//缺料报警检测
              check_Pon();                         //进料检测
              OutPut20=1;                         //关 报警
              if(RUN_Flag==1)                     //
              {
              OutPut15=0;                        //出料口吹气一开 2024 3 24
        //      OutPut9=1;                          //夹具一关
              OutPut5=0;                         //闸门一开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=12;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//闸门一开
              OutPut16=0;                        //吹气二开     进料 2024 3 24
              delay10ms(50);
              OutPut15=1;                        //出料口吹气一关2024 324
              OutPut5=1;                         //闸门一关
              OutPut4=0;                         //过桥开
              FLAG_M=14;                         //
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//过桥开
              delay10ms(30);                     //
              OutPut6=0;                         //闸门二开
              Check_Stop();                         //进料到位检测    2024 4 9
              Delay_100ms(val15);                 //过桥开延时2024 4 10
              OutPut16=1;                        //吹气二关     进料  2024 3 24
              OutPut6=1;                         //闸门二关
              OutPut4=1;                         //过桥关
              OutPut14=0;                          //夹具六开
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
              FLAG_M=9;                          //夹具六开
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//
              }
              else
              break;
             //进料结束 工位旋转 机座推进 电机自动攻丝标志置一
              if(RUN_Flag==1)                     //自动运行标志为一 运行
              {
               RstKey();
//电机座润滑退检测
               zstatus=0;                         //缺料报警计数器归零
               Signauto=1;                        //行程开关循环标志
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=3;                         //机座检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               ReadIntPut();                      //检测机座 润滑 过桥位置
               OutPut20=1;                         //关 报警
               OutPut1=0;                         //工位旋转 外部中断0关电机
               OutPut17=0;                        //工位旋转 外部中断0关电机
               Signauto=1;                         /*行程输入信号检测标志无输入为1,永久循环*/
//1进料检测2工位旋转3机座检测4夹具一开5夹具二开6夹具三开7夹具四开8夹具五开9夹具六开10电机进11电机退12闸门一开13闸门二开14过桥开
               FLAG_M=2;                          //旋转检测
               printf("va1.val=%d\xff\xff\xff",FLAG_M);//
               RstKey();
               Time_Error=0;                     //定时器触发超时报警计数器归零
               Time_Flag=1;                       //启动工位旋转报警标志由定时器计数
               Time_Warning=val12;                  //报警缓冲定时器比较值
//工位旋转            
               do                                 /*行程输入信号检测标志无输入为1,永久循环*/
               {
                delay10ms(10);                     //
                if(Error_Flag==1)                 //定时器计数超设置值
                {
                 OutPut20=~OutPut20;              //旋转超时报警
                }
                if(RUN_Flag==0)                  //手动标志
                {
                Error_Flag=0;                    //关闭工位旋转报警标志  
                Signauto=0;                      //Signauto=0退出循环
                break;
                }
               }     
               while(Signauto);                   //外部中断0检测到输入信号 退出循环
//机座进 电机运行
               OutPut10=1;                         //夹具二关2024 3 27
               MotorOpen();                         //攻丝进退
               Counter++;                         //产量计数器加1
               printf("n0.val=%d\xff\xff\xff",Counter);     //
              }
              } //自动循环讫点
              while(RUN_Flag);
              rstio();
              delay10ms(100);
              if(Receive_Flag==1)
               {
                i=0;                             //数组计数器归零
                OutPut22=1;                      //帧数据指示灯接收一帧开启处理完关闭
                Receive_Flag=0;
                Data_Set( );                     //自动运行监测到数据设置    
               }
//15待机
              FLAG_M=17;                         //待机
              printf("va1.val=%d\xff\xff\xff",FLAG_M);//
              OutPut20=1;                          //复位报警
              }
/*------------初始化串口-波特率38400----------*/
              void InitUart(void )
              {
              SCON=0x50;                         //8位数据,可变波特率
              AUXR|=0x01;                         //串口1选择定时器2为波特率发生器
              AUXR|=0x04;                         //定时器时钟1T模式
              T2L=0xB8;                             //设置定时初始值
              T2H=0xFF;                             //设置定时初始值
              AUXR|=0x10;                         //定时器2开始计时
              TI=1;                                 //
              ES=1;                              //38400
              EA=1;                                 //
              }                        
/*------------定时器1中断----------------------*/
/***攻丝超时,旋转超时,退刀超时,润滑超时***/
/***val11,val12,val13,val14***/
/***Point_Flag工位零点校正完成标志***/
/***OutTime1工位零点校正完成指示灯***/
/***Time_Flag报警启动计时标志***/
/***Time_Flag报警启动计时标志***/
/***启动报警计数器Time_Error**/
              void tm1_isr() interrupt 3
              {
              uchar  valt;                         //
              uint timea,timeb,timec,timed;         //缓冲
              valt++;                             //
               if(valt>=100)                     //定时器计数器
               {                                 //
               valt=0;                             //
               if(Point_Flag==1)                 //工位零点校正完成定时器指示灯闪烁
               OutTime1=~OutTime1;               //将测试口取反
                if(Time_Flag==1)                 //
                {                                 //
                Time_Error++;                     //超时报警计数器加一
                if(Time_Error>=Time_Warning&&Error_Flag==1)//超时报警计数器大于等于设置值
                 {
                 Time_Error=0;                     //超时报警计数器归零
                 Error_Flag=1;                     //超时报警使能开主程序喜欢间隔报警
                 }
                }
               }
                if(MotoraRun_Flag==1)             //电机A为1启动X电机
                {
                 timea++;                         //
                 if(timea>=val16)                 //
                 {    
                 timea=0;    
                 CP0=~CP0;                       //
                 }    
                }
//工位一手动
               if(MotorbRun_Flag==1)             //电机B为1启动X电机
                {
                 timeb++;
                 if(timeb>=val16)
                 {    
                 timeb=0;    
                 CP1=~CP1;                       //
                 }    
                }
//工位二手动
                if(MotorcRun_Flag==1)            //电机C为1启动X电机
                {
                 timec++;
                 if(timec>=val16)
                 {    
                   timec=0;    
                  CP2=~CP2;                      //
                  }    
                }
//工位三手动
                if(MotordRun_Flag==1)            //电机D为1启动X电机
                {
                timed++;
                 if(timed>=val16)
                 {    
                 timed=0;    
                 CP3=~CP3;                       //
                 }    
                }
//工位四手动    
              }
/***定时器0中断电机手动控制*******************/        
/***timea,timeb,timec,timed对应四只电机*******/                    
              void timer0() interrupt 1
              {
               uint timea,timeb,timec,timed;     //缓冲
               uint ss;
//自动运行电机标志为一与限位等于一
               if(MotoraAuto_Flag==1)//电机A为1启动X电机
                {
                 timea++;
                 if(timea>=val1)                 //自动电机速度
                 {    
                 timea=0;    
                 CP0=~CP0;                       //
                 }    
                }
//工位一自动
               if(MotorbAuto_Flag==1)//电机C为1启动X电机
                {
                 timeb++;
                 if(timeb>=val1)                 //自动电机速度
                 {    
                 timeb=0;    
                 CP1=~CP1;                       //
                 }    
                }
//工位二自动
               if(MotorcAuto_Flag==1)//电机B为1启动X电机
                {
                 timec++;
                 if(timec>=val17)                 //自动电机速度
                 {    
                   timec=0;    
                  CP2=~CP2;                      //
                  }    
                }
//工位三自动   电机3  val17;
               if(MotordAuto_Flag==1)//电机D为1启动X电机       &&IntPut12==1
                {
                timed++;
                 if(timed>=val1)                 //自动电机速度
                 {    
                 timed=0;    
                 CP3=~CP3;                       //
                 }    
                }
//工位四自动
               ss++;
                if(ss>=1000)
                {    
                ss=0;    
                OutTime0=~OutTime0;              //将测试口取反
                }    
               }
/*-----------定时器0初始化-----------------------*/                                
              void Timer0_Init(void)             //100微秒毫秒@11.0592MHz
              {
              AUXR |= 0x80;                         //定时器时钟1T模式
              TMOD &= 0xF0;                         //设置定时器模式
              TL0 = 0x23;                         //设置定时初始?
              TH0 = 0xFF;                         //设置定时初始值
              TF0 = 0;                             //清除TF0标志
              TR0 = 1;                             //定时器0开始计时
              ET0 = 1;                           //使能定时器0中断
                }
/*-----------定时器1初始化-----------------------*/                                
              void Timer1_Init(void)             //100微秒毫秒@11.0592MHz
              {            
               TL1=0xAE;                         //设置定时初始值
               TH1=0xFB;                         //设置定时初始值
               TF1=0;                             //清除TF1标志
               TR1=1;                             //定时器1开始计时
               ET1=1;                            //使能定时器1中断
              }
/*--------UART中断服务程序---串口4接收触摸屏数据---*/
              void Uart() interrupt 4 using 1
              {
               if(RI)
               {
                a[i]=SBUF;                       //数组下标位置的数据等于SBUF
                i++;
                if(i==9)                         //触摸屏结束码    FRAMELENGTH
                {
                 Receive_Flag=1;                 //接收数据标志置一
                 OutPut22=0;                     //帧数据指示灯接收一帧开启处理完关闭
                 if(a[0]==0XF0&&a[1]==0XF1)      //手动
                 {
                  i=0;                           //数组计数器归零
                  Receive_Flag=0;                 //串口接收标志归零
                  OutPut7=1;                     //自动
                  OutPut8=0;                      //手动
                  RUN_Flag=0;                    //自动运行标志
                  Time_Flag=0;                   //关闭攻丝超时报警标志由定时器计数
                  Error_Flag=0;                     //关闭超时报警使能
                  MotoraAuto_Flag=0;             //关闭电机A自动运行标志
                  MotorbAuto_Flag=0;             //关闭电机B自动运行标志
                  MotorcAuto_Flag=0;             //关闭电机C自动运行标志
                  MotordAuto_Flag=0;             //关闭电机D自动运行标志
                  }
                 else if(a[0]==0XF0&&a[1]==0XF2) //关闭报警标志
                 {
                  Error_Flag=0;                     //定时器报警关闭标志串口接收到报警关闭数据 关闭报警输出
                  i=0;                           //数组计数器归零
                  Receive_Flag=0;                 //串口接收标志归零
                  }
                 }
                RI=0;                            //
               }
              }            
/*************工位电机外部中断0信号************/
/*************下降沿触发多次检测关电机*********/                            
              void exint0() interrupt 0          //INT0中断入口
              {
               Rst_Key();
               for(;k_counter<5;)                //按键循环5次
               {
                if(!EX_INT0)                      //按键低电平
                {
                Low_VoltKey();
                }
                else if(~!EX_INT0)               //按键高电平
                {
                High_VoltKey();
                }
               }
               if(k_status>=4)                   /*按键状态标志大于等于3为有效值*/
                {                                /*循环检测 */
                Signauto=0;
                OutPut1=1;                         //旋转停止
                OutPut17=1;
                }
              }                                                       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18_Scala面向对象编程trait

文章目录 trait1.定义trait2.向类中混入特质2.1没有父类2.2有父类 3.动态混入3.1动态混入查询功能到公司业务中 4.父类&#xff0c;子类&#xff0c;特质初始化优先级5.Scala功能执行顺序6.常用API trait –特质的学习需要类比Java中的接口&#xff0c;源码编译之后就是interf…

练习题(2024/5/3)

1对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中…

(论文阅读-优化器)A Cost Model for SPARK SQL

目录 Abstract 1 Introduction 2 Related Work 3 Background and Spark Basics 4 Cost Model Basic Bricks 4.1 Cluster Abastraction and Cost Model Parameters 4.2 Read 4.3 Write 4.4 Shuffle Read 4.5 Broadcast 5 Modeling GPSJ Queries 5.1 Statistics and S…

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路&#xff1a; 首先将水平的控件 水平布局 &#xff0c;然后相对垂直的控件 垂直布局 &#xff0c;哪怕是底下的groupBox也需要和里面的内容 水平布局&#xff0c;然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…

【白话机器学习系列】白话特征向量

白话特征向量 一个方阵 A A A 与列向量 v v v 的乘积会生成一个新的列向量。这个新向量通常与原向量有着不同的方向&#xff0c;矩阵在这里代表一个线性变换。然而&#xff0c;某些向量会保持其原始方向。我们称这种向量为矩阵 A A A 的特征向量&#xff08;eigenvector&…

一键 input 苹果 OpenELM,零门槛 Llama 3 教程,40+ 优质模型/数据集/教程,建议收藏!...

现在 AI 行业什么最火&#xff1f; 「大模型」一定仍然排在前三甲的位置。 自从 2022 年底 ChatGPT 面世以来&#xff0c;大模型在各行各业已经带来了太多的惊喜&#xff0c;应用场景愈发丰富&#xff0c;同时也带动了相关底层技术的普及与普适化。尤其是在开源模型繁荣发展之下…

C#核心之面向对象-多态

面向对象-多态 文章目录 1、Vob1、多态的概念2、多态的实现 2、抽象类和抽象方法1、抽象类2、抽象方法 3、接口1、接口的概念2、接口的声明3、接口的使用4、接口可以继承接口5、显示实现接口总结思考 电脑使用USB接口读取数据 4、密封方法 1、Vob 1、多态的概念 多态&#xf…

为什么选择OpenNJet?OpenNJet下一代云原生应用引擎!OpenNJet开发实战!

前言导读 在当今这个数字化转型加速的时代&#xff0c;云原生技术已成为企业和开发者构建现代应用的首选路径。OpenNJet作为新一代云原生应用引擎&#xff0c;在国内外技术社区受到了广泛关注。 本文将深入探讨OpenNJet的特点、优势以及在开发实践中的应用&#xff0c;带您全…

用python画一个正八边形

1 问题 使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个边长100的正八边形。 2 方法 1、利用for循环解决如何画出图形中相同的八条边的问题。 2、再利用turtle.fd()函数和turtle.seth()函数画出完整的图形。 代码清单 1 import turtleturtle.pensize(2)d0for i in r…

【系统架构师】-选择题(十三)

1、在某企业的营销管理系统设计阶段&#xff0c;属性"员工"在考勤管理子系统中被称为"员工"&#xff0c;而在档案管理子系统中被称为"职工"&#xff0c;这类冲突称为&#xff08; 命名冲突&#xff09;。 同一个实体在同系统中存在不同的命名&am…

智慧旅游引领未来风尚,科技助力旅行更精彩:科技的力量推动旅游业创新发展,为旅行者带来更加便捷、高效和智能的旅行服务

目录 一、引言 二、智慧旅游的概念与特点 &#xff08;一&#xff09;智慧旅游的概念 &#xff08;二&#xff09;智慧旅游的特点 三、科技推动旅游业创新发展 &#xff08;一&#xff09;大数据技术的应用 &#xff08;二&#xff09;人工智能技术的应用 &#xff08;…

【计算机科学速成课】笔记二

笔记一 文章目录 7.CPU阶段一&#xff1a;取指令阶段阶段二&#xff1a;解码阶段阶段三&#xff1a;执行阶段 8.指令和程序9.高级CPU设计——流水线与缓存10.早期编程方式11.编程语言发展史12.编程原理13.算法入门14.数据结构15.阿兰图灵 7.CPU CPU也叫中央处理器&#xff0c;…

在R的 RGui中,使用devtools 安装trajeR

创建于&#xff1a;2024.5.5 文章目录 1. 报错信息2. 尝试使用指定的清华镜像&#xff0c;没有解决3. 找到原因&#xff1a;官网把包删除了4. 尝试从网上下载&#xff0c;然后安装。没有成功5. 使用devtools安装5.1 尝试直接安装&#xff1a;install.packages("devtools&q…

关于YOLO8学习(四)模型转换为ncnn

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 简介 本文将会讲解: (1)如何通过PyCharm,进行pt模型的转换,最后输出一个适合手机端使用的模型 开发环境 win10、python 3.11…

C语言写一个终端进度条

C语言写一个终端进度条 这个功能挺简单的&#xff0c;主要有以下两点&#xff1a; 如何获取终端宽度如何让字符在原地闪烁 如何获取终端宽度 这里用到了设备控制接口函数ioctl()&#xff0c;下面简单的介绍一下这个函数的用法&#xff1a; ioctl是一个在Unix和类Unix系统中…

零基础学习数据库SQL语句之查询表中数据的DQL语句

是用来查询数据库表的记录的语句 在SQL语句中占有90%以上 也是最为复杂的操作 最为繁琐的操作 DQL语句很重要很重要 初始化数据库和表 USE dduo;create table tb_emp(id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment…

glob库和split函数的用法

dir为一个文件夹&#xff0c;存放着三张jpg格式的图像 import glob dir rD:\My Data\Figure image_DCE_files glob.glob(f{dir}/*.jpg) image_DCE_files glob库可以获取文件夹下为个文件的绝对路径,会保存到一个列表中 获取的路径可以拆分为列表 image_DCE_files[1].split(…

HTTP常见面试题(一)

3.1 HTTP 常见面试题 HTTP基本概念 HTTP 是超文本传输协议&#xff0c;也就是HyperText Transfer Protocol。 HTTP 的名字「超文本协议传输」&#xff0c;它可以拆成三个部分&#xff1a; 超文本 传输 协议 HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语…

Lora训练笔记1——快速上手

准备工具 AKI大佬的整合包&#xff0c;一键解压即可。 度盘链接 提取码&#xff1a;p8uy 图片预处理 图片预处理&#xff1a;以一定规则裁剪原始的训练素材图片&#xff0c;并进行打标处理。 新建两个文件夹 input&#xff1a;存放原始图片的文件夹 preprocess-output:…

西湖大学赵世钰老师【强化学习的数学原理】学习笔记-1、0节

强化学习的数学原理是由西湖大学赵世钰老师带来的关于RL理论方面的详细课程&#xff0c;本课程深入浅出地介绍了RL的基础原理&#xff0c;前置技能只需要基础的编程能力、概率论以及一部分的高等数学&#xff0c;你听完之后会在大脑里面清晰的勾勒出RL公式推导链条中的每一个部…