980 lines
35 KiB
C++
980 lines
35 KiB
C++
#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(!judgeAllowable()) 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挡时加一挡,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<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});
|
||
}
|