满分学习优化

This commit is contained in:
lixiao 2025-04-07 09:00:36 +08:00
parent 92cb6838d2
commit 41e92dac38
25 changed files with 321 additions and 217 deletions

View File

@ -121,6 +121,7 @@ struct MemoryStorage
struct CpuOccupyInfo struct CpuOccupyInfo
{ {
double idle = 0.0; double idle = 0.0;
double iowait = 0.0;
double user = 0.0; double user = 0.0;
double sys = 0.0; double sys = 0.0;
}; };

View File

@ -74,22 +74,26 @@
user.LowPart = userTimes.dwLowDateTime; user.LowPart = userTimes.dwLowDateTime;
user.HighPart = userTimes.dwHighDateTime; user.HighPart = userTimes.dwHighDateTime;
unsigned long long _total = kernel.QuadPart + user.QuadPart; unsigned long long _total = kernel.QuadPart + user.QuadPart;
unsigned long long _idle = idle.QuadPart; unsigned long long _idle = idle.QuadPart;
unsigned long long _user = user.QuadPart; unsigned long long _iowait = 0;
unsigned long long _user = user.QuadPart;
static unsigned long long prevTotal = 0, prevIdle = 0, prevUser = 0; static unsigned long long prevTotal = 0, prevIdle = 0, prevIowait = 0, prevUser = 0;
unsigned long long __total = _total - prevTotal; unsigned long long __total = _total - prevTotal;
unsigned long long __idle = _idle - prevIdle; unsigned long long __idle = _idle - prevIdle;
unsigned long long __user = _user - prevUser; unsigned long long __iowait = _iowait - prevIowait;
prevTotal = _total; unsigned long long __user = _user - prevUser;
prevIdle = _idle; prevTotal = _total;
prevUser = _user; prevIdle = _idle;
prevIowait = _iowait;
prevUser = _user;
if(__total > 0) if(__total > 0)
{ {
occupy->idle = (__idle) * 100.0 / __total; occupy->idle = (__idle) * 100.0 / __total;
occupy->user = (__user) * 100.0 / __total; occupy->iowait = (__iowait) * 100.0 / __total;
occupy->sys = (__total - __idle - __user) * 100.0 / __total; occupy->user = (__user) * 100.0 / __total;
occupy->sys = (__total - __idle - __user) * 100.0 / __total;
return true; return true;
} }
return false; return false;
@ -187,36 +191,76 @@
bool __sdk_cpu_occupy__(struct CpuOccupyInfo* occupy) bool __sdk_cpu_occupy__(struct CpuOccupyInfo* occupy)
{ {
std::ifstream procStat("/proc/stat");
//procStat.ignore(5, ' '); //跳过'cpu'前缀
//std::stringstream buffer;
//buffer << procStat.rdbuf();
//std::string str = buffer.str();
std::string line; std::string line;
std::getline(procStat, line); // 读取第一行通常是CPU统计信息 static constexpr bool root = false; //root用户权限
std::istringstream buffer(line); // 将字符串流转换为输入流 if(root)
procStat.close(); {
std::ifstream procStat("/proc/stat");
if(!procStat.is_open())
{
return false;
}
//procStat.ignore(5, ' '); //跳过'cpu'前缀
//std::stringstream buffer;
//buffer << procStat.rdbuf();
//std::string str = buffer.str();
std::getline(procStat, line); // 读取第一行通常是CPU统计信息
procStat.close();
}
else
{
FILE* pipe = ::popen("cat /proc/stat", "r"); //执行命令并打开管道
if(!pipe)
{
return false;
}
//逐行读取输出
char buf[1024] = {0};
if(::fgets(buf, sizeof(buf), pipe) == NULL)
{
::pclose(pipe); //关闭管道
return false;
}
::pclose(pipe); //关闭管道
line = buf;
// std::list<std::string> data;
// while(::fgets(buf, sizeof(buf), pipe) != nullptr)
// {
// line = buf;
// memset(buf,0,sizeof(buf));
// if(line.substr(0,3) != "cpu") { break; }
// if(line.back() == '\n') { line.pop_back(); }
// data.push_back(line);
// }
// ::pclose(pipe); // 关闭管道
}
std::istringstream sis(line); // 将字符串流转换为输入流
std::string key; std::string key;
unsigned long long user=0, nice=0, sys=0, idle=0, iowait=0, irq=0, softirq=0, steal=0, guest=0, guest_nice=0; unsigned long long user=0, nice=0, sys=0, idle=0, iowait=0, irq=0, softirq=0, steal=0, guest=0, guest_nice=0;
buffer >> key >> user >> nice >> sys >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice; sis >> key >> user >> nice >> sys >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice;
unsigned long long _total = user + nice + sys + idle + iowait + irq + softirq + steal + guest + guest_nice; unsigned long long _total = user + nice + sys + idle + iowait + irq + softirq + steal + guest + guest_nice;
unsigned long long _idle = idle + iowait; unsigned long long _idle = idle;
unsigned long long _user = user; unsigned long long _iowait = iowait;
unsigned long long _user = user;
static unsigned long long prevTotal = 0, prevIdle = 0, prevUser = 0; static unsigned long long prevTotal = 0, prevIdle = 0, prevIowait = 0, prevUser = 0;
unsigned long long __total = _total - prevTotal; unsigned long long __total = _total - prevTotal;
unsigned long long __idle = _idle - prevIdle; unsigned long long __idle = _idle - prevIdle;
unsigned long long __user = _user - prevUser; unsigned long long __iowait = _iowait - prevIowait;
prevTotal = _total; unsigned long long __user = _user - prevUser;
prevIdle = _idle; prevTotal = _total;
prevUser = _user; prevIdle = _idle;
prevIowait = _iowait;
prevUser = _user;
if(__total > 0) if(__total > 0)
{ {
occupy->idle = (__idle) * 100.0 / __total; occupy->idle = (__idle) * 100.0 / __total;
occupy->user = (__user) * 100.0 / __total; occupy->iowait = (__iowait) * 100.0 / __total;
occupy->sys = (__total - __idle - __user) * 100.0 / __total; occupy->user = (__user) * 100.0 / __total;
occupy->sys = (__total - __idle - __user) * 100.0 / __total;
return true; return true;
} }
return false; return false;

View File

@ -12,7 +12,6 @@
*** ***
*** ***
*** ***
*** JUDGE_USE_TSUB3T //是否启用大车科目三测试
*** JUDGE_USE_NSUB3 //是否启用新科三评判 *** JUDGE_USE_NSUB3 //是否启用新科三评判
*** JUDGE_USE_OLD //是否启用评判语音播报之前老模式 *** JUDGE_USE_OLD //是否启用评判语音播报之前老模式
*** JUDGE_USE_LOG //是否启用日志功能模块 *** JUDGE_USE_LOG //是否启用日志功能模块
@ -30,11 +29,6 @@
*** ***
********************************************************************/ ********************************************************************/
/*
*
*/
#define JUDGE_USE_TSUB3T 0
/* /*
* *
*/ */

View File

@ -27,7 +27,7 @@
#define JUDGE_VERSION_MAJOR 1 #define JUDGE_VERSION_MAJOR 1
#define JUDGE_VERSION_MINOR 0 #define JUDGE_VERSION_MINOR 0
#define JUDGE_VERSION_PATCH 3 #define JUDGE_VERSION_PATCH 3
#define JUDGE_VERSION_STAMP "2504011600b" #define JUDGE_VERSION_STAMP "2504031330b"
#if JUDGE_USE_OLD #if JUDGE_USE_OLD
# undef JUDGE_VERSION_STAMP # undef JUDGE_VERSION_STAMP
# define JUDGE_VERSION_STAMP "2411121010b.old" # define JUDGE_VERSION_STAMP "2411121010b.old"

View File

@ -156,7 +156,7 @@ int SysParmTable::findQiBuGear(int carCode)
int SysParmTable::findHectometreImpulse(int carCode) int SysParmTable::findHectometreImpulse(int carCode)
{ {
//NO1=3 NO2=车型代码 NO3=4条件 TXT1 //NO1=3 NO2=车型代码 NO3=2条件 TXT1
int impulse = INVALID_INDEX; int impulse = INVALID_INDEX;
int size = parm3Size(); int size = parm3Size();
for(int i = 0; i < size; i++) for(int i = 0; i < size; i++)

View File

@ -198,6 +198,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(414); //变道、超车以前后轮都过线0-否 1-是) //0 SYSSET_DECLARE(414); //变道、超车以前后轮都过线0-否 1-是) //0
SYSSET_DECLARE(415, type_array, "^"); //自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效 //0^1^ SYSSET_DECLARE(415, type_array, "^"); //自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效 //0^1^
SYSSET_DECLARE(418); //扣分时实时播报语音0-否 1-是) //0 SYSSET_DECLARE(418); //扣分时实时播报语音0-否 1-是) //0
SYSSET_DECLARE(419, type_int); //里程按百米脉冲计算0-否 1-是
SYSSET_DECLARE(421); //模拟夜间:车辆发生故障,按近光灯和双跳进行评判0-是 1-否) SYSSET_DECLARE(421); //模拟夜间:车辆发生故障,按近光灯和双跳进行评判0-是 1-否)
SYSSET_DECLARE(425, type_array, ","); //加减档位操作挂一个挡位要松一次离合器(项目,全程0-否 1-是)() // 0,0, SYSSET_DECLARE(425, type_array, ","); //加减档位操作挂一个挡位要松一次离合器(项目,全程0-否 1-是)() // 0,0,
SYSSET_DECLARE(426, type_int); //手工取消正在考的项目0-否 1-是) // 1 SYSSET_DECLARE(426, type_int); //手工取消正在考的项目0-否 1-是) // 1
@ -339,6 +340,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_ASSIGN(414); SYSSET_ASSIGN(414);
SYSSET_ASSIGN(415); SYSSET_ASSIGN(415);
SYSSET_ASSIGN(418); SYSSET_ASSIGN(418);
SYSSET_ASSIGN(419);
SYSSET_ASSIGN(421); SYSSET_ASSIGN(421);
SYSSET_ASSIGN(425); SYSSET_ASSIGN(425);
SYSSET_ASSIGN(426); SYSSET_ASSIGN(426);

View File

@ -358,7 +358,7 @@ void ExamCarSub2::dealJudgeExam()
//} //}
//2.6.1) //2.6.1)
calcDistance(); //距离计算 calcDistance(false, 0); //距离计算
//2.6.2) 监管判断 //2.6.2) 监管判断
//函数是一个监管检查函数,这里我们先不考虑监管,我模拟一下这个函数的写法 //函数是一个监管检查函数,这里我们先不考虑监管,我模拟一下这个函数的写法

View File

@ -300,7 +300,7 @@ bool ExamCarSub3::Init_KM3_Global()
{ {
TableSysSet->set481("0"); TableSysSet->set481("0");
} }
if(std::atoi(s481.c_str()) > 30) if(std::stoi(s481) > 30)
{ {
TableSysSet->set481("15"); TableSysSet->set481("15");
} }
@ -309,15 +309,15 @@ bool ExamCarSub3::Init_KM3_Global()
const std::vector<std::string>& s349 = TableSysSet->asArray349(); const std::vector<std::string>& s349 = TableSysSet->asArray349();
if(s349.size() > 5 && s349[5] != "") if(s349.size() > 5 && s349[5] != "")
{ {
m_ctl.RtkOffset = std::atoi(s349[5].c_str()); m_car.RtkOffset = std::stoi(s349[5]);
} }
else if(s349.size() > 4 && s349[4] != "") else if(s349.size() > 4 && s349[4] != "")
{ {
m_ctl.RtkOffset = std::atoi(s349[4].c_str()); m_car.RtkOffset = std::stoi(s349[4]);
} }
else else
{ {
m_ctl.RtkOffset = 0; //20240807 之前是2 m_car.RtkOffset = 0; //20240807 之前是2
} }
//2、强制启用139号部令 //2、强制启用139号部令
@ -341,7 +341,7 @@ bool ExamCarSub3::Init_KM3_Global()
} }
//6、减速类型特殊地方的业务后期开发个性评判可能会用到 //6、减速类型特殊地方的业务后期开发个性评判可能会用到
const std::vector<std::string>& s500 = TableSysSet->asArray500(); const std::vector<std::string>& s500 = TableSysSet->asArray500();
m_ctl.JianSuLeiXing = (s500.size() > 12 && s500[12] != "" ? std::atoi(s500[12].c_str()) : 0); m_ctl.JianSuLeiXing = (s500.size() > 12 && s500[12] != "" ? std::stoi(s500[12]) : 0);
//扩展>0表示启用车速 =1 表示 30车速 >1 表示浙江 只有路口可以结合车速 //扩展>0表示启用车速 =1 表示 30车速 >1 表示浙江 只有路口可以结合车速
if(m_ctl.JianSuLeiXing > 30 || (m_ctl.JianSuLeiXing > 2 && m_ctl.JianSuLeiXing < 10)) if(m_ctl.JianSuLeiXing > 30 || (m_ctl.JianSuLeiXing > 2 && m_ctl.JianSuLeiXing < 10))
{ {
@ -352,7 +352,7 @@ bool ExamCarSub3::Init_KM3_Global()
//lxbgcd变更车道相关定义 //lxbgcd变更车道相关定义
const std::vector<std::string>& s512 = TableSysSet->asArray512(); const std::vector<std::string>& s512 = TableSysSet->asArray512();
//南宁个性参数,翻译即可 //南宁个性参数,翻译即可
m_ctl.NanNingWavKind = (s512.size() > 2 && s512[2] != "" ? std::atoi(s512[2].c_str()) : 0); m_ctl.NanNingWavKind = (s512.size() > 2 && s512[2] != "" ? std::stoi(s512[2]) : 0);
//其他参数赋值 //其他参数赋值
m_ctl.tsxhsj = 60 * 1000; m_ctl.tsxhsj = 60 * 1000;
@ -382,17 +382,14 @@ bool ExamCarSub3::Init_KM3_Global()
*/ */
//10、搜索范围赋值 //10、搜索范围赋值
m_ctl.MaxR = 6000;
m_ctl.MinR = 3000;
const std::vector<std::string>& s329 = TableSysSet->asArray329(); const std::vector<std::string>& s329 = TableSysSet->asArray329();
m_ctl.MaxR = (s329.size() > 0 && s329[0] != "" ? std::atoi(s329[0].c_str()) : 6000); m_car.MaxR = (s329.size() > 0 && s329[0] != "" ? std::stoi(s329[0]) : 6000);
m_ctl.MinR = (s329.size() > 1 && s329[1] != "" ? std::atoi(s329[1].c_str()) : 3000); m_car.MinR = (s329.size() > 1 && s329[1] != "" ? std::stoi(s329[1]) : 3000);
//11、得到夜考时间点 //11、得到夜考时间点
const std::vector<std::string>& s19 = TableSysSet->asArray19(); const std::vector<std::string>& s19 = TableSysSet->asArray19();
m_car.Night_Hr = (s19.size() > 0 && s19[0] != "" ? std::atoi(s19[0].c_str()) : 19); //22 //???yhyflag m_car.Night_Hr = (s19.size() > 0 && s19[0] != "" ? std::stoi(s19[0]) : 19); //22
m_car.Night_Mi = (s19.size() > 1 && s19[1] != "" ? std::atoi(s19[1].c_str()) : 0); m_car.Night_Mi = (s19.size() > 1 && s19[1] != "" ? std::stoi(s19[1]) : 0);
//3、抖动时发动机闯动比例 //3、抖动时发动机闯动比例
m_car.fdjds_cdbl = 0.6; m_car.fdjds_cdbl = 0.6;
@ -409,6 +406,34 @@ bool ExamCarSub3::Init_KM3_Global()
//7、起步闯动 //7、起步闯动
m_car.QBCD = -1; m_car.QBCD = -1;
//小车是不存在夜考的
if(IS_C1C2C5(cartype))
{
m_car.Night_ID = false;
}
else
{
//当前时间到达夜考时间点了
//if( (Now() - Trunc(now())) > (Car.Night_Hr / 24 + Car.Night_Mi / 24 / 60) )
DateTimex dt = Tools::nowDateTime();
if(dt.hour*60 + dt.minute >= m_car.Night_Hr*60 + m_car.Night_Mi)
{
//如果不考模拟灯光
if(!m_stuInfo.dmndg)
{
m_car.Night_ID = true;
}
else
{
m_car.Night_ID = false;
}
}
else
{
m_car.Night_ID = false;
}
}
//4、得到行驶里程限制 //4、得到行驶里程限制
if(IS_C1C2C5C6(cartype)) if(IS_C1C2C5C6(cartype))
{ {
@ -450,6 +475,14 @@ bool ExamCarSub3::Init_KM3_Global()
} }
} }
//从SystemParm中读取参数
this->UpdateCarParmWithSystemParm();
if(m_stuInfo.mfxx) // && m_stuInfo.czlx == 1
{
m_car.XSJL = m_car.MFXX_XSJL;
}
//注释改成:将之前的行驶里程减掉 //注释改成:将之前的行驶里程减掉
if(m_stuInfo.yklc != 0) if(m_stuInfo.yklc != 0)
{ {
@ -460,8 +493,11 @@ bool ExamCarSub3::Init_KM3_Global()
} }
} }
//从SystemParm中读取参数 int X_McH = (!carInfo->X_MCH.empty()) ? std::atoi(carInfo->X_MCH.c_str()) : 0;
this->UpdateCarParmWithSystemParm(); if(X_McH > 0) //百米脉冲值优先carinfo的 在UpdateCarParmWithSystemParm中也有赋值不要调换顺序
{
m_car.X_McH = X_McH;
}
//新模拟夜间(次数^错扣^固定^),预留 //新模拟夜间(次数^错扣^固定^),预留
if(ksdd == siteof::hbxy && IS_A1A2A3B1B2(cartype)) //isAB if(ksdd == siteof::hbxy && IS_A1A2A3B1B2(cartype)) //isAB
@ -490,34 +526,6 @@ bool ExamCarSub3::Init_KM3_Global()
TableSysSet->set336("0"); TableSysSet->set336("0");
} }
//小车是不存在夜考的
if(IS_C1C2C5(cartype))
{
m_car.Night_ID = false;
}
else
{
//当前时间到达夜考时间点了
//if( (Now() - Trunc(now())) > (Car.Night_Hr / 24 + Car.Night_Mi / 24 / 60) )
DateTimex dt = Tools::nowDateTime();
if(dt.hour*60 + dt.minute >= m_car.Night_Hr*60 + m_car.Night_Mi)
{
//如果不考模拟灯光
if(!m_stuInfo.dmndg)
{
m_car.Night_ID = true;
}
else
{
m_car.Night_ID = false;
}
}
else
{
m_car.Night_ID = false;
}
}
m_commItem = ISub3JudgeItem::create(Sub3ItemType20Comm); m_commItem = ISub3JudgeItem::create(Sub3ItemType20Comm);
m_commItem->dealBuildItem(this); m_commItem->dealBuildItem(this);
int parm1Size = TableSysParm->parm1Size(); int parm1Size = TableSysParm->parm1Size();
@ -607,7 +615,7 @@ bool ExamCarSub3::Init_KM3_Global()
//只有掉头项目才有右掉头一说 //20150516 //只有掉头项目才有右掉头一说 //20150516
examItem->bYdt = (itemNo == Sub3ItemType12Dtxx && parm1->TXT2 == "ydt" ? true : false); //是否右掉头 examItem->bYdt = (itemNo == Sub3ItemType12Dtxx && parm1->TXT2 == "ydt" ? true : false); //是否右掉头
//如果是满分学习的 //如果是满分学习的 czlx=1 m_stuInfo.czlx //满分学习非必考项目,一开始考试就通知外壳合格变绿
if(m_stuInfo.mfxx && m_car.MFXX_KSXM != "" && itemNo != Sub3ItemType13Yjxs && IS_A1A2A3B1B2C6(cartype)) if(m_stuInfo.mfxx && m_car.MFXX_KSXM != "" && itemNo != Sub3ItemType13Yjxs && IS_A1A2A3B1B2C6(cartype))
{ {
std::string s = "," + std::to_string(itemNo) + ","; std::string s = "," + std::to_string(itemNo) + ",";
@ -615,9 +623,10 @@ bool ExamCarSub3::Init_KM3_Global()
if(Tools::pos(s, ss) == false) if(Tools::pos(s, ss) == false)
{ {
examItem->NoID = true; examItem->NoID = true;
KM3EndItem(itemNo,true,false);
} }
} }
//对夜考项目进行特殊处理 //对夜考项目进行特殊处理 //大车夜考非必考项目,一开始考试就通知外壳合格变绿
if(m_car.Night_ID == true && itemNo != Sub3ItemType13Yjxs) if(m_car.Night_ID == true && itemNo != Sub3ItemType13Yjxs)
{ {
std::string s = "," + std::to_string(itemNo) + ","; std::string s = "," + std::to_string(itemNo) + ",";
@ -627,8 +636,8 @@ bool ExamCarSub3::Init_KM3_Global()
//examItem->Item_Color = itemStateHg; //examItem->Item_Color = itemStateHg;
//examItem->TestPro = ItemProFlagIdle; //examItem->TestPro = ItemProFlagIdle;
//examItem->FinishFlag = true; //examItem->FinishFlag = true;
examItem->NoID = true;
KM3EndItem(itemNo,true,false); KM3EndItem(itemNo,true,false);
//examItem->NoID = true;
} }
} }
} }
@ -650,10 +659,22 @@ void ExamCarSub3::UpdateCarParmWithSystemParm()
std::string parm3TXT1 = Tools::trim(parm3->TXT1); std::string parm3TXT1 = Tools::trim(parm3->TXT1);
std::string parm3TXT3 = Tools::trim(parm3->TXT3); std::string parm3TXT3 = Tools::trim(parm3->TXT3);
//switch(parm3No3)
//{
//case 2: m_car.X_McH = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 0; break;
//case 4: m_car.StartSpeed = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 2; break;
//default: break;
//}
//百米脉冲
if(parm3No3 == 2)
{
m_car.X_McH = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 0;
}
//4、起步挡位 //4、起步挡位
if(parm3No3 == 4) if(parm3No3 == 4)
{ {
//C++翻译我们的StrToIntDef的时候最好做一个异常处理因为DELPHI内部做了这个实现
m_car.StartSpeed = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 2; m_car.StartSpeed = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 2;
} }
//5、是否评判安全带 //5、是否评判安全带
@ -698,11 +719,8 @@ void ExamCarSub3::UpdateCarParmWithSystemParm()
{ {
if(parm3TXT1 != "") if(parm3TXT1 != "")
{ {
#if !JUDGE_USE_TSUB3T
parm3TXT1 = Tools::toupper(parm3TXT1); parm3TXT1 = Tools::toupper(parm3TXT1);
m_carInfo->kscx = parm3TXT1; m_carInfo->kscx = parm3TXT1;
#endif
} }
} }
@ -1053,7 +1071,9 @@ void ExamCarSub3::UpdateCarParmWithSystemParm()
{ {
std::vector<std::string> s = Tools::split(parm3TXT1, "^"); std::vector<std::string> s = Tools::split(parm3TXT1, "^");
m_car.MFXX_KSXM = s.size() > 0 ? s[0] : ""; m_car.MFXX_KSXM = s.size() > 0 ? s[0] : "";
m_car.MFXX_Parm = parm3TXT1; m_car.MFXX_XSJL = s.size() > 1 && s[1] != "" ? std::atoi(s[1].c_str()) : 3000;
m_car.MFXX_Mark = s.size() > 2 && s[2] != "" ? std::atoi(s[2].c_str()) : 0;
//m_car.MFXX_Parm = parm3TXT1;
} }
} }
} }
@ -1206,7 +1226,8 @@ void ExamCarSub3::Deal_KM3_Judge()
//GetCarDirStauts() //GetCarDirStauts()
//距离计算 //7、计算科目三距离 //距离计算 //7、计算科目三距离
calcDistance(); //Calc_KM3JL()
calcDistance(TableSysSet->asInt419() == 1, m_car.X_McH); //Calc_KM3JL()
Km3NewEnterItem(); Km3NewEnterItem();
@ -3480,11 +3501,11 @@ void ExamCarSub3::Km3NewEnterItem()
//Point_Type -1:辅助点 0:项目点 大于0指定方向的点号 其他:非评判用 //Point_Type -1:辅助点 0:项目点 大于0指定方向的点号 其他:非评判用
if(mp->point_type > 0 && Tools::pos("+", his1->MapPoint_Road_Code) == true) //Pos('+', LS1->MapPoint_Road_Code) > 0 if(mp->point_type > 0 && Tools::pos("+", his1->MapPoint_Road_Code) == true) //Pos('+', LS1->MapPoint_Road_Code) > 0
{ {
offset = m_ctl.MaxR; offset = m_car.MaxR;
} }
else else
{ {
offset = m_ctl.MinR; offset = m_car.MinR;
} }
int JDMin = Range_cm2Gpsdeg(-offset, gpsE, true); int JDMin = Range_cm2Gpsdeg(-offset, gpsE, true);
int JDMax = Range_cm2Gpsdeg(offset, gpsE, true); int JDMax = Range_cm2Gpsdeg(offset, gpsE, true);
@ -4209,7 +4230,7 @@ bool ExamCarSub3::examMarkItem(ExamItemCode itemNo, const std::string& serial, b
//Kind:0 自动评判 1考车人工扣分 2远程下发的考试扣分 //Kind:0 自动评判 1考车人工扣分 2远程下发的考试扣分
bool result = false; bool result = false;
//满分学习如果不扣分,除了考车人工点击扣分或者远程下发的扣分,一律忽略 //满分学习如果不扣分,除了考车人工点击扣分或者远程下发的扣分,一律忽略
if(m_stuInfo.mfxx && m_stuInfo.mfxxn) if(m_stuInfo.mfxx && !m_car.MFXX_Mark) //m_stuInfo.mfxxn
{ {
if(type == MarkTypeAuto || type == MarkTypeNS3) return result; if(type == MarkTypeAuto || type == MarkTypeNS3) return result;
} }

View File

@ -335,7 +335,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg)
rcb.bumper_b = GpsMath::calcCenterPoint(ps_b[II(2)], ps_b[II(24)]); //保险杠中心点坐标对于C1,C2,C5, 就是2点和24点的中点 rcb.bumper_b = GpsMath::calcCenterPoint(ps_b[II(2)], ps_b[II(24)]); //保险杠中心点坐标对于C1,C2,C5, 就是2点和24点的中点
TGpsInfo& gps = cg->real.gps; TGpsInfo& gps = cg->real.gps;
if(gps.rtkEnabled && gps.valid()) //if(gps.rtkEnabled) if(/*gps.rtkEnabled &&*/ gps.valid()) //if(gps.rtkEnabled)
{ {
int x = 0, y = 0; int x = 0, y = 0;
GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur, m_basePoint.gc, x, y); GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur, m_basePoint.gc, x, y);
@ -356,7 +356,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg)
rcb.b2_b_G = ps_b[II(64)]; //挂车GPS从天线 rcb.b2_b_G = ps_b[II(64)]; //挂车GPS从天线
TGpsInfo& gps2 = cg->real.gps2; TGpsInfo& gps2 = cg->real.gps2;
if(gps2.rtkEnabled && gps2.valid()) //if(gps.rtkEnabled) if(/*gps2.rtkEnabled &&*/ gps2.valid()) //if(gps.rtkEnabled)
{ {
int x = 0, y = 0; int x = 0, y = 0;
GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur2, m_basePoint.gc, x, y); GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur2, m_basePoint.gc, x, y);
@ -457,7 +457,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg)
rcb.b2_b_G = ps_b[II(40)]; //挂车GPS从天线 rcb.b2_b_G = ps_b[II(40)]; //挂车GPS从天线
TGpsInfo& gps = cg->real.gps; TGpsInfo& gps = cg->real.gps;
if(gps.rtkEnabled && gps.valid()) //if(gps.rtkEnabled) if(/*gps.rtkEnabled &&*/ gps.valid()) //if(gps.rtkEnabled)
{ {
int x = 0, y = 0; int x = 0, y = 0;
GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur, m_basePoint.gc, x, y); GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur, m_basePoint.gc, x, y);
@ -465,7 +465,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg)
} }
TGpsInfo& gps2 = cg->real.gps2; TGpsInfo& gps2 = cg->real.gps2;
if(gps2.rtkEnabled && gps2.valid()) //if(gps2.rtkEnabled) if(/*gps2.rtkEnabled &&*/ gps2.valid()) //if(gps2.rtkEnabled)
{ {
int x = 0, y = 0; int x = 0, y = 0;
GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur2, m_basePoint.gc, x, y); GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur2, m_basePoint.gc, x, y);

