#include "Sub3Judge11Kbtc.h" #include "HFactory.h" Sub3Judge11Kbtc::Sub3Judge11Kbtc() { m_exam = __NEW__(TKM3Item); } Sub3Judge11Kbtc::~Sub3Judge11Kbtc() { __DELETE__(m_exam); } bool Sub3Judge11Kbtc::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(); m_car->setPubCanJudge_XiHuoFlag(true); m_car->setPubKaoBianTCFinish_LJJL(0); m_itemv = TSub3Item11Kbtc(); //得到靠边停车的项目距离 const std::vector& s505 = TableSysSet->asArray505(); m_itemv.parm_xmjl = s505.size() > 5 && s505[5] != "" ? std::atoi(s505[5].c_str()) : 150; //strtointdef(getdotstr(6, sysset[505], ','), 150); //项目设定项目距离 //SysSet[523]:靠边停车按每个项目设定项目距离 const std::vector>& s523 = TableSysSet->asArray2_523(); if(!s523.empty()) { for(size_t i = 0; i < s523.size(); i++) { const std::vector& ss523 = s523[i]; if(ss523.empty()) continue; const std::string& str1 = ss523.size() > 0 && ss523[0] != "" ? ss523[0] : ""; const std::string& str2 = ss523.size() > 1 && ss523[1] != "" ? ss523[1] : ""; const std::string str = std::to_string(m_exam->ItemNo) + "~" + m_exam->SubName; if(str1 == str) { int xmjl = str2.length() > 0 ? std::atoi(str2.c_str()) : 0; if(xmjl > 0) { m_itemv.parm_xmjl = xmjl; } } } } if(IS_C1(m_carType) || IS_C2(m_carType)) { if(m_itemv.parm_xmjl > 150) { m_itemv.parm_xmjl = 150; } } if(ksdd == siteof::njdckm3) { m_itemv.parm_xmjl = 350; } //靠边停车误差,CM if(ksdd == siteof::changzhoukm3) { m_itemv.kbtcwc = 5; } m_itemv.PPFXD = s505.size() > 4 && s505[4] != "" ? std::atoi(s505[4].c_str()) : 1; //strtointdef(getdotstr(5, sysset[505], ','), 1); m_itemv.parm_Rtk_Ag = s505.size() > 1 && s505[1] != "" ? std::atoi(s505[1].c_str()) : 0; //strtointdef(getdotstr(2, sysset[505], ','), 0); //20151013 //如果设置了角度变化评判方向灯,但是阈值不对,把评判方向灯方式改成:停车时刻 if(m_itemv.PPFXD == 0 && m_itemv.parm_Rtk_Ag <= 0.001) { m_itemv.PPFXD = 1; m_itemv.parm_Rtk_Ag = 0; } //打方向灯需要3秒 m_itemv.parm_Fxd3s = 3 * SECOND; //round(strtofloat(readiniparam('综合评判', 'fxdyc3s', '3')) * 1000); //靠边停车项目总时间 double s505_2 = s505.size() > 2 && s505[2] != "" ? std::atof(s505[2].c_str()) : 0; m_itemv.parm_ZSj = std::round(s505_2 * SECOND); //round(strtofloatdef(getdotstr(3, sysset[505], ','), 0) * 1000); //进入时刻的时间 m_itemv.Entet_SJ = cg->tkCnt; //允许停车时间秒,必须在这个时间内拉手刹陕西汉中、黑龙江省大庆需求 int s505_3 = s505.size() > 3 && s505[3] != "" ? std::atoi(s505[3].c_str()) : 180; m_itemv.Parm_HanZhong_KBTC_SJ = s505_3 * SECOND; //strtointdef(getdotstr(4, sysset[505], ','), 180) * 1000; //停车后,多长时间内必须开车门,单位:秒 int s505_8 = s505.size() > 8 && s505[8] != "" ? std::atoi(s505[8].c_str()) : 3600; m_itemv.Parm_TC_KaiCheMen_ShiJian = s505_8 * SECOND; //strtointdef(getdotstr(9, sysset[505], ','), 3600) * 1000; //开门后,多长时间,自动进入Status6( 关门处理阶段) m_itemv.parm_KaiMen_Status6 = 15; //特殊地点版本处理 if(ksdd == siteof::shanghaikm3 && IS_C5(m_carType)) { m_itemv.parm_KaiMen_Status6 = 210; } //大车夜考相关的 大车夜间模式,0:不启用 1:启用(不判靠边距离) TCar* tcar = m_car->getTCar(); if(tcar->Night_ID == true) { if(IS_A1A2A3B1B2C6(m_carType)) { m_itemv.dcykkb = s505.size() > 6 && s505[6] != "" ? std::atoi(s505[6].c_str()) : 0; //strtointdef(getdotstr(7, sysset[505], ','), 0); } } if(Tools::tolower(ksdd) == siteof::chongqingkm3) { if(tcar->Night_ID == true) { if(IS_A1A2A3B1B2(m_carType)) { m_itemv.dcykkb = 1; } } } //允许停车车道,默认0,只能停最右车道,以路边线算距离,如果设置了此参数,则在设置的车道范围内都可以停车,以车道距离来计算。暂时保定地区启用。 m_itemv.Parm_BaoDing_TC_CheDaoJuLi = s505.size() > 7 && s505[7] != "" ? std::atoi(s505[7].c_str()) : 0; if(m_itemv.Parm_BaoDing_TC_CheDaoJuLi == 0 && (ksdd == siteof::bdgaoyangkm3 || ksdd == siteof::sxbjxc)) { m_itemv.Parm_BaoDing_TC_CheDaoJuLi = 10; } //进入时刻的当前距离,米 m_itemv.Enter_ljjl = cg->ai_ljjl; //计次,控制语音用的 m_itemv.jscnt = 1; //ToDo2:生成进项目事件 //ToDo:语言播报-->请靠边停车 m_exam->TestPro = ItemProFlagJudge; return true; } void Sub3Judge11Kbtc::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 TSensorInfo& sor = cg->real.sensor; const std::string& ksdd = TableSysSet->get211(); m_car->setPubCanJudge_XiHuoFlag(m_itemv.Status < 3); //特殊地区功能1 if(ksdd == siteof::nj || ksdd == siteof::njdckm3) { if(cg->tkCnt - m_itemv.Entet_SJ >= 2000 && cg->tkCnt - m_itemv.Entet_SJ < 2600) //(m_car->GetCurrentTick2() - m_itemv.Entet_SJ >= 2000 && m_car->GetCurrentTick2() - m_itemv.Entet_SJ < 2600) { m_itemv.Enter_ljjl = cg->ai_ljjl; } } if(ksdd == siteof::nj) { TKM3Item* item = m_car->findExamItem(Sub3ItemType05Lkzx); //直行路口 if(item && item->Item_Color == itemStateZk) { if(m_itemv.parm_xmjl < 250) { m_itemv.parm_xmjl = 250; } } } //特殊地区功能2 if(ksdd == siteof::hbwh) { if(IS_A1A2A3B1B2(m_carType)) { if(cg->tkCnt - m_itemv.Entet_SJ >= 2000 && cg->tkCnt - m_itemv.Entet_SJ < 3000) //(GetCurrentTick2() - m_itemv.Entet_SJ >= 2000) and (GetCurrentTick2() - m_itemv.Entet_SJ < 3000) then { m_itemv.Enter_ljjl = cg->ai_ljjl; } } } //到达项目距离不停车 if(cg->ai_ljjl - m_itemv.Enter_ljjl > m_itemv.parm_xmjl && cg->move == moveForward) { //未按语音指令在规定的距离内停车 JUDGE_MARK_SUB3(11, "41", true); //20160928 m_exam->TestPro = ItemProFlagEnd; return; } //20160613 商丘 if(m_itemv.parm_ZSj > 0) { if(cg->tkCnt - m_itemv.Entet_SJ >= m_itemv.parm_ZSj) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); } } //拉手刹前,放松脚刹 if(ksdd == siteof::changzhoukm3) { //0-播报语音 1-语音结束,开始评判 到停车前 2-停车了但未确认,可能继续行驶 3-确认停车了 4-下车评判 if(m_itemv.Status == 2 || m_itemv.Status == 3 || m_itemv.Status == 4) { const TChuanGan* his1 = m_car->historyChuanGan(1); const TSensorInfo& sor1 = m_car->historySensor(1); const TSensorInfo& sor2 = m_car->historySensor(2); const TSensorInfo& sor3 = m_car->historySensor(3); const TSensorInfo& sor4 = m_car->historySensor(4); const TSensorInfo& sor5 = m_car->historySensor(5); //拉手刹前,脚刹松开了 if(sor.jsc == SNOT && sor1.jsc == SNOT && sor2.jsc == SNOT && sor3.jsc == SNOT && sor4.jsc == SNOT && sor5.jsc == SNOT && cg->move == moveStop && his1->move == moveStop && sor.dw == 0) { if(sor.ssc == SNOT) //0表示手刹放下 1-表示拉起来状态 { if(!IS_C2(m_carType)) { m_itemv.Kf06 = true; //Mark(11, '06', false); } } } } } else { //拉手刹前,脚刹松开了 if(m_itemv.Status == 2 || m_itemv.Status == 3 || m_itemv.Status == 4) { const TSensorInfo& sor1 = m_car->historySensor(1); if(sor.ssc == SYES && sor1.ssc == SNOT) { if(sor.jsc == SNOT && sor1.jsc == SNOT) { if(!m_itemv.Kf06) { m_itemv.Kf06 = true; //拉紧驻车制动器前放松行车制动踏板 JUDGE_MARK_SUB3(11, "06", false); } } } } } //0-播报语音 1-语音结束,开始评判 到停车前 2-停车了但未确认,可能继续行驶 3-确认停车了 4-下车评判 switch (m_itemv.Status) { case 0: DoStatus_0(); break; //语音播报阶段 case 1: DoStatus_1(); break; case 2: DoStatus_2(); break; case 3: DoStatus_3(); break; //停车位置已确认,开始评判 case 4: DoStatus_4(); break; //下车过程评判开始 case 5: DoStatus_5(); break; //关门进入下一步动作 case 6: DoStatus_6(); break; //关门后处理 case 100: DoStatus_100(); break; //结束项目处理 default: TASSERT(false, ""); break; } char buf[256]= {0}; SafeSprintf(buf, sizeof(buf), JUDGE_UTF8S("ST:%d,距离=%d"), m_itemv.Status, cg->ai_ljjl - m_itemv.Enter_ljjl); showStatus(buf); NS3JudgeVision_40601(); NS3JudgeVision_40604(); } void Sub3Judge11Kbtc::DoStatus_0() { bool OKFlag = false; if(TableSysSet->get211() != siteof::sccdcz) { OKFlag = true; } else { const TChuanGan* cg = m_car->historyChuanGan(); const TChuanGan* his1 = m_car->historyChuanGan(1); const TChuanGan* his2 = m_car->historyChuanGan(2); const TChuanGan* his3 = m_car->historyChuanGan(3); if(cg->move == moveForward && his1->move == moveForward && his2->move == moveForward && his3->move == moveForward) { OKFlag = true; } } if(OKFlag == true) { const TChuanGan* cg = m_car->historyChuanGan(); const TGpsInfo& gps = cg->real.gps; //0-播报语音 1-语音结束,开始评判 到停车前 2-停车了但未确认,可能继续行驶 3-确认停车了 4-下车评 m_itemv.Status = 1; //播报完声音,初始化 m_itemv.Enter_ljjl = cg->ai_ljjl; m_itemv.Enter_Rtk_Ag = gps.hxj; //20151013 m_itemv.Enter_Tk = cg->tkCnt; } } void Sub3Judge11Kbtc::DoStatus_1() { const TChuanGan* cg = m_car->historyChuanGan(); const TChuanGan* his1 = m_car->historyChuanGan(1); const TSensorInfo& sor = cg->real.sensor; const TGpsInfo& gps = cg->real.gps; const std::string& ksdd = TableSysSet->get211(); m_itemv.Kf06 = false; // 20170310 //停车语音提示 //方向灯标志 if(sor.yfxd == SYES && sor.zfxd == SNOT) { if(!m_itemv.yfxd) { m_itemv.yfxd = true; m_itemv.yfxd_tk = cg->tkCnt; } if(m_itemv.yfxd_tk != 0) { if(cg->tkCnt - m_itemv.yfxd_tk > m_itemv.parm_Fxd3s) { m_itemv.yfxd3s = true; } } } else { if(!m_itemv.yfxd3s) { m_itemv.yfxd_tk = 0; } } if(cg->move == moveForward && his1->move == moveForward) { if(m_itemv.PPFXD == 0) { double lsjd = 0.0; if(m_itemv.Enter_Rtk_Ag + m_itemv.parm_Rtk_Ag > 360.0) { if(gps.hxj < 90.0) { lsjd = std::abs(360 - m_itemv.Enter_Rtk_Ag + gps.hxj); } else { lsjd = std::abs(gps.hxj - m_itemv.Enter_Rtk_Ag); } } else { lsjd = std::abs(gps.hxj - m_itemv.Enter_Rtk_Ag); } if(m_itemv.HasJudgeFXD == false) { if(std::abs(lsjd) >= m_itemv.parm_Rtk_Ag) { m_itemv.HasJudgeFXD = true; //评判方向灯 if(!m_itemv.yfxd) { //停车前不使用转向灯 JUDGE_MARK_SUB3(11, "42", false); } else { if(!m_itemv.yfxd3s) { //方向灯少于3秒 JUDGE_MARK_SUB3(11, "43", false); } } } } } } //停车进入下一阶段 20171013 排除熄火状态 20171020 if(cg->move == moveStop && his1->move == moveStop) //增加了前一个信号也是停车状态 20140707 20171019 { if(ksdd == siteof::xjcj_hm && !IS_C2(m_carType) && !IS_C5(m_carType)) //20190215 { const TSensorInfo& sor = m_car->historySensor(2); //车辆运行速度和挡位不匹配 if(sor.dw != 1 && sor.dw != 2) //not (lscg[zj(2)].ai_dw in [1, 2]) then { JUDGE_MARK_SUB3(14, "02", true); } } // (* // if(cg.ai_fdjzs > 200) or ((car.kscx = 'C5') or (car.kscx = 'C2')) then // { // //m_itemv.zdtc := true; // } // *) //先看505参数 然后看 按430参数确认靠边,确认靠边后再扣 // if(m_itemv.HasJudgeFXD == false) // { // m_itemv.HasJudgeFXD = true; // //评判方向灯 // if(!m_itemv.yfxd) // { // //停车前不使用转向灯 // JUDGE_MARK_SUB3(11, "42", false); // } // else // { // if(!m_itemv.yfxd3s) // { // //方向灯少于3秒 // JUDGE_MARK_SUB3(11, "43", false); // } // } // } m_itemv.Status = 2; m_itemv.TCZT_Tk = cg->tkCnt; m_itemv.Enter_Tk = cg->tkCnt; //20151119 //停车拉手刹相关(汉中需求) m_itemv.tclssjs = cg->tkCnt; //20170223 //停车拉手刹次数 m_itemv.tclsscnt = 0; //20170223 if(!m_itemv.yfxd && sor.yfxd == SYES) { m_itemv.yfxd = true; m_itemv.yfxd_tk = cg->tkCnt; } } } void Sub3Judge11Kbtc::DoStatus_2() { 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 std::string& ksdd = TableSysSet->get211(); //特殊地点版本处理 if(ksdd == siteof::shanghaikm3) { //方向灯标志 if(!m_itemv.yfxd && sor.yfxd == SYES) { m_itemv.yfxd = true; m_itemv.yfxd_tk = cg->tkCnt; } if(m_itemv.yfxd == true && m_itemv.yfxd3s == false && cg->tkCnt - m_itemv.yfxd_tk >= m_itemv.parm_Fxd3s && sor.yfxd == SYES) { m_itemv.yfxd3s = true; } } //靠边停车评判距离的次数 m_itemv.kbtccs = 0; //20180317 //20171030 //靠边停车确认停车条件(0-拉手刹放空挡或拉手刹动作或开车门或解开安全带 1-拉手刹同时置空档 2-停车就判 3-开车门才判) const std::string& s430 = TableSysSet->get430(); if(s430 == "2") { m_itemv.Status = 3; return; } //特殊地点处理2 if(ksdd == siteof::linxiahz) { const TChuanGan* his2 = m_car->historyChuanGan(2); const TChuanGan* his3 = m_car->historyChuanGan(3); const TChuanGan* his4 = m_car->historyChuanGan(4); const TChuanGan* his5 = m_car->historyChuanGan(5); const TChuanGan* his6 = m_car->historyChuanGan(6); if(cg->move == moveBackward && (sor.dw < 1 || sor.dw > 5) && his1->move == moveBackward && his2->move == moveBackward && his3->move == moveBackward && his4->move == moveBackward && his5->move != moveBackward && his6->move != moveBackward) { JUDGE_MARK_SUB3(11, "45", false); } } if(cg->move == moveForward && his1->move == moveForward) { const std::vector& s505 = TableSysSet->asArray505(); int s505_9 = s505.size() > 9 && s505[9] != "" ? std::atoi(s505[9].c_str()) : 0; if(ksdd == siteof::sccdcz || ksdd == siteof::ankang) { //在前后无干扰条件下停车后,再次挪动车辆 JUDGE_MARK_SUB3(11, "11", false); m_itemv.Status = 1; return; } else if(ksdd == siteof::ynyx || ksdd == siteof::sxbjxc || ksdd == siteof::sxbjdc || s505_9 == 1) { if(cg->tkCnt - m_itemv.TCZT_Tk > 3000) { //在前后无干扰条件下停车后,再次挪动车辆 JUDGE_MARK_SUB3(11, "11", false); } m_itemv.Status = 1; return; } else { if(ksdd == siteof::sccd) //20151230 { m_itemv.Status = 3; return; } else { m_itemv.Status = 1; return; } } } //特殊地区处理 if(ksdd == siteof::hnpy) { const TChuanGan* his2 = m_car->historyChuanGan(2); const TChuanGan* his3 = m_car->historyChuanGan(3); if(cg->move == moveBackward && his1->move == moveBackward && his2->move == moveStop && his3->move == moveStop) { //在前后无干扰条件下停车后,再次挪动车辆 JUDGE_MARK_SUB3(11, "11", false); } } //特殊地区处理 if(ksdd == siteof::JXNC) { if(cg->tkCnt - m_itemv.tclssjs > m_itemv.Parm_HanZhong_KBTC_SJ) { m_itemv.Status = 3; return; } } //靠边停车确认停车条件(0-拉手刹放空挡或拉手刹动作或开车门或解开安全带 1-拉手刹同时置空档 2-停车就判 3-开车门才判) if(s430 == "3") //开车门 { const TSensorInfo& sor2 = m_car->historySensor(2); const TSensorInfo& sor3 = m_car->historySensor(3); if(sor.mkg == SYES && sor1.mkg == SYES && sor2.mkg == SNOT && sor3.mkg == SNOT) { m_itemv.Status = 3; return; } } else if(s430 == "1") //拉手刹放空挡 { //20180625 if(sor.ssc == SYES && sor.dw == 0) { m_itemv.Status = 3; return; } } else { const TSensorInfo& sor2 = m_car->historySensor(2); const TSensorInfo& sor3 = m_car->historySensor(3); //拉手刹放空挡 或 拉手刹动作 或 开车门 或 解开安全带 进入下一阶段 if((sor.ssc == SYES && sor.dw == SNOT) || (sor.ssc == SYES && sor1.ssc == SYES && sor2.ssc == SYES) || (sor.mkg == SYES && sor1.mkg == SYES && sor2.mkg == SYES && sor3.mkg == SNOT) || (sor.aqd == SNOT && sor1.aqd == SNOT && sor2.aqd == SNOT && sor3.aqd == SYES)) //20180130 { m_itemv.Status = 3; return; } if(ksdd == siteof::hnay) { if(sor.ssc == SYES) { m_itemv.Status = 3; return; } } //20170223 if(ksdd == siteof::gdmm) //广东茂名 { if(cg->tkCnt - m_itemv.tclssjs > 10 * SECOND) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); m_exam->TestPro = ItemProFlagEnd; return; } else { if(((cg->tkCnt - m_itemv.tclssjs) / 4000) != m_itemv.tclsscnt && m_itemv.tclsscnt < 2) { //ToDo:语音提示-->请继续完成考试 m_itemv.tclsscnt++; //inc(m_itemv.tclsscnt); m_car->createEventSound({itemNo(), sound::sub3_406005}); } } } } //20170504 if(ksdd == siteof::zhoukou) { if(cg->tkCnt - m_itemv.tclssjs > 60 * SECOND) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); m_exam->TestPro = ItemProFlagEnd; return; } } } void Sub3Judge11Kbtc::DoStatus_3() { 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 std::string& ksdd = TableSysSet->get211(); //特殊地点版本翻译 if(ksdd == siteof::sxbjxc) { int wayNo = m_car->wayNo(); if(m_car->wayNo() == 1) { if(cg->RTKKM3.BasePointInLaneNo != 2) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); } } else if(wayNo == 2) { if(cg->RTKKM3.BasePointInLaneNo != 2) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); } } else if(wayNo == 3) { if(cg->RTKKM3.BasePointInLaneNo != 1) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); } } } if(ksdd == siteof::ynyx) { if(sor.yfxd == SYES && sor1.yfxd == SYES) { //操作完成后不关闭转向灯 JUDGE_MARK_SUB3(20, "71", true); } } if(m_itemv.dcykkb == 0 || ksdd != siteof::hbwh) { if(!m_itemv.HasJudgeFXD) { m_itemv.HasJudgeFXD = true; if(!m_itemv.yfxd) { JUDGE_MARK_SUB3(11, "42", false); } else { if(!m_itemv.yfxd3s) { JUDGE_MARK_SUB3(11, "43", false); } } } } if(m_car->rtkEnabled()) { m_itemv.kbtccs = 11; if(ksdd == siteof::jj && cg->RTKKM3.BaseLaneCount == 0) { JUDGE_MARK_SUB3(11, "45", true); } if(ksdd == siteof::shanxilinfen && cg->RTKKM3.BaseLaneCount == 0) { JUDGE_MARK_SUB3(11, "45", true); } if(ksdd == siteof::shenyangkm3 && cg->RTKKM3.BaseLaneCount == 0) { JUDGE_MARK_SUB3(11, "45", true); } //压路边线 Judge_KBTC_YaXian(); Judge_KBTC_YaXian_Tail(); //A2C6-20250314 } else { //20180531 if(ksdd == siteof::hbtskm3 || ksdd == siteof::lyggy) m_itemv.kbtccs = 11; else m_itemv.kbtccs++; //inc(m_itemv.kbtccs); } //信号不好也强制结束 if(m_itemv.kbtccs >= 11) { //特殊地点业务翻译 TTestCtl* ctl = m_car->getTTestCtl(); const std::vector& s301 = TableSysSet->asArray301(); const std::vector s301_1 = s301.size() > 0 ? Tools::split(s301[0], ",") : std::vector(); const std::string s301_1_3 = s301_1.size() > 3 && s301_1[3] != "" ? s301_1[3] : ""; if(!ctl->Dw_Cs_Ok1 && s301_1_3 != "0" && ctl->dw_kf_sj == 0 && ksdd == siteof::zjwz) { const std::vector>& s308 = TableSysSet->asArray2_308(); if(!ctl->Dw_Cs_Ok2) { const std::vector temp = s308.size() > 0 ? s308[0] : std::vector(); //getdotstr(1, Sysset[308] + '^', '^'); if(!temp.empty()) { for(size_t i = 0 ; i < temp.size(); i++) { std::string str = temp[i]; if(str == "") { break; } const std::vector& ss = Tools::split(str, ","); int itemNo = ss.size() > 0 ? std::atoi(ss[0].c_str()) : 0; std::string serial = ss.size() > 1 ? ss[1] : ""; JUDGE_MARK_SUB3(itemNo, serial.c_str(), false); // JUDGE_MARK_SUB3(StrToInt(GetDotStr(1, str, ',')), GetDotStr(2, str + ',', ',')); } } else { JUDGE_MARK_SUB3(20, "60", true); //A310 3次 } } else { const std::vector temp = s308.size() > 1 ? s308[1] : std::vector(); if(!temp.empty()) { for(size_t i = 0 ; i < temp.size(); i++) { std::string str = temp[i]; if(str == "") { break; } const std::vector& ss = Tools::split(str, ","); int itemNo = ss.size() > 0 ? std::atoi(ss[0].c_str()) : 0; std::string serial = ss.size() > 1 ? ss[1] : ""; JUDGE_MARK_SUB3(itemNo, serial.c_str(), false); // JUDGE_MARK_SUB3(StrToInt(GetDotStr(1, str, ',')), GetDotStr(2, str + ',', ',')); } } else { JUDGE_MARK_SUB3(20, "60", true); //A310 } } } const std::string& s326 = TableSysSet->get326(); //靠边停车后是否进入下车状态评判(0-否 1-是) if(s326 == "1") //进入下车评判过程 { m_itemv.Status = 4; m_itemv.Enter_ljjl = cg->ai_ljjl; //语音提示-->请下车 m_itemv.jscnt = 1; //20170215 m_itemv.TingCheJiShi = cg->tkCnt; //20170215 m_car->createEventSound({itemNo(), sound::sub3_406004}); } else { m_itemv.Status = 100; // 准备结束项目 //20150702 河南要求 河南洛阳车管所科目三靠边停车修改评判要求:夜考时,靠边停车项目在停车后,拉手刹结束前需要评判是否打开视宽灯或把近光灯调成视宽灯。 if(s326 == "2") { TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); bool OKFlag = (item && item->Item_Color == itemStateZk); if(OKFlag == true) //夜间驾驶 { if(sor1.ygd == SYES || sor1.jgd == SYES || sor1.skd == SNOT) { JUDGE_MARK_SUB3(11, "09", true); //夜间在路边临时停车不关闭前照灯或不开启式廓灯 } } } if(s326 == "3") //20150924 河南濮阳 { m_itemv.Status = 7; //根据安全带松了判断结束 20150922 m_itemv.Enter_Tk = cg->tkCnt; //20151113 } } } } void Sub3Judge11Kbtc::DoStatus_4() { 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 std::string& ksdd = TableSysSet->get211(); //贵州特殊功能1 if(Tools::pos(siteof::guizhou, ksdd)) { const TChuanGan* his2 = m_car->historyChuanGan(2); const TChuanGan* his3 = m_car->historyChuanGan(3); const TChuanGan* his4 = m_car->historyChuanGan(4); if(cg->move == moveForward && his1->move == moveForward && his2->move == moveForward && his3->move == moveStop && his4->move == moveStop) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } } if((std::abs(cg->tkCnt - m_itemv.TingCheJiShi) / 20000) >= m_itemv.jscnt && ksdd != siteof::SXHZ && ksdd != siteof::hnay) { //计次,控制语音的 m_itemv.jscnt++; //inc(m_itemv.jscnt); //ToDo:语音提示-->靠边停车完成后,请下车 m_car->createEventSound({itemNo(), sound::sub3_406004}); } if(ksdd == siteof::zjnb) { if(cg->tkCnt - m_itemv.TingCheJiShi > 30*SECOND) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } } if(std::abs(cg->tkCnt - m_itemv.TingCheJiShi) > m_itemv.Parm_TC_KaiCheMen_ShiJian) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } const TSensorInfo& sor2 = m_car->historySensor(2); const TSensorInfo& sor3 = m_car->historySensor(3); const TSensorInfo& sor5 = m_car->historySensor(5); const TSensorInfo& sor6 = m_car->historySensor(6); const TSensorInfo& sor7 = m_car->historySensor(7); const TSensorInfo& sor8 = m_car->historySensor(8); const TSensorInfo& sor9 = m_car->historySensor(9); const TSensorInfo& sor10 = m_car->historySensor(10); if(ksdd == siteof::GXWZKM3) { if(sor.fdjzs > 0 && sor1.fdjzs > 0 && sor2.fdjzs > 0 && sor5.fdjzs > 0 && sor6.fdjzs == 0 && sor7.fdjzs == 0 && sor10.fdjzs == 0) { //因操作不当造成发动机熄火一次 JUDGE_MARK_SUB3(20, "36", false); } } if(ksdd == siteof::hnay) { if(sor.fdjzs == 0 && sor1.fdjzs == 0 && sor2.fdjzs == 0 && sor5.fdjzs == 0 && sor6.fdjzs == 0 && sor7.fdjzs == 0 && sor8.fdjzs > 0 && sor9.fdjzs > 0 && sor10.fdjzs > 0) { if(sor.dw > 0 && sor1.dw > 0) { const std::string& s527 = TableSysSet->get527(); if(s527 != "1") { //因操作不当造成发动机熄火一次 JUDGE_MARK_SUB3(20, "36", false); } m_itemv.chongxindianhuo = true; m_itemv.chongxindianhuo_tk = cg->tkCnt; } if(sor.lhq > 0 && sor1.lhq > 0) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } } //特殊地点版本 if(m_itemv.chongxindianhuo) { if(sor.fdjzs > 500 && sor1.fdjzs > 500 && sor2.fdjzs > 500 && sor5.fdjzs > 500) { m_itemv.chongxindianhuo = false; } if(cg->tkCnt - m_itemv.chongxindianhuo_tk > 120000) { m_itemv.chongxindianhuo_tk = cg->tkCnt; //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } } else { if(sor.dh2 == SYES && sor1.dh2 == SYES && sor2.dh2 == SNOT && sor3.dh2 == SNOT) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } } } if((sor.mkg == SYES && sor1.mkg == SYES && sor2.mkg == SYES) || (ksdd == siteof::JXNC && sor.mkg == SYES)) { //20150304 if(Tools::pos(siteof::guizhou, ksdd) || ksdd == siteof::ynzt) { if(!m_itemv.bJc) { if(m_itemv.bJc2) //20160229 { //满足条件 m_itemv.bJc = true; } else { //需要下车的,在打开车门前不回头观察左后方交通情况 JUDGE_MARK_SUB3(11, "02", false); m_itemv.bJc = true; } } } if(ksdd == siteof::changzhoukm3) { if(m_itemv.Kf06) { //拉紧驻车制动器前放松行车制动踏板 JUDGE_MARK_SUB3(11, "06", false); m_itemv.Kf06 = false; } } if(sor.ssc == SNOT && !m_itemv.Kf05) { m_itemv.Kf05 = true; //20160928 //停车后,未拉紧驻车制动器 JUDGE_MARK_SUB3(11, "05", false); } if(sor2.mkg == SYES || (ksdd == siteof::JXNC && sor.mkg == SYES)) //连续3帧数据是开门信号,才算开门 20140825 and (lscg[zj(5)].di_mkg = 1) { if(m_itemv.chongxindianhuo) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", false); } TCar* tcar = m_car->getTCar(); //夜考相关的 //2025-02-13 yhy 修改 if(tcar->Night_ID) //if(ksdd == siteof::shanxi && tcar->Night_ID) { int c = 0; if(sor2.skd == SNOT && sor.skd == SNOT) { c = 1; } if(sor2.jgd == SYES && sor.jgd == SYES) { c = 1; } if(sor2.ygd == SYES && sor.ygd == SYES) { c = 1; } if(c == 1) { //在路边临时停车不关闭前照灯和不开启示廓灯 JUDGE_MARK_SUB3(13, "07", true); } } //20180403 以开车门就评判 //下车熄火判断时机:0 - 开门;1 - 关门 const std::vector& s505 = TableSysSet->asArray505(); int s505_12 = s505.size() > 12 && s505[12] != "" ? std::atoi(s505[12].c_str()) : 0; if(s505_12 == 0) { int c = 0; if(ksdd == siteof::sxbjxc || ksdd == siteof::sxbjdc) { if(sor.fdjzs > 600) { c = 1; } } else { if(sor.fdjzs > 200) { c = 1; } } if(c == 1 && sor.fdjzs < 8000) { //下车前不将发动机熄火 JUDGE_MARK_SUB3(11, "08", true); } } if(ksdd == siteof::scyb) { if(sor.yfxd + sor.zfxd >= 1 && sor1.yfxd + sor1.zfxd >= 1 && sor2.yfxd + sor2.zfxd >= 1) { //不能正确使用灯光、雨刮器等车辆常用操纵件 JUDGE_MARK_SUB3(20, "93", false); } } //20180115 if(ksdd.substr(0, 7) == siteof::guizhou) { if(sor.aqd == SYES && sor1.aqd == SYES && sor2.aqd == SYES) { //不按规定使用安全带或者戴安全头盔 JUDGE_MARK_SUB3(20, "01", true); } } int s505_10 = s505.size() > 10 && s505[10] != "" ? std::atoi(s505[10].c_str()) : 0; //下车开门前是否判断安全带 if(s505_10 == 1) { if(sor.aqd == SYES && sor1.aqd == SYES && sor2.aqd == SYES) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(20, "46", true); } } //开门前不关闭方向灯是否扣分 int s505_11 = s505.size() > 11 && s505[11] != "" ? std::atoi(s505[11].c_str()) : 0; if(s505_11 == 1) { if(sor.yfxd == SYES && sor1.yfxd == SYES) { JUDGE_MARK_SUB3(20, "71", false); } } if(ksdd == siteof::zjnb) { if(sor.aqd == SYES && sor1.aqd == SYES && sor2.aqd == SYES) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); } } if(ksdd == siteof::nmgcfkm3 || ksdd == siteof::nmgtlkm3 || ksdd == siteof::hnzzkm3) { if(sor.dw > 0 && sor1.dw > 0 && sor2.dw > 0 && sor.dw < 10 && sor1.dw < 10 && sor2.dw < 10) { //不按考试员指令驾驶 JUDGE_MARK_SUB3(11, "45", true); } } //ToDo:头部姿态 m_itemv.Status = 5; m_itemv.Enter_Tk = cg->tkCnt; } //20171212 唐山要求开车门 评判距离 if(ksdd == siteof::hbtskm3 || ksdd == siteof::lyggy) { if(m_car->rtkEnabled()) { Judge_KBTC_YaXian(); Judge_KBTC_YaXian_Tail(); //A2C6-20250314 } } // 20171211 } else //20170215 { if(ksdd == siteof::SXHZ) { //靠边停车后,3分钟内每隔30秒提示考试完成请下车考试语音,3分钟后仍然不下车的,以不按考试员指令驾驶评判为不合格。 //20170508 if(std::abs(cg->tkCnt - m_itemv.TingCheJiShi) <= m_itemv.Parm_HanZhong_KBTC_SJ) //3 * 60 * 1000 then { if(m_itemv.jscnt < m_itemv.Parm_HanZhong_KBTC_SJ) { if((std::abs(cg->tkCnt - m_itemv.TingCheJiShi) / 30*SECOND) >= m_itemv.jscnt) { m_itemv.jscnt++; //inc(m_itemv.jscnt); //ToDo:语音提示-->下车时请注意左后方来车 m_car->createEventSound({itemNo(), sound::sub3_406004}); } } } else { JUDGE_MARK_SUB3(11, "45", true); m_exam->TestPro = ItemProFlagEnd; return; } } if(ksdd == siteof::HLJDQ || ksdd == siteof::hebeihskm3) //20170616 { //靠边停车后,3分钟内每隔30秒提示考试完成请下车考试语音,3分钟后仍然不下车的,以不按考试员指令驾驶评判为不合格。 if(std::abs(cg->tkCnt - m_itemv.TingCheJiShi) > m_itemv.Parm_HanZhong_KBTC_SJ) //3 * 60 * 1000 then { JUDGE_MARK_SUB3(11, "45", true); m_exam->TestPro = ItemProFlagEnd; return; } } } } void Sub3Judge11Kbtc::DoStatus_5() { 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 std::string& ksdd = TableSysSet->get211(); const TSensorInfo& sor2 = m_car->historySensor(2); const TSensorInfo& sor3 = m_car->historySensor(3); //如果关门进入下一阶段 if(sor.mkg == SNOT && sor1.mkg == SNOT && sor2.mkg == SNOT && sor3.mkg == SYES) { if(ksdd.substr(0,7) == siteof::guizhou) { if(sor.fsc == SYES && sor1.fsc == SYES && sor2.fsc == SYES) { //不按考试员指令行驶 JUDGE_MARK_SUB3(20, "50", false); } } m_itemv.Status = 6; //考试结束计时 m_itemv.KaoShiJieShu_JS = cg->tkCnt; return; } //如果到时间15S进入下一阶段 if(cg->tkCnt - m_itemv.Enter_Tk > m_itemv.parm_KaiMen_Status6 * SECOND) { m_itemv.Status = 6; m_itemv.KaoShiJieShu_JS = cg->tkCnt; return; } } void Sub3Judge11Kbtc::DoStatus_6() { 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 std::string& ksdd = TableSysSet->get211(); const TSensorInfo& sor2 = m_car->historySensor(2); const TSensorInfo& sor3 = m_car->historySensor(3); //SysSet[505]-->13 //下车熄火判断时机:0-开门;1-关门 const std::vector& s505 = TableSysSet->asArray505(); int s505_12 = s505.size() > 12 && s505[12] != "" ? std::atoi(s505[12].c_str()) : 0; if(s505_12 == 1) { int c = 0; if(ksdd == siteof::sxbjxc || ksdd ==siteof::sxbjdc) { if(sor.fdjzs > 600) { c = 1; } } else { if(sor.fdjzs > 200) { c = 1; } } if(c == 1 && sor.fdjzs < 8000) { //下车前不将发动机熄火 JUDGE_MARK_SUB3(11, "08", true); } } //20190408 if(sor.mkg == SYES && sor1.mkg == SYES && sor2.mkg == SYES && sor3.mkg == SYES && (!IS_C5(m_carType) || ksdd == siteof::shanghaikm3)) { //下车后不关闭车门 JUDGE_MARK_SUB3(11, "07", true); //20160928 } TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶 bool FindFlag = (item && item->Item_Color == itemStateZk); if(FindFlag == true) //夜间驾驶 { if(ksdd == siteof::hbxy) //20160122 { if(sor.ygd == SYES || sor.jgd == SYES || sor.skd == SNOT || sor.shtd == SNOT) { JUDGE_MARK_SUB3(11, "09", false); //夜间在路边临时停车不关闭前照灯或不开启式廓灯 } } else { if(sor.ygd == SYES || sor.jgd == SYES || sor.skd == SNOT) { if(ksdd == siteof::GXWZKM3) { //在路边临时停车不关闭前照灯或不开启示廓灯 JUDGE_MARK_SUB3(11, "09", false); } else { //在路边临时停车不关闭前照灯或不开启示廓灯 JUDGE_MARK_SUB3(11, "09", false); } } } } //特殊地点版本处理 if(ksdd == siteof::GXWZKM3) { if(cg->tkCnt - m_itemv.KaoShiJieShu_JS > 25 * SECOND) { //结束项目处理 m_itemv.Status = 100; } } else if(ksdd == siteof::gxbhkm3) { if(cg->tkCnt - m_itemv.KaoShiJieShu_JS > 15 * SECOND) { m_itemv.Status = 100; } } else { m_itemv.Status = 100; } m_car->setPubKaoBianTCFinish_LJJL(cg->ai_ljjl); } void Sub3Judge11Kbtc::DoStatus_100() { m_exam->TestPro = ItemProFlagEnd; const std::string& ksdd = TableSysSet->get211(); if(ksdd == siteof::changzhoukm3) //20170315 { //结束直行路口 m_car->KM3EndItem(Sub3ItemType05Lkzx); //结束左转弯 m_car->KM3EndItem(Sub3ItemType15Lkzz); //结束右转弯 m_car->KM3EndItem(Sub3ItemType16Lkyz); } //检查是否有未做的项目,除了靠边停车是否都已经完成 bool FindFlag = m_car->itemsNotFinishExcept(Sub3ItemType11Kbtc); if(FindFlag == true) { //ToDo: 语音提示-->请起步,继续完成考试 m_car->createEventSound({itemNo(), sound::sub3_406005}); } } void Sub3Judge11Kbtc::Judge_KBTC_YaXian() { //3帧车身右上离右侧边线距离 int RightJL0_RF = 0; int RightJL1_RF = 0; int RightJL2_RF = 0; //3帧车身右下离右侧边线距离 int RightJL0_RB = 0; int RightJL1_RB = 0; int RightJL2_RB = 0; //3帧车身右中心点离右侧边线距离 //ZXD_JL0: Integer; //ZXD_JL1: Integer; //ZXD_JL2: Integer; const TRTKResult& RTKKM3_0 = m_car->historyRtkKM3(0); const TRTKResult& RTKKM3_1 = m_car->historyRtkKM3(1); const TRTKResult& RTKKM3_2 = m_car->historyRtkKM3(2); //车身右侧距离计算 //靠边停车以右前轮、右后轮判靠边距离(0-否 1-是) const std::string& s411 = TableSysSet->get411(); if(s411 != "1") { RightJL0_RF = RTKKM3_0.Body_RF_ToBaseLine; RightJL1_RF = RTKKM3_1.Body_RF_ToBaseLine; RightJL2_RF = RTKKM3_2.Body_RF_ToBaseLine; RightJL0_RB = RTKKM3_0.Body_RB_ToBaseLine; RightJL1_RB = RTKKM3_1.Body_RB_ToBaseLine; RightJL2_RB = RTKKM3_2.Body_RB_ToBaseLine; } else { RightJL0_RF = RTKKM3_0.Wheel_RF_ToBaseLine; RightJL1_RF = RTKKM3_1.Wheel_RF_ToBaseLine; RightJL2_RF = RTKKM3_2.Wheel_RF_ToBaseLine; RightJL0_RB = RTKKM3_0.Wheel_RB_ToBaseLine; RightJL1_RB = RTKKM3_1.Wheel_RB_ToBaseLine; RightJL2_RB = RTKKM3_2.Wheel_RB_ToBaseLine; } //ZXD_JL0 := (RightJL0_RF + RightJL0_RB) div 2; //ZXD_JL1 := (RightJL1_RF + RightJL1_RB) div 2; //ZXD_JL2 := (RightJL2_RF + RightJL2_RB) div 2; int Max_JL0 = std::max(RightJL0_RF, RightJL0_RB); int Max_JL1 = std::max(RightJL1_RF, RightJL1_RB); int Max_JL2 = std::max(RightJL2_RF, RightJL2_RB); if(m_car->rtkEnabled() == false) return; bool FindFlag = false; if(RTKKM3_0.TouchLineType == LineType_3 && RTKKM3_1.TouchLineType == LineType_3 && RTKKM3_2.TouchLineType == LineType_3) { FindFlag = true; } if(RTKKM3_0.TouchLineTypeCS == LineType_3 && RTKKM3_1.TouchLineTypeCS == LineType_3 && RTKKM3_2.TouchLineTypeCS == LineType_3) { FindFlag = true; } //车身出线 bool CheShenChuXian = false; // 20150415 出线,边缘线为负值 if(FindFlag == true) { int JL0 = std::min(RTKKM3_0.Body_RF_ToBaseLine, RTKKM3_0.Body_RB_ToBaseLine); int JL1 = std::min(RTKKM3_1.Body_RF_ToBaseLine, RTKKM3_1.Body_RB_ToBaseLine); int JL2 = std::min(RTKKM3_2.Body_RF_ToBaseLine, RTKKM3_2.Body_RB_ToBaseLine); int s481 = TableSysSet->asInt481(); if(JL0 + s481 < 0 && JL1 + s481 < 0 && JL2 + s481 < 0 && !m_itemv.Kf03) { CheShenChuXian = true; } } if(CheShenChuXian == true) { m_itemv.Kf03 = true; //20160928 //停车后,车身超过道路右侧边缘线或者人行道边缘 JUDGE_MARK_SUB3(11, "03", false); } else { const TGpsInfo& gps = m_car->historyGps(); //靠边停车以右前、后轮判靠边距离(0-否 1-是) int RtkOffset = m_car->getTCar()->RtkOffset; int offset = RtkOffset + std::round(gps.jdyz*100) + std::round(gps.wdyz*100); Max_JL0 -= offset; Max_JL1 -= offset; Max_JL2 -= offset; //20170724 int kbtcwc = 50 + m_itemv.kbtcwc; if(Max_JL0 > kbtcwc && Max_JL1 > kbtcwc && Max_JL2 > kbtcwc) { if(m_itemv.dcykkb == 0) //大车夜考相关的参数 { //停车后,车身距离道路右侧边缘线或者人行道边缘超出50cm JUDGE_MARK_SUB3(11, "04", true); //20170724 新增 } } else { if(Max_JL0 > 30 + m_itemv.kbtcwc && Max_JL1 > 30 + m_itemv.kbtcwc && Max_JL2 > 30 + m_itemv.kbtcwc) { if(!m_itemv.Kf10) { m_itemv.Kf10 = true; //20160928 if(m_itemv.dcykkb == 0) //20181015 { //靠边30相关的 JUDGE_MARK_SUB3(11, "10", true); } } } } //特殊规则,直接翻译代码即可 if(s411 != "1") { std::string txt2 = m_exam->Txt2; if(Tools::pos(",", txt2)) { bool ok = Tools::pos("," + RTKKM3_0.MapRoad_Code_No + ",", "," + txt2 + ","); if(RTKKM3_0.MapRoad_Code_No == "" || (RTKKM3_0.MapRoad_Code_No != "" && ok == false)) { if(m_itemv.dcykkb == 0) //20181015 { JUDGE_MARK_SUB3(11, "04", true); } } } } } } void Sub3Judge11Kbtc::Judge_KBTC_YaXian_Tail() { if(!IS_A2C6(m_carType)) { return; } //3帧车身右上离右侧边线距离 int RightJL0_RF = 0; int RightJL1_RF = 0; int RightJL2_RF = 0; //3帧车身右下离右侧边线距离 int RightJL0_RB = 0; int RightJL1_RB = 0; int RightJL2_RB = 0; //3帧车身右中心点离右侧边线距离 //ZXD_JL0: Integer; //ZXD_JL1: Integer; //ZXD_JL2: Integer; const TRTKResult& RTKKM3_Tail_0 = m_car->historyRtkKM3_Tail(0); const TRTKResult& RTKKM3_Tail_1 = m_car->historyRtkKM3_Tail(1); const TRTKResult& RTKKM3_Tail_2 = m_car->historyRtkKM3_Tail(2); //车身右侧距离计算 //靠边停车以右前轮、右后轮判靠边距离(0-否 1-是) const std::string& s411 = TableSysSet->get411(); if(s411 != "1") { RightJL0_RF = RTKKM3_Tail_0.Body_RF_ToBaseLine; RightJL1_RF = RTKKM3_Tail_1.Body_RF_ToBaseLine; RightJL2_RF = RTKKM3_Tail_2.Body_RF_ToBaseLine; RightJL0_RB = RTKKM3_Tail_0.Body_RB_ToBaseLine; RightJL1_RB = RTKKM3_Tail_1.Body_RB_ToBaseLine; RightJL2_RB = RTKKM3_Tail_2.Body_RB_ToBaseLine; } else { RightJL0_RF = RTKKM3_Tail_0.Wheel_RF_ToBaseLine; RightJL1_RF = RTKKM3_Tail_1.Wheel_RF_ToBaseLine; RightJL2_RF = RTKKM3_Tail_2.Wheel_RF_ToBaseLine; RightJL0_RB = RTKKM3_Tail_0.Wheel_RB_ToBaseLine; RightJL1_RB = RTKKM3_Tail_1.Wheel_RB_ToBaseLine; RightJL2_RB = RTKKM3_Tail_2.Wheel_RB_ToBaseLine; } //ZXD_JL0 := (RightJL0_RF + RightJL0_RB) div 2; //ZXD_JL1 := (RightJL1_RF + RightJL1_RB) div 2; //ZXD_JL2 := (RightJL2_RF + RightJL2_RB) div 2; int Max_JL0 = std::max(RightJL0_RF, RightJL0_RB); int Max_JL1 = std::max(RightJL1_RF, RightJL1_RB); int Max_JL2 = std::max(RightJL2_RF, RightJL2_RB); if(m_car->rtkEnabled2() == false) return; bool FindFlag = false; if(RTKKM3_Tail_0.TouchLineType == LineType_3 && RTKKM3_Tail_1.TouchLineType == LineType_3 && RTKKM3_Tail_2.TouchLineType == LineType_3) { FindFlag = true; } if(RTKKM3_Tail_0.TouchLineTypeCS == LineType_3 && RTKKM3_Tail_1.TouchLineTypeCS == LineType_3 && RTKKM3_Tail_2.TouchLineTypeCS == LineType_3) { FindFlag = true; } //车身出线 bool CheShenChuXian = false; // 20150415 出线,边缘线为负值 if(FindFlag == true) { int JL0 = std::min(RTKKM3_Tail_0.Body_RF_ToBaseLine, RTKKM3_Tail_0.Body_RB_ToBaseLine); int JL1 = std::min(RTKKM3_Tail_1.Body_RF_ToBaseLine, RTKKM3_Tail_1.Body_RB_ToBaseLine); int JL2 = std::min(RTKKM3_Tail_2.Body_RF_ToBaseLine, RTKKM3_Tail_2.Body_RB_ToBaseLine); int s481 = TableSysSet->asInt481(); if(JL0 + s481 < 0 && JL1 + s481 < 0 && JL2 + s481 < 0 && !m_itemv.Kf03) { CheShenChuXian = true; } } if(CheShenChuXian == true) { m_itemv.Kf03 = true; //20160928 //停车后,车身超过道路右侧边缘线或者人行道边缘 JUDGE_MARK_SUB3(11, "03", false); } else { const TGpsInfo& gps2 = m_car->historyGps2(); //靠边停车以右前、后轮判靠边距离(0-否 1-是) int RtkOffset = m_car->getTCar()->RtkOffset; int offset = RtkOffset + std::round(gps2.jdyz*100) + std::round(gps2.wdyz*100); Max_JL0 -= offset; Max_JL1 -= offset; Max_JL2 -= offset; //20170724 int kbtcwc = 50 + m_itemv.kbtcwc; if(Max_JL0 > kbtcwc && Max_JL1 > kbtcwc && Max_JL2 > kbtcwc) { if(m_itemv.dcykkb == 0) //大车夜考相关的参数 { //停车后,车身距离道路右侧边缘线或者人行道边缘超出50cm JUDGE_MARK_SUB3(11, "04", true); //20170724 新增 } } else { if(Max_JL0 > 30 + m_itemv.kbtcwc && Max_JL1 > 30 + m_itemv.kbtcwc && Max_JL2 > 30 + m_itemv.kbtcwc) { if(!m_itemv.Kf10) { m_itemv.Kf10 = true; //20160928 if(m_itemv.dcykkb == 0) //20181015 { //靠边30相关的 JUDGE_MARK_SUB3(11, "10", true); } } } } //特殊规则,直接翻译代码即可 if(s411 != "1") { std::string txt2 = m_exam->Txt2; if(Tools::pos(",", txt2)) { bool ok = Tools::pos("," + RTKKM3_Tail_0.MapRoad_Code_No + ",", "," + txt2 + ","); if(RTKKM3_Tail_0.MapRoad_Code_No == "" || (RTKKM3_Tail_0.MapRoad_Code_No != "" && ok == false)) { if(m_itemv.dcykkb == 0) //20181015 { JUDGE_MARK_SUB3(11, "04", true); } } } } } } void Sub3Judge11Kbtc::NS3JudgeVision_40601() { //靠边停车项目中,停车前10s内头部姿态没有大于右后侧角度【25度】 if(!NS3UsingAndData(NS3UsingPose)) return; int64 nowTime = m_car->GetCurrentTime2(); const TNS3PoseSysset& poseSys = m_nsub3->getPoseSysset(); const TVisionPose* pose0 = m_nsub3->hisPose(0); if(pose0->zy > poseSys.rightBack) { m_itemv.stopPose = nowTime; } const TChuanGan* cg = m_car->historyChuanGan(); const TChuanGan* his1 = m_car->historyChuanGan(1); const TChuanGan* his2 = m_car->historyChuanGan(2); if(cg->move == moveStop && his1->move == moveStop && his2->move == moveForward) { if(nowTime - m_itemv.stopPose > 10*SECOND) { m_itemv.stopPose = nowTime; JUDGE_MARK_NSUB3(11, "01", false); //NS3video } } } void Sub3Judge11Kbtc::NS3JudgeVision_40604() { //靠边停车项目中,打开车门前10s内头部姿态没有大于左后侧角度【25度】 if(!NS3UsingAndData(NS3UsingPose)) return; int64 nowTime = m_car->GetCurrentTime2(); const TNS3PoseSysset& poseSys = m_nsub3->getPoseSysset(); const TVisionPose* pose0 = m_nsub3->hisPose(0); if(pose0->zy < -poseSys.leftBack) { m_itemv.doorPose = nowTime; } const TSensorInfo& sor = m_car->historySensor(); const TSensorInfo& sor1 = m_car->historySensor(1); const TSensorInfo& sor2 = m_car->historySensor(2); if(sor.mkg == SYES && sor1.mkg == SYES && sor2.mkg == SNOT) { if(nowTime - m_itemv.doorPose > 10*SECOND) { m_itemv.doorPose = nowTime; JUDGE_MARK_NSUB3(11, "02", false); //NS3video } } }