评判
This commit is contained in:
parent
d57b3fb067
commit
75b3600a5c
@ -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 "2505091540b"
|
#define JUDGE_VERSION_STAMP "2505132200b"
|
||||||
#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"
|
||||||
|
|||||||
@ -1,6 +1,21 @@
|
|||||||
#include "Tools.h"
|
#include "Tools.h"
|
||||||
|
#include "HVersion.h"
|
||||||
#include "Loggerxx.h"
|
#include "Loggerxx.h"
|
||||||
|
|
||||||
|
bool Tools::checkVersion(const std::string& version)
|
||||||
|
{
|
||||||
|
std::vector<std::string> ver = Tools::split(version, ".");
|
||||||
|
//int major = std::atoi(ver[0].c_str());
|
||||||
|
//int minor = std::atoi(ver[1].c_str());
|
||||||
|
//int patch = std::atoi(ver[2].c_str());
|
||||||
|
std::string v3 = ver[3];
|
||||||
|
if(v3.back() == 'b')
|
||||||
|
{
|
||||||
|
v3.pop_back();
|
||||||
|
}
|
||||||
|
return (v3 < "2505121242");
|
||||||
|
}
|
||||||
|
|
||||||
int64 Tools::nowTime()
|
int64 Tools::nowTime()
|
||||||
{
|
{
|
||||||
return std::chrono::duration_cast<std::chrono::milliseconds>
|
return std::chrono::duration_cast<std::chrono::milliseconds>
|
||||||
|
|||||||
@ -13,6 +13,8 @@
|
|||||||
class Tools
|
class Tools
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
static bool checkVersion(const std::string& version);
|
||||||
//获取当前系统时间,单位:毫秒
|
//获取当前系统时间,单位:毫秒
|
||||||
static int64 nowTime();
|
static int64 nowTime();
|
||||||
//壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准
|
//壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准
|
||||||
@ -190,6 +192,7 @@ public:
|
|||||||
//获取当前机器的CPU逻辑核心数
|
//获取当前机器的CPU逻辑核心数
|
||||||
static int getCpuProcessors();
|
static int getCpuProcessors();
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TOOLS_H
|
#endif // TOOLS_H
|
||||||
|
|||||||
@ -284,13 +284,35 @@ bool ExamCarSub2::examMarkItem(ExamItemCode itemNo, const std::string& serial, b
|
|||||||
|
|
||||||
void ExamCarSub2::examNonGps(TChuanGan* cg)
|
void ExamCarSub2::examNonGps(TChuanGan* cg)
|
||||||
{
|
{
|
||||||
const TGpsInfo& gps = cg->real.gps;
|
const TGpsInfo* gps = nullptr;
|
||||||
if(!gps.rtkEnabled || !gps.valid() || cg->real.gps.errorFlag)
|
bool ok = true;
|
||||||
|
const TGpsInfo* gps1 = &cg->real.gps;
|
||||||
|
//如果gps1异常了就直接报gps1,如gps1正常就检查gps2
|
||||||
|
if(!gps1->rtkEnabled || !gps1->valid() || gps1->errorFlag)
|
||||||
|
{
|
||||||
|
gps = gps1;
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExamCarType cartype = carType();
|
||||||
|
if(IS_A2C6(cartype))
|
||||||
|
{
|
||||||
|
const TGpsInfo* gps2 = &cg->real.gps2;
|
||||||
|
if(!gps2->rtkEnabled || !gps2->valid() || gps2->errorFlag)
|
||||||
|
{
|
||||||
|
gps = gps2;
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ok)
|
||||||
{
|
{
|
||||||
if(m_nontime == 0)
|
if(m_nontime == 0)
|
||||||
{
|
{
|
||||||
m_nontime = gps.sj;
|
m_nontime = Tools::nowTime();
|
||||||
m_nongps = gps;
|
m_nongps = *gps;
|
||||||
createEventNonGps({TNonGpsReport, m_nongps}); //上报GPS异常数据
|
createEventNonGps({TNonGpsReport, m_nongps}); //上报GPS异常数据
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -268,7 +268,7 @@ bool ExamCarSub3::Init_KM3_Global()
|
|||||||
const TDBCarInfo* carInfo = TableCarInfo->findCarInfo(carId);
|
const TDBCarInfo* carInfo = TableCarInfo->findCarInfo(carId);
|
||||||
if(nullptr == carInfo || carInfo->CARCLASS.empty())
|
if(nullptr == carInfo || carInfo->CARCLASS.empty())
|
||||||
{
|
{
|
||||||
logerror("database not find carID=%d or carClass=%p is empty, init error", carId, carInfo);
|
logerror("database carInfo error, carID=%d, carInfo=0x%p, carClass=%s", carId, carInfo, carInfo->CARCLASS.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
TASSERT_BOOL(carInfo->CARCLASS == carClass(), "");
|
TASSERT_BOOL(carInfo->CARCLASS == carClass(), "");
|
||||||
@ -409,7 +409,8 @@ bool ExamCarSub3::Init_KM3_Global()
|
|||||||
//当前时间到达夜考时间点了
|
//当前时间到达夜考时间点了
|
||||||
//if( (Now() - Trunc(now())) > (Car.Night_Hr / 24 + Car.Night_Mi / 24 / 60) )
|
//if( (Now() - Trunc(now())) > (Car.Night_Hr / 24 + Car.Night_Mi / 24 / 60) )
|
||||||
DateTimex dt = Tools::nowDateTime();
|
DateTimex dt = Tools::nowDateTime();
|
||||||
if(dt.hour*60 + dt.minute >= m_car.Night_Hr*60 + m_car.Night_Mi)
|
//考试模式判断时间,训练模式用外壳传的参数
|
||||||
|
if((isExamMode() && (dt.hour*60 + dt.minute >= m_car.Night_Hr*60 + m_car.Night_Mi)) || (isExamDrill() && isSfyk()))
|
||||||
{
|
{
|
||||||
//如果不考模拟灯光
|
//如果不考模拟灯光
|
||||||
if(!m_stuInfo.dmndg)
|
if(!m_stuInfo.dmndg)
|
||||||
@ -4405,13 +4406,35 @@ bool ExamCarSub3::examMarkItem(ExamItemCode itemNo, const std::string& serial, b
|
|||||||
|
|
||||||
void ExamCarSub3::examNonGps(TChuanGan* cg)
|
void ExamCarSub3::examNonGps(TChuanGan* cg)
|
||||||
{
|
{
|
||||||
const TGpsInfo& gps = cg->real.gps;
|
const TGpsInfo* gps = nullptr;
|
||||||
if(!gps.rtkEnabled || !gps.valid() || cg->real.gps.errorFlag)
|
bool ok = true;
|
||||||
|
const TGpsInfo* gps1 = &cg->real.gps;
|
||||||
|
//如果gps1异常了就直接报gps1,如gps1正常就检查gps2
|
||||||
|
if(!gps1->rtkEnabled || !gps1->valid() || gps1->errorFlag)
|
||||||
|
{
|
||||||
|
gps = gps1;
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExamCarType cartype = carType();
|
||||||
|
if(IS_A2C6(cartype))
|
||||||
|
{
|
||||||
|
const TGpsInfo* gps2 = &cg->real.gps2;
|
||||||
|
if(!gps2->rtkEnabled || !gps2->valid() || gps2->errorFlag)
|
||||||
|
{
|
||||||
|
gps = gps2;
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ok)
|
||||||
{
|
{
|
||||||
if(m_nontime == 0)
|
if(m_nontime == 0)
|
||||||
{
|
{
|
||||||
m_nontime = Tools::nowTime();
|
m_nontime = Tools::nowTime();
|
||||||
m_nongps = gps;
|
m_nongps = *gps;
|
||||||
createEventNonGps({TNonGpsReport, m_nongps}); //上报GPS异常数据
|
createEventNonGps({TNonGpsReport, m_nongps}); //上报GPS异常数据
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -5848,6 +5871,8 @@ void ExamCarSub3::Calc_LaneDistance_Tail()
|
|||||||
{
|
{
|
||||||
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
|
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
|
||||||
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
|
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
|
||||||
|
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.b(RF_I), RTKKM3_Tail.Body_RF_ToBaseLine);
|
||||||
|
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.b(RB_I), RTKKM3_Tail.Body_RB_ToBaseLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
//else if(p == 3) //3:车身左侧与本车道左侧距离
|
//else if(p == 3) //3:车身左侧与本车道左侧距离
|
||||||
@ -5870,6 +5895,8 @@ void ExamCarSub3::Calc_LaneDistance_Tail()
|
|||||||
{
|
{
|
||||||
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
|
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
|
||||||
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
|
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
|
||||||
|
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.b(RF_I), RTKKM3_Tail.Body_RF_ToBaseLine, true);
|
||||||
|
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.b(RB_I), RTKKM3_Tail.Body_RB_ToBaseLine, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//else if(p == 3) //3:车身左侧与本车道左侧距离
|
//else if(p == 3) //3:车身左侧与本车道左侧距离
|
||||||
|
|||||||
@ -168,6 +168,9 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
//航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
|
//航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
|
||||||
|
//2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
|
||||||
|
if(Tools::checkVersion(m_car->carVerison()))
|
||||||
|
{
|
||||||
if(gps.bklx == boardTypeTB)
|
if(gps.bklx == boardTypeTB)
|
||||||
{
|
{
|
||||||
gps.hxj += 180.0;
|
gps.hxj += 180.0;
|
||||||
@ -176,6 +179,8 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
|
|||||||
{
|
{
|
||||||
gps.hxj -= 360.0;
|
gps.hxj -= 360.0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//实际上车这里经纬度要转化,测试的数据都是转化好的
|
//实际上车这里经纬度要转化,测试的数据都是转化好的
|
||||||
gps.jd = GpsMath::convertGpsCoord2(gps.jd);
|
gps.jd = GpsMath::convertGpsCoord2(gps.jd);
|
||||||
gps.wd = GpsMath::convertGpsCoord2(gps.wd);
|
gps.wd = GpsMath::convertGpsCoord2(gps.wd);
|
||||||
@ -190,6 +195,9 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
|
|||||||
if(IS_A2C6(cartype))
|
if(IS_A2C6(cartype))
|
||||||
{
|
{
|
||||||
TGpsInfo& gps2 = cg->real.gps2;
|
TGpsInfo& gps2 = cg->real.gps2;
|
||||||
|
//2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
|
||||||
|
if(Tools::checkVersion(m_car->carVerison()))
|
||||||
|
{
|
||||||
if(gps2.bklx == boardTypeTB)
|
if(gps2.bklx == boardTypeTB)
|
||||||
{
|
{
|
||||||
gps2.hxj += 180.0;
|
gps2.hxj += 180.0;
|
||||||
@ -198,11 +206,12 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
|
|||||||
{
|
{
|
||||||
gps2.hxj -= 360.0;
|
gps2.hxj -= 360.0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//实际上车这里经纬度要转化,测试的数据都是转化好的
|
//实际上车这里经纬度要转化,测试的数据都是转化好的
|
||||||
gps2.jd = GpsMath::convertGpsCoord2(gps2.jd);
|
gps2.jd = GpsMath::convertGpsCoord2(gps2.jd);
|
||||||
gps2.wd = GpsMath::convertGpsCoord2(gps2.wd);
|
gps2.wd = GpsMath::convertGpsCoord2(gps2.wd);
|
||||||
#if !JUDGE_USE_INSPECT
|
#if !JUDGE_USE_INSPECT
|
||||||
gps.sd *= GPS_VEL_COEFF; //无锡所检测不需要乘这个系数,因为我们实际用的时候是gps速度,无锡所是加工后的数据
|
gps2.sd *= GPS_VEL_COEFF; //无锡所检测不需要乘这个系数,因为我们实际用的时候是gps速度,无锡所是加工后的数据
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -995,80 +1004,78 @@ void ExamSensor::setStatus(TChuanGan* cg, CarMoveState s)
|
|||||||
|
|
||||||
bool ExamSensor::filterWrong(TChuanGan* cg)
|
bool ExamSensor::filterWrong(TChuanGan* cg)
|
||||||
{
|
{
|
||||||
TGpsInfo& gps = cg->real.gps;
|
|
||||||
|
|
||||||
//位置差分, 角度差分
|
|
||||||
if(gps.dwzt == gpsStatusNARROW_INT && gps.jdzt == gpsStatusANGLE)
|
|
||||||
{
|
|
||||||
gps.rtkEnabled = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gps.rtkEnabled = false;
|
|
||||||
logwarning("rtk Enabled not, dwzt=%d, jdzt=%d", gps.dwzt, gps.jdzt);
|
|
||||||
}
|
|
||||||
|
|
||||||
TChuanGan* his = m_car->historyChuanGan();
|
TChuanGan* his = m_car->historyChuanGan();
|
||||||
gps.errorFlag = false;
|
bool ok1 = filterGpsWrong(&cg->real.gps, his != nullptr ? &his->real.gps : nullptr);
|
||||||
//过滤GPS漂移数据
|
bool ok2 = true;
|
||||||
if(his != nullptr)
|
ExamCarType cartype = m_car->carType();
|
||||||
|
if(IS_A2C6(cartype))
|
||||||
{
|
{
|
||||||
const TGpsInfo& h_gps = his->real.gps;
|
ok2 = filterGpsWrong(&cg->real.gps2, his != nullptr ? &his->real.gps2 : nullptr);
|
||||||
int64 interval = std::abs(gps.sj - h_gps.sj);
|
|
||||||
//如果是正常连续数据才判断漂移,有可能是断网收不到数据,然后过了几秒又收到数据距离会远超过限制距离
|
|
||||||
if(interval < 1*SECOND)
|
|
||||||
{
|
|
||||||
TGPSPoint p1 = h_gps.to();
|
|
||||||
TGPSPoint p2 = gps.to();
|
|
||||||
double distance = GpsMath::calcGpsDistanceCM(p1, p2, p1.gc);
|
|
||||||
if(distance > DEVIATION_RANGE_DISTANCE_CM)
|
|
||||||
{
|
|
||||||
logwarning("deviation rang distance=%0.2f CM", distance);
|
|
||||||
gps.errorFlag = true;
|
|
||||||
}
|
|
||||||
double angle = std::abs(gps.hxj - h_gps.hxj);
|
|
||||||
if(angle > DEVIATION_RANGE_ANGLE_MIN && angle < DEVIATION_RANGE_ANGLE_MAX)
|
|
||||||
{
|
|
||||||
logwarning("deviation rang angle=%0.2f", angle);
|
|
||||||
gps.errorFlag = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_car->examNonGps(cg);
|
m_car->examNonGps(cg);
|
||||||
|
|
||||||
if(gps.errorFlag)
|
//ExamSubject sub = m_car->examSubject();
|
||||||
{
|
//if(ExamSubject2 == sub)
|
||||||
logwarning("errorFlag invalid dwzt=%d, jdzt=%d, jd=%0.8f, wd=%0.8f", gps.dwzt, gps.jdzt, gps.jd, gps.wd);
|
//{
|
||||||
return false;
|
// return ok1 && ok2;
|
||||||
|
//}
|
||||||
|
//else if(ExamSubject3 == sub)
|
||||||
|
//{
|
||||||
|
// return ok1 && ok2;
|
||||||
|
//}
|
||||||
|
|
||||||
|
return ok1 && ok2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!gps.valid())
|
bool ExamSensor::filterGpsWrong(TGpsInfo* gps, const TGpsInfo* h_gps)
|
||||||
{
|
{
|
||||||
logwarning("gps invalid dwzt=%d, jdzt=%d, jd=%0.8f, wd=%0.8f", gps.dwzt, gps.jdzt, gps.jd, gps.wd);
|
//位置差分, 角度差分
|
||||||
return false;
|
if(gps->dwzt == gpsStatusNARROW_INT && gps->jdzt == gpsStatusANGLE)
|
||||||
}
|
|
||||||
|
|
||||||
ExamSubject sub = m_car->examSubject();
|
|
||||||
if(ExamSubject2 == sub)
|
|
||||||
{
|
{
|
||||||
//return gps.rtkEnabled == true && gps.valid();
|
gps->rtkEnabled = true;
|
||||||
return gps.valid(); //2025-03-20 modify
|
|
||||||
}
|
|
||||||
else if(ExamSubject3 == sub)
|
|
||||||
{
|
|
||||||
if(gps.valid()) //20240811 yhy
|
|
||||||
{
|
|
||||||
//数据是正常的
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//if(m_car->historyCount() > 0)
|
gps->rtkEnabled = false;
|
||||||
//{
|
logwarning("rtk Enabled not, dwzt=%d, jdzt=%d", gps->dwzt, gps->jdzt);
|
||||||
// cloneWith(m_car->historyChuanGan(), cg);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
|
gps->errorFlag = false;
|
||||||
|
//过滤GPS漂移数据
|
||||||
|
if(h_gps != nullptr)
|
||||||
|
{
|
||||||
|
int64 interval = std::abs(gps->sj - h_gps->sj);
|
||||||
|
//如果是正常连续数据才判断漂移,有可能是断网收不到数据,然后过了几秒又收到数据距离会远超过限制距离
|
||||||
|
if(interval < 1*SECOND)
|
||||||
|
{
|
||||||
|
TGPSPoint p1 = h_gps->to();
|
||||||
|
TGPSPoint p2 = gps->to();
|
||||||
|
double distance = GpsMath::calcGpsDistanceCM(p1, p2, p1.gc);
|
||||||
|
if(distance > DEVIATION_RANGE_DISTANCE_CM)
|
||||||
|
{
|
||||||
|
logwarning("deviation rang distance=%0.2f CM", distance);
|
||||||
|
gps->errorFlag = true;
|
||||||
|
}
|
||||||
|
double angle = std::abs(gps->hxj - h_gps->hxj);
|
||||||
|
if(angle > DEVIATION_RANGE_ANGLE_MIN && angle < DEVIATION_RANGE_ANGLE_MAX)
|
||||||
|
{
|
||||||
|
logwarning("deviation rang angle=%0.2f", angle);
|
||||||
|
gps->errorFlag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(gps->errorFlag)
|
||||||
|
{
|
||||||
|
logwarning("errorFlag invalid dwzt=%d, jdzt=%d, jd=%0.8f, wd=%0.8f", gps->dwzt, gps->jdzt, gps->jd, gps->wd);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!gps->valid())
|
||||||
|
{
|
||||||
|
logwarning("gps invalid dwzt=%d, jdzt=%d, jd=%0.8f, wd=%0.8f", gps->dwzt, gps->jdzt, gps->jd, gps->wd);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -26,6 +26,7 @@ public:
|
|||||||
virtual bool calcCarBody(TChuanGan* cg);
|
virtual bool calcCarBody(TChuanGan* cg);
|
||||||
//过滤异常数据
|
//过滤异常数据
|
||||||
virtual bool filterWrong(TChuanGan* cg);
|
virtual bool filterWrong(TChuanGan* cg);
|
||||||
|
virtual bool filterGpsWrong(TGpsInfo* gps, const TGpsInfo* h_gps);
|
||||||
//计算考车状态(科目三)
|
//计算考车状态(科目三)
|
||||||
virtual bool GetCarDirStauts(TChuanGan* cg);
|
virtual bool GetCarDirStauts(TChuanGan* cg);
|
||||||
//计算考车状态(科目二)
|
//计算考车状态(科目二)
|
||||||
|
|||||||
@ -483,6 +483,26 @@ void IExamCar::examPerformSummary()
|
|||||||
exam.bxjl = dis.y*10; //单位毫米 所以要乘10
|
exam.bxjl = dis.y*10; //单位毫米 所以要乘10
|
||||||
exam.hint = m_message;
|
exam.hint = m_message;
|
||||||
exam.lane = historyChuanGan()->RTKKM3;
|
exam.lane = historyChuanGan()->RTKKM3;
|
||||||
|
ExamCarType cartype = carType();
|
||||||
|
if(IS_A2C6(cartype))
|
||||||
|
{
|
||||||
|
//对于牵引车,车身距离都是指的挂车(车厢),如果车轮,车前轮指的是车头的轮子,车后轮指的挂车最后面轮子,和军华确认过的 2025-05-13
|
||||||
|
const TRTKResult& rtkTail = historyChuanGan()->RTKKM3_Tail;
|
||||||
|
TRTKResult& lane = exam.lane;
|
||||||
|
|
||||||
|
lane.Body_LF_ToLeftEdge = rtkTail.Body_LF_ToLeftEdge;
|
||||||
|
lane.Body_LB_ToLeftEdge = rtkTail.Body_LB_ToLeftEdge;
|
||||||
|
lane.Body_RF_ToRightEdge = rtkTail.Body_RF_ToRightEdge;
|
||||||
|
lane.Body_RB_ToRightEdge = rtkTail.Body_RB_ToRightEdge;
|
||||||
|
lane.Body_RF_ToBaseLine = rtkTail.Body_RF_ToBaseLine;
|
||||||
|
lane.Body_RB_ToBaseLine = rtkTail.Body_RB_ToBaseLine;
|
||||||
|
|
||||||
|
lane.Wheel_RB_ToRightEdge = rtkTail.Wheel_RB_ToRightEdge;
|
||||||
|
lane.Wheel_RB_ToBaseLine = rtkTail.Wheel_RB_ToBaseLine;
|
||||||
|
lane.Wheel_LB_ToRightEdge = rtkTail.Wheel_LB_ToRightEdge;
|
||||||
|
lane.Wheel_LB_ToBaseLine = rtkTail.Wheel_LB_ToBaseLine;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
std::string data = XParser::toAny(exam);
|
std::string data = XParser::toAny(exam);
|
||||||
FactoryExamService->examJudgeCallbackPerformToCaller(data.c_str(), data.size());
|
FactoryExamService->examJudgeCallbackPerformToCaller(data.c_str(), data.size());
|
||||||
|
|||||||
@ -89,6 +89,7 @@ public:
|
|||||||
virtual ISurveyCarAbstract* carModel() MEANS { return m_carModel; }
|
virtual ISurveyCarAbstract* carModel() MEANS { return m_carModel; }
|
||||||
virtual int modelSize() MEANS { return m_carModel->size(); }
|
virtual int modelSize() MEANS { return m_carModel->size(); }
|
||||||
virtual ExamSubject examSubject() MEANS { return ExamSubject(m_carInfo->kskm); }
|
virtual ExamSubject examSubject() MEANS { return ExamSubject(m_carInfo->kskm); }
|
||||||
|
virtual const std::string& carVerison() MEANS { return m_carInfo->sdkver; }
|
||||||
virtual int carID() MEANS { return m_carInfo->kchm; }
|
virtual int carID() MEANS { return m_carInfo->kchm; }
|
||||||
virtual const std::string& carClass() MEANS { return m_carInfo->name; }
|
virtual const std::string& carClass() MEANS { return m_carInfo->name; }
|
||||||
virtual int carCode() MEANS { return m_carCode; }
|
virtual int carCode() MEANS { return m_carCode; }
|
||||||
|
|||||||
@ -104,6 +104,8 @@ public:
|
|||||||
virtual int modelSize() const = 0;
|
virtual int modelSize() const = 0;
|
||||||
//考试科目
|
//考试科目
|
||||||
virtual ExamSubject examSubject() const = 0;
|
virtual ExamSubject examSubject() const = 0;
|
||||||
|
//轨迹初始化版本号
|
||||||
|
virtual const std::string& carVerison() const = 0;
|
||||||
//考车ID
|
//考车ID
|
||||||
virtual int carID() const = 0;
|
virtual int carID() const = 0;
|
||||||
//考车名称
|
//考车名称
|
||||||
|
|||||||
@ -136,12 +136,6 @@ const char* GraphicImage::image()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int offset_y = 1;
|
int offset_y = 1;
|
||||||
if(m_showVersion)
|
|
||||||
{
|
|
||||||
drawText(Pointi(1, offset_y), JUDGE_VERSION_INFO, RGB_BLUE, 16);
|
|
||||||
offset_y += 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(m_showTime)
|
if(m_showTime)
|
||||||
{
|
{
|
||||||
int64 tick = Tools::nowTime();
|
int64 tick = Tools::nowTime();
|
||||||
@ -149,6 +143,11 @@ const char* GraphicImage::image()
|
|||||||
drawText(Pointi(1, offset_y), tm.c_str(), RGB_PERILLA, 16);
|
drawText(Pointi(1, offset_y), tm.c_str(), RGB_PERILLA, 16);
|
||||||
offset_y += 16;
|
offset_y += 16;
|
||||||
}
|
}
|
||||||
|
//if(m_showVersion)
|
||||||
|
//{
|
||||||
|
// drawText(Pointi(1, offset_y), JUDGE_VERSION_INFO, RGB_BLUE, 16);
|
||||||
|
// offset_y += 16;
|
||||||
|
//}
|
||||||
|
|
||||||
toRgb();
|
toRgb();
|
||||||
return (const char*)m_rgb;
|
return (const char*)m_rgb;
|
||||||
|
|||||||
@ -52,6 +52,16 @@ bool Sub3Judge02Qbxx::dealJudgeEnter()
|
|||||||
|
|
||||||
m_exam->TestPro = ItemProFlagJudge;
|
m_exam->TestPro = ItemProFlagJudge;
|
||||||
//ToDo2:生成进项目事件
|
//ToDo2:生成进项目事件
|
||||||
|
|
||||||
|
if(m_car->examAlready(Sub3ItemType01Sczb) && m_car->examAlready(Sub3ItemType41Mndg))
|
||||||
|
{
|
||||||
|
if(!m_sound_qibu)
|
||||||
|
{
|
||||||
|
m_sound_qibu = true;
|
||||||
|
m_car->createEventSound({m_exam->ItemNo, sound::sub3_402001});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
TSub3Item02Qbxx m_itemv;
|
TSub3Item02Qbxx m_itemv;
|
||||||
bool m_Pub_First_QiBu_Flag = false; //起步方向灯和喇叭 只判一次 第一次进起步项目才判
|
bool m_Pub_First_QiBu_Flag = false; //起步方向灯和喇叭 只判一次 第一次进起步项目才判
|
||||||
|
bool m_sound_qibu = false;
|
||||||
//**********************以下是新科目三************************
|
//**********************以下是新科目三************************
|
||||||
private:
|
private:
|
||||||
//起步项目中,车辆状态从停止切换前进前10s内,头部姿态没有大于左后侧角度【23度】
|
//起步项目中,车辆状态从停止切换前进前10s内,头部姿态没有大于左后侧角度【23度】
|
||||||
|
|||||||
@ -554,7 +554,7 @@ void Sub3Judge11Kbtc::DoStatus_2()
|
|||||||
else if(s430 == "1") //拉手刹放空挡
|
else if(s430 == "1") //拉手刹放空挡
|
||||||
{
|
{
|
||||||
//20180625
|
//20180625
|
||||||
if(sor.ssc == SYES && sor.dw == 0)
|
if(sor.ssc == SYES && (sor.dw == 0 || sor.dw == 10))
|
||||||
{
|
{
|
||||||
m_itemv.Status = 3;
|
m_itemv.Status = 3;
|
||||||
return;
|
return;
|
||||||
@ -699,8 +699,14 @@ void Sub3Judge11Kbtc::DoStatus_3()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//压路边线
|
//压路边线
|
||||||
|
if(!IS_A2C6(m_carType))
|
||||||
|
{
|
||||||
Judge_KBTC_YaXian();
|
Judge_KBTC_YaXian();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Judge_KBTC_YaXian_Tail(); //A2C6-20250314
|
Judge_KBTC_YaXian_Tail(); //A2C6-20250314
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1076,10 +1082,16 @@ void Sub3Judge11Kbtc::DoStatus_4()
|
|||||||
if(ksdd == siteof::hbtskm3 || ksdd == siteof::lyggy)
|
if(ksdd == siteof::hbtskm3 || ksdd == siteof::lyggy)
|
||||||
{
|
{
|
||||||
if(m_car->rtkEnabled())
|
if(m_car->rtkEnabled())
|
||||||
|
{
|
||||||
|
if(!IS_A2C6(m_carType))
|
||||||
{
|
{
|
||||||
Judge_KBTC_YaXian();
|
Judge_KBTC_YaXian();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Judge_KBTC_YaXian_Tail(); //A2C6-20250314
|
Judge_KBTC_YaXian_Tail(); //A2C6-20250314
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} // 20171211
|
} // 20171211
|
||||||
}
|
}
|
||||||
else //20170215
|
else //20170215
|
||||||
@ -1307,7 +1319,6 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian()
|
|||||||
RightJL1_RF = RTKKM3_1.Body_RF_ToBaseLine;
|
RightJL1_RF = RTKKM3_1.Body_RF_ToBaseLine;
|
||||||
RightJL2_RF = RTKKM3_2.Body_RF_ToBaseLine;
|
RightJL2_RF = RTKKM3_2.Body_RF_ToBaseLine;
|
||||||
|
|
||||||
|
|
||||||
RightJL0_RB = RTKKM3_0.Body_RB_ToBaseLine;
|
RightJL0_RB = RTKKM3_0.Body_RB_ToBaseLine;
|
||||||
RightJL1_RB = RTKKM3_1.Body_RB_ToBaseLine;
|
RightJL1_RB = RTKKM3_1.Body_RB_ToBaseLine;
|
||||||
RightJL2_RB = RTKKM3_2.Body_RB_ToBaseLine;
|
RightJL2_RB = RTKKM3_2.Body_RB_ToBaseLine;
|
||||||
@ -1457,16 +1468,20 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian_Tail()
|
|||||||
RightJL1_RF = RTKKM3_Tail_1.Body_RF_ToBaseLine;
|
RightJL1_RF = RTKKM3_Tail_1.Body_RF_ToBaseLine;
|
||||||
RightJL2_RF = RTKKM3_Tail_2.Body_RF_ToBaseLine;
|
RightJL2_RF = RTKKM3_Tail_2.Body_RF_ToBaseLine;
|
||||||
|
|
||||||
|
|
||||||
RightJL0_RB = RTKKM3_Tail_0.Body_RB_ToBaseLine;
|
RightJL0_RB = RTKKM3_Tail_0.Body_RB_ToBaseLine;
|
||||||
RightJL1_RB = RTKKM3_Tail_1.Body_RB_ToBaseLine;
|
RightJL1_RB = RTKKM3_Tail_1.Body_RB_ToBaseLine;
|
||||||
RightJL2_RB = RTKKM3_Tail_2.Body_RB_ToBaseLine;
|
RightJL2_RB = RTKKM3_Tail_2.Body_RB_ToBaseLine;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RightJL0_RF = RTKKM3_Tail_0.Wheel_RF_ToBaseLine;
|
//对于牵引车,车身距离都是指的挂车(车厢),如果车轮,车前轮指的是车头的轮子,车后轮指的挂车最后面轮子,和军华确认过的 2025-05-13
|
||||||
RightJL1_RF = RTKKM3_Tail_1.Wheel_RF_ToBaseLine;
|
const TRTKResult& RTKKM3_0 = m_car->historyRtkKM3(0);
|
||||||
RightJL2_RF = RTKKM3_Tail_2.Wheel_RF_ToBaseLine;
|
const TRTKResult& RTKKM3_1 = m_car->historyRtkKM3(1);
|
||||||
|
const TRTKResult& RTKKM3_2 = m_car->historyRtkKM3(2);
|
||||||
|
|
||||||
|
RightJL0_RF = RTKKM3_0.Wheel_RF_ToBaseLine;
|
||||||
|
RightJL1_RF = RTKKM3_1.Wheel_RF_ToBaseLine;
|
||||||
|
RightJL2_RF = RTKKM3_2.Wheel_RF_ToBaseLine;
|
||||||
|
|
||||||
RightJL0_RB = RTKKM3_Tail_0.Wheel_RB_ToBaseLine;
|
RightJL0_RB = RTKKM3_Tail_0.Wheel_RB_ToBaseLine;
|
||||||
RightJL1_RB = RTKKM3_Tail_1.Wheel_RB_ToBaseLine;
|
RightJL1_RB = RTKKM3_Tail_1.Wheel_RB_ToBaseLine;
|
||||||
|
|||||||
@ -868,7 +868,8 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
|
|||||||
|
|
||||||
if(m > 0)
|
if(m > 0)
|
||||||
{
|
{
|
||||||
if(m_engineTick > 0 && cg->tkCnt - m_engineTick > m*SECOND)
|
//if(m_engineTick > 0 && cg->tkCnt - m_engineTick > m*SECOND)
|
||||||
|
if(m_engineTick > 0 && m_car->timeElapsed() > m*SECOND)
|
||||||
{
|
{
|
||||||
JUDGE_MARK_SUB3(20, "94", true);
|
JUDGE_MARK_SUB3(20, "94", true);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user