View File

@ -266,18 +266,19 @@ const char* ExamService::examPeerOccupy()
logdebug("call examPeerOccupy."); logdebug("call examPeerOccupy.");
//if(!m_init) return QE(errorInitNot); //if(!m_init) return QE(errorInitNot);
TOccupyInfo occ;
CpuOccupyInfo cpu; CpuOccupyInfo cpu;
MemoryStorage memo;
DiskStorage disk;
Tools::peerOccupyCpu(cpu); Tools::peerOccupyCpu(cpu);
MemoryStorage memo;
Tools::peerOccupyMemory(memo, MB); Tools::peerOccupyMemory(memo, MB);
DiskStorage disk;
Tools::peerOccupyDisk("./", disk, MB); Tools::peerOccupyDisk("./", disk, MB);
TOccupyInfo occ;
occ.cpu.cores = Tools::getCpuProcessors(); occ.cpu.cores = Tools::getCpuProcessors();
occ.cpu.idle = std::round(cpu.idle); occ.cpu.idle = std::round(cpu.idle);
occ.cpu.iowait = std::round(cpu.iowait);
occ.cpu.user = std::round(cpu.user); occ.cpu.user = std::round(cpu.user);
occ.cpu.sys = std::round(cpu.sys); occ.cpu.sys = std::round(cpu.sys);

