📄 loop.c
字号:
// if((last_actlpp!=actlpp)||(last_acthpp!=acthpp)){
if(((last_actlpp&temp_lpp)!=last_actlpp)||((last_acthpp&temp_hpp)!=last_acthpp)){
if(start_counter>=3){
error_type=0x01;
save_to_error();
}
}
last_actlpp=((last_actlpp|temp_lpp)&temp_lpp);
last_acthpp=((last_acthpp|temp_hpp)&temp_hpp);
cs_dram=1;
c381=XBYTE[0XC381]; /*读线圈状态*/
c380=XBYTE[0XC380];
c301=XBYTE[0XC301];
c300=XBYTE[0XC300];
if(((c300&0x01)==0)&&((flag&0x01)==0)&&(loop_error[0]!=5)&&(loop_set[0]==1)){
loop_now[0]=1; /*有车 */
}else {
loop_now[0]=0;
}
if(((c300&0x02)==0)&&((flag&0x01)==0)&&(loop_error[1]!=5)&&(loop_set[1]==1))loop_now[1]=1;
else loop_now[1]=0;
if(((c300&0x04)==0)&&((flag&0x01)==0)&&(loop_error[2]!=5)&&(loop_set[2]==1))loop_now[2]=1;
else loop_now[2]=0;
if(((c300&0x08)==0)&&((flag&0x01)==0)&&(loop_error[3]!=5)&&(loop_set[3]==1))loop_now[3]=1;
else loop_now[3]=0;
if(((c300&0x10)==0)&&((flag&0x02)==0)&&(loop_error[4]!=5)&&(loop_set[4]==1))loop_now[4]=1;
else loop_now[4]=0;
if(((c300&0x20)==0)&&((flag&0x02)==0)&&(loop_error[5]!=5)&&(loop_set[5]==1))loop_now[5]=1;
else loop_now[5]=0;
if(((c300&0x40)==0)&&((flag&0x02)==0)&&(loop_error[6]!=5)&&(loop_set[6]==1))loop_now[6]=1;
else loop_now[6]=0;
if(((c300&0x80)==0)&&((flag&0x02)==0)&&(loop_error[7]!=5)&&(loop_set[7]==1))loop_now[7]=1;
else loop_now[7]=0;
if(((c301&0x01)==0)&&((flag&0x04)==0)&&(loop_error[8]!=5)&&(loop_set[8]==1))loop_now[8]=1;
else loop_now[8]=0;
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_phase[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_phase[step_counter]&toto;
if(temp!=0){
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; /*当前阶段包含的线圈*/
}
}
if(((now_loop&((hpp<<16)|lpp))!=0)&&(now_loop!=0))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)&&(start_counter>7)||(last_timeid!=timeid)){
// last_timeid=timeid;
ask_sch(); //增加判断 时段条件
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -