906 lines
40 KiB
C
Raw Normal View History

2025-03-26 16:56:51 +08:00
/*
* :
*
* :
* : 2023-05-11
*/
#ifndef HJUDGEITEM_H
#define HJUDGEITEM_H
#include "HUtility.h"
#include "IJudgeBrokerInterface.h"
struct StageArg
{
StageArg(short) {};
};
//using StageArg = short;
using IJudgeBrokerStage = IJudgeBrokerInterface<StageArg>;
#define SecondsBetween(x1, x2) int64(std::abs((x1)-(x2))/1000)
#define MilliSecondsBetween(x1, x2) int64(std::abs((x1)-(x2)))
//===============科目三考试过程结构体定义=================
struct TNS3PoseSysset
{
//左,右,低头,置信度,左后,右后
int left = 0;
int right = 0;
int low = 0;
int score = 0;
int leftBack = 0;
int rightBack = 0;
};
struct TNS3LKGreen //新科目三
{
bool isGreen = false;
int64 timeCount = 0;
bool ts_green_to = false;
bool markFlag = false;
};
struct TNS3LRObserve //新科目三
{
bool isJudge = false;
int64 obsTime = 0; //左右侧观察角度
};
struct TNS3BianDao //新科目三
{
bool isJudge = false;
int64 leftBack = 0;
int64 rightBack = 0;
};
struct TNS3Chaoche //新科目三
{
bool isJudge41401 = false;
bool isJudge41403 = false;
bool isJudge41405 = false;
int64 toLeft = 0; //向左变道时
int64 timeRight = 0; //在超车道上
int64 toRight = 0; //向右变道时
};
//TDiaoTouJianSuRec
struct TSlowDown
{
//减速慢行不扣分条件
//非1234-车速 Or 踩刹 Or 松油门
//1-车速 or 踩刹,
//2-车速,
//3-车速 and 踩刹
//4-脚刹车
//减速要求
bool Js_Passed = false; //是否减速成功
bool Js_Passed1 = false; //如果用到组合的子项1
bool Js_Passed2 = false; //如果用到组合的子项2
};
struct ISub3Item05Lkzx
{
int8 LuK_Type = 0; //路口类型 1-平交 2-环岛
int LuK_Fx_PointNo = INVALID_INDEX; //正确行驶方向 应该经过的 路口端点point_no
bool LuK_TcRx = false; //停车让行标记
int LuK_TCSJ = 0; //路口内禁止停车时间(秒)
double LuK_TCJL = 0; //越过停车线后X米后不允许停车
int64 TC_TM = 0; //路口停车时的GetTickCountTest
bool ReadNextLuDuanFlag = false; //路口端点标志
int XMJL_Mi = 0; //项目距离 20151214
int64 StopLine_TCTM = 0; //穿越停车线xx距离之后停车时刻的时间穿越停车线之后xx距离内不允许停车不允许停车超过的时间)
int StopLine_JLCM = 0; //穿越停车线时刻的距离 停止线时刻的距离
//减速类型: 减速慢行不扣分条件
// 非1234-车速 Or 踩刹 Or 松油门
// 1-车速 or 踩刹, //1 30米前有刹车动作
// 2-车速, //2 30米前车速降到了规定的速度默认30KM/H
// 3-车速 and 踩刹 //3 30米前有刹车动作并且车速降到了规定的速度默认30KM/H
// 4-脚刹车 //4 30米前降过速度
int JianSu_LeiXing = 0; //对应参数Sysset522
int JianSu_SuDu = 0; //减速速度阈值,减速类型1和2会用到 //对应参数Sysset522
bool Cross_TZX_Flag = false; //穿越停止线标志
bool Judge_TCX = false; //停车线评判
bool Check_CheDao = false; //车道检查
bool LKTCKF = false; //路口停车扣分评判
bool OKFangXiangPt_SuccessFlag = false; //结束点标志
int Start_JL_CM = 0; //进项目时刻的累计距离
bool Step3Flag = false; //读到下一个路段标志
std::vector<int> Step3PtArr; //读到下一个路段的穿越点
std::string Step3RoadData; //读到下一个路段信息
bool Mark_20_73_Flag = false; //20_73 扣分标记
#if JUDGE_USE_INSPECT
bool Is_TCRX_Item = false;
bool TCRX_FinishFlag = false;
#endif
TNS3LKGreen green;
TNS3LRObserve observe;
};
struct TSub3Item12Lkdt
{
int8 LuK_Type = 0; //路口类型 1-平交 2-环岛
int LuK_Fx_PointNo = INVALID_INDEX; //正确行驶方向 应该经过的 路口端点point_no
bool LuK_TcRx = false; //停车让行标记
int LuK_TCSJ = 0; //路口内禁止停车时间(秒)
double LuK_TCJL = 0; //越过停车线后X米后不允许停车
int64 TC_TM = 0; //路口停车时的GetTickCountTest
bool ReadNextLuDuanFlag = false; //路口端点标志
std::string CSLuDuan; //初始路段
int XMJL_Mi = 0; //项目距离 20151214
int64 StopLine_TCTM = 0; //穿越停车线xx距离之后停车时刻的时间穿越停车线之后xx距离内不允许停车不允许停车超过的时间)
int StopLine_JLCM = 0; //穿越停车线时刻的距离 停止线时刻的距离
//减速类型: 减速慢行不扣分条件
// 非1234-车速 Or 踩刹 Or 松油门
// 1-车速 or 踩刹, //1 30米前有刹车动作
// 2-车速, //2 30米前车速降到了规定的速度默认30KM/H
// 3-车速 and 踩刹 //3 30米前有刹车动作并且车速降到了规定的速度默认30KM/H
// 4-脚刹车 //4 30米前降过速度
int JianSu_LeiXing = 0; //对应参数Sysset522
int JianSu_SuDu = 0; //减速速度阈值,减速类型1和2会用到 //对应参数Sysset522
bool Cross_TZX_Flag = false; //穿越停止线标志
int64 Enter_TK = 0; //进入时刻的时间TK
double LuK_Zx_Deg = 0; //变化角度阀值,转向方向灯
bool LuK_FXD_AngleOKFlag = false;
bool Judge_TCX = false; //停车线评判
bool Check_CheDao = false; //车道检查
bool LKTCKF = false; //路口停车扣分评判
bool OKFangXiangPt_SuccessFlag = false; //结束点标志
bool JudgeFXD_Flag = false; //路口评判方向灯标志
bool Temp_ZFXD = false; //左右方向灯标志
int Start_JL_CM = 0; //进项目时刻的累计距离
bool Step3Flag = false; //读到下一个路段标志
std::vector<int> Step3PtArr; //读到下一个路段的穿越点
std::string Step3RoadData; //读到下一个路段信息
bool Mark_12_42_Flag = false; //12_42 扣分标记
TSlowDown slowDown;
TNS3LKGreen green;
TNS3LRObserve observe;
};
struct TSub3Item12Ptdt
{
int FinishDiaoTou_JiaoDu_Change = 0; //掉头角度阈值
int XMJL_Mi = 0; //项目距离
int CSJL_Mi = 0; //初始距离(单位:米)
int Max_DC_CiShu = 0; //倒车后退次数限制
double CS_GPS_D = 0.0; //GPS角度
bool FXD_TM_OK_Flag = false;
bool b_FXD = false; //是否打方向灯 20160405
bool b_JSC = false; //20170505
int Temp_XS = 0; //减速要求 20170824
int BianDaoJL = 0; //变道行驶距离(单位:米)
bool MarkFlag_12_42 = false; //扣分标识
bool MarkFlag_12_43 = false;
bool MarkFlag_12_45 = false;
bool MarkFlag_12_46 = false;
bool MarkFlag_20_73 = false;
bool MarkFlag_20_20 = false;
bool Judge_DengGuang_Flag = false;
TSlowDown slowDown;
Linei line; //用于新的角度变化计算方式
TMapping mapping;
};
struct TSub3Item15Lkzz
{
int8 LuK_Type = 0; //路口类型 1-平交 2-环岛
int LuK_Fx_PointNo = 0; //正确行驶方向 应该经过的 路口端点point_no
bool LuK_TcRx = false; //停车让行标记
int LuK_TCSJ = 0; //路口内禁止停车时间(秒)
double LuK_TCJL = 0.0; //越过停车线后X米后不允许停车
int64 TC_TM = 0; //路口停车时的GetTickCountTest
bool ReadNextLuDuanFlag = false; //路口端点标志
int XMJL_Mi = 0; //项目距离 20151214
int64 StopLine_TCTM = 0; //穿越停车线xx距离之后停车时刻的时间穿越停车线之后xx距离内不允许停车不允许停车超过的时间)
int StopLine_JLCM = 0; //穿越停车线时刻的距离 停止线时刻的距离
//减速类型: 减速慢行不扣分条件
// 非1234-车速 Or 踩刹 Or 松油门
// 1-车速 or 踩刹, //1 30米前有刹车动作
// 2-车速, //2 30米前车速降到了规定的速度默认30KM/H
// 3-车速 and 踩刹 //3 30米前有刹车动作并且车速降到了规定的速度默认30KM/H
// 4-脚刹车 //4 30米前降过速度
int JianSu_LeiXing = 0; //对应参数Sysset522
int JianSu_SuDu = 0; //减速速度阈值,减速类型1和2会用到 //对应参数Sysset522
bool Cross_TZX_Flag = false; //穿越停止线标志
int64 Enter_TK = 0; //进入时刻的时间TK
double LuK_Zx_Deg = 0; //变化角度阀值,转向方向灯
bool LuK_FXD_AngleOKFlag = false;
bool Judge_TCRX_JianSu = false; //评判减速和停车让行
bool Judge_TCX = false; //停车线评判
bool Check_CheDao = false ; //车道检查
bool LKTCKF = false; //路口停车扣分评判
bool OKFangXiangPt_SuccessFlag = false; //结束点标志
bool JudgeFXD_Flag = false; //路口评判方向灯标志
bool Temp_ZFXD = false, Temp_ZFXD3s = false; //左右方向灯标志
int64 Temp_ZFXD_TM = 0; //打左方向灯时刻的时间
int Start_JL_CM = 0; //进项目时刻的累计距离
bool Step3Flag = false; //读到下一个路段标志
std::vector<int> Step3PtArr; //读到下一个路段的穿越点
std::string Step3RoadData; //读到下一个路段信息
bool ZhongXinDian3MarkFlag = false; //扣分标识
bool Mark_20_73_Flag = false; //扣分标识
#if JUDGE_USE_INSPECT
bool read5FlagShapeNo = false;
#endif
TNS3LKGreen green;
TNS3LRObserve observe;
};
struct TSub3Item16Lkyz
{
int8 LuK_Type = 0; //路口类型 1-平交 2-环岛
int LuK_Fx_PointNo = 0; //正确行驶方向 应该经过的 路口端点point_no
bool LuK_TcRx = false; //停车让行标记
int LuK_TCSJ = 0; //路口内禁止停车时间(秒)
double LuK_TCJL = 0.0; //越过停车线后X米后不允许停车
int64 TC_TM = 0; //路口停车时的GetTickCountTest
bool ReadNextLuDuanFlag = false; //路口端点标志
int XMJL_Mi = 0; //项目距离 20151214
int64 StopLine_TCTM = 0; //穿越停车线xx距离之后停车时刻的时间穿越停车线之后xx距离内不允许停车不允许停车超过的时间)
int StopLine_JLCM = 0; //穿越停车线时刻的距离 停止线时刻的距离
//减速类型: 减速慢行不扣分条件
// 非1234-车速 Or 踩刹 Or 松油门
// 1-车速 or 踩刹, //1 30米前有刹车动作
// 2-车速, //2 30米前车速降到了规定的速度默认30KM/H
// 3-车速 and 踩刹 //3 30米前有刹车动作并且车速降到了规定的速度默认30KM/H
// 4-脚刹车 //4 30米前降过速度
int JianSu_LeiXing = 0; //对应参数Sysset522
int JianSu_SuDu = 0; //减速速度阈值,减速类型1和2会用到 //对应参数Sysset522
bool Cross_TZX_Flag = false; //穿越停止线标志
int64 Enter_TK = 0; //进入时刻的时间TK
double LuK_Zx_Deg = 0; //变化角度阀值,转向方向灯
bool LuK_FXD_AngleOKFlag = false;
bool Judge_TCRX_JianSu = false; //评判减速和停车让行
bool Judge_TCX = false; //停车线评判
bool Check_CheDao = false; //车道检查
bool LKTCKF = false; //路口停车扣分评判
bool OKFangXiangPt_SuccessFlag = false; //结束点标志
bool JudgeFXD_Flag = false; //路口评判方向灯标志
bool Temp_YFXD = false, Temp_YFXD3s = false; //左右方向灯标志
int64 Temp_YFXD_TM = 0; //打右方向灯计时刻的时间
int Start_JL_CM = 0; //进项目时刻的累计距离
bool Step3Flag = false; //读到下一个路段标志
std::vector<int> Step3PtArr; //读到下一个路段的穿越点
std::string Step3RoadData; //读到下一个路段信息
bool Mark_20_73_Flag = false; //扣分标识
TNS3LKGreen green;
TNS3LRObserve observe;
};
struct TSub3Item04Bgcd //变更车道
{
//Status:
//0,1,2: 未发生变道
//3:变道成功
//4: 结束项目变道后10米
//13正在变道未完成变道(比如SysSet[414]=1,然后GPS基准点已经变过来了但是车轮还没有过来
int8 Status = 0;
double Temp_Right_JL = 0.0; //进入项目时离右边线距离
int Temp_LJJL_1 = 0; //进入项目时的累计距离
int Temp_LJJL_2 = 0; //变道发生时的累计距离
int Temp_XMJL = 0; //项目距离 米
bool Temp_ZFXD3s = false, Temp_YFXD3s = false, Temp_ZFXD = false, Temp_YFXD = false;
int64 Temp_ZFXD_TM = 0, Temp_YFXD_TM = 0; //打左右方向灯时刻的时间
int Temp_BasePointInLaneNo = 0, Temp_BaseLaneCount = 0; //超车前的车道号,车道数
int8 Temp_No_BGCD = 0; //是否不需要变道,只要判断距离就可以了
int Temp_No_BGCD_YuZhi = 0; //不需要实际变道模式下,车辆离右边线距离变化阀值
bool Temp_No_BGCD_FinishFlag = false;
bool Temp_Add_XMJL_Flag = false; //是否要增加项目距离
bool Mark_4_42_Flag = false; //扣分标识
bool Mark_4_43_Flag = false; //扣分标识
bool LeftBianDaoFlag = false; //左侧变道标识
bool RightBianDaoFlag = false; //右侧变道标识
bool JudgeFXD = false;
//新科目三
TNS3BianDao bian;
};
struct TSub3Item10Ccxx //超车
{
//1:初始超车道阶段 2初始普通车道阶段 3左侧超车阶段 4:完成左侧超车阶段
//5:回原车道阶段 6完成回原车道阶段
int8 Status = 0;
bool CS_CCD_Flag = false; //初始是否在超车到标记
int Temp_LJJL_CCD_PTCD = 0; //进入项目时的累计距离(超车道->普通车道)
int Temp_LJJL_2 = 0; //变道发生时的累计距离
int64 Temp_TM = 0; //变道、超车以前后轮都过线的时间
int Start_LJJL = 0; //(单位米)
int Temp_XMJL = 0; //项目距离 米
bool GuiZhou_ZFXD_Flag = false; //贵州地区左方向灯标志
bool Temp_ZFXD3s, Temp_ZFXD = false; //左右方向灯标志
int64 Temp_ZFXD_TM = 0; //打左方向灯计时刻的时间
int64 Temp_ZFXD_GZ_TM = 0; //贵州需求打左方向灯时间 20180903
int64 Lt_YJ_TM = 0; //远近光灯变化时间
int64 Lt_YJ_ID = false; //远近光灯变化
int St4_CCD_MinJL = 0; //超车后,超车道需要行驶的距离
int Temp_BasePointInLaneNo = 0, Temp_BaseLaneCount = 0; //超车前的车道号,车道数
int CS_CCD_Max_XSJL = 0; //超车道上最多可以行驶的距离
//初始超车道,二次超车最小行驶距离(如果初始在超车道上,需要驶离超车道,
//然后行驶规定的距离后,再次进入超车道超车)
int CS_CCD_ErCiChaoChe_Min_XSJL = 0; //初始在超车道行驶到普通车道,要行使一段距离才能再次进入超车道
bool CS_CCD_ErCiChaoChe_Min_XSJL_OK = false; //初始在超车道行驶到普通车道,要行使一段距离才能再次进入超车道状态
int64 St4_HuiYuanCheDao_TM = 0; //超车回原车道时刻
int St4_HuiYuanCheDao_Miao = 0; //超车回原车道时间
int Temp_CC_CSSJ = 0; //超车达到车速的持续时间 20150507
bool Temp_CC_SD_OKFlag = false; //超车达到车速的要求 20150507
int Temp_CC_CS = 0; //超车需达到的车速 20150507
bool Mark_CC_CS_Flag = false; //超车速度扣分
int Temp_CC_CSOK_LastHaoMiao = 0; //超车已达车速的时间 20150507
int64 Temp_CC_OK_KSSJ = 0; //超车已达车速的开始时间 20150507
int Temp_CS_GuiZhouKind = 0; //超车速度要求阶段(贵州)
bool Temp_LaBa_Flag = false; //超车过程中是否已按了喇叭 20151223 周口
int64 GuangXi_CCD_KSSJ = 0; //20181016 进入超车道时计时 广西梧州
int Temp_CCDW = 0; //超车挡位要求
int Temp_CCDW_Type = 0; //超车档位要求,格式:档位^类型 类型为0表示达到一次即可为1表示超车道上要全程达到。
bool Temp_No_ChaoChe = false; //无需超车比如在最左侧车道上lyggy需求)
int Temp_St2_CheDaoHao = 0; //普通车道的车道号
int Temp_St2_CheDaoCount = 0; //普通车道的车道数
bool Mark_20_60_Flag = false; //扣分标识
bool Mark_10_41_Flag = false; //扣分标识
bool Mark_10_42_Flag = false; //扣分标识
bool Mark_10_43_Flag = false; //扣分标识
bool Mark_20_42_Flag = false; //扣分标识
bool Mark_10_07_Flag = false; //扣分标识
bool Mark_10_02_Flag = false; //扣分标识
bool Mark_13_06_Flag = false; //扣分标识
bool pullingLane = false; // 是否播报驶离超车道语音
TNS3Chaoche observe;
};
struct TSub3Item03Zxxs //直线行驶
{
double KZCS = 0; //控制车速
double KZSDFW = 0; //控制速度范围
int BiaoZhun_CS = 0; //达标车速
int JianSu_YuZhi = 0; //减速阀值
int parm_hcjl = 0, parm_xmjl = 0;//直线行驶:缓冲距离,项目距离
int KouFen_JianGe_HaoMiao = 0, KFCS = 0; //扣分时间间隔 单位毫秒 20151218 河北沧州
int64 KFSJ = 0; //扣分时间,间隔多少秒内不能重复扣分
int Gps_Offset = 0; //直线行驶增加GPS校验(空或0-不起效;>0偏移距离cm,建议350)
int Init_LJJL = 0; //进项目时刻的累计距离
int Init_D = 0; //边距离限制阈值
int Max_CS = 0; //记录最高车速
double init_Jd = 0.0; //20171013 差分初始角度
int Kind = 0; //20171220 评判点类型0-右边距离 1-左边距离)
double JiaoDu_BianHua_YuZhi = 0; //角度变化阈值
bool Judge_CS = false; //车速是否要评判 0不评判 1评判默认为0 //20180323
int Judge_FXD = 0; //是否判方向灯
bool WavFlag2 = false; //语音提示,请保持直线行驶 标识
bool Mark_20_73_Flag = false; //扣分标识
bool Mark_3_04_Flag = false; //扣分标识
//新科目三
TNS3LRObserve observe;
};
struct TSub3Item06Rxhd //人行横道 6
{
int8 Status = 0; //1-进项目到人行横道之前 2-经过人行横道线 3-等待项目结束
int tmp_ljjlcm = 0; //经过人行横道对应经纬度时的累计距离CM 20140730
int tmp_xmjl = 0; //厘米
bool tmp_xrtg = false; //行人通过标识
int tmpljjl = 0; //进入项目时刻的累计距离
bool tmp_Face_ID = false; //是否已判断过面部
bool b_Jsc = false; //南京地区需要有脚刹车动作 20150120
int64 tcsj = 0; //停车时间初始是0 integer 20190305
int jiansu_leixing = 0; //减速类型
int jiansu_sudu = 0; //减速速度阈值
int tmp_jskf = 0; //是否判减速扣分标识 连续的人行横道间隔不超过30米不需判断减速
int last_jl = 0; //两个人行横道间隔小于50米不判减速
int WavKind = 0; //SysSet[512]-->3 学校、公交、人行横道模拟项目是否语音标识0不需要 1需要 2024-03-18 yhy 增加
TNS3LRObserve observe;
};
struct TSub3Item07Xxqy //学校区域 7
{
int Temp_LJJL_CM = 0; //进入项目时的累计距离 CM 20140730
int Temp_XMJL = 0; //项目距离 米
int Temp_XS = 0; //限速值
bool ShanDongKM3_JianSu_Flag = false;
bool HasMark_7_02 = false, JSC_Flag = false; //是否扣了速度分,是否脚刹动作
bool Temp_TCRX = false; //是否有行人通过 20160516
int tcsj = 0; //停车时间 20190305
bool Judge_JSC = false; //是否增加脚刹判断 20190314
bool SJXR_Flag = false; //是否有随机行人标记
int Temp_JL_NanJing = 0; //南京特殊地区用
bool Forbidden_LaBa_Flag = false; //学校区域是否禁止按喇叭0默认-不扣1-扣分20-51)
int WavKind = 0; //SysSet[512]-->3 学校、公交、人行横道模拟项目是否语音标识0不需要 1需要 2024-03-18 yhy 增加
TNS3LRObserve observe;
};
struct TSub3Item08Gjzt //公交站台 8
{
int Temp_LJJL_CM = 0; //进入项目时的累计距离 CM 20140730
int Temp_XMJL_Mi = 0; //项目距离 米
int Temp_XS = 0; //限速值
bool Finish_JSC = false; //完成脚刹车动作
bool Finish_JianSu = false; //完成减速动作
int8 JudgeKind = 0; //0不需要评判减速相关的 1需要评判减速相关的
bool Temp_TCRX = false; //是否有行人通过 20160516
int64 Temp_TCSJ = 0; //停车时间 20190305
bool Judge_JSC = false; //是否增加脚刹判断 20190314
bool Must_JianSu_Flag = false; //必须减速标志
bool EndXMJL_Flag = false; //结束项目距离标志
int WavKind = 0; //SysSet[512]-->3 学校、公交、人行横道模拟项目是否语音标识0不需要 1需要 2024-03-18 yhy 增加
int s509_10 = 0;
#if JUDGE_USE_INSPECT
bool inspectJSC = false; //完成脚刹车动作
#endif
TNS3LRObserve observe;
};
struct TSub3Item09Hcxx //会车 9
{
int64 Enter_TK = 0; //进项目的时刻
int Enter_Wheel_LF_ToRightEdge = 0; //左前轮离右边线距离
int Enter_JL = 0; //进项目时的距离
int Enter_LeftBodyCenter_JL = 0; //左车身中心点离左边线距离(特殊地点版本)
int Enter_CS = 0; //进入时刻的车速
bool Finish_YouCeXingShi = false; //完成右侧行驶标志(完成了会车动作)
int Temp_XS = 0; //速度限制
int HC_XMJL = 0; //会车项目距离 20160419
bool ZXLine_Flag = false; //中心虚线标志
int HeFa_YouBianJu = 0; //会车时候,最大右边线距离,必须小于等于这个值才认为右边距离是合法的
int YouBianJu_XSJL = 0; //会车靠右持续行驶距离(不设置就不做这块限制)
int Temp_YouBianJu_XSJL = 0; //靠右边行驶的临时距离
int JianSu_Timing = 0; //减速评判时机(进项目后的时间)秒
TSlowDown slowDown;
};
struct TSub3Item01Sczb //上车准备 1
{
int8 Status = 0;
int newtype = 0; //绕车一周模式
int time_tishi = 0; //时间提示
int time_raoche = 0;
int time_koufen = 0;
int time_tishi_js = 0;
int time_koufen_js = 0;
int time_guanmen_js = 0;
int time_raoche_js = 0;
//radarSignal: array[0..4] of String; //超声波信号数组
int radarCount = 0; //超声波数量
bool bsound_dh = false; //提示点火
bool FinishFlag = false;
};
struct TSub3Item41Mndg //模拟灯光 41
{
int P_zys = 0; //灯光操作允许总延时(毫秒)
int P_CSOK_YanShi = 0; //一开始灯光就是正确的评判延时(毫秒)
int P_YJGD_JT_YS = 0; //远近光灯交替操作延时
bool P_IF_Err_Kf = false; //灯光错了是否扣分
int8 P_Op_Cnt = 0; //操作次数
int P_yyjgsj = 0; //语音间隔时间(毫秒) 20170606
bool Lt_YesID = false;
int64 Lt_YJ_TM = 0; //远近光灯变化时间
int64 Lt_LastChange_TM = 0; //灯光最后变化时间
int Lt_YJ_cs = 0; //远近光灯变化次数 20150327
//std::array<std::string, 7> Lt_Change; //: array[0..6] of string; //0:未定义 1:示宽,2:双跳,3:雾灯,4:远光,5:近光,6:交替, 注意:记录灯光的变化,示宽是从有到无,其他是从无到有
std::string Lt_Change;
std::string Lt_Change_Last;
int8 ItemNo = 0, ItemStatus = 0; //St 控制具体项目 St1控制指定项目的状态
int64 Snd_Wav_Start_TM = 0; //语音开始时间
int64 Snd_Wav_End_TM = 0; //语音结束时间
bool Valid = false;
int8 SubWav1 = 0, SubWav2 = 0; //语音序号
int8 Op_Step = 0; //操作到第几步
std::string Op_Rd_str, Op_Rd_str1; //: string[100]; //操作顺序字符串
int P_Ccopys = 0; //超车灯光时间 20140812
int Cc_Jd = 0; //超车阶段 0--语音阶段 1-左方向灯 2-交替 3-右方向灯 4-回归原位 20140812
std::array<int, 3> Cc_beforeYfd; //: array[0..2] of integer; //超车前是不是右方向灯 20140726 第一位表示右方向灯,第二位表示 双跳灯 第三位表示 雾灯 20140812
bool b3szfxd = false; //20150803
bool CheSu_KouFen = false; //有车速是否扣分
int lstcstd = 0; //20171009临时停车双跳灯要求 1要打
int mndg_add_lukou = 0;
int64 stdjs = 0; //20171018 临时停车时双跳灯计时
std::vector<std::string> kflst; //: string[100]; //20171022 扣分列表
int64 yjjtbeg = 0, yjjtend = 0; //20171031
int LastSubItemNo = 0;
int64 endTick = 0;
bool endFlag = false;
};
struct TSub3Item02Qbxx //起步 2
{
int8 State = 0; //项目状态
bool Mark_2_09_Flag = false;
bool is_radar = false; //视觉相关的
//考点系统参数---地点版本参数
int Sys502_11 = 0;
int Sys524_4 = 0;
int sys502_8_1 = 0;
int sys502_8_2 = 0;
int Temp_JL_CM = 0;
bool Mark_ChuangDong = false;
int64 ZhunBeiQiBuTK = 0; //Cardinal;
int QiBu_LJJL_CM = 0;
bool Error_SSC_Flag = false;
//以下是溜车评判需要用到的变量
int PubMaxLCValue = 0;
Pointi PubLCTCPtt;
bool PubCanMarkLC50Flag = true; //注意初始必须是true
//新科三参数
int64 obsTime = 0;
};
struct TDwCs_Range
{
int High_Cs = 0;
int Low_Cs = 0;
};
struct TSub3Item14Jjdw //加减档 14
{
int ItemPosI = 0;
int Status = 0;
int64 Enter_Tk = 0; // Cardinal;
int Enter_Ljjl = 0;
int JJDXS = 0; //加减挡位限时
int XMJL = 0;
std::string dwsx_str = ""; //: string[100];
int Last_Dw = 0;
int Last_Dw_kf = 0; //扣分时的最后档位
std::array<TDwCs_Range, 11>DwCs_Range; //: array[0..10] of TDwCs_Range;
int Enter_Dw = 0; //进项目时的档位 20140617
int Last_Lhq = 0; //离合器 20141030
// bSgXm: boolean; //手工进入项目 20141101
int bSgFs = 0; //手工进入方式1先加后减 2先减后加
bool bMaxDwCs = false; //最高档时,车速没有达到要求值 20150201
int maxdw = 0; //要求加到最高的档位 20150201
int Ddsj = 0; //档位停留时间 20150526
int yysj = 0; //语音时间 20150526
// maxDwCssj: integer; //最高挡,车速达到要求持续时间 20160623
int64 maxDwCssc = 0; //: Cardinal; //最高挡,车速达到的持续时长 20160623 20200709
};
struct TSub3Item11Kbtc //靠边停车
{
int8 Status = 0; //0-播报语音 1-语音结束,开始评判 到停车前 2-停车了但未确认,可能继续行驶 3-确认停车了 4-下车评判
int PPFXD = 0; //评判方向灯时机 0-达到指定的角度变化 1-停车前
int parm_xmjl = 0; //项目距离
double parm_Rtk_Ag = 0.0; //: real; //方向灯角度 20151013 差分角度
int parm_KaiMen_Status6 = 0; //开门后多长时间自动进入Status6( 关门处理阶段)
int parm_Fxd3s = 0;
int parm_ZSj = 0; //总用时 20160613
int Enter_ljjl= 0; //进项目累计距离
int64 Enter_Tk = 0; //: Cardinal; //进项目时间
int Entet_SJ = 0; //靠边时时间 20160613
double Enter_Rtk_Ag = 0.0;// real; // 进项目差分角度 20151013
bool yfxd = false, yfxd3s = false;
int64 yfxd_tk= 0; // Cardinal;
bool HasJudgeFXD = false; //方向动了标志
bool bJc = false, bJc1 = false, bJc2 = false; ///20150304 贵州考试结束下车关门前增加调整内外后视镜
int TingCheJiShi = 0; //20170215 停车计时
int jscnt = 0; //20170215 记次,控制语音
int tclssjs = 0, tclsscnt = 0; //20170223 茂名 停车拉手刹
int kbtcwc = 0; //20170310
int Parm_HanZhong_KBTC_SJ = 0; //靠边允许停车时间秒,必须在这个时间内拉手刹
//xhzt: integer; //20171020 //熄火状态
int kbtccs = 0; //20180317 靠边停车评判距离的次数,防止当时信号不好
int dcykkb = 0; //大车夜考模式 0:不启用 1启用 20181015
int KaoShiJieShu_JS = 0; //考试结束计时 20181016
int Parm_BaoDing_TC_CheDaoJuLi = 0; //保定等特殊地区允许停车的车道距离
bool chongxindianhuo = false; //重新点火
int64 chongxindianhuo_tk = 0; //: Cardinal;
int Parm_TC_KaiCheMen_ShiJian = 0; //停车后,多长时间内必须开车门
int64 TCZT_Tk = 0; // Cardinal; //进项目时间
//扣分相关的
bool Kf03 = false;
bool Kf10 = false;
bool Kf05 = false;
bool Kf06 = false;
//ZDTC: Boolean; //主动停车,不是因为熄火造成的停车
//以下是新科目三
int64 stopPose; //停车前内头部姿态
int64 doorPose; //打开车门前头部姿态
};
struct TRoad_Attr
{
std::string Road_Code; //: string[10];
std::string Attr_Str; //: string[30];
};
struct TDWErrorRec
{
int64 djtkCnt = 0; //切换计时时间毫秒
int djsc = 0; //切换时累计时长 毫秒
int Ljsc = 0; //累计时长 毫秒
};
struct TSub3Item20Comm_CJH //标准科目三综合评判 TKm3Itm20_CJH
{
int tmp_ljmc = 0;
int oldlc, lcmc = 0; //历史溜车距离, 溜车累计脉冲
bool lcppks = false; //溜车评判开始
std::string currpos; //: string[100]; //获得gps的当前位置名称
int izz = 0, iyz = 0, ifxpidx = 0, ifxpflag = 0; // 原左转, 原右转计数, 方向盘数组指针, 方向盘标记: -1 左, 0: 中, 1: 右
std::array<int, 5> ibtkt; //: array[1..4] of Integer;
int ifxdflag = 0, ifxdtkt = 0; //方向灯方向 方向灯开始时间
bool bqbfxd = false, bkbfxd = false; //起步方向灯, 靠边方向灯检查情况
int xhcs = 0; //熄火次数
int64 xhkftk = 0; //: Cardinal; //熄火扣分时间
int ItemNo = 0;
int64 dtfxpmark; //: Cardinal;
int64 lhqjs = 0, lhqjl = 0; //离合器计时
int kdhx = 0;
int64 kdhx_tk = 0, kdhx_tk_lhq = 0; //: Cardinal; //20180209
int kdhx_dw = 0;
int64 SongKaiShaChe_tk = 0; //: Cardinal;
bool JieDaoFXD_Flag = false;
int lhqxs = 0, lhqxjl = 0, lhq_kdhxxs = 0; //离合器限定时长 s 离合器限定距离 m
int zdxhkf = 0; //20180608 由boolean 改成integer 型 熄火次数扣分, 1:根据PLC熄火次数 2根据点火2其它值根据发动机转速为0或点火2+转速小于100
int fscys = 0; // 踩副刹时长
int DWKF_SJ = 0;
int64 Mark_DW_CS_ZS_TK = 0; //: Cardinal; //挡位与车速或者转速不匹配扣分TK
int KongYouMen_FDJ_YZ = 0; //空油门 发动机转速阀值
int KonbYouMen_FDJ_BS = 0;
int ZXD_BGB_JL = 0; //转向灯不关闭距离
int ZXD_BGB_SJ = 0; // //转向灯不关闭时间
//制动不平顺时间
int ZDBPS_SJ = 0;
int ZXD_Open_TempJL = 0; //记录转向灯打开一瞬间的累计距离
int zxd_bgbsj = 0;
int zxd_kssj = 0;
//档位车速控制
int8 dw_cs_dw2 = 0;
int8 dw_cs_cs2 = 0;
int8 dw_cs_sj2 = 0;
short dw_cs_sl2 = 0; //: smallint;
int8 dw_cs_dw1 = 0;
int8 dw_cs_cs1 = 0;
int8 dw_cs_sj1 = 0;
short dw_cs_sl1 = 0; //: smallint;
//方向控制不稳
double fxkzbwjd = 0.0; //: Single;
double fxkzbwxz = 0.0; //: Single;
//12挡距离限制
int dw12_1d_jl = 0; //1档距离
int dw12_2d_jl = 0; //2档距离
int dw12_3d_jl = 0; //1+2档累计距离
bool dw12_1d_kfrep = false, dw12_2d_kfrep = false, dw12_3d_kfrep = false; // 12挡重复扣分
int dw12_Ljjl1 = 0; //起效累计距离
int dw12_Ljjl1_new = 0; //
bool dw12_Ljjl1_new_iskf = false;
int dw12_Ljjl2 = 0; //起效累计距离
std::string dw12_1d_kf; //: string[100]; //扣分项
std::string dw12_2d_kf; //: string[100]; //扣分项
std::string dw12_3d_kf; //: string[100]; //扣分项
//20140529
int dw12_1d_sj = 0; //1档时间
int dw12_2d_sj = 0; //2档时间
int dw12_3d_sj = 0; //1+2档累计时间
int dw12_Ljsj1 = 0; //起效累计时间
int dw12_Ljsj2 = 0; //起效累计时间
int low_speed = 0;
int low_speed_jl = 0;
int low_speed_jl_count = 0;
bool Gbdg_ID = false; //关闭灯光提示标志
int64 Gbdg_SndTk = 0; //: Cardinal; //关闭灯光提示时间
int64 Gbdg_EndTk = 0; //: Cardinal;
int64 Gbdg_Kfyy = 0; //关闭灯光扣分延时
int BeforeBgcd_LaneNo = 0; //0-表示变更车道前没有在车道内不判方向灯判完方向灯将其置为0
bool BeforeBgcd_zfxd = false, BeforeBgcd_yfxd = false; //左右方向灯是否已开
bool BeforeBgcd_zfxd3s = false, BeforeBgcd_yfxd3s = false; //左右方向灯是否已3s
int bgcd_fangxiang = 0;
//bgcd_zidongchaoche: boolean; //
int DW_CS_ERROR_DW = 0; //档位车速不匹配的 档位 ,dw_cs_err_dw_gd 高档 20150526
bool DW_CS_High_Flag = false; //低档车速过高
int64 DW_CS_ERROR_TK = 0; //: Cardinal; //档位车速不匹配的 开始时间
//20151029
bool dw_cs_err_LowDw_csj = false, dw_cs_err_LowDw_gd_csj = false; //低档车速过高
int64 DW_FDJZS_ERROR_TK = 0; // Cardinal; //档位与发动机转速不匹配的 开始时间
int DW_FDJZS_ERROR_DW = 0; //挡位与发动机转速不匹配的挡位
int Road_Attr_MaxCS = 0;
int64 Road_Attr_MaxCS_Tm = 0; //: Cardinal;
bool Road_Attr_NoDiaotou = false;
std::array<TRoad_Attr, 501> Road_Attr; //: array[0..500] of TRoad_Attr;
int Road_Attr_LEN = 0;
int Rxd_Face_Ljjl = 0;
int Last_Dw = 0; //最后一次的有效档位
int Cs_ljZ = 0, Cs_lj0 = 0, Cs_lj1 = 0, Cs_lj2 = 0, Cs_js0 = 0, Cs_js1 = 0, Cs_js2 = 0; //20140418 sysset[400] 20180810
int Last_Wlzt = 0; //最后围栏状态
int cwlsj = 0; //出围栏时间 20140724
bool bZdKbTc = false; //项目结束后,自动报靠边停车项目 20140728
int ZdKbTcJl = 0; //自动报靠边停车的距离 20140728
int KbTcJl = 0; //符合自动报靠边停车的当前距离
int fdjdsint = 0; //发动机怠速计算因子 20140904
std::array<TDwCs_Range, 11> DwCs_Range; //: array[1..10] of TDwCs_Range; //20141027
bool bXhBycs = false; //20141216;根据熄火次数扣熄火
int XhJgSj = 0; //20141218 熄火间隔时间
//parm_Z_Ac: real; //Z轴加速度阀值 20150112
//Parm_Z_sj: integer; //制动不平顺扣分时间 20150112
int zdsj = 0; //20150112
int cfssj = 0; //20150327 踩副踩时间
int zbksddsj = 0; // 准备考试允许等待时间 20150721
int zbksddtscs = 0; // 准备考试允许等待时间提示最大次数 20170508
bool bKsAqd = false; //是否一上车就系了安全带 20150722
int xsfx = 0; //0 上山, 1下山 20150817 贵州
int xsldh = 0; //开始下山路段号 20151112 贵州
std::string yjdg_road_code; //: string[100]; // 夜间需要灯光操作路段名 20151112
std::string lstc_road_code; //: string[100]; //临时停车路段名 20151116
int lstc_kssj = 0, lstc_tcsj = 0; //进入临时停车时间 20151116
int lstc_zt = 0; //0 进入区域 1停车状态 2准备起步 2015116
int lstc_yfxd = 0, lstc_zfxd = 0; //临时停车是否打了右方向灯
int lstc_lb = 0;
bool lstc_kf = false ; //20170711 临时停车是否扣分
int yxkfsj1 = 0, yxkfsj2 = 0; //20151120 压线扣分时间
bool bOpenDoor = false; //20160323 是否开门
int gc_kssj = 0; // 进入同方向近距离跟车 20160617
int gc_zt = 0; // 0进入项目 -1结束 20160617
int rxhd_kssj = 0, rxhd_zt = 0; //进入人行横道时间 状态 20160617
int wxhd_kssj = 0, wxhd_zt = 0; //没有交通信号灯的路口
int hc_kssj = 0, hc_zt = 0; //模拟会车
int cc_kssj = 0, cc_zt = 0; //模拟超车
int yjdw = 0; //20160801 越级档位
std::string kf64; //: string[100]; //20160929
int jscnt = 0; //20170215 汉中
//hffdyysj: integer; //20160307 合肥肥东语音时间
int dddhkf = 0, dddhsj = 0; // 20170223 点火等待扣分 1表示准备扣分 dddhsj 等待点火时间 秒 茂名
int kf06sj = 0; //20170517 30108扣分的时间
bool bXhKf = false; //: boolean; //是否可以根据点火2熄火扣分
std::string WzmKFRoad; //: string[100]; //y夜间无照明扣分路段 20170817
int64 L_Csb_tk = 0, R_Csb_tk = 0, L_Csb_tk4 = 0, R_Csb_tk3 = 0; //: Cardinal; //20170827 20171113
int dwjs = 0; //20170906
int dh1 = 0, fdjzs = 0; //20170911
int yjjdcxsj = 0; //20171023
int yjjdkfjs = 0; //20171023 越级加档扣分时间
int qbjxmsj = 0; //20171107 起步进项目时机 0表示只要停车满足5秒就进入起步状态 1表示只有差分才能进项目
int qbsjcs = 0; //20171107 停车多长时间进入起步状态 ,单位秒
int qcyjjdkf = 0; //20171127全程越级加挡扣专项扣分 0:扣通用分 1扣专项分
std::array<TDWErrorRec, 11> DWErrArr; //: array[0..10] of TDWErrorRec; //20171130
int mndgddsj = 0; //20180104 模拟灯光触发等待时长,单位秒(插了安全带后等待时长再触发模拟灯光)
int MnYj_Tk = 0; //20180104
int bdfxdsj = 0; //变道方向灯评判时机 0以变道时判灯 1以压线时记录打灯记录 ,变道时评判
int CheLunYaXian_St = 0; //车轮压线状态 0未压1压线 20180415
int xsfxtype = 0; //行驶方向类型 0正向 1逆向 20180530
bool zdbd = false; //是否主动变道 20180531
bool zdbd3 = false;
int dtzzj = 0; //20180830 501参数第4个
bool qdfdjpp = false; //20181016 广西梧州 开始考试要在2分钟内启动发动机
bool ksrcpp = false; //20190305 开始绕车一周触发的评判
int64 NoFace2S = 0; //2019-4-111
int kaishikaoshi_fadongji = 0;
bool bJc1 = false, bJc2 = false, bJc3 = false; //是否检查了座椅 20150206
bool blichengyuying = false;
int feijidongchedaojuli = 0;
int FeiJiDongCheDaoJuLi_Tail = 0;
int mark_Point_No = 0; //绕路点扣分
int64 NoHandsSj = 0; //双手离开方向盘时间
// 老的新科三注释掉没用了
// int sslkfxp_sj = 0, sslkfxp_kfbj = 0; //双手离开方向盘时间参数
// int dslkfxp_sj = 0, dslkfxp_jlpc = 0, dslkfxp_kfbj = 0; //单手离开方向盘时间秒右边距离偏差cm
// int sccw_sj = 0, sccw_kfbj = 0; //伸出窗外时间秒
// int kfsj_43 = 0, kfsj_76 = 0, kfsj_903 = 0, kfsj_20_62 = 0; //20,43扣分时间
// int64 no_singletime = 0; //: cardinal;
};
struct TSub3Item20Comm_XLG //标准科目三综合评判 TKm3Itm20_XLG
{
bool XH_Enabled = false;
bool CSH_QBDW_Flag = false; //初始化起步挡位标志
int QB_CSJL_CM = 0; //起步时刻初始距离(厘米)
bool Mark_20_77_Flag = false;
bool qdysFlag = false; //启动钥匙标志
bool aqd_kfid = false; //安全带扣分
int CGD_Nums = 0; //达到次高挡的次数
2025-03-27 10:18:35 +08:00
bool rmndg2 = false; //无锡地区在发动机未启动点切换,提示启动发动机,启动发动机之后播报模拟灯光
2025-04-16 14:24:53 +08:00
struct TSub3SpeedDistance
{
int speed = 0;
int limit = 0; //单位米
int distance = 0; //单位米
};
std::map<int, TSub3SpeedDistance> SDs534;
std::map<int, TSub3SpeedDistance> SDs535;
2025-03-26 16:56:51 +08:00
};
struct TSub3Item20Comm_NS3 //新科目三
{
int64 offSteer = 0; //时间超过双手脱离方向盘安全时间
int oneHand = 0; //单手控制方向盘,且车辆发生偏移,初始偏移距离CM
int64 sight = 0; //视线离开行驶方向时间
int64 outWindow = 0; //手伸出窗外时间
bool isJudgeRainfall = false;
bool isJudgeIllum = false;
int64 rainfall = 0; //降雨量
int64 illumination = 0; //光照
};
#endif // HJUDGEITEM_H