View File

@ -586,27 +586,49 @@ void IExamCar::doExamRealExam(Package* pkg)
//... ... //... ...
} }
int IExamCar::calcDistance() int IExamCar::calcDistance(bool mc, int X_McH)
{ {
if(m_history->size() <= 1) int a = 0;
if(mc && X_McH > 0)
{ {
return 0; if(m_history->size() <= 1)
{
return 0;
}
//(当前脉冲-前一帧脉冲) / 百米脉冲 * 10000 单位cm
int ljmc = historySensor().ljmc;
int ljmc1 = historySensor(1).ljmc;
a = (ljmc-ljmc1) / X_McH * 10000;
switch(m_cg->move)
{
case moveForward: m_disForward += a; break;
case moveBackward: m_disBackward += a; break;
default: break;
}
} }
const Pointi& h = historyGps(1).ai_gps; else
const Pointi& c = historyGps().ai_gps;
if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) )
{ {
return 0; if(m_history->size() <= 1)
} {
double x = h.x - c.x; return 0;
double y = h.y - c.y; }
int a = std::round(std::sqrt(x*x + y*y)); const Pointi& h = historyGps(1).ai_gps;
switch(m_cg->move) const Pointi& c = historyGps().ai_gps;
{ if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) )
case moveForward: m_disForward += a; break; {
case moveBackward: m_disBackward += a; break; return 0;
default: break; }
double x = h.x - c.x;
double y = h.y - c.y;
a = std::round(std::sqrt(x*x + y*y));
switch(m_cg->move)
{
case moveForward: m_disForward += a; break;
case moveBackward: m_disBackward += a; break;
default: break;
}
} }
m_cg->ai_ljjl_cm = m_disForward; m_cg->ai_ljjl_cm = m_disForward;
m_cg->ai_dcjl_cm = m_disBackward; m_cg->ai_dcjl_cm = m_disBackward;
m_cg->ai_ljjl = m_disForward/100.0; m_cg->ai_ljjl = m_disForward/100.0;

