#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& s512 = TableSysSet->asArray512(); m_itemv.WavKind = s512.size() > 2 && s512[2] != "" ? std::atoi(s512[2].c_str()) : 0; //得到限速值 const std::vector& 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& 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)); }