subject-two/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge08Gjzt.cpp
2024-08-12 10:19:31 +08:00

302 lines
9.4 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 "Sub3Judge08Gjzt.h"
#include "HFactory.h"
Sub3Judge08Gjzt::Sub3Judge08Gjzt()
{
m_exam = __NEW__(TKM3Item);
}
Sub3Judge08Gjzt::~Sub3Judge08Gjzt()
{
__DELETE__(m_exam);
}
bool Sub3Judge08Gjzt::dealJudgeEnter()
{
if(m_exam->TestPro != ItemProFlagInit) return false;
if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return false;
const TChuanGan* cg = m_car->historyChuanGan();
const std::string& ksdd = TableSysSet->get211();
setSeed(cg->real.gps.sj);
m_itemv = TSub3Item08Gjzt();
//临时记录当前的距离
m_itemv.Temp_LJJL_CM = cg->ai_ljjl_cm;
//学校区域是否播报语音
//SysSet[512]-->3 学校、公交、人行横道模拟项目是否语音0不需要 1需要
const std::vector<std::string>& s512 = TableSysSet->asArray512();
m_itemv.WavKind = s512.size() > 2 && s512[2] != "" ? std::atoi(s512[2].c_str()) : 0;
//得到限速值
const std::vector<std::string>& s509 = TableSysSet->asArray509();
m_itemv.Temp_XS = s509.size() > 4 && s509[4] != "" ? std::atoi(s509[4].c_str()) : 30;
if(m_itemv.Temp_XS > 30)
{
m_itemv.Temp_XS = 30;
}
//是否评判脚刹车 1速度+刹车同时满足 其他只判刹车
m_itemv.Judge_JSC = s509.size() > 5 && s509[5] != "" ? std::atoi(s509[5].c_str()) == 1 : false;
//是否必须减速
m_itemv.Must_JianSu_Flag = s509.size() > 7 && s509[7] != "" ? std::atoi(s509[7].c_str()) == 1 : false;
//默认:需要评判减速相关的
m_itemv.JudgeKind = 1;
m_itemv.s509_10 = s509.size() > 9 && s509[9] != "" ? std::atoi(s509[9].c_str()) : 0;
if(ksdd == siteof::nj || ksdd == siteof::njdckm3)
{
//ToDo:语音播报-->通过公交站台
m_itemv.Temp_XMJL_Mi = 80; //20171007
}
else
{
if(m_itemv.WavKind == 1)
{
//ToDo: 语音播报 - - > 通过公交站台
m_itemv.Temp_XMJL_Mi = 60; //20171009
}
else
{
m_itemv.Temp_XMJL_Mi = 35; //20171009
}
}
//停车让行相关的
m_itemv.Temp_TCRX = true; //20160516
const std::vector<std::string>& s334= TableSysSet->asArray334();
if(s334.size() > 1 && s334[1] != "") //20180823
{
//Randomize;
//a = Random(10) + 1; //1-10
int a = random2(1, 10);
if(a <= std::atoi(s334[1].c_str())) //20180823
{
//ToDo:语音播报-->前方有行人通过
m_itemv.Temp_TCRX = false;
m_car->createEventSound({itemNo(), sound::sub3_412002});
}
else
{
m_itemv.Temp_TCRX = true;
}
}
m_exam->TestPro = ItemProFlagJudge;
//ToDo2:生成进项目事件
return true;
}
void Sub3Judge08Gjzt::dealJudgeItem()
{
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 TRTKResult& RTKKM3 = cg->RTKKM3;
const TSensorInfo& sor = cg->real.sensor;
const TGpsInfo& gps = cg->real.gps;
const std::string& ksdd = TableSysSet->get211();
#ifdef JUDGE_USE_INSPECT
if(m_itemv.inspectJSC == false)
{
if(sor.jsc == SYES)
{
m_itemv.inspectJSC = true;
}
}
#endif
//计算当前是否需要判断减速
//是否需要评判减速
if(RTKKM3.BaseLaneCount >= 3 && m_itemv.Must_JianSu_Flag == false)
{
if(RTKKM3.BasePointInLaneNo >= 3)
{
//SysSet[342]:车上是否能进行人工操作(0-能扣分和进项目 1-不能人工评判 2-可以人工评判 3-都不能)
//如果是人工扣分或者人工评判的,自动评判就不触发 需要评判减速相关的
const std::string& s342 = TableSysSet->get342();
if(s342 == "0" || s342 == "2" || m_itemv.s509_10 == 1)
{
m_itemv.JudgeKind = 0; //科研所规定公交站台当前车辆的车道号在3车道及以上的不需要评判减速相关的
}
}
else
{
m_itemv.JudgeKind = 1; //需要评判减速相关的
}
}
else
{
m_itemv.JudgeKind = 1; //需要评判减速相关的
}
if(cg->ai_ljjl_cm - m_itemv.Temp_LJJL_CM >= m_itemv.Temp_XMJL_Mi * 100)
{
m_itemv.EndXMJL_Flag = true;
}
//结束项目
if(ksdd == siteof::guizhou || ksdd == siteof::guizhouas)
{
if(!m_itemv.Temp_TCRX)
{
if(m_itemv.Temp_TCSJ == 0)
{
if(cg->move == moveStop)
m_itemv.Temp_TCSJ = cg->tkCnt;
}
else
{
if(cg->tkCnt - m_itemv.Temp_TCSJ > 5*SECOND)
{
//ToDo:语音播报-->行人已通过
m_itemv.Temp_TCRX = true;
m_car->createEventSound({itemNo(), sound::sub3_412003});
}
else
{
if(cg->move != moveStop)
m_itemv.Temp_TCSJ = 0;
}
}
}
}
else
{
if(m_itemv.Temp_TCRX == false && cg->move == moveStop)
{
m_itemv.Temp_TCRX = true;
//ToDo:语音播报-->行人已通过
m_car->createEventSound({itemNo(), sound::sub3_412003});
}
}
if(m_itemv.EndXMJL_Flag == false)
{
//检测脚刹车动作
if(sor.jsc == SYES)
m_itemv.Finish_JSC = true;
//降到特定的车速
TTestCtl* ctl = m_car->getTTestCtl();
if(ctl->JianSuLeiXing == 1)
{
if(std::round(gps.sd) <= m_itemv.Temp_XS)
{
m_itemv.Finish_JSC = true;
}
}
if(std::round(gps.sd) <= m_itemv.Temp_XS)
{
m_itemv.Finish_JianSu = true;
}
if(ksdd == siteof::GXWZKM3 || ksdd == siteof::NMGTLKM3 || ksdd == siteof::guizhou || ksdd == siteof::guizhouas)
{
if(std::round(gps.sd) > 30)
m_itemv.Finish_JSC = false;
}
}
else
{
//结束项目距离行驶了
//停车让行
if(m_itemv.Temp_TCRX == false)
{
JUDGE_MARK_SUB3(8, "03", true);
}
TTestCtl* ctl = m_car->getTTestCtl();
//新的减速规则
if(ctl->JianSuLeiXing == 2)
{
//500-13为2按科研所规则判断是否减速
if(m_itemv.JudgeKind == 1) //需要评判减速相关的
{
#ifdef JUDGE_USE_INSPECT
if(m_itemv.inspectJSC == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
#else
if(CheckJL_CheShu_New(30) == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
#endif
}
}
else
{
if(ksdd == siteof::njdckm3)
{
if(CheckJL_ShaChe(100) == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
}
else
{
if(m_itemv.JudgeKind == 1) //需要评判减速相关的
{
if(ksdd == siteof::guizhouas)
{
if(m_itemv.Finish_JSC == false)
JUDGE_MARK_SUB3(8, "02", false);
if(m_itemv.Finish_JianSu == false)
JUDGE_MARK_SUB3(20, "38", false);
}
else
{
if(m_itemv.Judge_JSC == true)
{
// 509-6为1同时满足刹车和速度小于阈值509-5
if(m_itemv.Finish_JSC == false || m_itemv.Finish_JianSu == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
}
else
{
if(ctl->JianSuLeiXing == 1)
{
//500-13为1刹车和速度小于阈值满足其中一个就不扣分
if(m_itemv.Finish_JSC == false && m_itemv.Finish_JianSu == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
}
else
{
//5、无上述参数只判断刹车
if(m_itemv.Finish_JSC == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
}
}
}
}
}
}
//ToDo:语音播报-->完成公交站台
m_exam->TestPro = ItemProFlagEnd;
return;
}
TTestCtl* ctl = m_car->getTTestCtl();
char buf[256] = {0};
SafeSprintf(buf, sizeof(buf), XCharacter("项目距离=%d,Ctl.JianSuLeiXing=%d,限速=%d,已行驶=%d"),
m_itemv.Temp_XMJL_Mi, ctl->JianSuLeiXing, m_itemv.Temp_XS,
(cg->ai_ljjl_cm - m_itemv.Temp_LJJL_CM) / 100); //div
showStatus(std::string(buf));
}