View File

@ -138,7 +138,7 @@ public:
virtual void doExamRealExam(Package* pkg); virtual void doExamRealExam(Package* pkg);
virtual void doExamNS3(Package* pkg){}; virtual void doExamNS3(Package* pkg){};
//前进 后退 距离计算 //前进 后退 距离计算
virtual int calcDistance(); virtual int calcDistance(bool mc, int X_McH);
//当前系统时间回放取的事GPS时间 //当前系统时间回放取的事GPS时间
virtual int64 GetCurrentTime2() const; virtual int64 GetCurrentTime2() const;

View File

@ -31,7 +31,6 @@ public:
virtual const char* examSecretDecrypt(const char* data, int size) = 0; virtual const char* examSecretDecrypt(const char* data, int size) = 0;
virtual int examFreeMemory(const char* buf) = 0; virtual int examFreeMemory(const char* buf) = 0;
virtual void examJudgeCallbackLogToCaller(int level, const char* info, int len) = 0; virtual void examJudgeCallbackLogToCaller(int level, const char* info, int len) = 0;
virtual void examJudgeCallbackRealExamToCaller(const char* data, int len) = 0; virtual void examJudgeCallbackRealExamToCaller(const char* data, int len) = 0;
virtual void examJudgeCallbackPerformToCaller(const char* data, int len) = 0; virtual void examJudgeCallbackPerformToCaller(const char* data, int len) = 0;

View File

