diff --git a/entry/src/main/cpp/bin/libJudgeSdk.so b/entry/src/main/cpp/bin/libJudgeSdk.so index 67cdef65..14f79f37 100644 Binary files a/entry/src/main/cpp/bin/libJudgeSdk.so and b/entry/src/main/cpp/bin/libJudgeSdk.so differ diff --git a/entry/src/main/cpp/sdk/common/HSystem.h b/entry/src/main/cpp/sdk/common/HSystem.h index 4ee8f7fa..cef6039c 100644 --- a/entry/src/main/cpp/sdk/common/HSystem.h +++ b/entry/src/main/cpp/sdk/common/HSystem.h @@ -12,7 +12,7 @@ *** *** 说明:编译配置选项 *** - *** JUDGE_USE_S3T_TEST //是否启用大车科目三测试 + *** JUDGE_USE_TSUB3T //是否启用大车科目三测试 *** JUDGE_USE_NSUB3 //是否启用新科三评判 *** JUDGE_USE_OLD //是否启用评判语音播报之前老模式 *** JUDGE_USE_LOG //是否启用日志功能模块 @@ -33,7 +33,7 @@ /* * 是否启用大车科目三测试 */ -#define JUDGE_USE_S3T_TEST 0 +#define JUDGE_USE_TSUB3T 0 /* * 是否启用新科目三评判 diff --git a/entry/src/main/cpp/sdk/common/HVersion.h b/entry/src/main/cpp/sdk/common/HVersion.h index 2211b3fe..49de7ef0 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 "2503191702b" +#define JUDGE_VERSION_STAMP "2503270900b" #if JUDGE_USE_OLD # undef JUDGE_VERSION_STAMP # define JUDGE_VERSION_STAMP "2411121010b.old" diff --git a/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp b/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp index d592de48..e58d78d9 100644 --- a/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp +++ b/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp @@ -134,6 +134,26 @@ ExamItemCodes SysParmTable::findSub2ExamItems(int carCode) const return items; } +int SysParmTable::findQiBuGear(int carCode) +{ + //NO1=3 NO2=车型代码 NO3=4条件 TXT1 + int gear = INVALID_INDEX; + int size = parm3Size(); + for(int i = 0; i < size; i++) + { + const TSystemparm* parm3 = parm3By(i); + if(parm3->NO2 == carCode && parm3->NO3 == 4) + { + if(!parm3->TXT1.empty()) + { + gear = std::atoi(parm3->TXT1.data()); + break; + } + } + } + return gear; +} + TItemCodes SysParmTable::findItemCodes(ExamItemCodes items) const { TItemCodes codes; diff --git a/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.h b/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.h index 4eaf04df..1881cccb 100644 --- a/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.h +++ b/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.h @@ -57,6 +57,12 @@ public: */ ExamItemCodes findSub2ExamItems(int carCode) const; + /* + * 查找起步档位 NO1=3 NO2=车型代码 NO3=4条件 TXT1 + * + */ + int findQiBuGear(int carCode); + /* * 科二科三通用,通过我们公司自定义的项目代码,获取到无锡所定义的标准项目代码和项目名称(简称)等 * NO1=6 NO2=公司自定义的项目代码 查出来 NO2:我们公司的项目代码 TXT1:项目名称全称 TXT2:无锡所代码 TXT3:项目名称简称 diff --git a/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h b/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h index 8ba4dab6..e788f827 100644 --- a/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h +++ b/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h @@ -183,7 +183,8 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_DECLARE(378); //变更车道和超车:取消第1个项目 (0-不能 1-不变道也不开转向灯 2-开双跳) //0 SYSSET_DECLARE(383, type_array, "^"); //新模拟夜间(次数^错扣^固定^) //- SYSSET_DECLARE(386); //触发夜间灯光模拟的条件(0-点完成 1-插安全带或点火 2-点火 3-上车准备人工评判按钮切换 4-点击“继续考试”按钮触发 5-有点火1信号就可以触发,6-有安全带就触发) //1 //3时342=0或2有效 - SYSSET_DECLARE(389); //人行道不能掉头(0-否 1-是) // 0 + SYSSET_DECLARE(388, type_int); //超车后是否驶回原车道(0-否 1-是) 默认不设置为0 + SYSSET_DECLARE(389); //人行道不能掉头(0-否 1-是) // 默认不设置为0 SYSSET_DECLARE(390); //加减档位顺序 //23432 SYSSET_DECLARE(394, type_array2, ";", ":"); //档位车速范围 //1:0-20;2:5-30;3:15-40;4:25-55;5:35-150; SYSSET_DECLARE(398, type_int); //第二次考试不绕车一周(0-否+1-是)不扣分 @@ -256,6 +257,7 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_DECLARE(615); //侧方停车读卡前进时碰6线不合格 0 SYSSET_DECLARE(617, type_int); //参数617:语音实时播报项目是否合格(0-否 1-是)语音码:xmhg,xmbhg SYSSET_DECLARE(624); //考试评判车门模式 + SYSSET_DECLARE(641, type_int); //641=1 是车尾过5-6延长线结束 SYSSET_DECLARE(660); //侧方停车项目 停车距离判断阈值控制参数 SYSSET_DECLARE(668); //安全带评判模式 SYSSET_DECLARE(671); //停车距离判断阈值控制参数 @@ -322,6 +324,7 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_ASSIGN(378); SYSSET_ASSIGN(383); SYSSET_ASSIGN(386); + SYSSET_ASSIGN(388); SYSSET_ASSIGN(389); SYSSET_ASSIGN(390); SYSSET_ASSIGN(394); @@ -395,6 +398,7 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_ASSIGN(615); SYSSET_ASSIGN(617); SYSSET_ASSIGN(624); + SYSSET_ASSIGN(641); SYSSET_ASSIGN(660); SYSSET_ASSIGN(668); SYSSET_ASSIGN(671); diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp index fae2ede0..ed48a72d 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp @@ -694,7 +694,7 @@ void ExamCarSub3::UpdateCarParmWithSystemParm() { if(parm3TXT1 != "") { -#if !JUDGE_USE_S3T_TEST +#if !JUDGE_USE_TSUB3T parm3TXT1 = Tools::toupper(parm3TXT1); m_carInfo->kscx = parm3TXT1; diff --git a/entry/src/main/cpp/sdk/exam/ExamSensor.cpp b/entry/src/main/cpp/sdk/exam/ExamSensor.cpp index 5e132602..2e2e5652 100644 --- a/entry/src/main/cpp/sdk/exam/ExamSensor.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamSensor.cpp @@ -1043,7 +1043,8 @@ bool ExamSensor::filterWrong(TChuanGan* cg) ExamSubject sub = m_car->examSubject(); if(ExamSubject2 == sub) { - return gps.rtkEnabled == true && gps.valid(); + //return gps.rtkEnabled == true && gps.valid(); + return gps.valid(); //2025-03-20 modify } else if(ExamSubject3 == sub) { diff --git a/entry/src/main/cpp/sdk/judge/HJudgeItem.h b/entry/src/main/cpp/sdk/judge/HJudgeItem.h index 4da3b221..c450afef 100644 --- a/entry/src/main/cpp/sdk/judge/HJudgeItem.h +++ b/entry/src/main/cpp/sdk/judge/HJudgeItem.h @@ -873,6 +873,8 @@ struct TSub3Item20Comm_XLG //标准科目三综合评判 TKm3Itm20_XLG bool qdysFlag = false; //启动钥匙标志 bool aqd_kfid = false; //安全带扣分 int CGD_Nums = 0; //达到次高挡的次数 + + bool rmndg2 = false; //无锡地区在发动机未启动点切换,提示启动发动机,启动发动机之后播报模拟灯光 }; struct TSub3Item20Comm_NS3 //新科目三 diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp index f53d766c..e0de02e9 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp @@ -116,8 +116,8 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage0) //穿越结束线了 if(m_endLineFlag == true && cgcu->move == moveForward) { - int syset = TableSysSet->asInt606(); - if(syset == 1 || m_existMark == true) //不可以取消项目,或者侧方已经扣过分了 + int s606 = TableSysSet->asInt606(); + if(s606 == 1 || m_existMark == true) //不可以取消项目,或者侧方已经扣过分了 { ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_CFTC_41)); } @@ -372,15 +372,37 @@ void Sub2Judge03Cftc::calcCrossLine() //后轮没有穿越结束线 if(m_endLineFlag == false) { - const TGPSLine& L78 = m_model->L78(); - #if JUDGE_USE_INSPECT - bool endLine = (pureCarTouchSomeSegment(L78, {II(13)}, history)); //车身13点就是尾部中间那个点 - #else - bool endLine = (pureCarTouchSomeSegment(L78, wheels, history)); - #endif - if(endLine) + int s641 = TableSysSet->asInt641(); + if(s641 == 1) { - m_endLineFlag = true; + if(m_stage >= Sub2CftcStage2) //641=1 是车尾过5-6延长线结束 2025-03-26 add + { + if(pureCarTouchSoloSegment(L56, II(13), history)) + { + m_endLineFlag = true; + } + } + else if(m_stage == Sub2CftcStage0) + { + const TGPSLine& L78 = m_model->L78(); //606参数是0可能会取消项目所以要加这个逻辑 + if(pureCarTouchSoloSegment(L78, II(13), history)) + { + m_endLineFlag = true; + } + } + } + else + { + const TGPSLine& L78 = m_model->L78(); + #if JUDGE_USE_INSPECT + bool endLine = (pureCarTouchSomeSegment(L78, {II(13)}, history)); //车身13点就是尾部中间那个点 + #else + bool endLine = (pureCarTouchSomeSegment(L78, wheels, history)); + #endif + if(endLine) + { + m_endLineFlag = true; + } } } } diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge20Comm.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge20Comm.cpp index 3280f5f0..e18b6893 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge20Comm.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge20Comm.cpp @@ -207,7 +207,7 @@ void Sub2Judge20Comm::Judge_XiHuo() const TSensorInfo& sor = m_car->historySensor(); const TSensorInfo& sor1 = m_car->historySensor(1); const TSensorInfo& sor2 = m_car->historySensor(2); - const TSensorInfo& sor10 = m_car->historySensor(10); + const TSensorInfo& sor10 = m_car->historySensor(10); if(m_flameoutKind == flameout_kind_0) //发动机转速判熄火的 { if(m_canFlameout) diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp index 5ef926d9..4f1b3117 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp @@ -103,6 +103,12 @@ void Sub3Judge01Sczb::dealJudgeItem() //超声波评判跟差分信号没有关系,所以不做差分信号状态的判断 //if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return; + const std::string& s386 = TableSysSet->get386(); + if(s386 == "3") //无锡地区模式只要发动机启动了,点切换就上车准备自动完成播报模拟灯光 + { + return; + } + //有这种考试模式,上车准备是外壳完成的,这种少数,兼容 windows是这种做法 const TStuInfo& stuInfo = m_car->stuInfo(); if(stuInfo.sczb) //StuInfo.CS_Finish_SCZB_Flag @@ -165,25 +171,25 @@ void Sub3Judge01Sczb::dealJudgeItem() //加入超声波数据 //加入左前 - if(sor.csbzq < 800 && sor.csbzq > 0) + if(sor.csbzq < m_csbValue && sor.csbzq > 0) { AddCSBData(CsbType::ZQ); } //加入右后 - if(sor.csbyh < 800 && sor.csbyh > 0) + if(sor.csbyh < m_csbValue && sor.csbyh > 0) { AddCSBData(CsbType::YH); } if(m_itemv.radarCount >= 3) { //加入右前 - if(sor.csbyq < 800 && sor.csbyq > 0) + if(sor.csbyq < m_csbValue && sor.csbyq > 0) { AddCSBData(CsbType::YQ); } //加入左后 - if(sor.csbzh < 800 && sor.csbzh > 0) + if(sor.csbzh < m_csbValue && sor.csbzh > 0) { AddCSBData(CsbType::ZH); } @@ -197,8 +203,6 @@ void Sub3Judge01Sczb::dealJudgeItem() return; } - const std::string& s386 = TableSysSet->get386(); - if(m_itemv.newtype == 1) { //当前时刻的累计用时秒 diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.h b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.h index 61e5420e..37c96839 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.h +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.h @@ -53,6 +53,8 @@ protected: private: TSub3Item01Sczb m_itemv; std::deque m_csb; //CSBDataList: TStringList = nil; + //真正的超声波,返回的距离,单位mm。。没人的时候数字大几千,有人就是实际的距离。***一代机外壳做了转化 + const int m_csbValue = 800; }; #endif // SUB3JUDGE01SCZB_H diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp index ae76e1ee..f94d844f 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp @@ -410,14 +410,16 @@ void Sub3Judge02Qbxx::Judge_QiBu_GuaCuoDang() if(cg->move == moveForward && his1->move == moveForward) { const TSensorInfo& sor = cg->real.sensor; + //小车1档起步, 大车1、2档起步 + static const int gear = TableSysParm->findQiBuGear(m_car->carCode()); #if JUDGE_USE_INSPECT - if(sor.dw_plc >= 2) //无锡所用原始档位 + if(sor.dw_plc > gear) //无锡所用原始档位 { JUDGE_MARK_SUB3(2, "44", false); } #else - if(sor.dw >= 2) + if(sor.dw > gear) { JUDGE_MARK_SUB3(2, "44", false); } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge10Ccxx.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge10Ccxx.cpp index 73871c23..13555f9e 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge10Ccxx.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge10Ccxx.cpp @@ -655,6 +655,13 @@ void Sub3Judge10Ccxx::dealJudgeItem() //5:回原车道阶段 6:完成回原车道阶段 if(cg->ai_ljjl - m_itemv.Temp_LJJL_2 >= m_itemv.St4_CCD_MinJL) //回原车道距离必须行驶到规定的距离 { + //超车后是否驶回原车道(0-否 1-是) 默认不设置为0 + int s388 = TableSysSet->asInt388(); + if(s388 == 0) + { + m_exam->TestPro = ItemProFlagEnd; + return; + } if(m_itemv.St4_HuiYuanCheDao_TM == 0) { m_itemv.St4_HuiYuanCheDao_TM = gps.sj; diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.h b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.h index 5d2dd001..58d9df24 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.h +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.h @@ -134,6 +134,8 @@ public: DEAL_API bool dealJudgeEnter() override; DEAL_API void dealJudgeItem() override; + bool isConfirm() { return m_itemv.Status >= 3; }; + protected: void DoStatus_0(); //0-语音播报阶段 void DoStatus_1(); //1-语音结束,开始评判 到停车前 diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp index b4daee09..f1efc168 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp @@ -2,6 +2,7 @@ #include "HFactory.h" #include "Sub3Judge14Jjdw.h" #include "Sub3Judge41Mndg.h" +#include "Sub3Judge11Kbtc.h" Sub3Judge20Comm::Sub3Judge20Comm() { @@ -768,7 +769,6 @@ void Sub3Judge20Comm::doCheck_ZuoYi() //加载模拟灯光项目 void Sub3Judge20Comm::CallMoNiDengGuang() { - #if JUDGE_USE_INSPECT return; //屏蔽模拟灯光 #endif @@ -783,6 +783,19 @@ void Sub3Judge20Comm::CallMoNiDengGuang() const TSensorInfo& sor3 = his3->real.sensor; const std::string& ksdd = TableSysSet->get211(); + const std::string& s386 = TableSysSet->get386(); + if(s386 == "3") + { + //无锡地区模式只要发动机启动了,点切换就上车准备自动完成播报模拟灯光 //2025-03-21 yhy add + //无锡地区在发动机未启动点切换,提示启动发动机,启动发动机之后播报模拟灯光 + if(m_itemvXLG.rmndg2 == false) + { + if(sor.rmndg == 2 && sor1.rmndg == 0 && sor2.rmndg == 0) + { + m_itemvXLG.rmndg2 = true; + } + } + } if(m_car->disForward() + m_car->disBackward() < 50 && sor.fdjzs == SNOT && sor1.fdjzs == SNOT && sor2.fdjzs == SNOT && sor3.fdjzs == SNOT) @@ -889,9 +902,8 @@ void Sub3Judge20Comm::CallMoNiDengGuang() return; } - const std::string& s386 = TableSysSet->get386(); //模拟灯光:参数386=0,开始考试后,就触发模拟灯光 - if(s386 != "0") + if(s386 != "0" && s386 != "3") { TKM3Item* item01 = m_car->findExamItem(Sub3ItemType01Sczb); //上车准备 if(item01 && item01->FinishFlag == false) @@ -909,7 +921,7 @@ void Sub3Judge20Comm::CallMoNiDengGuang() (s386 == "5" && sor.dh1 == SYES) || (s386 == "6" && sor.aqd == SYES && sor1.aqd == SYES) ) //20170314 训练模式 只要有dh1就可以进行模拟灯光 { - //关闭灯光 20180809 + //关闭灯光提示 20180809 if((s322 != "1") && (sor.shtd + sor.skd + sor.ygd + sor.jgd + sor.zfxd + sor.yfxd > 0 || ksdd == siteof::nj)) { if(!m_itemvCJH.Gbdg_ID) @@ -969,9 +981,19 @@ void Sub3Judge20Comm::CallMoNiDengGuang() } else { - //开始模拟灯光 - if(item41 && item41->Item_Color == itemStateWk) + if(s386 == "3") { + //无锡地区模式只要发动机启动了,点切换就上车准备自动完成播报模拟灯光 //2025-03-21 yhy add + //无锡地区在发动机未启动点切换,提示启动发动机,启动发动机之后播报模拟灯光 + if(m_itemvXLG.rmndg2 && sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100) + { + m_car->KM3EndItem(Sub3ItemType01Sczb,true,false); + m_car->setEnterItem(item41); + } + } + else + { + //开始模拟灯光 m_car->setEnterItem(item41); } } @@ -2280,8 +2302,12 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian() const TRTKResult& RTKKM3 = cg->RTKKM3; //长时间骑轧车道分界线行驶 - if(RTKKM3.BaseLaneCount == 0) return; - if(RTKKM3.TouchLineType == LineType_0) return; + if(RTKKM3.BaseLaneCount == 0 || RTKKM3.TouchLineType == LineType_0) + { + m_PubLastMark_XuXian_TK = 0; //当前没压线给我退出 + return; + } + //检查是否真正做靠边停车项目 bool KBTCFlag = m_car->itemsSomeExaming2(Sub3ItemType11Kbtc); @@ -2334,9 +2360,14 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian() const TChuanGan* his2 = m_car->historyChuanGan(2); if(cg->move == moveForward && his1->move == moveForward && his2->move == moveForward) { - for(size_t i = 0 ; i < kind.size(); i++) + for(size_t i = 0; i < kind.size(); i++) { - if(kind[i] == LineType_0) continue; + auto ty = kind[i]; + if(ty == LineType_0) continue; + if(m_PubLastMark_XuXian_TK == 0 && cg->RTKKM3.TouchLineType == ty) + { + m_PubLastMark_XuXian_TK = cg->tkCnt; + } bool OKFlag = true; for(int j = 0; j < 50; j++) //10秒钟,对应的是50帧 { @@ -2346,7 +2377,7 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian() OKFlag = false; break; } - if(cg_j->RTKKM3.TouchLineType != kind[i] || cg_j->move == moveStop) + if(cg_j->RTKKM3.TouchLineType != ty || cg_j->move == moveStop) { OKFlag = false; break; @@ -2354,7 +2385,7 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian() } if(OKFlag == true) { - if(cg->tkCnt - m_PubLastMark_XuXian_TK >= 10 * SECOND) + if(m_PubLastMark_XuXian_TK> 0 && cg->tkCnt - m_PubLastMark_XuXian_TK >= 10 * SECOND) { const char* serial = "65"; #if JUDGE_USE_INSPECT @@ -2388,8 +2419,11 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian_Tail() const TRTKResult& RTKKM3_Tail = cg->RTKKM3_Tail; //长时间骑轧车道分界线行驶 - if(RTKKM3_Tail.BaseLaneCount == 0) return; - if(RTKKM3_Tail.TouchLineType == LineType_0) return; + if(RTKKM3_Tail.BaseLaneCount == 0 || RTKKM3_Tail.TouchLineType == LineType_0) + { + m_PubLastMark_XuXian_Tail_TK = 0; //当前没压线给我退出 + return; + } //检查是否真正做靠边停车项目 bool KBTCFlag = m_car->itemsSomeExaming2(Sub3ItemType11Kbtc); @@ -2440,12 +2474,16 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian_Tail() const TChuanGan* his1 = m_car->historyChuanGan(1); const TChuanGan* his2 = m_car->historyChuanGan(2); - if(cg->move == moveForward && his1->move == moveForward && his2->move == moveForward) { - for(size_t i = 0 ; i < kind.size(); i++) + for(size_t i = 0; i < kind.size(); i++) { - if(kind[i] == LineType_0) continue; + auto ty = kind[i]; + if(ty == LineType_0) continue; + if(m_PubLastMark_XuXian_Tail_TK == 0 && cg->RTKKM3_Tail.TouchLineType == ty) + { + m_PubLastMark_XuXian_Tail_TK = cg->tkCnt; + } bool OKFlag = true; for(int j = 0; j < 50; j++) //10秒钟,对应的是50帧 { @@ -2455,7 +2493,7 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian_Tail() OKFlag = false; break; } - if(cg_j->RTKKM3_Tail.TouchLineType != kind[i] || cg_j->move == moveStop) + if(cg_j->RTKKM3_Tail.TouchLineType != ty || cg_j->move == moveStop) { OKFlag = false; break; @@ -2463,7 +2501,7 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian_Tail() } if(OKFlag == true) { - if(cg->tkCnt - m_PubLastMark_XuXian_Tail_TK >= 10 * SECOND) + if(m_PubLastMark_XuXian_Tail_TK > 0 && cg->tkCnt - m_PubLastMark_XuXian_Tail_TK >= 10 * SECOND) { const char* serial = "65"; #if JUDGE_USE_INSPECT @@ -4516,16 +4554,16 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() // 加减档位操作挂一个挡位要松一次离合器(项目,全程)(0-否 1-是)() // *) const std::vector& s425 = TableSysSet->asArray425(); - std::string ss = s425.size() > 1 ? s425[1] : ""; + std::string ss425 = s425.size() > 1 ? s425[1] : ""; TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw);//加减挡 - if(item14 && item14->TestPro == ItemProFlagIdle && ss == "1") + if(item14 && item14->TestPro == ItemProFlagIdle && ss425 == "1") { const TSensorInfo& sor3 = m_car->historySensor(3); if(sor.dw == sor1.dw && sor.dw != sor2.dw && sor.dw != sor3.dw && sor.dw > 0) { int dw = sor.dw; int k = 0; - int count =m_car->historyCount(); + int count = m_car->historyCount(); for(int i = 1; i <= 25; i++) { if(i >= count || i + 6 >= count) @@ -4534,6 +4572,7 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() } const TSensorInfo& sori = m_car->historySensor(i); + int dw_i0 = sori.dw; int dw_i1 = m_car->historySensor(i + 1).dw; int dw_i2 = m_car->historySensor(i + 2).dw; int dw_i3 = m_car->historySensor(i + 3).dw; @@ -4542,9 +4581,9 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() int dw_i6 = m_car->historySensor(i + 6).dw; if(sori.lhq == SNOT) break; - if(sori.dw == SNOT) continue; - if(dw != sori.dw && sori.dw == dw_i1 && sori.dw == dw_i2 && sori.dw == dw_i3 && - sori.dw == dw_i4 && sori.dw == dw_i5 && sori.dw == dw_i6) + if(dw_i0 == SNOT) continue; + if(dw != dw_i0 && dw_i0 == dw_i1 && dw_i0 == dw_i2 && dw_i0 == dw_i3 && + dw_i0 == dw_i4 && dw_i0 == dw_i5 && dw_i0 == dw_i6) { k = k + 1; dw = sori.dw; @@ -4562,24 +4601,28 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() if(m_itemvCJH.yjjdcxsj == 0) { if(sor.dw == sor1.dw && sor.dw == sor2.dw && sor.dw > 0 && sor.dw < 9 && - sor.lhq == SNOT && gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214 + sor.lhq == SNOT && gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214 { - - for( int i = 3; i < 53; i++) + for(int i = 3; i < 53; i++) { - if(i >= count || i + 1 >= count) + if(i >= count || i + 2 >= count) { break; } const TChuanGan* hisi = m_car->historyChuanGan(i); const TSensorInfo& sori = hisi->real.sensor; - int dw_i1 = m_car->historySensor(i + 1).dw; + int dw_i0 = sori.dw; + if(dw_i0 != 0) break; - if(sori.dw >= sor.dw && sori.lhq == SNOT) break; - if(sori.dw + 1 == sor.dw && sori.lhq == SNOT) break; - if(sori.dw < sor.dw && dw_i1 == sori.dw && sori.dw > 0) + int dw_i1 = m_car->historySensor(i + 1).dw; + int dw_i2 = m_car->historySensor(i + 2).dw; + + if(dw_i1 >= sor.dw && sori.lhq == SNOT) break; + if(dw_i1 + 1 == sor.dw && sori.lhq == SNOT) break; + + if(dw_i1 < sor.dw && dw_i1 > 0 && dw_i1 == dw_i2) { - if(sor.dw - sori.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) + if(sor.dw - dw_i1 > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) { bool FindFlag = false; if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1) @@ -4613,30 +4656,34 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() const TSensorInfo& sor3 = m_car->historySensor(3); const TSensorInfo& sor4 = m_car->historySensor(4); if(sor.dw == sor1.dw && sor.dw == sor2.dw && sor.dw == sor3.dw && sor.dw == sor4.dw && - sor.dw > 0 && sor.dw < 9 && sor.lhq == SNOT && sor4.lhq == SNOT && gps.sd > 5 && + sor.dw > 0 && sor.dw < 9 && sor.lhq == SNOT && sor4.lhq == SNOT && gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214 { for(int i = 5; i <= 55; i++) { - if(i >= count || i + 4 >= count) + if(i >= count || i + 5 >= count) { break; } const TChuanGan* hisi = m_car->historyChuanGan(i); const TSensorInfo& sori = hisi->real.sensor; + int dw_i0 = sori.dw; + if(dw_i0 != 0) break; int dw_i1 = m_car->historySensor(i + 1).dw; int dw_i2 = m_car->historySensor(i + 2).dw; int dw_i3 = m_car->historySensor(i + 3).dw; int dw_i4 = m_car->historySensor(i + 4).dw; + int dw_i5 = m_car->historySensor(i + 5).dw; - if(sori.dw > sor.dw && sori.lhq == SNOT) break; - if(sori.dw + 1 == sor.dw && sori.lhq == SNOT) break; - if(sori.dw < sor.dw && dw_i1 == sori.dw && dw_i2 == sori.dw && - dw_i3 == sori.dw && dw_i4 == sori.dw && sori.dw > 0) + if(dw_i1 > sor.dw && sori.lhq == SNOT) break; + if(dw_i1 + 1 == sor.dw && sori.lhq == SNOT) break; + + if(dw_i1 < sor.dw && dw_i1 > 0 && + dw_i2 == dw_i1 && dw_i3 == dw_i1 && dw_i4 == dw_i1 && dw_i5 == dw_i1) { - if((sor.dw - sori.dw) > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) + if(sor.dw - dw_i1 > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) { bool FindFlag = false; if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1) @@ -4681,12 +4728,14 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() { for(int i = 9; i < 59; i++) { - if(i >= count || i + 9 >= count) + if(i >= count || i + 10 >= count) { break; } const TChuanGan* hisi = m_car->historyChuanGan(i); - const TSensorInfo& sori = hisi->real.sensor; + const TSensorInfo& sori = hisi->real.sensor; + int dw_i0 = sori.dw; + if(dw_i0 != 0) break; int dw_i1 = m_car->historySensor(i + 1).dw; int dw_i2 = m_car->historySensor(i + 2).dw; @@ -4697,14 +4746,16 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() int dw_i7 = m_car->historySensor(i + 7).dw; int dw_i8 = m_car->historySensor(i + 8).dw; int dw_i9 = m_car->historySensor(i + 9).dw; + int dw_i10 = m_car->historySensor(i + 10).dw; - if(sori.dw > sor.dw && sori.lhq == SNOT) break; - if(sori.dw + 1 == sor.dw && sori.lhq == SNOT) break; - if(sori.dw < sor.dw && dw_i1 == sori.dw && dw_i2 == sori.dw && dw_i3 == sori.dw && - dw_i4 == sori.dw && dw_i5 == sori.dw && dw_i6 == sori.dw && - dw_i7 == sori.dw && dw_i8 == sori.dw && dw_i9 == sori.dw && sori.dw > 0) + if(dw_i1 > sor.dw && sori.lhq == SNOT) break; + if(dw_i1 + 1 == sor.dw && sori.lhq == SNOT) break; + + if(dw_i1 < sor.dw && dw_i1 > 0 && dw_i2 == dw_i1 && dw_i3 == dw_i1 && + dw_i4 == dw_i1 && dw_i5 == dw_i1 && dw_i6 == dw_i1 && dw_i7 == dw_i1 && + dw_i8 == dw_i1 && dw_i9 == dw_i1 && dw_i10 == dw_i1) { - if(sor.dw - sori.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) + if(sor.dw - dw_i1 > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) { bool FindFlag = false; if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1) @@ -4719,6 +4770,8 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() } if(FindFlag == true) { + //安卓档位评判好像逻辑上做了优化,比方说越级加档,中间必须出现 0 才判,1 跳 3 的情况,没出现 0 不判 + //项目经理吉说的先按照这样做 JUDGE_MARK_SUB3(14, "01", true); } else @@ -4741,7 +4794,8 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() } const TChuanGan* hisi = m_car->historyChuanGan(i); - const TSensorInfo& sori = hisi->real.sensor; + const TSensorInfo& sori = hisi->real.sensor; + int dw_i0 = sori.dw; int dw_i1 = m_car->historySensor(i + 1).dw; int dw_i2 = m_car->historySensor(i + 2).dw; @@ -4753,19 +4807,17 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang() int dw_i8 = m_car->historySensor(i + 8).dw; int dw_i9 = m_car->historySensor(i + 9).dw; - if(sori.dw == 9) break; + if(dw_i0 == 9) break; if(hisi->move != moveForward) break; - if(sori.dw < sor.dw && sori.lhq == SNOT) break; - if(sori.dw - 1 == sor.dw && sori.lhq == SNOT) break; + if(dw_i0 < sor.dw && sori.lhq == SNOT) break; + if(dw_i0 - 1 == sor.dw && sori.lhq == SNOT) break; - if(sori.dw > sor.dw && dw_i1 == sori.dw - && dw_i2 == sori.dw && dw_i3 == sori.dw - && dw_i4 == sori.dw && dw_i5 == sori.dw - && dw_i6 == sori.dw && dw_i7 == sori.dw - && dw_i8 == sori.dw && dw_i9 == sori.dw - && sori.dw > 0) + if(dw_i0 > sor.dw && dw_i0 > 0 && + dw_i1 == dw_i0 && dw_i2 == dw_i0 && dw_i3 == dw_i0 && + dw_i4 == dw_i0 && dw_i5 == dw_i0 && dw_i6 == dw_i0 && + dw_i7 == dw_i0 && dw_i8 == dw_i0 && dw_i9 == dw_i0) { - if((sori.dw - sor.dw) > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) + if(dw_i0 - sor.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt) { bool FindFlag = false; if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1) @@ -5477,10 +5529,21 @@ void Sub3Judge20Comm::Judge_CiGaoDang() { if(m_car->isMileage()) //靠边停车前结算次高档也要判断行驶里程 { - TKM3Item* item = m_car->findExamItem(Sub3ItemType11Kbtc); - if(item && item->Item_Color != itemStateWk) + //TKM3Item* item = m_car->findExamItem(Sub3ItemType11Kbtc); + //if(item && item->Item_Color != itemStateWk) + //{ + // timing = true; + //} + + //靠边模式评判次高档的时机调整到靠边确认(如拉手刹挂空挡等) + ISub3JudgeItem* item = m_car->findJudgeItem(Sub3ItemType11Kbtc); + if(item) { - timing = true; + Sub3Judge11Kbtc* item11 = dynamic_cast(item); + if(item11 && item11->isConfirm()) + { + timing = true; + } } } } diff --git a/entry/src/main/cpp/sdk/utility/HBean.h b/entry/src/main/cpp/sdk/utility/HBean.h index 7440e919..e971f0c0 100644 --- a/entry/src/main/cpp/sdk/utility/HBean.h +++ b/entry/src/main/cpp/sdk/utility/HBean.h @@ -283,7 +283,7 @@ JUDGE_C_API BoardType name2BoardType(const char* name); #define EnumMakeGpsStatus(declare) \ declare(gpsStatusINVALID, "----", JUDGE_UTF8S("无效(数据异常)")) \ declare(gpsStatusSINGLE, "SINGLE", JUDGE_UTF8S("单点解(收星数过低10米以内)***前置机没发差分改帧数给后置机")) \ - declare(gpsStatusPSRDIFF, "PSRDIFF", JUDGE_UTF8S("伪距解(没见过这种状态3米以内)")) \ + declare(gpsStatusPSRDIFF, "PSRDIFF", JUDGE_UTF8S("伪距解(没见过这种状态3米以内)没收到差分改正数?")) \ declare(gpsStatusANGLE, "**ANGLE**", JUDGE_UTF8S("**角度差分状态**?")) \ declare(gpsStatusNARROW_INT, "NARROW_INT", JUDGE_UTF8S("固定解(正常状态0.02米以内)")) \ declare(gpsStatusNARROW_FLOAT, "NARROW_FLOAT", JUDGE_UTF8S("浮点解(有遮挡物0.5米以内)")) diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index b59d21d4..523f5ab2 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -752,11 +752,6 @@ export default class Judge { const {isExam} = this; const judgeUI = this.judgeUI const {projects,carType,kssycs,isDdxk,ddxkTime,projectsCenterObj,ddxkKsxmArr,ddxkKfArr,passingScore} = judgeUI; - let sfyk = 0 - if (judgeUI.mode === 2) { - sfyk = 1 - } - console.log("lixiao projects", judgeUI.mode, sfyk) const beginInfo = { kgid: '012', kgxm: decodeURI(examinerName || ''), @@ -772,7 +767,7 @@ export default class Judge { ksyy: '', kscx: carType, kkcs: Number(kssycs) || 2, - sfyk, + sfyk: judgeUI.mode === 2 ? 1 : 0, ykkkcs: 1, wayno: judgeUI.wayno * 1, czlx: 0,