906 lines
40 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 说明: 评判项目头文件
*
* 作者: 杨海洋
* 日期: 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; //达到次高挡的次数
bool rmndg2 = false; //无锡地区在发动机未启动点切换,提示启动发动机,启动发动机之后播报模拟灯光
struct TSub3SpeedDistance
{
int speed = 0;
int limit = 0; //单位米
int distance = 0; //单位米
};
std::map<int, TSub3SpeedDistance> SDs534;
std::map<int, TSub3SpeedDistance> SDs535;
};
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