⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loop.c

📁 最先进的信号机程序,经过很多重要场合测试通过
💻 C
📖 第 1 页 / 共 2 页
字号:
 if(((c301&0x02)==0)&&((flag&0x04)==0)&&(loop_error[9]!=5)&&(loop_set[9]==1))loop_now[9]=1;
                                                                        else loop_now[9]=0;
 if(((c301&0x04)==0)&&((flag&0x04)==0)&&(loop_error[10]!=5)&&(loop_set[10]==1))loop_now[10]=1;
                                                                        else loop_now[10]=0;
 if(((c301&0x08)==0)&&((flag&0x04)==0)&&(loop_error[11]!=5)&&(loop_set[11]==1))loop_now[11]=1;
                                                                        else loop_now[11]=0;
 if(((c301&0x10)==0)&&((flag&0x08)==0)&&(loop_error[12]!=5)&&(loop_set[12]==1))loop_now[12]=1;
                                                                        else loop_now[12]=0;
 if(((c301&0x20)==0)&&((flag&0x08)==0)&&(loop_error[13]!=5)&&(loop_set[13]==1))loop_now[13]=1;
                                                                        else loop_now[13]=0;
 if(((c301&0x40)==0)&&((flag&0x08)==0)&&(loop_error[14]!=5)&&(loop_set[14]==1))loop_now[14]=1;
                                                                        else loop_now[14]=0;
 if(((c301&0x80)==0)&&((flag&0x08)==0)&&(loop_error[15]!=5)&&(loop_set[15]==1))loop_now[15]=1;
                                                                        else loop_now[15]=0;
 if(((c380&0x01)==5)&&((flag&0x10)==0)&&(loop_error[16]!=5)&&(loop_set[16]==1))loop_now[16]=1;
                                                                        else loop_now[16]=0;
 if(((c380&0x02)==0)&&((flag&0x10)==0)&&(loop_error[17]!=5)&&(loop_set[17]==1))loop_now[17]=1;
                                                                        else loop_now[17]=0;
 if(((c380&0x04)==0)&&((flag&0x10)==0)&&(loop_error[18]!=5)&&(loop_set[18]==1))loop_now[18]=1;
                                                                        else loop_now[18]=0;
 if(((c380&0x08)==0)&&((flag&0x10)==0)&&(loop_error[19]!=5)&&(loop_set[19]==1))loop_now[19]=1;
                                                                        else loop_now[19]=0;
 if(((c380&0x10)==0)&&((flag&0x20)==0)&&(loop_error[20]!=5)&&(loop_set[20]==1))loop_now[20]=1;
                                                                        else loop_now[20]=0;
 if(((c380&0x20)==0)&&((flag&0x20)==0)&&(loop_error[21]!=5)&&(loop_set[21]==1))loop_now[21]=1;
                                                                        else loop_now[21]=0;
 if(((c380&0x40)==0)&&((flag&0x20)==0)&&(loop_error[22]!=5)&&(loop_set[22]==1))loop_now[22]=1;
                                                                        else loop_now[22]=0;
 if(((c380&0x80)==0)&&((flag&0x20)==0)&&(loop_error[23]!=5)&&(loop_set[23]==1))loop_now[23]=1;
                                                                        else loop_now[23]=0;
 if(((c381&0x01)==0)&&((flag&0x40)==0)&&(loop_error[24]!=5)&&(loop_set[24]==1))loop_now[24]=1;
                                                                        else loop_now[24]=0;
 if(((c381&0x02)==0)&&((flag&0x40)==0)&&(loop_error[25]!=5)&&(loop_set[25]==1))loop_now[25]=1;
                                                                        else loop_now[25]=0;
 if(((c381&0x04)==0)&&((flag&0x40)==0)&&(loop_error[26]!=5)&&(loop_set[26]==1))loop_now[26]=1;
                                                                        else loop_now[26]=0;
 if(((c381&0x08)==0)&&((flag&0x40)==0)&&(loop_error[27]!=5)&&(loop_set[27]==1))loop_now[27]=1;
                                                                        else loop_now[27]=0;
 if(((c381&0x10)==0)&&((flag&0x80)==0)&&(loop_error[28]!=5)&&(loop_set[28]==1))loop_now[28]=1;
                                                                        else loop_now[28]=0;
 if(((c381&0x20)==0)&&((flag&0x80)==0)&&(loop_error[29]!=5)&&(loop_set[29]==1))loop_now[29]=1;
                                                                        else loop_now[29]=0;
 if(((c381&0x40)==0)&&((flag&0x80)==0)&&(loop_error[30]!=5)&&(loop_set[30]==1))loop_now[30]=1;
                                                                        else loop_now[30]=0;
 if(((c381&0x80)==0)&&((flag&0x80)==0)&&(loop_error[31]!=5)&&(loop_set[31]==1))loop_now[31]=1;
                                                                        else loop_now[31]=0;

 for(i=0; i<32; i++)
 {    if(loop_now[i]==1)
                       loop_ratio[i]++;          //占空比计算

      if((loop_now[i]==0)&&(loop_last[i]==1))     /*发生由高到低的跳变就认为车辆驶出线圈*/
      {
          //if((loop_now[5]==0)&&(loop_last[5]==1))
          if(sensor_car_flag){
                 forsense[i]++; /*感应用 */
                }
          else  {
                forsense[i] = 0;
                }
          send_liul[i]++;
          //  if(no_comm==1)  carcount[i]++; /*线路断 */
          //   else
          //{
             liul[i]++;     /*线路通 */
         // }
      }
 }
 for(i=0; i<32; i++)
 {
     loop_last[i]=loop_now[i];
 }

}
/*****************************************************************************************************/
//     判断感应时无车辆通过
/*****************************************************************************************************/
void phase_loop()
{
  uchar  i;
  uint toto;
  uint xdata temp;

  if(sensor_car_flag)
  {
     loopid=0;
     now_loop=0;
     loop_nowstep=0;
     for(i=0; i<16; i++)
     {
        toto = 0x0001;
        toto = toto<<i;
        temp = inuse_phase1[step_counter]&toto;  //当前阶段包含的相位
        
        if(temp!=0)
        {
           if((XBYTE[baseaddr_now_phasesch+2+18*i]&0x04)!=0x04)  //不是行人相位
           {
              loopid = XBYTE[baseaddr_now_phasesch+3+18*i];
              now_loop = loopid<<24;
              loopid = XBYTE[baseaddr_now_phasesch+4+18*i];
              loopid = loopid<<16;
              now_loop = now_loop|loopid;
              loopid = XBYTE[baseaddr_now_phasesch+5+18*i];
              loopid = loopid<<8;
              now_loop = now_loop|loopid;
              loopid = XBYTE[baseaddr_now_phasesch+6+18*i];
              now_loop = now_loop|loopid;           /*当前相位;第i相位包含的线圈*/
              loop_nowstep=loop_nowstep|now_loop;    //当前阶段包含的相位
           }
        }
     }
     for(i=0; i<32; i++)
     {
        loopid=0x00000001;
        loopidd=(loopid<<i);
        if((loop_nowstep&loopidd)==loopidd)
        {
            if(loop_error[i]==5)
               sensor_looperror_flag = 1;
            else
               {
                 carnumber=carnumber+forsense[i];  /*绿灯剩余时间低于单位步长时,相位所有的车流量*/
                 if(carnumber!=0){
                   carnumber=1;
                                  }
                 forsense[i]=0;
                }
        }
     }
  }
  else
  {  //非感应控制时相关变量清零
     carnumber=0;
     forsense[i]=0;
     lastcarnumber=0;
  }

}
void jude_looperror()
{
  uchar  i,flag1,flag2;
  uint toto;
  uint temp;
     flag1=0;
     flag2=0;
     loopid=0;
     now_loop=0;
     for(i=0; i<16; i++)
     {
        toto = 0x0001;
        toto = toto<<i;
        temp = inuse_phase1[step_counter]&toto;
        if(temp!=0)
        {
           if((XBYTE[baseaddr_now_phasesch+2+18*i]&0x04)!=0x04)
           {
              loopid = XBYTE[baseaddr_now_phasesch+3+18*i];
              now_loop = loopid<<24;
              loopid = XBYTE[baseaddr_now_phasesch+4+18*i];
              loopid = loopid<<16;
              now_loop = now_loop|loopid;
              loopid = XBYTE[baseaddr_now_phasesch+5+18*i];
              loopid = loopid<<8;
              now_loop = now_loop|loopid;
              loopid = XBYTE[baseaddr_now_phasesch+6+18*i];
              now_loop = now_loop|loopid;      /*当前阶段包含的线圈*/
           }
        }
     }
   temp=(now_loop>>16);
   if((temp&hpp)==temp)flag1=1;    //17-31线圈全部发生故障
                  else flag1=0;
   temp=now_loop;
   if((temp&lpp)==temp)flag2=1;    //1-16线圈全部发生故障
                  else flag2=0;
   if((flag1==1)&&(flag2==1))loop_error_flag=1;
                        else loop_error_flag=0;
   if(loop_error_flag==1)go++;
                    else go=0;
   if(go>250)go=250;
   if(((go==0x01)||(last_timeid!=timeid))&&((start_counter>=3))){
               abcd++;
               last_timeid=timeid;
               ask_sch();   //增加判断 时段条件
                }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -