diff --git a/entry/src/main/cpp/sdk/common/HVersion.h b/entry/src/main/cpp/sdk/common/HVersion.h index 841011b2..bc0568f6 100644 --- a/entry/src/main/cpp/sdk/common/HVersion.h +++ b/entry/src/main/cpp/sdk/common/HVersion.h @@ -27,7 +27,7 @@ #define JUDGE_VERSION_MAJOR 1 #define JUDGE_VERSION_MINOR 0 #define JUDGE_VERSION_PATCH 3 -#define JUDGE_VERSION_STAMP "2505201042b" +#define JUDGE_VERSION_STAMP "2506041100b" #if JUDGE_USE_OLD # undef JUDGE_VERSION_STAMP # define JUDGE_VERSION_STAMP "2411121010b.old" @@ -56,4 +56,12 @@ extern const char JUDGE_VERSION_INFO[]; //版本详细信息[版本号+版本编译日期] 1.2.3.2304241030 #endif +struct TVersionInfo +{ + int major; + int minor; + int patch; + std::string stamp; +}; + #endif // HVERSION_H diff --git a/entry/src/main/cpp/sdk/common/Tools.cpp b/entry/src/main/cpp/sdk/common/Tools.cpp index 6a348c93..bfd356f5 100644 --- a/entry/src/main/cpp/sdk/common/Tools.cpp +++ b/entry/src/main/cpp/sdk/common/Tools.cpp @@ -2,18 +2,15 @@ #include "HVersion.h" #include "Loggerxx.h" -bool Tools::checkVersion(const std::string& version) +TVersionInfo Tools::splitVersion(const std::string& sdkver) { - std::vector ver = Tools::split(version, "."); - //int major = std::atoi(ver[0].c_str()); - //int minor = std::atoi(ver[1].c_str()); - //int patch = std::atoi(ver[2].c_str()); - std::string v3 = ver[3]; - if(v3.back() == 'b') - { - v3.pop_back(); - } - return (v3 < "2505121242"); + TVersionInfo verinfo; + std::vector ver = Tools::split(sdkver, "."); + verinfo.major = std::atoi(ver[0].c_str()); + verinfo.minor = std::atoi(ver[1].c_str()); + verinfo.patch = std::atoi(ver[2].c_str()); + verinfo.stamp = ver[3]; + return verinfo; } int64 Tools::nowTime() diff --git a/entry/src/main/cpp/sdk/common/Tools.h b/entry/src/main/cpp/sdk/common/Tools.h index de223227..e99d7812 100644 --- a/entry/src/main/cpp/sdk/common/Tools.h +++ b/entry/src/main/cpp/sdk/common/Tools.h @@ -9,12 +9,14 @@ #define TOOLS_H #include "HDefine.h" +#include "HVersion.h" class Tools { public: - static bool checkVersion(const std::string& version); + //解析版本号 + static TVersionInfo splitVersion(const std::string& sdkver); //获取当前系统时间,单位:毫秒 static int64 nowTime(); //壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准 diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp index d44b9f39..8f4b2079 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp @@ -160,6 +160,7 @@ ErrorCode ExamCarSub3::examJudgeExam() ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) { + //810参数为1时,所有扣分项均可远程扣分;其它,只能扣 MARKSERIAL 大于 99 的扣分项 const std::string& ksdd = TableSysSet->get211(); if(ksdd == siteof::zjhz && isExamDrill()) { @@ -167,9 +168,12 @@ ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& ser return QE(errorArtifForbid); } const std::string& s342 = TableSysSet->get342(); - if(s342 == "1" || s342 == "3") + if(type == MarkTypeArti) { - return QE(errorArtifForbid); + if(s342 == "1" || s342 == "3") //车上不允许人工扣分 + { + return QE(errorArtifForbid); + } } examMarkItem(itemno, serial, false, true, true, type); diff --git a/entry/src/main/cpp/sdk/exam/ExamSensor.cpp b/entry/src/main/cpp/sdk/exam/ExamSensor.cpp index 60f1cc12..5229f4cf 100644 --- a/entry/src/main/cpp/sdk/exam/ExamSensor.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamSensor.cpp @@ -169,17 +169,17 @@ bool ExamSensor::convertDatas(TChuanGan* cg) //航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰 //2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的 - if(Tools::checkVersion(m_car->carVerison())) - { - if(gps.bklx == boardTypeTB) - { - gps.hxj += 180.0; - } - if(gps.hxj >= 360.0) - { - gps.hxj -= 360.0; - } - } + //if(Tools::checkVersion(m_car->carVerison())) + //{ + // if(gps.bklx == boardTypeTB) + // { + // gps.hxj += 180.0; + // } + // if(gps.hxj >= 360.0) + // { + // gps.hxj -= 360.0; + // } + //} //实际上车这里经纬度要转化,测试的数据都是转化好的 gps.jd = GpsMath::convertGpsCoord2(gps.jd); @@ -196,17 +196,17 @@ bool ExamSensor::convertDatas(TChuanGan* cg) { TGpsInfo& gps2 = cg->real.gps2; //2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的 - if(Tools::checkVersion(m_car->carVerison())) - { - if(gps2.bklx == boardTypeTB) - { - gps2.hxj += 180.0; - } - if(gps2.hxj >= 360.0) - { - gps2.hxj -= 360.0; - } - } + //if(Tools::checkVersion(m_car->carVerison())) + //{ + // if(gps2.bklx == boardTypeTB) + // { + // gps2.hxj += 180.0; + // } + // if(gps2.hxj >= 360.0) + // { + // gps2.hxj -= 360.0; + // } + //} //实际上车这里经纬度要转化,测试的数据都是转化好的 gps2.jd = GpsMath::convertGpsCoord2(gps2.jd); gps2.wd = GpsMath::convertGpsCoord2(gps2.wd); diff --git a/entry/src/main/cpp/sdk/judge/HJudgeItem.h b/entry/src/main/cpp/sdk/judge/HJudgeItem.h index 28d2020e..7bf160cb 100644 --- a/entry/src/main/cpp/sdk/judge/HJudgeItem.h +++ b/entry/src/main/cpp/sdk/judge/HJudgeItem.h @@ -552,6 +552,11 @@ struct TSub3Item02Qbxx //起步 2 Pointi PubLCTCPtt; bool PubCanMarkLC50Flag = true; //注意初始必须是true + int jsc_qibu_10 = 0; + bool Mark_A302ID = false; + int64 ssc2qjsj = 0; + int64 ssc2qjtk = 0; + //新科三参数 int64 obsTime = 0; }; diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp index 2459d4d8..5ffa2f39 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp @@ -233,7 +233,7 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage1) m_outLine = false; } - if(cgcu->move == moveStop && cg01->move == moveBackward && cg02->move == moveBackward) + if(cgcu->move == moveStop && cg01->move == moveBackward) // && cg02->move == moveBackward { m_outLine = false; //车辆入库停止后,车身出线 @@ -436,21 +436,27 @@ void Sub2Judge03Cftc::judgeTouchLine() { if(IS_C1C2C5(m_carType)) { - //以下计算所有的压线扣分(只用车轮子计算的) - touchLineWheel_C1C2C5(LineNum::L23_NUM); - touchLineWheel_C1C2C5(LineNum::L34_NUM); - touchLineWheel_C1C2C5(LineNum::L45_NUM); - touchLineWheel_C1C2C5(LineNum::L56_NUM); - touchLineWheel_C1C2C5(LineNum::L67_NUM); - touchLineWheel_C1C2C5(LineNum::L18_NUM); - touchLineWheel_C1C2C5(LineNum::L36_NUM); //2024-12-11 + TChuanGan* cgcu = m_car->historyChuanGan(); + TChuanGan* cg01 = m_car->historyChuanGan(1); + //计算是否过了上库位控制线、是否穿越了结束线 + if(cgcu->move != moveStop && cg01->move != moveStop) + { + //以下计算所有的压线扣分(只用车轮子计算的) + touchLineWheel_C1C2C5(LineNum::L23_NUM); + touchLineWheel_C1C2C5(LineNum::L34_NUM); + touchLineWheel_C1C2C5(LineNum::L45_NUM); + touchLineWheel_C1C2C5(LineNum::L56_NUM); + touchLineWheel_C1C2C5(LineNum::L67_NUM); + touchLineWheel_C1C2C5(LineNum::L18_NUM); + touchLineWheel_C1C2C5(LineNum::L36_NUM); //2024-12-11 - //#if JUDGE_USE_INSPECT - //无锡所新标准,车身触碰库位边线也要判,20240605 - touchLineBody_C1C2C5(LineNum::L34_NUM); - touchLineBody_C1C2C5(LineNum::L45_NUM); - touchLineBody_C1C2C5(LineNum::L56_NUM); - //#endif + //#if JUDGE_USE_INSPECT + //无锡所新标准,车身触碰库位边线也要判,20240605 + touchLineBody_C1C2C5(LineNum::L34_NUM); + touchLineBody_C1C2C5(LineNum::L45_NUM); + touchLineBody_C1C2C5(LineNum::L56_NUM); + //#endif + } } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp index d60df9d2..0abad5a8 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp @@ -23,7 +23,7 @@ bool Sub3Judge02Qbxx::dealJudgeEnter() const std::vector ss = Tools::split(str, "^"); m_itemv.sys502_8_1 = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0; m_itemv.sys502_8_2 = ss.size() > 1 && ss[1] != "" ? std::atoi(ss[1].c_str()) : 0; //StrToIntDef(GetDotStr(2, tempstr + '^', '^'), 0); - + m_itemv.jsc_qibu_10 = s502.size() > 12 && s502[12] != ""? std::atoi(s502[12].c_str()) : 0; //下面是视觉相关的,先把参数值拿到,暂时不实现 const std::vector& s531 = TableSysSet->asArray531(); if(s531.size() > 0 && s531[0] == "1") @@ -221,7 +221,7 @@ void Sub3Judge02Qbxx::dealJudgeItem() } //具备起步条件,10秒没有起步 -void Sub3Judge02Qbxx::nogo_timeout() +void Sub3Judge02Qbxx::nogo_timeout_old() { const TChuanGan* cg = m_car->historyChuanGan(); const TSensorInfo& sor = cg->real.sensor; @@ -229,6 +229,20 @@ void Sub3Judge02Qbxx::nogo_timeout() const TChuanGan* his1 = m_car->historyChuanGan(1); const TSensorInfo& sor1 = his1->real.sensor; + + //502:起步参数: qbcd, ssc2qjsj, qbpdsjl, qbfdjzsgg, qblcjl,cfjxm,qbsj, + //(1)qbcd:起步闯动起评值单位度 (2)ssc2qjsj:放手刹后X秒车轮未动扣分时间 + //(3)qbpdsjl:起步判怠速的有效距离 (4)qbfdjzsgg:发动机转速过高 + //(5)qblcjl:起步溜车最小距离 + //(6)cfjxm:进项目时机 0表示只要停车满足5秒就进入起步状态 1表示只有差分才能进项目 + //(7)qbsj:停车多长时间进入起步状态,单位秒,最大值5,最小值1 + //(8)10s未起步只评判第一次^第一次起步以打左方向灯开始计时^ + //(9)检查仪表在车辆启动状态下进行:1-是 + //(10)起步触发顺序:0-无限制,1-上车准备完成,2-模拟灯光完成 + //(11)自动挡也评判带档点火(p档信号为10) + //(12)点火不松开关不判断转速 + + //502第8个参数, 10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^ “具备起步条件,10秒没有起步” 扣几次 // C2 N空挡是0 R倒车档9 P驻车档10 D前进挡11 //档位或者手刹信号发生变化,且变化的结果是前进挡和松手刹状态,开始计时,10秒后扣分 if(m_itemv.ZhunBeiQiBuTK == 0) @@ -290,6 +304,266 @@ void Sub3Judge02Qbxx::nogo_timeout() */ } +void Sub3Judge02Qbxx::nogo_timeout() +{ + //***此代码和win核对过的一模一样 2025-05-28 + int i = 0; + //tempstr := getdotstr(8, sysset[502], ',') + '^'; + if(m_itemv.sys502_8_1 == 1) + { + if(m_Pub_First_QiBu_Flag) i = 1; + } + if(m_itemv.sys502_8_1 == 2) + { + if(m_Pub_First_QiBu_Flag) i = 1; + //if(itm20.lstc_zt > 0) //贵州要多考几个项目,这个是其中之一的临时停车项目中的停车状态 + //{ + // i = 0; + //} + } + + const std::string& ksdd = TableSysSet->get211(); + const TChuanGan* cg = m_car->historyChuanGan(); + const TSensorInfo& sor = cg->real.sensor; + const TSensorInfo& sor1 = m_car->historySensor(1); + const TSensorInfo& sor2 = m_car->historySensor(2); + const TSensorInfo& sor3 = m_car->historySensor(3); + + TKM3Item* item11 = m_car->findExamItem(Sub3ItemType11Kbtc); + if(item11 && item11->TestPro > ItemProFlagIdle) //if (Km3TsI[ItemArr(11)].TestPro > 0) //²»ÔÚ¿¿±ßÍ£³µ×´Ì¬ÄÚ + i = 1; + + if(m_itemv.Mark_A302ID) i = 1; + if (!m_Pub_First_QiBu_Flag && m_itemv.sys502_8_2 == 1) + { + if(m_itemv.ssc2qjsj == 0) + { + if(sor.zfxd == SYES && sor1.zfxd == SYES && sor2.zfxd == SNOT && sor3.zfxd == SNOT) + { + m_itemv.ssc2qjsj = cg->tkCnt; + } + } + if(m_itemv.ssc2qjtk == 0) + { + if (m_itemv.ssc2qjsj > 0 && cg->tkCnt - m_itemv.ssc2qjsj > 3000) + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + if(sor.zfxd == SNOT && sor1.zfxd == SNOT) + { + m_itemv.ssc2qjsj = 0; + m_itemv.ssc2qjtk = 0; + } + if (cg->move != moveStop) + { + m_itemv.ssc2qjsj = 0; + m_itemv.ssc2qjtk = 0; + } + if (m_itemv.ssc2qjtk > 0) + { + if(cg->tkCnt - m_itemv.ssc2qjtk > 10*SECOND) + { + m_itemv.Mark_A302ID = true; + m_itemv.ssc2qjtk = 0; + m_itemv.ssc2qjsj = 0; + if(ksdd == siteof::scms) + { + JUDGE_MARK_SUB3(2, "48", true); //Mark(2, '48', True) + } + else + { + JUDGE_MARK_SUB3(2, "48", false); //Mark(2, '48', False); + } + } + } + i = 1; + } + if(i == 0) + { + if(ksdd == siteof::sxbjxc || ksdd == siteof::sxbjdc) + { + if(cg->move != moveStop || sor.ssc == SYES || sor.fdjzs == 0) + { + m_itemv.ssc2qjtk = 0; + } + else + { + if(m_itemv.ssc2qjtk == 0) + { + if(sor.ssc == SNOT && sor1.ssc == SNOT) + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + } + } + else if(ksdd == siteof::nmgcfkm3) + { + if(cg->move != moveStop || sor.ssc == SYES || sor.fdjzs == 0) + { + m_itemv.ssc2qjtk = 0; + } + else + { + if(m_itemv.ssc2qjtk == 0) + { + if(sor.ssc == SNOT && sor1.ssc == SNOT && sor2.ssc == SYES && sor3.ssc == SYES) + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + } + } + else if(ksdd == siteof::scms) + { + if (cg->move != moveStop || sor.ssc == SYES || sor.dw == 0 || sor.dw == 9 || sor.dw == 10) + { + m_itemv.ssc2qjtk = 0; + } + else + { + if(m_itemv.ssc2qjtk == 0) + { + int a = 0; + if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11)) + { + if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11)) + { + a = 1; + } + } + if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1) + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + } + } + else if(ksdd == siteof::guizhouas) + { + if(cg->move != moveStop) + { + m_itemv.ssc2qjtk = 0; + } + else + { + if(m_itemv.ssc2qjtk == 0) + { + int a = 0; + if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11)) + { + if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11)) + { + a = 1; + } + } + if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1) + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + } + } + else + { + if(cg->move != moveStop || sor.ssc == SYES || sor.dw == 0 || sor.dw == 9 || sor.dw == 10 + || (m_itemv.jsc_qibu_10 == 1 && sor.jsc == SNOT)) + { + m_itemv.ssc2qjtk = 0; + } + else + { + if(m_itemv.ssc2qjtk == 0) + { + int a = 0; + if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11)) + { + if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11)) + { + a = 1; + } + } + if(sor.ssc == SNOT && sor1.ssc == SNOT && sor2.ssc == SYES && sor3.ssc == SYES && a == 1) + { + if(m_itemv.jsc_qibu_10 == 1) + { + if(sor.jsc == SNOT && sor1.jsc == SNOT) + m_itemv.ssc2qjtk = cg->tkCnt; + } + else + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + a = 0; + if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11)) + { + if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11)) + { + if((sor2.dw == 0 || sor2.dw == 10) && (sor3.dw == 0 || sor3.dw == 10)) + { + a = 1; + } + } + } + if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1) + { + if(m_itemv.jsc_qibu_10 == 1) + { + if(sor.jsc == SNOT && sor1.jsc == SNOT) + m_itemv.ssc2qjtk = cg->tkCnt; + } + else + { + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + if(m_itemv.jsc_qibu_10 == 1) + { + int a = 0; + if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11)) + { + if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11)) + { + a = 1; + } + } + if (sor.jsc == SNOT && sor1.jsc == SNOT && sor2.jsc == SYES && sor3.jsc == SYES && a == 1) + { + if(sor.ssc == SNOT && sor1.ssc == SNOT) + m_itemv.ssc2qjtk = cg->tkCnt; + } + } + } + } + } + if(ksdd == siteof::hnpy) + { + TKM3Item* item05 = m_car->findExamItem(Sub3ItemType05Lkzx); + if(item05 && item05->TestPro > ItemProFlagIdle) //if(Km3TsI[ItemArr(5)].TestPro > 0) + { + m_itemv.ssc2qjtk = 0; + } + } + if(m_itemv.ssc2qjtk > 0) + { + if(cg->tkCnt - m_itemv.ssc2qjtk > 10*SECOND) + { + m_itemv.Mark_A302ID = true; + m_itemv.ssc2qjtk = 0; + if(ksdd == siteof::scms) + { + JUDGE_MARK_SUB3(2, "48", true); //Mark(2, '48', True) + } + else + { + JUDGE_MARK_SUB3(2, "48", false); // Mark(2, '48', False); + } + } + } + } +} //6、起步方向灯、喇叭 void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa() @@ -343,7 +617,7 @@ void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa() const TChuanGan* hisi = m_car->historyChuanGan(i); if(hisi == nullptr) break; const TSensorInfo& sori = hisi->real.sensor; - if(hisi->move == moveStop) + //if(hisi->move == moveStop) { if(sori.zfxd == SYES && sori.yfxd == SNOT) { @@ -366,7 +640,7 @@ void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa() const TChuanGan* hisi = m_car->historyChuanGan(i); if(hisi == nullptr) break; const TSensorInfo& sori = hisi->real.sensor; - if(hisi->move == moveStop) + //if(hisi->move == moveStop) { if(sori.zfxd == SYES && sori.yfxd == SNOT) { diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.h b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.h index 1d3a3501..4910b1c6 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.h +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.h @@ -58,6 +58,7 @@ public: protected: //具备起步条件,10秒没有起步 + void nogo_timeout_old(); void nogo_timeout(); //1、溜车评判 void Judge_LiuChe(); diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp index c81de233..017eedf1 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp @@ -794,8 +794,9 @@ void Sub3Judge11Kbtc::DoStatus_3() //20150702 河南要求 河南洛阳车管所科目三靠边停车修改评判要求:夜考时,靠边停车项目在停车后,拉手刹结束前需要评判是否打开视宽灯或把近光灯调成视宽灯。 if(s326 == "2") { - TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); - bool OKFlag = (item && item->Item_Color == itemStateZk); + //TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); + //bool OKFlag = (item && item->Item_Color == itemStateZk); + bool OKFlag = m_car->getTCar()->Night_ID; if(OKFlag == true) //夜间驾驶 { if(sor1.ygd == SYES || sor1.jgd == SYES || sor1.skd == SNOT) @@ -1215,8 +1216,9 @@ void Sub3Judge11Kbtc::DoStatus_6() JUDGE_MARK_SUB3(11, "07", true); //20160928 } - TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶 - bool FindFlag = (item && item->Item_Color == itemStateZk); + //TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶 + //bool FindFlag = (item && item->Item_Color == itemStateZk); + bool FindFlag = m_car->getTCar()->Night_ID; if(FindFlag == true) //夜间驾驶 { if(ksdd == siteof::hbxy) //20160122 diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp index e2d5527b..3e74d34d 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp @@ -347,7 +347,7 @@ void Sub3Judge20Comm::Init_ZongHe() //转向灯打开,一开始的距离 m_itemvCJH.ZXD_Open_TempJL = -1; //临时停车状态 - m_itemvCJH.lstc_zt = -1; //20151116 + m_itemvCJH.lstc_zt = -1; //20151116 贵州要多考几个项目,这个是其中之一的临时停车项目中的停车状态 //夜间行驶用到,同方向近距离跟车行驶 m_itemvCJH.gc_zt = -1; //20160617 //夜间行驶用到,人行横道相关的 @@ -685,7 +685,7 @@ void Sub3Judge20Comm::Set_FDJ_DS() TotalZS = 0; for(int i = 1; i <= 25; i++) { - const TChuanGan* hisi = m_car->historyChuanGan(1); + const TChuanGan* hisi = m_car->historyChuanGan(i); const TSensorInfo& sori = hisi->real.sensor; if(hisi->move != moveStop) { @@ -877,7 +877,7 @@ void Sub3Judge20Comm::CallMoNiDengGuang() return; } - if(sor.aqd == SYES && sor1.aqd == SYES && sor2.aqd == SYES) //2024-11-13杭州新增 + if(sor.aqd == SYES && sor1.aqd == SYES) //2024-11-13杭州新增 { static constexpr int n = 10; //static constexpr int m = 0; @@ -932,7 +932,9 @@ void Sub3Judge20Comm::CallMoNiDengGuang() //501第10个参数时间毫秒、如果不配置那就是2米检查,如果过程中关闭再打开也算关闭 const std::string& s322 = TableSysSet->get322(); - if((sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100 && sor3.fdjzs > 100) || + //触发夜间灯光模拟的条件(0-点完成(先模拟灯光,再绕车一周)+1-插安全带或点火2(等待5秒)2-点火2+3-上车准备人工评判按钮切换+4-点击“继续考试”按钮触发+5-有点火1信号就可以触发,6-有安全带就触发) + //sor.dh2 == SNOT 防止考生长时间拧钥匙不松开,会导致出现扣分未及时松开启动开关2次不合格后,模拟灯光合格,第二次考试不用再考模拟灯光的漏判。 + if((sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100 && sor3.fdjzs > 100 /*&& sor.dh2 == SNOT*/) || (Tools::pos(JUDGE_UTF8S("江淮电动"), m_car->carClass()) && sor.dh1 == SYES) || (s386 == "5" && sor.dh1 == SYES) || (s386 == "6" && sor.aqd == SYES && sor1.aqd == SYES) ) //20170314 训练模式 只要有dh1就可以进行模拟灯光 diff --git a/entry/src/main/cpp/sdk/track/TrackReader.cpp b/entry/src/main/cpp/sdk/track/TrackReader.cpp index 560d14fa..f5b7a6b3 100644 --- a/entry/src/main/cpp/sdk/track/TrackReader.cpp +++ b/entry/src/main/cpp/sdk/track/TrackReader.cpp @@ -66,6 +66,7 @@ bool TrackReader::read(TTrackData::Ptr& data) { if(root.contains("kskm") && root.contains("carmodel")) { + m_sdkver = Tools::splitVersion(root["sdkver"]); data->type = TTrackTypeInitExam; } else if(root.contains("exam") && root.contains("sfzmhm")) @@ -75,6 +76,36 @@ bool TrackReader::read(TTrackData::Ptr& data) else if(root.contains("sensor") && root.contains("gps")) { data->type = TTrackTypeRealExam; + + if(m_sdkver.stamp < "2505121242") + { + int type = root["gps"]["bklx"]; + double hxj = root["gps"]["hxj"]; + if(type == boardTypeTB) + { + hxj += 180.0; + } + if(hxj >= 360.0) + { + hxj -= 360.0; + } + root["gps"]["hxj"] = hxj; + + if(root.contains("gps2")) + { + int type = root["gps2"]["bklx"]; + double hxj = root["gps2"]["hxj"]; + if(type == boardTypeTB) + { + hxj += 180.0; + } + if(hxj >= 360.0) + { + hxj -= 360.0; + } + root["gps2"]["hxj"] = hxj; + } + } } else if(root.contains("method") && root["method"] == "examJudgeRealVision" && root.contains("type") && root.contains("data")) diff --git a/entry/src/main/cpp/sdk/track/TrackReader.h b/entry/src/main/cpp/sdk/track/TrackReader.h index cc0c38b0..59df9434 100644 --- a/entry/src/main/cpp/sdk/track/TrackReader.h +++ b/entry/src/main/cpp/sdk/track/TrackReader.h @@ -24,6 +24,7 @@ public: private: std::string m_content; std::stringstream m_stream; + TVersionInfo m_sdkver; }; #endif // TRACKREADER_H