263 lines
8.8 KiB
C++
263 lines
8.8 KiB
C++
#include "Sub3Judge02Qbxx.h"
|
||
#include "HFactory.h"
|
||
|
||
Sub3Judge02Qbxx::Sub3Judge02Qbxx()
|
||
{
|
||
m_exam = __NEW__(TKM3Item);
|
||
}
|
||
|
||
Sub3Judge02Qbxx::~Sub3Judge02Qbxx()
|
||
{
|
||
__DELETE__(m_exam);
|
||
}
|
||
|
||
bool Sub3Judge02Qbxx::dealJudgeEnter()
|
||
{
|
||
if(m_exam->TestPro != ItemProFlagInit) return false;
|
||
if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return false;
|
||
|
||
m_itemv = TSub3Item02Qbxx();
|
||
//10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^
|
||
const std::vector<std::string>& s502 = TableSysSet->asArray502();
|
||
std::string str = s502.size() > 7 ? s502[7] : "";
|
||
const std::vector<std::string>& ss = Tools::split(str, "^");
|
||
m_itemv.sys502_8_1 = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
|
||
m_itemv.sys502_8_2 = ss.size() > 1 && ss[1] != "" ? std::atoi(ss[1].c_str()) : 0; //StrToIntDef(GetDotStr(2, tempstr + '^', '^'), 0);
|
||
|
||
//下面是视觉相关的,先把参数值拿到,暂时不实现
|
||
const std::vector<std::string>& s531 = TableSysSet->asArray531();
|
||
if(s531.size() > 0 && s531[0] == "1")
|
||
{
|
||
m_itemv.is_radar = true;
|
||
}
|
||
|
||
m_itemv.Sys502_11 = s502.size() > 10 && s502[10] != "" ? std::atoi(s502[10].c_str()) : 0; //StrToIntDef(GetDotStr(11, SysSet[502], ','), 0);
|
||
const std::vector<std::string>& s524 = TableSysSet->asArray524();
|
||
m_itemv.Sys524_4 = s524.size() > 3 && s524[3] != "" ? std::atoi(s524[3].c_str()) : 0; //StrToIntDef(GetDotStr(4, SysSet[524], ','), 0);
|
||
|
||
const TChuanGan* cg = m_car->historyChuanGan();
|
||
m_itemv.Temp_JL_CM = cg->ai_ljjl_cm;
|
||
|
||
m_itemv.State = 1; //车辆停车状态到前进距离小于1米的阶段
|
||
|
||
m_exam->TestPro = ItemProFlagJudge;
|
||
//ToDo2:生成进项目事件
|
||
return true;
|
||
}
|
||
|
||
void Sub3Judge02Qbxx::dealJudgeItem()
|
||
{
|
||
#ifdef JUDGE_USE_INSPECT
|
||
//return; //屏蔽起步
|
||
#endif
|
||
|
||
HELP_COST_TIME("");
|
||
if(m_exam->TestPro != ItemProFlagJudge) return;
|
||
if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return;
|
||
|
||
const TChuanGan* cg = m_car->historyChuanGan();
|
||
const TSensorInfo& sor = cg->real.sensor;
|
||
const TChuanGan* his1 = m_car->historyChuanGan(1);
|
||
const TSensorInfo& sor1 = his1->real.sensor;
|
||
const TChuanGan* his2 = m_car->historyChuanGan(2);
|
||
const TSensorInfo& sor2 = his2->real.sensor;
|
||
const std::string& ksdd = TableSysSet->get211();
|
||
|
||
if(m_itemv.State == 1) //起步相关的,起步距离小于1米
|
||
{
|
||
//评判起步闯动
|
||
bool findFlag = true;
|
||
if(ksdd == siteof::kunming && cg->tkCnt < 60*SECOND)
|
||
{
|
||
findFlag = false;
|
||
}
|
||
|
||
if(findFlag == true)
|
||
{
|
||
const TChuanGan* his3 = m_car->historyChuanGan(3);
|
||
const TSensorInfo& sor3 = his3->real.sensor;
|
||
const TChuanGan* his4 = m_car->historyChuanGan(4);
|
||
const TSensorInfo& sor4 = his4->real.sensor;
|
||
|
||
TCar* tcar = m_car->getTCar();
|
||
|
||
int fdjds = tcar->FDJDS * tcar->fdjds_cdbl;
|
||
if( (sor.fdjzs > 10 && sor.fdjzs < fdjds && cg->move == moveForward)
|
||
&& (sor1.fdjzs > 10 && sor1.fdjzs < fdjds && his1->move == moveForward)
|
||
&& (sor2.fdjzs > 10 && sor2.fdjzs < fdjds && his2->move == moveForward)
|
||
&& (sor3.fdjzs > 10 && sor3.fdjzs < fdjds && his3->move == moveForward)
|
||
&& (sor4.fdjzs > 10 && sor4.fdjzs < fdjds && his4->move == moveForward) &&
|
||
(m_itemv.Mark_ChuangDong == false) ) //闯动
|
||
{
|
||
m_itemv.Mark_ChuangDong = true;
|
||
JUDGE_MARK_SUB3(2, "08", false);
|
||
}
|
||
}
|
||
|
||
//起步时,加速踏板控制不当,致使发动机转速过高
|
||
if(!m_itemv.Mark_2_09_Flag)
|
||
{
|
||
const TSensorInfo& sor3 = m_car->historySensor(3);
|
||
const std::vector<std::string>& s502 = TableSysSet->asArray502();
|
||
//发动机转速过高
|
||
int ZSMax = s502.size() > 3 && s502[3] != "" ? std::atoi(s502[3].c_str()) : 2500; //StrToIntDef(GetDotStr(4, SysSet[502], ','), 2500);
|
||
if(sor.fdjzs > ZSMax && sor1.fdjzs > ZSMax && sor2.fdjzs > ZSMax && sor3.fdjzs > ZSMax)
|
||
{
|
||
bool bb = true;
|
||
for(int i = 1; i <= 10; i++)
|
||
{
|
||
const TSensorInfo& sori = m_car->historySensor(i);
|
||
if(sori.dh2 == SYES)
|
||
{
|
||
bb = false;
|
||
break;
|
||
}
|
||
}
|
||
if(IS_C2(m_carType))
|
||
{
|
||
if(ksdd == siteof::shanghaikm3 || Tools::pos(siteof::guizhou, ksdd) == true) //Copy(Ctl.KSDD, 1, 7) = 'guizhou'
|
||
{
|
||
bb = false;
|
||
}
|
||
}
|
||
if(bb == true)
|
||
{
|
||
m_itemv.Mark_2_09_Flag = true;
|
||
JUDGE_MARK_SUB3(2, "09", false);
|
||
}
|
||
}
|
||
}
|
||
|
||
//10秒未起步
|
||
nogo_timeout();
|
||
|
||
if(cg->ai_ljjl_cm - m_itemv.Temp_JL_CM >= 100)
|
||
{
|
||
if(cg->move == moveForward && his1->move == moveForward)
|
||
{
|
||
m_itemv.State = 2;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
if(m_itemv.State == 2) //起步10米问题
|
||
{
|
||
if(cg->move == moveForward && his1->move == moveForward)
|
||
{
|
||
if(cg->ai_ljjl_cm - m_itemv.Temp_JL_CM >= 10*100+10) //放个10CM
|
||
{
|
||
if(sor.ssc == SYES) //手刹错误,未及时纠正
|
||
{
|
||
if(m_itemv.Error_SSC_Flag == true)
|
||
{
|
||
JUDGE_MARK_SUB3(2, "10", false, true);
|
||
}
|
||
}
|
||
m_exam->TestPro = ItemProFlagEnd;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
if(cg->move == moveForward && his1->move == moveForward && his2->move == moveStop)
|
||
{
|
||
if(sor.ssc == SYES)
|
||
{
|
||
m_itemv.Error_SSC_Flag = true;
|
||
}
|
||
}
|
||
|
||
if(m_itemv.Error_SSC_Flag == true)
|
||
{
|
||
if(cg->move == moveForward)
|
||
{
|
||
if(sor.ssc == SNOT)
|
||
{
|
||
m_itemv.Error_SSC_Flag = false;
|
||
//不松驻车制动器起步,但能及时纠正
|
||
JUDGE_MARK_SUB3(2, "06", false, true);
|
||
}
|
||
}
|
||
}
|
||
|
||
//状态提示
|
||
char buf[128] = {0};
|
||
SafeSprintf(buf, sizeof(buf), XCharacter("%s->State:%d,项目距离=%d厘米"),
|
||
m_itemv.State == 1 ? XCharacter("起步未到达1米...") : XCharacter("起步超过1米..."),
|
||
m_itemv.State, cg->ai_ljjl_cm - m_itemv.Temp_JL_CM);
|
||
|
||
showStatus(buf);
|
||
}
|
||
|
||
//具备起步条件,10秒没有起步
|
||
void Sub3Judge02Qbxx::nogo_timeout()
|
||
{
|
||
const TChuanGan* cg = m_car->historyChuanGan();
|
||
const TGpsInfo& gps = cg->real.gps;
|
||
const TSensorInfo& sor = cg->real.sensor;
|
||
|
||
const TChuanGan* his1 = m_car->historyChuanGan(1);
|
||
const TGpsInfo& gps1 = his1->real.gps;
|
||
const TSensorInfo& sor1 = his1->real.sensor;
|
||
|
||
//档位或者手刹信号发生变化,且变化的结果是前进挡和松手刹状态,开始计时,10秒后扣分
|
||
if(m_itemv.ZhunBeiQiBuTK == 0)
|
||
{
|
||
const TSensorInfo& sor2 = m_car->historySensor(2);
|
||
|
||
if((sor.dw != 0 && sor1.dw != 0 && sor.dw != sor2.dw && sor.dw >= 1 && sor.dw != 9) ||
|
||
(sor.ssc == SNOT && sor1.ssc == SYES))
|
||
{
|
||
if(sor.dw >= 1 && sor.dw != 9 && sor.ssc == SNOT)
|
||
{
|
||
m_itemv.ZhunBeiQiBuTK = cg->tkCnt;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(sor.dw == 0 || sor.ssc == SYES)
|
||
{
|
||
m_itemv.ZhunBeiQiBuTK = 0;
|
||
}
|
||
if(m_itemv.ZhunBeiQiBuTK != 0 && cg->tkCnt - m_itemv.ZhunBeiQiBuTK > 10 * SECOND) //10秒未起步
|
||
{
|
||
if(m_car->rtkEnabled() && m_car->rtkEnabled(1))
|
||
{
|
||
if(cg->move != moveForward)
|
||
{
|
||
JUDGE_MARK_SUB3(2, "48", false);
|
||
m_itemv.ZhunBeiQiBuTK = cg->tkCnt;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
//档位或者手刹信号发生变化,且变化的结果是前进挡和松手刹状态,开始计时,10秒后扣分
|
||
if(m_itemv.ZhunBeiQiBuTK == 0)
|
||
{
|
||
if((sor.dw != 0 && sor1.dw != 0 && sor.dw != sor1.dw && sor.dw >= 1 && sor.dw != 9) ||
|
||
(sor.ssc == SNOT && sor1.ssc == SYES))
|
||
{
|
||
m_itemv.ZhunBeiQiBuTK = cg->tkCnt;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(cg->tkCnt - m_itemv.ZhunBeiQiBuTK > 10 * SECOND) //10秒未起步
|
||
{
|
||
if(gps.rtkEnabled == true && gps1.rtkEnabled == true)
|
||
{
|
||
if(cg->move != moveForward)
|
||
{
|
||
JUDGE_MARK_SUB3(2, "48", false);
|
||
m_itemv.ZhunBeiQiBuTK = cg->tkCnt;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
*/
|
||
}
|