subject-two/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge08Gjzt.cpp

285 lines
8.5 KiB
C++
Raw Normal View History

2024-07-11 16:16:43 +08:00
#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;
}
//是否评判脚刹车
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;
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.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)
{
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)
{
if(m_itemv.Finish_JSC == false || m_itemv.Finish_JianSu == false)
{
JUDGE_MARK_SUB3(8, "02", false);
}
}
else
{
if(m_itemv.Finish_JianSu == 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));
}