微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 传感器 > 大型货车超载超速实时检测系统

大型货车超载超速实时检测系统

时间:03-18 来源:3721RD 点击:

count[i]=count[i]|((*P_IOA_Data&(0x0001<<i))>> count[i]=count[i]|((*P_IOA_Data&(0x0001<<i))>>i); //串行接收一位

if(n==1&&count[i]) //若第一位数据为1,则以负数处理

count[i]=0xffffffff;

}

}

}//for(n=1;n<=25;n++) //25个脉冲

for(i=0;i<4;i++)

weight[i][k]=count[i];

k++;

for(i=0;i<4;i++)

count[i]=0;

*P_Watchdog_Clear = C_WDTCLR;

}//while(k<=4),只读取五个数据,放在weight数组中

for(n=0;n<4;n++)

{

for(i=2;i<8;i++)

weightA[n]=weight[n][i]+weightA[n];

weightA[n]=weightA[n]/7-198;

}

for(n=0;n<4;n++)

weightS=weightS+weightA[n];

weightS=weightS/sin(A);//用倾角传感器测量角度

*P_IOA_Data=0x0002; //设置PD_SCK为高,60um,HX711和和压力传感器进入断电状态

return weightA;

}

(2)主程序相关程序流程图

运动前超载处理流程图如图4.2:

相关说明:

标志K

K= -1 静止且不超载

K=0 初次静止超载

K=1 运动超载

K=2 停车后超载

countR 取数据次数

countW, 超载次数

v 车速度

m 车载重量

tR 车启动时间

tS 停车时间

图4.2 运动前超载处理流程图

运动停车后超载处理程序图如图4.3:

运动中超载处理流程图如图4.4:

相关说明:

标志K

K= -1 静止且不超载

K=0 初次静止超载

K=1 运动超载

K=2 停车后超载

countR 取数据次数

countW, 超载次数

v 车速度

m 车载重量

tR 车启动时间

tS 停车时间

图4.3 运动后停车超载处理程序图

图4.4 运动中超载处理流程图小车运动前超载处理程序如下[25]

Void BeforeTheStateDidNotExercise(float* parameter,float weight,int *countR,int *countW)

{

(*countR)++;

if(*countR>=17)

*countR=0;

if(weight>M)

{

(*countW)++;

if(*countW>=12)

{

*parameter=0;

*countW=0;

overloadAlarm();//启动报警

}

}

}

运动中超载处理程序:

void campaignStatus(float* parameter,float weight,int *countR,int *countW,clock_t *start)

{

if(* parameter!=1)

(*countR)++;

momentNow();//记录当前时间

*start=clock();

t1recordTheCurrenttime();//记录当前时间

if(weight>M)

(*countW)++;

if(*countR>=100)

{

if( *countW>=70)

{

overloadAlarm();//启动报警

* parameter=1;

}

*countR=0;

*countW=0;

}

}

运动后停车超载处理:

void afterStoppingState(float* parameter,float weight,int *countR,int *countW,clock_t *finish)

{

(*countR)++;

//记录当前时间t2

*finish=clock();

if(weight>M)

(*countW)++;

if(*countR>=100)

{

if(*countW<30)

{

*parameter=-1;

sendRelevantInformationToTheHost(countW,countR);// 发送相关信息到主机

}

*countR=0;

*countW=0;

}

}

//根据速度和参数K和parameter确定车体状态

void carStatus(float speed,float* parameter,float weight,int *countR,int *countW)

{

//超载持续时间

clock_t start, finish;

double duration;

if(speed==0)

{

if(*parameter<=0)

BeforeTheStateDidNotExercise(parameter,weight,countR,countW);

else

afterStoppingState(parameter,weight,countR,countW,clock_t &finish);

}

else

campaignStatus(parameter,weight,countR,countW,clock_t &start);

//超重持续时间

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top