1632 lines
54 KiB
C++
1632 lines
54 KiB
C++
#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<std::string>& 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<std::vector<std::string>>& s523 = TableSysSet->asArray2_523();
|
||
if(!s523.empty())
|
||
{
|
||
for(size_t i = 0; i < s523.size(); i++)
|
||
{
|
||
const std::vector<std::string>& 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<std::string>& 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<std::string>& s301 = TableSysSet->asArray301();
|
||
const std::vector<std::string> s301_1 = s301.size() > 0 ? Tools::split(s301[0], ",") : std::vector<std::string>();
|
||
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<std::vector<std::string>>& s308 = TableSysSet->asArray2_308();
|
||
if(!ctl->Dw_Cs_Ok2)
|
||
{
|
||
const std::vector<std::string> temp = s308.size() > 0 ? s308[0] : std::vector<std::string>(); //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<std::string>& 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<std::string> temp = s308.size() > 1 ? s308[1] : std::vector<std::string>();
|
||
if(!temp.empty())
|
||
{
|
||
for(size_t i = 0 ; i < temp.size(); i++)
|
||
{
|
||
std::string str = temp[i];
|
||
if(str == "")
|
||
{
|
||
break;
|
||
}
|
||
const std::vector<std::string>& 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<std::string>& 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<std::string>& 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
|
||
}
|
||
}
|
||
}
|