📄 do_other.c
字号:
&&((gPublic_Flag&ACCOFF_OK_F_1)==0)
&&(gCycle_Send_Status!=WATCH_DATA)
&&(gCycle_Send_Status!=ALARM_DATA) )
{
gPublic_Flag|=ACC_OFF_UP_F_1;
ACC_OFF_Timer=0;
Circle_Data_TCP(VEHICLE_RUNDATA_UP,0);
gInternal_Flag|=SEND_CIRCLE_F_1;
Send_COM1_String( (unsigned char *)OFF_ACC,sizeof(OFF_ACC) );
Judge_SMS_Way();
}
//2,ACC持续关闭时间达到满足改变上传行车轨迹的时间间隔
else if( (ACC_OFF_Timer<ACC_LASTOFF_TIME)
&&(ACC_OFF_Timer>=ACC_CHANGEOFF_TIME)
&&(gPublic_Flag&ACC_OFF_UP_F_1 )
&&((gPublic_Flag&ACCOFF_TRACK_F_1)==0)
&&((gPublic_Flag&ACCOFF_OK_F_1)==0)
&&(gCycle_Send_Status!=WATCH_DATA)
&&(gCycle_Send_Status!=ALARM_DATA) )
{
if( (gCycle_TCP<ACCOFF_TRACK_TIME)
&&(gCycle_TCP>0) )
{
gCycle_TCP=ACCOFF_TRACK_TIME;
}
gPublic_Flag|=ACCOFF_TRACK_F_1;
}
//3,持续规定的一段时间后,则需要关闭模块电源
else if( (ACC_OFF_Timer>ACC_LASTOFF_TIME)
&&(gPublic_Flag&ACC_OFF_UP_F_1)
&&(gPublic_Flag&ACCOFF_TRACK_F_1 )
&&((gPublic_Flag&ACCOFF_OK_F_1)==0)
&&(gCycle_Send_Status!=WATCH_DATA)
&&(gCycle_Send_Status!=ALARM_DATA) )
{
P6OUT|=POWER_ON_OFF;
gPublic_Flag|=ACCOFF_OK_F_1;
gReset_M22_On_Setp=0;
gGeneral_Flag&=~RESET_GSM_ON_F_1;
gM22_Status=GSM_WORK;
gGeneral_Flag&=~LAND_TCP_SUCCESS_F_1;
gGSM_Oper_Type=GSM_PHONE;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
gPhone_Step=0;gTimer_GSM_AT=0;
}
//3,关闭模块电源
else if( gPublic_Flag&ACCOFF_OK_F_1 )
{
P6OUT|=POWER_ON_OFF;
gGeneral_Flag&=~OFF_M22_F_1;
gGeneral_Flag&=~OFF_GPS_F_1;
gM22_GSM_ECHO_Timer=0;
gFF0D_Receive_Timer=0;
gGPS_No_Output_Timer=0;
gGPS_Invaild_Timer=0;
gGeneral_Flag&=~RESET_GSM_ON_F_1;
}
}
/********************************************************\
A8;判断是否可以执行制动或者解除制动操作,制动方面的信息不存储在Flash中
\********************************************************/
//1,是否允许执行制动操作
/*
if( (gM22_Stop_Status==ALLOW_SET_STOP)&&(gSTOP_Speed_Count>=5) )
{
gM22_Stop_Status=ASK_SET_STOP;
P6OUT|=STOP_Q1;
P6OUT|=STOP_Q2;
P6OUT|=STOP_Q1;
P6OUT|=STOP_Q2;
gOK_Count=0;gError_Count=0;
}
//2,是否允许执行解除制动操作
else if(gM22_Stop_Status==ALLOW_FREE_STOP)
{
gM22_Stop_Status=ASK_FREE_STOP;
P6OUT&=~STOP_Q1;
P6OUT&=~STOP_Q2;
P6OUT&=~STOP_Q1;
P6OUT&=~STOP_Q2;
gOK_Count=0;gError_Count=0;
}
*/
/********************************************************\
A9; 制动结果的检测和判断
\********************************************************/
if(gCheck_Stop_Timer>500)
{
gCheck_Stop_Timer=0;
/*
if( (gM22_Stop_Status==ASK_SET_STOP) //执行制动动作的状态下
||(gM22_Stop_Status==STOP_STATUS) ) //已经制动的状态下
{
if(P2IN&CHECK_ON_OFF) gOK_Count++;
else gError_Count++;
if( (gOK_Count+gError_Count)>60)
{
if(gOK_Count>45)
{
gStatus1_Flag|=STOP_SUCCESS_F_1;
gM22_Stop_Status=STOP_STATUS;
}
else
{
gStatus1_Flag&=~STOP_SUCCESS_F_1;
gM22_Stop_Status=NOP_READY;
}
gOK_Count=0;gError_Count=0;
}
}
else if( (gM22_Stop_Status==ASK_FREE_STOP) //执行解除制动动作的状态下
||(gM22_Stop_Status==NOP_READY) ) //已经确定解除制动的状态下
{
if( (P2IN&CHECK_ON_OFF)==0 ) gOK_Count++;
else gError_Count++;
if( (gOK_Count+gError_Count)>60)
{
if(gOK_Count>45)
{
gStatus1_Flag&=~STOP_SUCCESS_F_1;
gM22_Stop_Status=NOP_READY;
}
else
{
gStatus1_Flag|=STOP_SUCCESS_F_1;
gM22_Stop_Status=STOP_STATUS;
}
gOK_Count=0;gError_Count=0;
}
}
*/
}
/********************************************************\
A12;判断周期数据发送的状态(这里是处理如果有行车轨迹,后来又有了类似报警,后来报警解除后的行车轨迹的继续上传的操作)
\********************************************************/
if( (gGeneral_Flag&TCP_IP_VALID_1)&&((gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0) )
{
if( (gCycle_TCP>0)&&(gCycle_Send_Status==NOP_DATA) )
{
gCycle_Send_Status=TRACK_DATA_TIME;gCircle_Timer=0;
gInternal_Flag&=~SEND_CIRCLE_F_1;gGSM_Work_Count=0;gCheck_Data=0;
}
else if( (gCycle_Distance>0)
&&(gCycle_Send_Status==NOP_DATA) )
{
gCycle_Send_Status=TRACK_DATA_DISTANCE;gCircle_Timer=0;
gInternal_Flag&=~SEND_CIRCLE_F_1;gGSM_Work_Count=0;gCheck_Data=0;
}
}
else
{
if( (gCycle_GSM>0)
&&(gCycle_Send_Status==NOP_DATA) )
{
gCycle_Send_Status=TRACK_DATA_TIME;gCircle_Timer=0;
gInternal_Flag&=~SEND_CIRCLE_F_1;gGSM_Work_Count=0;gCheck_Data=0;
}
else if( (gCycle_Distance>0)
&&(gCycle_Send_Status==NOP_DATA) )
{
gCycle_Send_Status=TRACK_DATA_DISTANCE;gCircle_Timer=0;
gInternal_Flag&=~SEND_CIRCLE_F_1;gGSM_Work_Count=0;gCheck_Data=0;
}
}
/********************************************************\
A13;在TCP在线的工作方式下,如果检测到有来电(通过管脚电平变化的检测)
\********************************************************/
if(gM22_Status==TCP_ONLINE_WORK)
{
if(Ring_Test_Step==0)
{
if( (P1IN&RING_TEST)==0 )
{
Ring_Test_Step=1;
gRing_Test_Timer=0;
}
}
else if(Ring_Test_Step==1)
{
if(P1IN&RING_TEST)
{
Ring_Test_Step=0;
gRing_Test_Timer=0;
}
else if(gRing_Test_Timer>RING_TEST_TIME)
{
if( (gGeneral_Flag&TCP_PHONE_F_1)==0 )
{
if((gGeneral_Flag&RING_F_1)==0) gHangUp_Timer=0;
gGeneral_Flag|=TCP_PHONE_F_1;
gStatus1_Flag|=PHONE_ONLINE_F_1;
gGeneral_Flag|=RING_F_1;
}
Ring_Test_Step=0;gRing_Test_Timer=0;
}
}
else
{
Ring_Test_Step=0;
gRing_Test_Timer=0;
}
}
/********************************************************\
A14;如果判断接收驾驶员信息未成功,则需要周期向记录仪发送查询驾驶员信息。
直到设置成功为止
这里取消GPS主动查询驾驶员信息的程序操作
\********************************************************/
/*
//1,判断是否需要查询记录仪的驾驶员信息数据
if( (gGet_Driver_Info_Count>GET_DRIVER_INFO_TIME)
&&(gDriver_Info==READY_READ_DRIVER_INFO)
&&(gStatus==NORMAL_TYPE) )
{
Send_COM1_Byte(gStatus);
Check_Record = gStatus;
Send_COM1_Byte(0xAA);
Check_Record ^= 0xAA;
Send_COM1_Byte(0x75);
Check_Record ^= 0x75;
Send_COM1_Byte(K_GET_DRIVEDATA_E_ECHO);
Check_Record ^= K_GET_DRIVEDATA_E_ECHO;
Send_COM1_Byte(0x00);
Check_Record ^= 0;
Send_COM1_Byte(0x00);
Check_Record ^= 0;
Send_COM1_Byte(0x00);
Check_Record ^= 0;
Send_COM1_Byte(Check_Record); //校验核
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a); //包尾
gGet_Driver_Info_Count=0;
gDriver_Info=WAIT_RETURN_DRIVER_INFO;
}
//2,等待查询记录仪的驾驶员信息返回失败,则需要从新开始计算时间等下一个周期的查询
else if( (gDriver_Info==WAIT_RETURN_DRIVER_INFO)
&&(gGet_Driver_Info_Count>WAIT_RETURNINFO_TIME) )
{
gGet_Driver_Info_Count=0;
gDriver_Info=READY_READ_DRIVER_INFO;
}
*/
//3,判断是否满足需要想显示终端发送驾驶员信息的数据条件
/*
if( (gGet_Driver_Info_Count>READY_SENDINFO_TIME)
&&(gDriver_Info==GET_DRIVER_INFO)
&&(gInternal_Flag&DISP_ON_F_1) )
{
//发送记录仪的驾驶员当前信息给显示屏
if(gDisp_Buffer_Point+37<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=37;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=35;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_IC_INFO_DOWN;
gDisp_Buffer_Point++;
SRAM_Init();
for(i=0;i<29;i++)
{
gDisp_Buffer[gDisp_Buffer_Point]=SRAM_Read(SRAM_DRIVER_INFO_CODE+i);
gDisp_Buffer_Point++;
}
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
gGet_Driver_Info_Count=0;
gDriver_Info=WAIT_SEND_DRIVER_INFO;
}
}
//4,如果等待显示屏幕接收到驾驶员信息超时间无响应,则应该重新发送
else if( (gGet_Driver_Info_Count>WAIT_DISPINFO_TIME)
&&(gDriver_Info==WAIT_SEND_DRIVER_INFO) )
{
gGet_Driver_Info_Count=0;
gDriver_Info=GET_DRIVER_INFO;
}
*/
/********************************************************\
A15,判断接收记录仪是否长时间没有向主控发送数据
\********************************************************/
if( gRecord_Data_Timer > OVER_RECORD_DATA_TIME )
{
//超时,如果记录仪显示为正常状态,则认为记录仪故障
if( (gStatus2_Flag&RECORD_VAILD_F_1)==0 )
{
gStatus2_Flag|=RECORD_VAILD_F_1;
gRecord_Status=0;
}
}
/********************************************************\
A16,每间隔12个小时,需要重新启动程序一次
这部分的功能已经转移到中断中去执行
\********************************************************/
/********************************************************\
A17;如果需要向记录仪发送设置间隔距离的是否成功,如果成功收到记录仪
的响应,则不需要进行此操作,如果超过5秒仍然未收到响应,则间隔发送设置命令
连续发送5次,如果仍然无响应,则停止发送
\********************************************************/
if( ((gPublic_Flag&SET_DISTANCE_OK_F_1)==0)
&&(gSet_Distance_Info_Count>WAIT_DISPINFO_TIME)
&&(gStatus==NORMAL_TYPE)
&&(gSend_Record_Count<5) )
{
gSend_Record_Count++;
Send_COM1_Byte(gStatus);
Check_Record = gStatus;
Send_COM1_Byte(0xAA);
Check_Record ^= 0xAA;
Send_COM1_Byte(0x75);
Check_Record ^= 0x75;
Send_COM1_Byte(K_SET_INTERDISTANCE);
Check_Record ^= K_SET_INTERDISTANCE;
Send_COM1_Byte(0x00);
Check_Record ^= 0;
Send_COM1_Byte(0x02); //长度
Check_Record ^= 0x02;
Send_COM1_Byte(0x00); //预留
Check_Record ^= 0;
Send_COM1_Byte(gCycle_Distance/0x100); //距离值的高位字节
Check_Record ^= gCycle_Distance/0x100;
Send_COM1_Byte(gCycle_Distance%0x100); //距离值的低位字节
Check_Record ^= gCycle_Distance%0x100;
Send_COM1_Byte(Check_Record); //校验核
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a); //包尾
gSet_Distance_Info_Count=0;
}
/********************************************************\
A18;判断是否向显示屏发送显示屏上行信息的响应,
\********************************************************/
if(gPublic_Flag&DISP_SEND_INFO_F_1)
{
i=SRAM_Read(OTHER_SMS_2);
if(i==VAILD_2);
else
{
gPublic_Flag &= ~DISP_SEND_INFO_F_1;
if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=7+2;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=7;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_OK;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
}
}
}
/********************************************************\
B1;关于判断ACC检测和车载的空载/重载方面的程序检测
补充说明:
1, Test_Status_Step=0的时候检测ACC的检测线的状态,分为两种情况,如果此时ACC检测线处于开启状态标志或者关闭状态的标志,
则需要检测ACC检测线的实际状态量是否发生变化,如果没有,则直接设置Test_Status_Step=2,如果有则设置Test_Status_Step=1。
2,Test_Status_Step=1的时候,则说明检测到ACC的检测线实际状态量有变化,则在这个步骤中检测状态量的变化是否持续符合条件的时间
如果检测符合时间条件,则改变ACC的状态量标志,设置Test_Status_Step=0;
3,Test_Status_Step=2的时候,则说明ACC的检测无变化,则进行车载的空载/重载线的状态检测,如果分为两种情况如果此时检测空载/重载是处于空或者
重,则需要检测空载/重载线的实际状态量是否改变,如过检测到有改变则设置Test_Status_Step=3.否则设置Test_Status_Step=0
4,Test_Status_Step=3的时候,则说明空载/重载线检测到有所变化,则在这个步骤中检测状态量的变化持续时间是否符合要求,如果符合要求
则改变空载/重载线的状态量的标志。同时设置Test_Status_Step=0
\********************************************************/
if(Test_Status_Step==0)
{
//1,如果ACC检测线开启标志的状态下,检测是否ACC检测线关闭
if(gStatus1_Flag&ACC_ON_F_1)
{
if(P3IN&ACC_TEST)
{
gTest_Status_Timer=0;
Test_Status_Step=1;
}
}
//2,如果已经存在ACC线关闭标志的状态下,检测是否ACC检测线开启
else
{
if( (P3IN&ACC_TEST)==0)
{
gTest_Status_Timer=0;
Test_Status_Step=2;
}
}
}
else if(Test_Status_Step==1)
{
if( (P3IN&ACC_TEST)==0 )
{
gTest_Status_Timer=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -