subject-two/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge14Jjdw.cpp

980 lines
35 KiB
C++
Raw Normal View History

2025-03-26 16:56:51 +08:00
#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:语音提示-->"取消加减挡位操作"
#if !JUDGE_USE_OLD
m_car->createEventSound({itemNo(), sound::sub3_404004});
#endif
m_car->createEventCancelItem({itemNo(), ""});
return;
}
}
const std::vector<std::string>& 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), JUDGE_UTF8S("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<std::string>& 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<std::vector<std::string>>& s394 = TableSysSet->asArray2_394();
if(!s394.empty()) //if(Sysset[394] <> '')
{
for(size_t i = 0; i < s394.size(); i++)
{
const std::vector<std::string>& 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<std::string> 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挡时加一挡345时减一挡
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<std::string>& 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(3);
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 * 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_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;
//***不能有***m_exam->TestPro = ItemProFlagEnd;
}
}
}
}
}
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 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 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 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
{
}
m_car->createEventSound({itemNo(), code});
}