302 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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));
 | ||
| 
 | ||
| 
 | ||
| }
 |