subject-two/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp
2024-07-02 09:01:57 +08:00

263 lines
8.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}
}
}
}
*/
}