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

/**************进料检测********************/
/***缺料无限次循环 手动退出 超时报警*******/
              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,一经查实,立即删除!

相关文章

android native开发

framwork 一些重要的流程都是要放到native中做的 原因也很简单&#xff0c;效率&#xff0c;尤其是针对性能优化方面的&#xff0c;更离不开native开发 目前针对native开发也回顾下&#xff0c;总结下经验 1 jni开发有两种&#xff0c;app端一般是静态模式&#xff0c;要有jav…

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…

qwen-vl微调

1.数据格式转换 模版格式&#xff1a; [{"id": "identity_0","conversations": [{"from": "user","value": "你好"},{"from": "assistant","value": "我是Qwen-V…

C语言共享内存

windows下实现共享内存 进程A写入共享内存&#xff1a; #include <stdio.h> #include <windows.h>int main() {// 创建或打开共享内存对象HANDLE hMapFile CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,4096, // 内存大小&#xff0c;这里为4…

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

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

在Ubuntu 24.04 LTS (Noble Numbat)上搭建Kubernetes集群

准备工作 系统准备 主机和IP地址准备 ​编辑安装步骤 安装前准备 关闭防火墙 设置服务器时区 关闭 swap 分区 关闭SELinux 配置hosts配置文件 转发 IPv4 并让 iptables 看到桥接流量 每台机器设置hostname 安装容器运行时 安装Kubernetes 配置并安装apt包 初始…

Android Studio学习笔记——数据库存储

Android Studio学习笔记——数据库存储 6.1持久化技术简介6.2 文件存储将数据存储到文件中从文件中读取数据 6.3 SharedPreferences存储6.3.1 将数据存储到是SharedPreferences中6.3.2 从SharedPreferences中读取数据6.3.3 实现记住密码功能 6.4 SQLite数据库存储6.4.1 创建数据…

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

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

03_led_horse_run_v1 跑马灯

03_led_horse_run_v1 在Verilog中实现跑马灯通常涉及到使用一个计数器来控制LED灯的亮灭顺序。 跑马灯是一种常见的电子显示方式&#xff0c;它通过控制多个LED灯的顺序点亮&#xff0c;形成一种动态的视觉效果&#xff0c;看起来就像灯在“跑”一样。 更新 使用dip开关控制…

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

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

描述Nacos中服务发现的流程。

Nacos中服务发现的流程解析 在微服务的架构体系中&#xff0c;服务发现是一个至关重要的组成部分。它解决了服务提供者和消费者之间如何动态发现对方地址的问题&#xff0c;使得微服务之间的调用更加灵活和高效。在众多服务发现组件中&#xff0c;Nacos以其易用性、高性能和丰…

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

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

本周10个Github有趣项目WebLlama等

10个Github有趣的项目、工具和库 1、WebLlama Llama-3 网络Web代理&#xff0c;这是使用 Llama 3 构建的最强大的代理&#xff0c;通过聊天对话实现Web导航&#xff0c;可以按照说明浏览网页并与您交谈。 在Llama-3-8B-Web性能上超过了 GPT-4V&#xff08;*零样本&#xff09;…

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

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

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台-源码下载与项目配置

基于.NET Framework 4.8 开发的深度学习模型部署测试平台,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等应用场景,同时支持图像与视频检测。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runtime以及OpenCV DNN,支持CPU、IGP…

用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;…