#include "Sub3Judge14Jjdw.h" #include "HFactory.h" Sub3Judge14Jjdw::Sub3Judge14Jjdw() { m_exam = __NEW__(TKM3Item); } Sub3Judge14Jjdw::~Sub3Judge14Jjdw() { __DELETE__(m_exam); } bool Sub3Judge14Jjdw::dealJudgeEnter() { if(m_exam->TestPro != ItemProFlagInit) return false; if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return false; m_itemv = TSub3Item14Jjdw(); //ToDo1:播报项目语音-->'加减挡位操作'; //ToDo2:生成进项目事件 //记录进入时刻的挡位 //初始化 CSH_Itmv14(); m_exam->TestPro = ItemProFlagJudge; return true; } void Sub3Judge14Jjdw::dealJudgeItem() { HELP_COST_TIME(""); if(m_exam->TestPro != ItemProFlagJudge) return; if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return; std::string Str425; std::string TempLog; const TChuanGan* cg = m_car->historyChuanGan(); const TSensorInfo& sor = cg->real.sensor; const TGpsInfo& gps = cg->real.gps; const TChuanGan* his1 = m_car->historyChuanGan(1); const std::string& ksdd = TableSysSet->get211(); if(m_car->isExamMode()) //正式考试 StuInfo.Stu_Type = 1 { if(!m_car->isQualified()) { m_exam->TestPro = ItemProFlagEnd; return; } } //以下执行具体的项目评判 //加减挡时间到达或者项目距离到达 if(cg->tkCnt - m_itemv.Enter_Tk > m_itemv.JJDXS * SECOND || cg->ai_ljjl - m_itemv.Enter_Ljjl > m_itemv.XMJL) { //SysSet[489]:加减档位:取消第1个项目(0-不能,1-档位不变) //20160513 唐山 const std::string& s489 = TableSysSet->get489(); if(s489 != "1" || (s489 == "1" && m_exam->ItemEnterCancelID == true)) { //(14,03):行驶中未加至次高挡及以上 if(ksdd == siteof::ynzt) { if(m_itemv.maxDwCssc == 0) { JUDGE_MARK_SUB3(14, "03", true); } } //(14,01):行驶中越级加挡 if(ksdd != siteof::weinancgs) { JUDGE_MARK_SUB3(14, "01", false); } else { JUDGE_MARK_SUB3(14, "01", true); //20160928 } TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; //20170117 m_exam->TestPro = ItemProFlagEnd; return; } else { m_exam->TestPro = ItemProFlagIdle; m_exam->Item_Color = itemStateWk; m_exam->ItemEnterCancelID = true; //ToDo:语音提示-->"取消加减挡位操作" m_car->createEventCancelItem({itemNo(), ""}); return; } } const std::vector& s425 = TableSysSet->asArray425(); //SysSet[425]-->加减档位操作挂一个挡位要松一次离合器(项目,全程)(0-否 1-是) 0,0 Str425 = s425.size() > 0 ? s425[0] : ""; //getdotstr(1, sysset[425] + ',', ','); //SysSet[427]: //(* //加减档位采用加档到上一档,减档到下一档(0-否 1-是 2-濮阳模式 3-常州模式 4-广东揭阳模式) //*) const std::string& s427 = TableSysSet->get427(); if(s427 == "4") //20171029广东揭阳模式 { //加减档:在1档时,升到2档再升到3档。2档时,只升到3档。3档时,降2档升3档。4档时,只降3档。5挡时,先降4档,再降到3档 if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; } if(m_itemv.bSgFs != 1) { if(m_itemv.Enter_Dw > 0) { m_itemv.bSgFs = 1; switch (sor.dw) { case 1: m_itemv.dwsx_str = "123"; break; case 2: m_itemv.dwsx_str = "23"; break; case 3: m_itemv.dwsx_str = "323"; break; case 4: m_itemv.dwsx_str = "43"; break; case 5: m_itemv.dwsx_str = "543"; break; default: break; } } else { m_itemv.bSgFs = 0; } } } //SysSet[427]:加减档位采用加档到上一档,减档到下一档(0-否 1-是 2-濮阳模式 3-常州模式 4-广东揭阳模式) if(s427 == "3") //20170309 常州模式加减档操作 { Judge_JiaJianDang_427_3(); if(m_exam->TestPro == ItemProFlagEnd) { return; } } else { if(s427 == "1") //20141101 长沙模式加减档操作 { Judge_JiaJianDang_427_1(); if(m_exam->TestPro == ItemProFlagEnd) { return; } } else { Judge_JiaJianDang_427_024(); if(m_exam->TestPro == ItemProFlagEnd) { return; } } } //20170309 //档位车速范围 20180722 //SysSet[429]:加减档位操作只在项目中评判(0-否全过程评判 1-是此在项目中评判) const std::string& s429 = TableSysSet->get429(); if(s429 == "1") { if(sor.dw > 0 && sor.dw == m_itemv.Last_Dw) { const TDwCs_Range& rang = m_itemv.DwCs_Range[sor.dw]; if(rang.High_Cs > 0 && (std::round(gps.sd) > rang.High_Cs || std::round(gps.sd) < rang.Low_Cs)) { if(m_itemv.Last_Dw != m_itemv.Last_Dw_kf) { JUDGE_MARK_SUB3(14, "02", false); m_itemv.Last_Dw_kf = m_itemv.Last_Dw; } } } } if(ksdd == siteof::hnpy) { if(sor.dw >= 4 && std::round(gps.sd) >= 35) { m_itemv.maxDwCssc = m_itemv.maxDwCssc + (cg->tkCnt - his1->tkCnt); } } if(ksdd == siteof::ynzt) { if(sor.dw >= 4) { m_itemv.maxDwCssc = m_itemv.maxDwCssc + (cg->tkCnt - his1->tkCnt); } } //状态提示 char buf[128] = {0}; SafeSprintf(buf, sizeof(buf), XCharacter("Status=%d, Data=%s"), m_itemv.Status, m_itemv.dwsx_str.c_str()); showStatus(buf); } void Sub3Judge14Jjdw::CSH_Itmv14() { const TChuanGan* cg = m_car->historyChuanGan(); const TSensorInfo& sor = cg->real.sensor; const std::string& ksdd = TableSysSet->get211(); m_itemv.Enter_Dw = sor.dw; //进入时刻的TK m_itemv.Enter_Tk = cg->tkCnt; //进入时刻的项目距离 m_itemv.Enter_Ljjl = cg->ai_ljjl; //SysSet[507]:1 jdxdxs: 项目完成限时 const std::vector& s507 = TableSysSet->asArray507(); m_itemv.JJDXS = s507.size() > 0 && s507[0] != "" ? std::atoi(s507[0].c_str()) : 20; //限时 TCar* tcar = m_car->getTCar(); if(tcar->JJDXS > 0) { m_itemv.JJDXS = tcar->JJDXS; } //SysSet[507]:2 加减挡位项目距离 m_itemv.XMJL = s507.size() > 1 && s507[1] != "" ? std::atoi(s507[1].c_str()) : 100; if(ksdd == siteof::xiangyang) { if(IS_C1C2C5C6(m_carType)) { m_itemv.XMJL = 230; } else { m_itemv.XMJL = 280; } } //SysSet[507]:3 加减挡位怠挡时间 m_itemv.Ddsj = s507.size() > 2 && s507[2] != "" ? std::atoi(s507[2].c_str()) : 1; //秒 20150526 //SysSet[394] 挡位车速范围 //比如:1:0-20;2:5-30;3:15-40;4:25-55;5:35-150; const std::vector>& s394 = TableSysSet->asArray2_394(); if(!s394.empty()) //if(Sysset[394] <> '') { for(size_t i = 0; i < s394.size(); i++) { const std::vector& Str = s394[i]; //getdotstr(I, Sysset[394] + ';', ';'); if(!Str.empty()) { std::string str1 = Str.size() > 0 ? Str[0] : ""; //GetDotStr(1, Str + ':', ':'); std::string str2 = Str.size() > 1 ? Str[1] : ""; //GetDotStr(2, Str + ':', ':'); int dw = std::atoi(str1.c_str()); const std::vector& stmp = Tools::split(str2, "-"); m_itemv.DwCs_Range[dw].Low_Cs = stmp.size() > 0 ? std::atoi(stmp[0].c_str()) : 0; m_itemv.DwCs_Range[dw].High_Cs = stmp.size() > 1 ? std::atoi(stmp[1].c_str()) : 0; } else { break; } } } m_itemv.Status = 1; //SysSet[390]:加减档位顺序,比如:23432 const std::string s390 = TableSysSet->get390(); if(s390.length() <= 1) { m_itemv.dwsx_str = "23432"; } else { m_itemv.dwsx_str = Tools::isInt(s390) ? s390 : "23432"; } //20160923 if(ksdd == siteof::xiangyang) { if(IS_C1C2C5C6(m_carType)) { m_itemv.dwsx_str = "234543"; } else { m_itemv.dwsx_str = "34543"; } } //得到最高挡位 int TempMax = 0; for(size_t i = 0; i < m_itemv.dwsx_str.length(); i++) { int digit = CHAR_TO_INT(m_itemv.dwsx_str[i]); //字符转数字 '0' 也就是十进制整数48 if(digit > TempMax) { TempMax = digit; } } m_itemv.maxdw = TempMax; //20140923 const std::string& s427 = TableSysSet->get427(); const std::string& s428 = TableSysSet->get428(); if(s428 == "1" && s427 == "0") //422改成428 { // 点击项目后,如果在1挡,语音提示,请将档位加到二挡,请将档位加到三挡,请将档位降到二挡,请将档位降到一挡; //如果在2挡,语音提示,请将档位降到一挡,请将档位加到二挡,请将档位加到三挡,请将档位降到二挡,请将档位降到一挡。 int ksdw = CHAR_TO_INT(m_itemv.dwsx_str.front()); //字符转数字 '0' 也就是十进制整数48 StrToInt(m_itemv.dwsx_str[1]); if(sor.dw > ksdw) //当前档位高,先降到起初档位 { //ToDo1:语音提示-->"请将挡位降到' ksdw 挡 m_itemv.yysj = cg->tkCnt; //20150526 playSound(ksdw, gear_down); } } if(s427 == "1") //20141101 长沙 { //如果当前档位是1档,就提示学员"请加档到2档"完成后再提示"请减档到1档" //如果当前档位是2档,就提示学员"请加档到3档"完成后再提示"请减档到2档" //如果当前档位是3档,就提示学员"请减档到2档"完成后再提示"请加档到3档" //如果当前档位是4档,就提示学员"请减档到3档"完成后再提示"请加档到4档" //如果当前档位是5档,就提示学员"请减档到4档"完成后再提示"请加档到5档" if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; } if(m_itemv.bSgFs != 1) { if(m_itemv.Enter_Dw > 0) { m_itemv.bSgFs = 1; } else { m_itemv.bSgFs = 0; } } if(m_itemv.bSgFs > 0) { if(m_itemv.Enter_Dw < 3) //进行加档减档操作 { m_itemv.bSgFs = 1; //先加档后减档 int nextdw = m_itemv.Enter_Dw + 1; //ToDo:语音提示-->请将挡位加到 nextdw 挡 m_itemv.yysj = cg->tkCnt; //20150526 playSound(nextdw, gear_up); } else { //进行减档加档操作 m_itemv.bSgFs = 2; //先减档后加档 int nextdw = m_itemv.Enter_Dw - 1; //ToDo:语音提示-->请将挡位降到 nextdw 挡 m_itemv.yysj = cg->tkCnt; //20150526 playSound(nextdw, gear_down); } } } if(s427 == "3") //20170309 常州模式 { //如果当前档位是1档,就提示学员"请加档到2档" //如果当前档位是2档,就提示学员"请加档到3档" //如果当前档位是3档,就提示学员"请减档到2档" //如果当前档位是4档,就提示学员"请减档到3档" //如果当前档位是5档,就提示学员"请减档到4档" if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; } if(m_itemv.bSgFs != 1) { if(m_itemv.Enter_Dw > 0) { m_itemv.bSgFs = 1; } else { m_itemv.bSgFs = 0; } } } //(* // 河南濮阳 1:加减档位操作,数据库设置为23432档位顺序,当我车在读到加减档项目时,档位为3档, // 这时候只需要加到4档(加档顺序为3432),如果在2档,正常操作档位顺序(23432) // ;如果在4档,正常操作档位顺序(432) 427参数升级扩容,设为2实现此功能 // //20160702 // 濮阳加减档模式听到语音播报后第一种模式在2档时要求加到3档,加到4档,减到3档,减到2档,这个时候项目完成, // 第二种模式档位在3档上,只要加到4档,减到3档,减到2档项目算完成, // 第三种模式如果当时档位在4档,需要降为3档,再加4档,再减3档,再减2档,这个时候项目完成, // 第四种模式如果当时档位在5档同样需要从5档减为4档,减为3档,再加4档,再减为3档减为2档项目组完成 // 速度,档位如果当时档位在4档或者五档时,我都要求学员减至3档再做加减档,速度要求是在加档至4档后车速要达到过35码以上,包括35码 //*) if(s427 == "2" && m_itemv.dwsx_str == "23432") //20150810 河南濮阳 { //判断当前挡位 switch(sor.dw) { case 2: m_itemv.dwsx_str = "3432"; break; case 3: m_itemv.dwsx_str = "432"; break; case 4: m_itemv.dwsx_str = "3432"; break; case 5: m_itemv.dwsx_str = "43432"; break; default: break; } m_itemv.yysj = cg->tkCnt; //20150526 } //20160613 // (* // 河南商丘:要求在250米内完成,完成规定的加减档动作,换档时要求一档一离合,平稳加减档,未完成规定动作,或换挡离合器未抬起,扣100分。 // 根据车辆进入项目时的档位状态,要求换档有以下三种模式: // 1,2-3-4-3-2档 // 2,3-4-3-2档(如果当时档位在3档上只要挂4档,在降3档,降2档,这是濮阳模式) // 3,4-3-2-3-4档(如果档位在4档,就需要降为3档,降为2档,在升3档,升4档) // *) if(ksdd == siteof::hnsq || ksdd == siteof::hnay) { //判断当前挡位 switch(sor.dw) { case 1: m_itemv.dwsx_str = "23432"; break; case 2: m_itemv.dwsx_str = "3432"; break; case 3: m_itemv.dwsx_str = "432"; break; case 4: m_itemv.dwsx_str = "3234"; break; default: break; } m_itemv.yysj = cg->tkCnt; //20150526 } //特殊地点 if(ksdd == siteof::jiuquan) { switch(sor.dw) { case 1: m_itemv.dwsx_str = "2321"; break; case 2: m_itemv.dwsx_str = "3432"; break; case 3: m_itemv.dwsx_str = "2123"; break; case 4: m_itemv.dwsx_str = "3234"; break; default: break; } m_itemv.yysj = cg->tkCnt; //20150526 //20180328 int ksdw = CHAR_TO_INT(m_itemv.dwsx_str.front()); //字符转数字 '0' 也就是十进制整数48 if(sor.dw > ksdw) { //ToDo:语音提示-->请将挡位降到 ksdw 挡 m_itemv.yysj = cg->tkCnt; //20150526 playSound(ksdw, gear_down); } else { //ToDo:语音提示-->请将挡位升到 ksdw 挡 m_itemv.yysj = cg->tkCnt; //20150526 playSound(ksdw, gear_up); } } if(s427 == "4") //20171029广东揭阳模式 { //加减档:在1档时,升到2档再升到3档。2档时,只升到3档。3档时,降2档升3档。4档时,只降3档。5挡时,先降4档,再降到3档 if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; } if(m_itemv.bSgFs != 1) { if(m_itemv.Enter_Dw > 0) { m_itemv.bSgFs = 1; switch(sor.dw) { case 1: m_itemv.dwsx_str = "123"; break; case 2: m_itemv.dwsx_str = "23"; break; case 3: m_itemv.dwsx_str = "323"; break; case 4: m_itemv.dwsx_str = "43"; break; case 5: m_itemv.dwsx_str = "543"; break; default: break; } } else { m_itemv.bSgFs = 0; } } } if(s427 == "5") //2新疆 { if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; } if(m_itemv.bSgFs != 1) { if(m_itemv.Enter_Dw > 0) { int c = CHAR_TO_INT(m_itemv.dwsx_str.front()); m_itemv.bSgFs = 1; if(c == 2) //Copy(m_itemv.dwsx_str, 1, 1) = '2' { switch(sor.dw) { case 1: m_itemv.dwsx_str = "1" + m_itemv.dwsx_str; break; case 2: m_itemv.dwsx_str = "" + m_itemv.dwsx_str; break; //防止自赋值 case 3: m_itemv.dwsx_str = "3" + m_itemv.dwsx_str; break; case 4: m_itemv.dwsx_str = "43" + m_itemv.dwsx_str; break; case 5: m_itemv.dwsx_str = "543" + m_itemv.dwsx_str; break; default: break; } } else if(c == 3) { switch(sor.dw) { case 1: m_itemv.dwsx_str = "12" + m_itemv.dwsx_str; break; case 2: m_itemv.dwsx_str = "2" + m_itemv.dwsx_str; break; case 3: m_itemv.dwsx_str = "" + m_itemv.dwsx_str; break; //防止自赋值 case 4: m_itemv.dwsx_str = "4" + m_itemv.dwsx_str; break; case 5: m_itemv.dwsx_str = "54" + m_itemv.dwsx_str; break; default: break; } } else { m_itemv.dwsx_str = "" + m_itemv.dwsx_str; //防止自赋值 } } else { m_itemv.bSgFs = 0; } } } } void Sub3Judge14Jjdw::Judge_JiaJianDang_427_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; //SysSet[427]:加减档位采用加档到上一档,减档到下一档(0-否 1-是 2-濮阳模式 3-常州模式 4-广东揭阳模式) //20170321 if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; } if(m_itemv.bSgFs != 1) { if(m_itemv.Enter_Dw > 0) { m_itemv.bSgFs = 1; } else { m_itemv.bSgFs = 0; } } //1、2挡时加一挡,3,4,5时减一挡 if(m_itemv.bSgFs == 1) { int a = m_itemv.Enter_Dw + 1; int b = m_itemv.Enter_Dw - 1; if((sor.dw == a && sor1.dw == a) || (sor.dw <= b && sor1.dw <= b)) //防止出现错误档位信号 20150528 增加时间条件 { const std::vector& s425 = TableSysSet->asArray425(); //SysSet[425]-->加减档位操作挂一个挡位要松一次离合器(项目,全程)(0-否 1-是) 0,0 std::string str425 = s425.size() > 0 ? s425[0] : ""; //SysSet[425]-->加减档位操作挂一个挡位要松一次离合器(项目,全程)(0-否 1-是) 0,0 if((str425 == "1" && sor.lhq == SNOT) || str425 != "1") //20141030 { m_itemv.Last_Dw = sor.dw; m_itemv.Last_Dw_kf = 0; m_itemv.Status = m_itemv.Status + 1; m_itemv.yysj = cg->tkCnt; //20150526 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; //20150526 m_exam->TestPro = ItemProFlagEnd; } } } } void Sub3Judge14Jjdw::Judge_JiaJianDang_427_1() { 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 TChuanGan* his2 = m_car->historyChuanGan(2); const TSensorInfo& sor2 = his2->real.sensor; //如果当前档位是1档,就提示学员"请加档到2档"完成后再提示"请减档到1档" //如果当前档位是2档,就提示学员"请加档到3档"完成后再提示"请减档到2档" //如果当前档位是3档,就提示学员"请减档到2档"完成后再提示"请加档到3档" //如果当前档位是4档,就提示学员"请减档到3档"完成后再提示"请加档到4档" //如果当前档位是5档,就提示学员"请减档到4档"完成后再提示"请加档到5档" if(m_itemv.Enter_Dw == 0) { m_itemv.Enter_Dw = sor.dw; if(m_itemv.Enter_Dw > 0) { if(m_itemv.Enter_Dw < 3) //进行加档减档操作 { m_itemv.bSgFs = 1; //先加档后减档 int nextdw = m_itemv.Enter_Dw + 1; //ToDo:语音提示-->请将挡位加到nextdw挡 m_itemv.yysj = cg->tkCnt; //20150526 playSound(nextdw, gear_up); } else { //进行减档加档操作 m_itemv.bSgFs = 2; //先减档后加档 int nextdw = m_itemv.Enter_Dw - 1; //ToDo:语音提示-->请将挡位降到nextdw挡 m_itemv.yysj = cg->tkCnt; playSound(nextdw, gear_down); } } } const TChuanGan* his3 = m_car->historyChuanGan(32); const TSensorInfo& sor3 = his3->real.sensor; const TChuanGan* his4 = m_car->historyChuanGan(4); const TSensorInfo& sor4 = his4->real.sensor; const TChuanGan* his5 = m_car->historyChuanGan(5); const TSensorInfo& sor5 = his5->real.sensor; if(m_itemv.Status == 1) //第一步 { //1、先加挡 if(m_itemv.bSgFs == 1) { int a = m_itemv.Enter_Dw + 1; if(sor.dw < m_itemv.Enter_Dw && sor1.dw < m_itemv.Enter_Dw && sor2.dw < m_itemv.Enter_Dw && sor3.dw < m_itemv.Enter_Dw && sor4.dw < m_itemv.Enter_Dw && sor5.dw < m_itemv.Enter_Dw && sor.dw > 0 && sor1.dw > 0 && sor2.dw > 0 && sor.lhq == SNOT) // 20150719 排除空档 { //(14,01):行驶中越级加挡 JUDGE_MARK_SUB3(14, "01", false); //20160928 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; m_exam->TestPro = ItemProFlagEnd; return; } if(sor.dw == a && sor1.dw == a && sor2.dw == a && sor3.dw == a && cg->tkCnt - m_itemv.yysj >= m_itemv.Ddsj * 1000) //防止出现错误档位信号 20150528 增加时间条件 { if(sor.lhq == SNOT) { m_itemv.Last_Dw = a; m_itemv.Last_Dw_kf = 0; m_itemv.Status = m_itemv.Status + 1; m_itemv.yysj = cg->tkCnt; //ToDo:语音提示:请将挡位降到m_itemv.Enter_Dw挡 playSound(m_itemv.Enter_Dw, gear_down); } } } else if(m_itemv.bSgFs == 2) { int a = m_itemv.Enter_Dw - 1; //20141210 要先减档,却加档了,要扣分 if(sor.dw > m_itemv.Enter_Dw && sor1.dw > m_itemv.Enter_Dw && sor2.dw > m_itemv.Enter_Dw && sor3.dw > m_itemv.Enter_Dw && sor4.dw > m_itemv.Enter_Dw && sor5.dw > m_itemv.Enter_Dw && sor.dw > 0 && sor.dw > 0 && sor1.dw > 0 && sor2.dw > 0 && sor.lhq == SNOT) // 20150719 排除空档 { //(14,01):行驶中越级加挡 JUDGE_MARK_SUB3(14, "01", false); //20160928 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; m_exam->TestPro = ItemProFlagEnd; return; } if(sor.dw == a && sor1.dw == a && sor2.dw == a && sor3.dw == a && cg->tkCnt - m_itemv.yysj >= m_itemv.Ddsj * SECOND) //防止出现错误档位信号 20150528 增加时间条件 { if(sor.lhq == SNOT) { m_itemv.Last_Dw = a; m_itemv.Last_Dw_kf = 0; m_itemv.Status = m_itemv.Status + 1; m_itemv.yysj = cg->tkCnt; //ToDo:语音提示:请将挡位加到m_itemv.Enter_Dw挡 playSound(m_itemv.Enter_Dw, gear_up); } } } } else { //第二步操作 int a = m_itemv.Enter_Dw; if(sor.dw == a && sor1.dw == a && sor2.dw == a && sor3.dw == a) { if(sor.lhq == SNOT) { m_itemv.Last_Dw = a; m_itemv.Last_Dw_kf = 0; m_itemv.Status = m_itemv.Status + 1; TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; m_exam->TestPro = ItemProFlagEnd; } } else { const TChuanGan* his6 = m_car->historyChuanGan(6); const TSensorInfo& sor6 = his6->real.sensor; if(sor.dw > 0 && sor1.dw == sor.dw && sor2.dw == sor.dw && sor3.dw == sor.dw //then && sor4.dw == sor.dw && sor5.dw == sor.dw && sor6.dw == sor.dw) //20171011 { //挡位发生变化了 if(sor.dw != m_itemv.Last_Dw) { //(14,01):行驶中越级加挡 JUDGE_MARK_SUB3(14, "01", false); //20160928 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; const std::string& ksdd = TableSysSet->get211(); if(ksdd != siteof::weinancgs) { m_exam->TestPro = ItemProFlagEnd; } } } } } } void Sub3Judge14Jjdw::Judge_JiaJianDang_427_024() { 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 TChuanGan* his2 = m_car->historyChuanGan(2); const TSensorInfo& sor2 = his2->real.sensor; const TChuanGan* his3 = m_car->historyChuanGan(3); const TSensorInfo& sor3 = his3->real.sensor; const std::string& s428 = TableSysSet->get428(); //SysSet[427] in[0,2,4] //加减档位采用加档到上一档,减档到下一档(0-否 1-是 2-濮阳模式 3-常州模式 4-广东揭阳模式) if(m_itemv.Status == 1) { int a = CHAR_TO_INT(m_itemv.dwsx_str.front()); //字符转数字 '0' 也就是十进制整数48 StrToInt(m_itemv.dwsx_str[1]); if(sor.dw == a && sor1.dw == a && sor2.dw == a && sor3.dw == a) //防止出现错误档位信号 { if(sor.lhq == SNOT) { m_itemv.Last_Dw = a; m_itemv.Last_Dw_kf = 0; m_itemv.Status = m_itemv.Status + 1; //SysSet[428]:加减档位操作换档语音提示(0-否 1-是) if(s428 == "1") //422 改成428 { int nextdw = CHAR_TO_INT(m_itemv.dwsx_str[m_itemv.Status-1]); //StrToInt(m_itemv.dwsx_str[m_itemv.Status]); if(m_itemv.Last_Dw < nextdw) { m_itemv.yysj = cg->tkCnt; //ToDo:语音提示-->请将挡位加到nextdw挡 playSound(nextdw, gear_up); } else if(m_itemv.Last_Dw > nextdw) { m_itemv.yysj = cg->tkCnt; //ToDo:语音提示-->请将挡位降到nextdw挡 playSound(nextdw, gear_down); } } else { m_itemv.yysj = cg->tkCnt; //ToDo:语音提示-->a挡 playSound(a, gear_now); } } } } else { const std::string ksdd = TableSysSet->get211(); if(m_itemv.Status <= (int)m_itemv.dwsx_str.length()) { int a = CHAR_TO_INT(m_itemv.dwsx_str[m_itemv.Status-1]); //delphi从1开始的,C++是从0开始的所以要减1 if(sor.dw == a && sor1.dw == a && sor2.dw == a && sor3.dw == a && cg->tkCnt - m_itemv.yysj >= m_itemv.Ddsj * SECOND) { if(sor.lhq == SNOT) { m_itemv.Last_Dw = a; m_itemv.Last_Dw_kf = 0; m_itemv.Status = m_itemv.Status + 1; //20140923 if(s428 == "1") //422 改成428 { if(m_itemv.Status <= (int)m_itemv.dwsx_str.length()) { int nextdw = CHAR_TO_INT(m_itemv.dwsx_str[m_itemv.Status-1]); //delphi从1开始的,C++是从0开始的所以要减1 if(m_itemv.Last_Dw < nextdw) { m_itemv.yysj = cg->tkCnt; //ToDo:语音播报--->请将挡位加到nextdw挡 playSound(nextdw, gear_up); } else if(m_itemv.Last_Dw > nextdw) { m_itemv.yysj = cg->tkCnt; //ToDo:语音播报--->请将挡位降到nextdw挡 playSound(nextdw, gear_down); } } } else { m_itemv.yysj = cg->tkCnt; //ToDo:语音提示-->a挡 playSound(a, gear_now); } } //20141030 } else { const TChuanGan* his4 = m_car->historyChuanGan(4); const TSensorInfo& sor4 = his4->real.sensor; const TChuanGan* his5 = m_car->historyChuanGan(5); const TSensorInfo& sor5 = his5->real.sensor; const TChuanGan* his6 = m_car->historyChuanGan(6); const TSensorInfo& sor6 = his6->real.sensor; if(sor.dw > 0 && sor1.dw == sor.dw && sor2.dw == sor.dw && sor3.dw == sor.dw //then && sor4.dw == sor.dw && sor5.dw == sor.dw && sor6.dw == sor.dw) //20171011 { //挡位发生变化了 if(sor.dw != m_itemv.Last_Dw) { if(ksdd == siteof::ynzt && IS_C1(m_carType) && a == 4) { //(14,03):行驶中未加至次高挡及以上 JUDGE_MARK_SUB3(14, "03", false); TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; m_exam->TestPro = ItemProFlagEnd; } //(14,01):行驶中越级加挡 if(ksdd != siteof::weinancgs) { JUDGE_MARK_SUB3(14, "01", false); //20160928 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; m_exam->TestPro = ItemProFlagEnd; } else { JUDGE_MARK_SUB3(14, "01", true); //20160928 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; } } } } } else { if(ksdd == siteof::hnpy) { if(m_itemv.maxDwCssc < 5000) { //(14,01):行驶中越级加挡 JUDGE_MARK_SUB3(14, "01", false); } } if(ksdd == siteof::ynzt) { //(14,04):行驶中在次高挡位及以上行驶时间不足5s if(m_itemv.maxDwCssc < 5000) { JUDGE_MARK_SUB3(14, "04", false); } } //结束考试 TTestCtl* ctl = m_car->getTTestCtl(); ctl->IsPassItem14 = true; m_exam->TestPro = ItemProFlagEnd; } } } void Sub3Judge14Jjdw::playSound(int gear, gear_type type) { /* nowDw_1 \sound\1.wav nowDw_2 \sound\2.wav nowDw_3 \sound\3.wav nowDw_4 \sound\4.wav nowDw_5 \sound\5.wav 4040021 \sound\down1d.wav 4040022 \sound\down2d.wav 4040023 \sound\down3d.wav 4040024 \sound\down4d.wav 4040032 \sound\up2d.wav 4040033 \sound\up3d.wav 4040034 \sound\up4d.wav 4040035 \sound\up5d.wav */ std::string code = ""; if(type == gear_now) { switch(gear) { case 2: code = sound::sub3_4040032; break; case 3: code = sound::sub3_4040033; break; case 4: code = sound::sub3_4040034; break; case 5: code = sound::sub3_4040035; break; default: break; } } else if(type == gear_down) { switch(gear) { case 1: code = sound::sub3_4040021; break; case 2: code = sound::sub3_4040022; break; case 3: code = sound::sub3_4040023; break; case 4: code = sound::sub3_4040024; break; default: break; } } else if(type == gear_up) { switch(gear) { case 1: code = sound::sub3_nowDw_1; break; case 2: code = sound::sub3_nowDw_2; break; case 3: code = sound::sub3_nowDw_3; break; case 4: code = sound::sub3_nowDw_4; break; case 5: code = sound::sub3_nowDw_5; break; default: break; } } else { } m_car->createEventSound({itemNo(), code}); }