@ -411,8 +411,8 @@ void Sub3Judge02Qbxx::Judge_QiBu_GuaCuoDang()
{ {
const TSensorInfo& sor = cg->real.sensor; const TSensorInfo& sor = cg->real.sensor;
//小车1档起步, 大车1、2档起步 //小车1档起步, 大车1、2档起步
static const int gear = TableSysParm->findQiBuGear(m_car->carCode()); //static const int gear = TableSysParm->findQiBuGear(m_car->carCode());
static const int gear = m_car->getTCar()->StartSpeed;
#if JUDGE_USE_INSPECT #if JUDGE_USE_INSPECT
if(sor.dw_plc > gear) //无锡所用原始档位 if(sor.dw_plc > gear) //无锡所用原始档位
{ {

View File

@ -94,9 +94,7 @@ bool Sub3Judge03Zxxs::dealJudgeEnter()
m_itemv.Gps_Offset = 40; m_itemv.Gps_Offset = 40;
} }
TTestCtl* ctl = m_car->getTTestCtl(); m_itemv.Gps_Offset = m_itemv.Gps_Offset + tcar->RtkOffset;
//GP
m_itemv.Gps_Offset = m_itemv.Gps_Offset + ctl->RtkOffset;
m_itemv.Init_LJJL = cg->ai_ljjl; m_itemv.Init_LJJL = cg->ai_ljjl;
m_exam->TestPro = ItemProFlagJudge; m_exam->TestPro = ItemProFlagJudge;
//ToDo2:生成进项目事件 //ToDo2:生成进项目事件

View File

@ -1373,13 +1373,15 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian()
{ {
const TGpsInfo& gps = m_car->historyGps(); const TGpsInfo& gps = m_car->historyGps();
//靠边停车以右前、后轮判靠边距离0-否 1-是) //靠边停车以右前、后轮判靠边距离0-否 1-是)
TTestCtl* ctl = m_car->getTTestCtl(); int RtkOffset = m_car->getTCar()->RtkOffset;
Max_JL0 = Max_JL0 - ctl->RtkOffset - std::round(gps.jdyz * 100) - std::round(gps.wdyz * 100); int offset = RtkOffset + std::round(gps.jdyz*100) + std::round(gps.wdyz*100);
Max_JL1 = Max_JL1 - ctl->RtkOffset - std::round(gps.jdyz * 100) - std::round(gps.wdyz * 100); Max_JL0 -= offset;
Max_JL2 = Max_JL2 - ctl->RtkOffset - std::round(gps.jdyz * 100) - std::round(gps.wdyz * 100); Max_JL1 -= offset;
Max_JL2 -= offset;
//20170724 //20170724
if(Max_JL0 > 50 + m_itemv.kbtcwc && Max_JL1 > 50 + m_itemv.kbtcwc && Max_JL2 > 50 + m_itemv.kbtcwc) int kbtcwc = 50 + m_itemv.kbtcwc;
if(Max_JL0 > kbtcwc && Max_JL1 > kbtcwc && Max_JL2 > kbtcwc)
{ {
if(m_itemv.dcykkb == 0) //大车夜考相关的参数 if(m_itemv.dcykkb == 0) //大车夜考相关的参数
{ {
@ -1521,13 +1523,15 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian_Tail()
{ {
const TGpsInfo& gps2 = m_car->historyGps2(); const TGpsInfo& gps2 = m_car->historyGps2();
//靠边停车以右前、后轮判靠边距离0-否 1-是) //靠边停车以右前、后轮判靠边距离0-否 1-是)
TTestCtl* ctl = m_car->getTTestCtl(); int RtkOffset = m_car->getTCar()->RtkOffset;
Max_JL0 = Max_JL0 - ctl->RtkOffset - std::round(gps2.jdyz * 100) - std::round(gps2.wdyz * 100); int offset = RtkOffset + std::round(gps2.jdyz*100) + std::round(gps2.wdyz*100);
Max_JL1 = Max_JL1 - ctl->RtkOffset - std::round(gps2.jdyz * 100) - std::round(gps2.wdyz * 100); Max_JL0 -= offset;
Max_JL2 = Max_JL2 - ctl->RtkOffset - std::round(gps2.jdyz * 100) - std::round(gps2.wdyz * 100); Max_JL1 -= offset;
Max_JL2 -= offset;
//20170724 //20170724
if(Max_JL0 > 50 + m_itemv.kbtcwc && Max_JL1 > 50 + m_itemv.kbtcwc && Max_JL2 > 50 + m_itemv.kbtcwc) int kbtcwc = 50 + m_itemv.kbtcwc;
if(Max_JL0 > kbtcwc && Max_JL1 > kbtcwc && Max_JL2 > kbtcwc)
{ {
if(m_itemv.dcykkb == 0) //大车夜考相关的参数 if(m_itemv.dcykkb == 0) //大车夜考相关的参数
{ {

View File

@ -283,7 +283,7 @@ JUDGE_C_API BoardType name2BoardType(const char* name);
#define EnumMakeGpsStatus(declare) \ #define EnumMakeGpsStatus(declare) \
declare(gpsStatusINVALID, "----", JUDGE_UTF8S("无效(数据异常)")) \ declare(gpsStatusINVALID, "----", JUDGE_UTF8S("无效(数据异常)")) \
declare(gpsStatusSINGLE, "SINGLE", JUDGE_UTF8S("单点解(收星数过低10米以内)***前置机没发差分改帧数给后置机")) \ declare(gpsStatusSINGLE, "SINGLE", JUDGE_UTF8S("单点解(收星数过低10米以内)***前置机没发差分改帧数给后置机")) \
declare(gpsStatusPSRDIFF, "PSRDIFF", JUDGE_UTF8S("伪距解(没见过这种状态3米以内)没收到差分改正数?")) \ declare(gpsStatusPSRDIFF, "PSRDIFF", JUDGE_UTF8S("伪距解(没见过这种状态3米以内)后置机没收到差分改正数?")) \
declare(gpsStatusANGLE, "**ANGLE**", JUDGE_UTF8S("**角度差分状态**")) \ declare(gpsStatusANGLE, "**ANGLE**", JUDGE_UTF8S("**角度差分状态**")) \
declare(gpsStatusNARROW_INT, "NARROW_INT", JUDGE_UTF8S("固定解(正常状态0.02米以内)")) \ declare(gpsStatusNARROW_INT, "NARROW_INT", JUDGE_UTF8S("固定解(正常状态0.02米以内)")) \
declare(gpsStatusNARROW_FLOAT, "NARROW_FLOAT", JUDGE_UTF8S("浮点解(有遮挡物0.5米以内)")) declare(gpsStatusNARROW_FLOAT, "NARROW_FLOAT", JUDGE_UTF8S("浮点解(有遮挡物0.5米以内)"))

View File

@ -111,3 +111,14 @@ bool TMarkRule::is_agree(const nlohmann::json& jsonn, const char* param)
} }
return true; return true;
} }
bool TDBCarInfo::is_agree(const nlohmann::json& jsonn, const char* param)
{
if(JUDGE_STRING(X_MCH) == param)
{
bool agree = jsonn.contains(param);
if(!agree) {logwarning("TDBCarInfo missing param 'X_MCH'.");}
return agree;
}
return true;
}

View File

@ -258,16 +258,19 @@ struct TDBCarInfo
std::string CARID; //考车ID std::string CARID; //考车ID
std::string IPADDR; //IP地址 std::string IPADDR; //IP地址
std::string CARCLASS; //考车名称,比如:桑塔纳、新捷达 std::string CARCLASS; //考车名称,比如:桑塔纳、新捷达
std::string X_MCH; //百米脉冲 2025-04-02 新增
std::string KSCX; //考试车型比如C1,C2 std::string KSCX; //考试车型比如C1,C2
std::string CARNAME; //预留 std::string CARNAME; //预留
std::string FLAG; //预留 std::string FLAG; //预留
std::string BK1; //预留 std::string BK1; //预留
std::string BK2; //预留 std::string BK2; //预留
bool is_agree(const nlohmann::json& jsonn, const char* param);
JUDGE_JSON_DEFINE(TDBCarInfo, JUDGE_JSON_DEFINE(TDBCarInfo,
CARID, CARID,
IPADDR, IPADDR,
CARCLASS, CARCLASS,
X_MCH,
KSCX, KSCX,
CARNAME, CARNAME,
FLAG, FLAG,
@ -466,7 +469,7 @@ struct TStuInfo
//bool nitem1 = false; //JG_Not_Item1_Flag 不需要考上车准备(监管)免考 //bool nitem1 = false; //JG_Not_Item1_Flag 不需要考上车准备(监管)免考
//bool nitem41 = false; //JG_Not_Item_41_Flag 不需要考模拟灯光(监管)免考 //bool nitem41 = false; //JG_Not_Item_41_Flag 不需要考模拟灯光(监管)免考
bool mfxx = false; //满分学习学员标志 ManFenXueXi_Flag bool mfxx = false; //满分学习学员标志 ManFenXueXi_Flag
bool mfxxn = false; //满分学习不扣分标志 ManFenXueXiNotKouFenFlag //bool mfxxn = false; //满分学习不扣分标志 ManFenXueXiNotKouFenFlag
bool zeng = false; //增驾模式标志 true增驾 false非增驾 bool zeng = false; //增驾模式标志 true增驾 false非增驾
@ -507,7 +510,7 @@ struct TStuInfo
//nitem1, //nitem1,
//nitem41, //nitem41,
mfxx, mfxx,
mfxxn, //mfxxn,
zeng); zeng);
}; };
@ -1401,6 +1404,7 @@ struct TCar
{ {
TCar() { } TCar() { }
int X_McH = 0; //百米脉冲值(杭州竟然用到这玩意)优先carinfo的
int StartSpeed = 0; //起步档位 int StartSpeed = 0; //起步档位
int AnQuanDai = 0; //安全带0-不判 1-判保险带 2-气压 int AnQuanDai = 0; //安全带0-不判 1-判保险带 2-气压
int Test_Sum = 0; //考试项目总数 int Test_Sum = 0; //考试项目总数
@ -1443,13 +1447,18 @@ struct TCar
int CSBType = 0; //20171113 超声波模式 int CSBType = 0; //20171113 超声波模式
std::string DC_YK_Must; //夜考项目 20180301 std::string DC_YK_Must; //夜考项目 20180301
std::string MFXX_KSXM; //满分学习考试项目 std::string MFXX_KSXM; //满分学习考试项目
std::string MFXX_Parm; //满分学习参数 int MFXX_XSJL = 0; //满分学习行驶里程
bool MFXX_Mark = false; //满分学习是否电子评判自动扣分
//std::string MFXX_Parm; //满分学习参数
//档位转速比 2014111 //档位转速比 2014111
struct TCarZsBl { int CarZsBmin = -1; int CarZsBMax = -1; }; struct TCarZsBl { int CarZsBmin = -1; int CarZsBMax = -1; };
std::array<TCarZsBl, 7> DwZsBl; //20141111 档位转速比 档位转速比 array[1..5] std::array<TCarZsBl, 7> DwZsBl; //20141111 档位转速比 档位转速比 array[1..5]
bool ZDB_Flag = false; bool ZDB_Flag = false;
int RtkOffset = 0;
int MaxR = 0, MinR = 0; //最大及最小GPS搜索范围CM
//********************以下目前没用到******************* //********************以下目前没用到*******************
/* /*
//std::string CarTypeName; //车型名称 大货 对应carinfo表CARCLASS字段 //std::string CarTypeName; //车型名称 大货 对应carinfo表CARCLASS字段
@ -1506,8 +1515,6 @@ struct TTestCtl
int64 ZXD_KSSJ_TK = 0; //转向灯考试时间 int64 ZXD_KSSJ_TK = 0; //转向灯考试时间
bool ZXD_GuanBi = false; //转向灯关闭标记 bool ZXD_GuanBi = false; //转向灯关闭标记
std::set<ExamItemCode> PassedItem; //std::string PassedItem; //已考项目编号列表 std::set<ExamItemCode> PassedItem; //std::string PassedItem; //已考项目编号列表
int MaxR = 0, MinR = 0; //最大及最小GPS搜索范围CM
int RtkOffset = 0;
bool IsPassItem14 = false; //加减挡拉是否考过 20170117 bool IsPassItem14 = false; //加减挡拉是否考过 20170117
int JianSuLeiXing = 0; //20171007减速类型 int JianSuLeiXing = 0; //20171007减速类型
int LianXuBianDaoKind = 0; //20171008 连续变更车道方式 0:abc 1:aba和abc都判 int LianXuBianDaoKind = 0; //20171008 连续变更车道方式 0:abc 1:aba和abc都判
@ -1936,12 +1943,13 @@ struct TRadarInfo
struct TCpuOccupy struct TCpuOccupy
{ {
int32 cores = 0; int32 cores = 0;
int32 idle = 0; int32 idle = 0;
int32 user = 0; int32 iowait = 0;
int32 sys = 0; int32 user = 0;
int32 sys = 0;
JUDGE_JSON_DEFINE(TCpuOccupy,cores,idle,user,sys); JUDGE_JSON_DEFINE(TCpuOccupy,cores,idle,iowait,user,sys);
TCpuOccupy() noexcept { clean(); } TCpuOccupy() noexcept { clean(); }
virtual ~TCpuOccupy() noexcept { clean(); } virtual ~TCpuOccupy() noexcept { clean(); }
@ -1949,6 +1957,7 @@ struct TCpuOccupy
{ {
cores = 0; cores = 0;
idle = 0; idle = 0;
iowait = 0;
user = 0; user = 0;
sys = 0; sys = 0;
} }

View File

@ -880,10 +880,15 @@ TEST_F(TestJudge, test_sub3_car_check_data)
carInfo += writeFmt("CSBType", car->CSBType); carInfo += writeFmt("CSBType", car->CSBType);
carInfo += writeFmt("DC_YK_Must", car->DC_YK_Must); carInfo += writeFmt("DC_YK_Must", car->DC_YK_Must);
carInfo += writeFmt("MFXX_KSXM", car->MFXX_KSXM); carInfo += writeFmt("MFXX_KSXM", car->MFXX_KSXM);
carInfo += writeFmt("MFXX_Parm", car->MFXX_Parm); carInfo += writeFmt("MFXX_Mark", car->MFXX_Mark);
//carInfo += writeFmt("MFXX_Parm", car->MFXX_Parm);
carInfo += writeFmt("DwZsBl", car->DwZsBl); carInfo += writeFmt("DwZsBl", car->DwZsBl);
carInfo += writeFmt("ZDB_Flag", car->ZDB_Flag); carInfo += writeFmt("ZDB_Flag", car->ZDB_Flag);
carInfo += writeFmt("RtkOffset", car->RtkOffset);
carInfo += writeFmt("MaxR", car->MaxR);
carInfo += writeFmt("MinR", car->MinR);
/* /*
carInfo += writeFmt("CarTypeName", car->CarTypeName); carInfo += writeFmt("CarTypeName", car->CarTypeName);
carInfo += writeFmt("CarTypeSystemParmNo", car->CarTypeSystemParmNo); carInfo += writeFmt("CarTypeSystemParmNo", car->CarTypeSystemParmNo);
@ -932,10 +937,7 @@ TEST_F(TestJudge, test_sub3_car_check_data)
*/ */
std::string ctlInfo; std::string ctlInfo;
ctlInfo += writeFmt("PassedItem", ctl->PassedItem); ctlInfo += writeFmt("PassedItem", ctl->PassedItem);
ctlInfo += writeFmt("MaxR", ctl->MaxR);
ctlInfo += writeFmt("MinR", ctl->MinR);
ctlInfo += writeFmt("Gps_St", ctl->Gps_St); ctlInfo += writeFmt("Gps_St", ctl->Gps_St);
ctlInfo += writeFmt("RtkOffset", ctl->RtkOffset);
//ctlInfo += writeFmt("KSDD", ctl->KSDD); //ctlInfo += writeFmt("KSDD", ctl->KSDD);
ctlInfo += writeFmt("IsPassItem14", ctl->IsPassItem14); ctlInfo += writeFmt("IsPassItem14", ctl->IsPassItem14);
ctlInfo += writeFmt("JianSuLeiXing", ctl->JianSuLeiXing); ctlInfo += writeFmt("JianSuLeiXing", ctl->JianSuLeiXing);

View File

@ -12,6 +12,7 @@ MenuSelectCarInfo::MenuSelectCarInfo(QWidget *parent) : QWidget(parent), IMenuAc
m_options[ID_CARID] = __KIT_NEW__(SelectOption, this, m_ui->CARID); m_options[ID_CARID] = __KIT_NEW__(SelectOption, this, m_ui->CARID);
m_options[ID_IPADDR] = __KIT_NEW__(SelectOption, this, m_ui->IPADDR); m_options[ID_IPADDR] = __KIT_NEW__(SelectOption, this, m_ui->IPADDR);
m_options[ID_CARCLASS] = __KIT_NEW__(SelectOption, this, m_ui->CARCLASS); m_options[ID_CARCLASS] = __KIT_NEW__(SelectOption, this, m_ui->CARCLASS);
m_options[ID_X_MCH] = __KIT_NEW__(SelectOption, this, m_ui->X_MCH);
m_options[ID_KSCX] = __KIT_NEW__(SelectOption, this, m_ui->KSCX); m_options[ID_KSCX] = __KIT_NEW__(SelectOption, this, m_ui->KSCX);
m_options[ID_CARNAME] = __KIT_NEW__(SelectOption, this, m_ui->CARNAME); m_options[ID_CARNAME] = __KIT_NEW__(SelectOption, this, m_ui->CARNAME);
m_options[ID_FLAG] = __KIT_NEW__(SelectOption, this, m_ui->FLAG); m_options[ID_FLAG] = __KIT_NEW__(SelectOption, this, m_ui->FLAG);
@ -42,7 +43,7 @@ void MenuSelectCarInfo::onTriggeredClicked()
return; return;
} }
ListOptions CARID,IPADDR,CARCLASS,KSCX,CARNAME,FLAG,BK1,BK2; ListOptions CARID,IPADDR,CARCLASS,X_MCH,KSCX,CARNAME,FLAG,BK1,BK2;
for(size_t i = 0; i < m_carinfo.size(); i++) for(size_t i = 0; i < m_carinfo.size(); i++)
{ {
const TDBCarInfo& val = m_carinfo[i]; const TDBCarInfo& val = m_carinfo[i];
@ -55,6 +56,9 @@ void MenuSelectCarInfo::onTriggeredClicked()
str = kit::fromUtf8(val.CARCLASS); str = kit::fromUtf8(val.CARCLASS);
if(!CARCLASS.contains(str)) CARCLASS.push_back(str); if(!CARCLASS.contains(str)) CARCLASS.push_back(str);
str = kit::fromUtf8(val.X_MCH);
if(!X_MCH.contains(str)) X_MCH.push_back(str);
str = kit::fromUtf8(val.KSCX); str = kit::fromUtf8(val.KSCX);
if(!KSCX.contains(str)) KSCX.push_back(str); if(!KSCX.contains(str)) KSCX.push_back(str);
@ -75,6 +79,7 @@ void MenuSelectCarInfo::onTriggeredClicked()
m_options[ID_CARID]->createOption(CARID); m_options[ID_CARID]->createOption(CARID);
m_options[ID_IPADDR]->createOption(IPADDR); m_options[ID_IPADDR]->createOption(IPADDR);
m_options[ID_CARCLASS]->createOption(CARCLASS); m_options[ID_CARCLASS]->createOption(CARCLASS);
m_options[ID_X_MCH]->createOption(X_MCH);
m_options[ID_KSCX]->createOption(KSCX); m_options[ID_KSCX]->createOption(KSCX);
m_options[ID_CARNAME]->createOption(CARNAME); m_options[ID_CARNAME]->createOption(CARNAME);
m_options[ID_FLAG]->createOption(FLAG); m_options[ID_FLAG]->createOption(FLAG);
@ -89,6 +94,7 @@ void MenuSelectCarInfo::onTriggeredClicked()
m_ui->table->setItem(row, ID_CARID, createTableItem(kit::fromUtf8(val.CARID))); m_ui->table->setItem(row, ID_CARID, createTableItem(kit::fromUtf8(val.CARID)));
m_ui->table->setItem(row, ID_IPADDR, createTableItem(kit::fromUtf8(val.IPADDR))); m_ui->table->setItem(row, ID_IPADDR, createTableItem(kit::fromUtf8(val.IPADDR)));
m_ui->table->setItem(row, ID_CARCLASS, createTableItem(kit::fromUtf8(val.CARCLASS))); m_ui->table->setItem(row, ID_CARCLASS, createTableItem(kit::fromUtf8(val.CARCLASS)));
m_ui->table->setItem(row, ID_X_MCH, createTableItem(kit::fromUtf8(val.X_MCH)));
m_ui->table->setItem(row, ID_KSCX, createTableItem(kit::fromUtf8(val.KSCX))); m_ui->table->setItem(row, ID_KSCX, createTableItem(kit::fromUtf8(val.KSCX)));
m_ui->table->setItem(row, ID_CARNAME, createTableItem(kit::fromUtf8(val.CARNAME))); m_ui->table->setItem(row, ID_CARNAME, createTableItem(kit::fromUtf8(val.CARNAME)));
m_ui->table->setItem(row, ID_FLAG, createTableItem(kit::fromUtf8(val.FLAG))); m_ui->table->setItem(row, ID_FLAG, createTableItem(kit::fromUtf8(val.FLAG)));
@ -104,7 +110,8 @@ void MenuSelectCarInfo::slot_selectChanged(SelectOption* option)
const TDBCarInfo& val = m_carinfo[i]; const TDBCarInfo& val = m_carinfo[i];
bool match = matchings(kit::fromUtf8(val.CARID), m_options[ID_CARID]->selectedOptions()) && bool match = matchings(kit::fromUtf8(val.CARID), m_options[ID_CARID]->selectedOptions()) &&
matchings(kit::fromUtf8(val.IPADDR), m_options[ID_IPADDR]->selectedOptions()) && matchings(kit::fromUtf8(val.IPADDR), m_options[ID_IPADDR]->selectedOptions()) &&
matchings(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedOptions()) && matchings(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedOptions()) &&
matchings(kit::fromUtf8(val.X_MCH), m_options[ID_X_MCH]->selectedOptions()) &&
matchings(kit::fromUtf8(val.KSCX), m_options[ID_KSCX]->selectedOptions()) && matchings(kit::fromUtf8(val.KSCX), m_options[ID_KSCX]->selectedOptions()) &&
matchings(kit::fromUtf8(val.CARNAME), m_options[ID_CARNAME]->selectedOptions()) && matchings(kit::fromUtf8(val.CARNAME), m_options[ID_CARNAME]->selectedOptions()) &&
matchings(kit::fromUtf8(val.FLAG), m_options[ID_FLAG]->selectedOptions()) && matchings(kit::fromUtf8(val.FLAG), m_options[ID_FLAG]->selectedOptions()) &&
@ -122,6 +129,7 @@ void MenuSelectCarInfo::slot_optionChanged(SelectOption* option)
bool match = matching(kit::fromUtf8(val.CARID), m_options[ID_CARID]->selectedText()) && bool match = matching(kit::fromUtf8(val.CARID), m_options[ID_CARID]->selectedText()) &&
matching(kit::fromUtf8(val.IPADDR), m_options[ID_IPADDR]->selectedText()) && matching(kit::fromUtf8(val.IPADDR), m_options[ID_IPADDR]->selectedText()) &&
matching(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedText()) && matching(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedText()) &&
matching(kit::fromUtf8(val.X_MCH), m_options[ID_X_MCH]->selectedText()) &&
matching(kit::fromUtf8(val.KSCX), m_options[ID_KSCX]->selectedText()) && matching(kit::fromUtf8(val.KSCX), m_options[ID_KSCX]->selectedText()) &&
matching(kit::fromUtf8(val.CARNAME), m_options[ID_CARNAME]->selectedText()) && matching(kit::fromUtf8(val.CARNAME), m_options[ID_CARNAME]->selectedText()) &&
matching(kit::fromUtf8(val.FLAG), m_options[ID_FLAG]->selectedText()) && matching(kit::fromUtf8(val.FLAG), m_options[ID_FLAG]->selectedText()) &&

View File

@ -24,8 +24,8 @@ private slots:
private: private:
Ui::MenuSelectCarInfo* m_ui = nullptr; Ui::MenuSelectCarInfo* m_ui = nullptr;
enum{ID_CARID, ID_IPADDR, ID_CARCLASS, ID_KSCX, ID_CARNAME, ID_FLAG, ID_BK1, ID_BK2, ID_MAX_carinfo}; enum{ID_CARID, ID_IPADDR, ID_CARCLASS, ID_X_MCH, ID_KSCX, ID_CARNAME, ID_FLAG, ID_BK1, ID_BK2, ID_MAX_carinfo};
const QStringList m_columnName = {"CARID", "IPADDR", "CARCLASS", "KSCX", "CARNAME", "FLAG", "BK1", "BK2"}; const QStringList m_columnName = {"CARID", "IPADDR", "CARCLASS", "X_MCH", "KSCX", "CARNAME", "FLAG", "BK1", "BK2"};
std::array<SelectOption*, ID_MAX_carinfo> m_options; std::array<SelectOption*, ID_MAX_carinfo> m_options;
TDBCarInfos m_carinfo; TDBCarInfos m_carinfo;

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1211</width> <width>1236</width>
<height>529</height> <height>529</height>
</rect> </rect>
</property> </property>
@ -44,7 +44,7 @@
<rect> <rect>
<x>10</x> <x>10</x>
<y>50</y> <y>50</y>
<width>1191</width> <width>1221</width>
<height>471</height> <height>471</height>
</rect> </rect>
</property> </property>
@ -52,7 +52,7 @@
<widget class="QComboBox" name="IPADDR"> <widget class="QComboBox" name="IPADDR">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>216</x> <x>210</x>
<y>10</y> <y>10</y>
<width>90</width> <width>90</width>
<height>30</height> <height>30</height>
@ -62,7 +62,7 @@
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>160</x> <x>154</x>
<y>15</y> <y>15</y>
<width>51</width> <width>51</width>
<height>21</height> <height>21</height>
@ -78,7 +78,7 @@
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>310</x> <x>304</x>
<y>15</y> <y>15</y>
<width>71</width> <width>71</width>
<height>21</height> <height>21</height>
@ -94,7 +94,7 @@
<widget class="QComboBox" name="CARCLASS"> <widget class="QComboBox" name="CARCLASS">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>386</x> <x>380</x>
<y>10</y> <y>10</y>
<width>90</width> <width>90</width>
<height>30</height> <height>30</height>
@ -104,7 +104,7 @@
<widget class="QLabel" name="label_10"> <widget class="QLabel" name="label_10">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>488</x> <x>633</x>
<y>15</y> <y>15</y>
<width>31</width> <width>31</width>
<height>21</height> <height>21</height>
@ -120,7 +120,7 @@
<widget class="QComboBox" name="KSCX"> <widget class="QComboBox" name="KSCX">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>526</x> <x>670</x>
<y>10</y> <y>10</y>
<width>90</width> <width>90</width>
<height>30</height> <height>30</height>
@ -130,7 +130,7 @@
<widget class="QComboBox" name="CARNAME"> <widget class="QComboBox" name="CARNAME">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>694</x> <x>840</x>
<y>10</y> <y>10</y>
<width>90</width> <width>90</width>
<height>30</height> <height>30</height>
@ -140,9 +140,9 @@
<widget class="QComboBox" name="BK1"> <widget class="QComboBox" name="BK1">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>970</x> <x>1080</x>
<y>10</y> <y>10</y>
<width>90</width> <width>51</width>
<height>30</height> <height>30</height>
</rect> </rect>
</property> </property>
@ -150,9 +150,9 @@
<widget class="QComboBox" name="BK2"> <widget class="QComboBox" name="BK2">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>1110</x> <x>1169</x>
<y>10</y> <y>10</y>
<width>90</width> <width>61</width>
<height>30</height> <height>30</height>
</rect> </rect>
</property> </property>
@ -160,7 +160,7 @@
<widget class="QLabel" name="label_11"> <widget class="QLabel" name="label_11">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>788</x> <x>925</x>
<y>15</y> <y>15</y>
<width>41</width> <width>41</width>
<height>21</height> <height>21</height>
@ -176,7 +176,7 @@
<widget class="QLabel" name="label_12"> <widget class="QLabel" name="label_12">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>1075</x> <x>1135</x>
<y>15</y> <y>15</y>
<width>31</width> <width>31</width>
<height>21</height> <height>21</height>
@ -192,7 +192,7 @@
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>620</x> <x>765</x>
<y>15</y> <y>15</y>
<width>68</width> <width>68</width>
<height>21</height> <height>21</height>
@ -208,7 +208,7 @@
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>936</x> <x>1045</x>
<y>15</y> <y>15</y>
<width>31</width> <width>31</width>
<height>21</height> <height>21</height>
@ -224,7 +224,33 @@
<widget class="QComboBox" name="FLAG"> <widget class="QComboBox" name="FLAG">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>834</x> <x>970</x>
<y>10</y>
<width>71</width>
<height>30</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_15">
<property name="geometry">
<rect>
<x>473</x>
<y>15</y>
<width>51</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>X_MCH</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QComboBox" name="X_MCH">
<property name="geometry">
<rect>
<x>530</x>
<y>10</y> <y>10</y>
<width>90</width> <width>90</width>
<height>30</height> <height>30</height>

View File

@ -265,14 +265,6 @@ bool ReplayWrapper::replayTrackTypeInitExam(const TTrackData::Ptr& data)
return false; return false;
} }
#if JUDGE_USE_TSUB3T
std::string cartype = "A2";
std::string filepath = "/home/duolun/work/yhy/harmony/cpp/model/test_model_enc/";
info.carmodel = Tools::readFileText(filepath + cartype + ".txt");
info.kscx = cartype;
strInit = XParser::toAny(info);
#endif
if(!replayCheckSdkVersion(info.sdkver)) if(!replayCheckSdkVersion(info.sdkver))
{ {
return false; return false;
@ -370,36 +362,6 @@ void ReplayWrapper::replayTrackTypeRealExam(const TTrackData::Ptr& data)
{ {
std::string strReal(data->data); std::string strReal(data->data);
#if JUDGE_USE_TSUB3T
static const TGPSPoint p37(103.841274135,31.012432248,230.955,0,0);
static const TGPSPoint p38(103.841286701451,31.0124322861895,230.955,1.20004482295139,89.7968345127514);
static const TGPSPoint p39(103.841279465,31.012412912,230.955,0,0);
static const TGPSPoint p40(103.841279443108,31.0124020886131,230.955,1.20003086096901,180.099325685847);
double jd1 = p39.jd - p37.jd;
double wd1 = p39.wd - p37.wd;
//double jd2 = p40.jd - p38.jd;
//double wd2 = p40.wd - p38.wd;
TRealExam info;
if(!XParser::fromAny(strReal, info))
{
logerror("replayTrackTypeRealExam parser error.");
return;
}
info.gps2 = info.gps;
ExamCarType cartype = replayExamCarType();
if(IS_A2(cartype))
{
info.gps.hxj -= 90;
}
else if(IS_A1(cartype))
{
}
strReal = XParser::toAny(info);
#endif
int codeValue = examJudgeRealExam(strReal.c_str(), strReal.length()); int codeValue = examJudgeRealExam(strReal.c_str(), strReal.length());
TASSERT(codeValue == codeSuccess, ""); TASSERT(codeValue == codeSuccess, "");

View File

@ -67,7 +67,7 @@ void ShowBeginExam::updateBeginExam(const QString& info)
//m_ui->stuBeg->addItem(CL8("上车准备(监管)免考:") + (value. nitem1 ? CL8("免考") : CL8("不免考"))); //m_ui->stuBeg->addItem(CL8("上车准备(监管)免考:") + (value. nitem1 ? CL8("免考") : CL8("不免考")));
//m_ui->stuBeg->addItem(CL8("模拟灯光(监管)免考:") + (value. nitem41 ? CL8("免考") : CL8("不免考"))); //m_ui->stuBeg->addItem(CL8("模拟灯光(监管)免考:") + (value. nitem41 ? CL8("免考") : CL8("不免考")));
m_ui->stuBeg->addItem(CL8("满分学习模式标志:") + kit::toString(value.mfxx)+(value.mfxx ? CL8("(是") : CL8("(否)"))); m_ui->stuBeg->addItem(CL8("满分学习模式标志:") + kit::toString(value.mfxx)+(value.mfxx ? CL8("(是") : CL8("(否)")));
m_ui->stuBeg->addItem(CL8("满分学习不扣分标志:") + kit::toString(value.mfxxn)+(value.mfxxn ? CL8("(不扣分") : CL8("(扣分)"))); //m_ui->stuBeg->addItem(CL8("满分学习不扣分标志:") + kit::toString(value.mfxxn)+(value.mfxxn ? CL8("(不扣分") : CL8("(扣分)")));
m_ui->stuBeg->addItem(CL8("增驾模式标志:") + kit::toString(value.zeng)+(value.zeng ? CL8("(增驾") : CL8("(非增驾)"))); m_ui->stuBeg->addItem(CL8("增驾模式标志:") + kit::toString(value.zeng)+(value.zeng ? CL8("(增驾") : CL8("(非增驾)")));
//ksxm ykxm kfxm //ksxm ykxm kfxm
for(int i = 0; i < m_items.size(); i++) for(int i = 0; i < m_items.size(); i++)