/// <summary> /// 检测手刹是否超时 /// </summary> /// <param name="signalInfo"></param> protected void CheckHandbrake(CarSignalInfo signalInfo) { //配置0,不检测手刹 if (Settings.PullOverHandbrakeTimeout <= 0) { PullOverStepState = PullOverStep.PullHandbrake; return; } if (signalInfo.Sensor.Handbrake) { PullOverStepState = PullOverStep.PullHandbrake; //检测手刹拉起时,是否脚刹有松开 if (!CheckedPulloverHandbrake) { CheckedPulloverHandbrake = true; if (!signalInfo.Sensor.Brake) { BreakRule(DeductionRuleCodes.RC40608); } } } else { if (IsPullHandBrakeTimeOut()) { PullOverStepState = PullOverStep.PullHandbrake; BreakRule(DeductionRuleCodes.RC40607); } } }
/// <summary> /// 检查结束标记 /// </summary> /// <param name="signalInfo"></param> protected void CheckEndMark(CarSignalInfo signalInfo) { switch (Settings.PullOverEndMark) { case PullOverEndMark.CautionLightCheck: if (signalInfo.Sensor.CautionLight) { PullOverStepState = PullOverStep.CheckStop; } break; case PullOverEndMark.LowBeamCheck: if (!signalInfo.Sensor.LowBeam) { PullOverStepState = PullOverStep.CheckStop; } break; case PullOverEndMark.EngineExtinctionCheck: if (!signalInfo.Sensor.Engine) { PullOverStepState = PullOverStep.CheckStop; } break; case PullOverEndMark.SafetyBeltCheck: if (!signalInfo.Sensor.SafetyBelt) { PullOverStepState = PullOverStep.CheckStop; } break; case PullOverEndMark.OpenCloseDoorCheck: if (signalInfo.Sensor.Door) { OpenDoorTime = DateTime.Now; PullOverStepState = PullOverStep.CheckStop; } break; case PullOverEndMark.Handbrake: if (signalInfo.Sensor.Handbrake) { PullOverStepState = PullOverStep.CheckStop; } break; default: PullOverStepState = PullOverStep.CheckStop; break; } }
/// <summary> /// 开始执行项目对数据进行初始化 /// </summary> /// <param name="signalInfo"></param> /// <returns></returns> /// protected override bool InitExamParms(CarSignalInfo signalInfo) { //航向角无效,不记录 if (!signalInfo.BearingAngle.IsValidAngle()) { return(false); } StartAngle = signalInfo.BearingAngle; PullOverStepState = PullOverStep.None; return(base.InitExamParms(signalInfo)); }
protected override void ExecuteCore(CarSignalInfo signalInfo) { //设置了变道角度后 //设置了变道 if (Constants.PullOverDistance == 0) { Constants.PullOverDistance = signalInfo.Distance; } if (Settings.PulloverAngle > 0.5 && signalInfo.BearingAngle.IsValidAngle() && StartAngle.IsValidAngle() && !GeoHelper.IsBetweenDiffAngle(signalInfo.BearingAngle, StartAngle, Settings.PulloverAngle)) { CheckRightIndicatorLight(); } if (Settings.PullOverEndMark == PullOverEndMark.OpenCloseDoorCheck && PullOverStepState < PullOverStep.StopCar && signalInfo.Sensor.Door) { if (!signalInfo.Sensor.Handbrake) { CheckRule(true, DeductionRuleCodes.RC40607, DeductionRuleCodes.SRC4060701); } CheckEndMark(signalInfo); } if (PullOverStepState == PullOverStep.None) { if ((signalInfo.CarState == CarState.Stop && Settings.PullOverMark == PullOverMark.CarStop) || (signalInfo.Sensor.Handbrake && Settings.PullOverMark == PullOverMark.Handbrake)) { PullOverStepState = PullOverStep.StopCar; StopCarTime = DateTime.Now; Messenger.Send(new EngineRuleMessage(false)); } } else if (PullOverStepState == PullOverStep.StopCar) { //停车转向灯检查 PullOverStepState = PullOverStep.OpenPullOverLight; CheckRightIndicatorLight(); } else if (PullOverStepState == PullOverStep.OpenPullOverLight) { CheckHandbrake(signalInfo); } else if (PullOverStepState == PullOverStep.PullHandbrake) { //判断靠边停车是否结束 CheckEndMark(signalInfo); } else if (PullOverStepState == PullOverStep.CheckStop) { if (!_isCheckedPulloverStop) { _isCheckedPulloverStop = true; CheckPullOverStop(signalInfo); } if (Settings.PullOverEndMark == PullOverEndMark.OpenDoorCheck) { StopCore(); return; } //true false if (!(Settings.PullOverEndMark == PullOverEndMark.None || Settings.PullOverEndMark == PullOverEndMark.OpenCloseDoorCheck)) { StopCore(); return; } if (!OpenDoorTime.HasValue) { OpenDoorTime = DateTime.Now; } //关车门 if (!signalInfo.Sensor.Door) { //海南版本特殊要求开关车门两次 if (DataBase.VersionNumber.Contains("海南")) { if (CloseDoorCount >= 2) { PullOverStepState = PullOverStep.CloseDoor; //关车门 Messenger.Send(new DoorChangedMessage(signalInfo.Sensor.Door)); StopCore(); return; } } else { PullOverStepState = PullOverStep.CloseDoor; //关车门 Messenger.Send(new DoorChangedMessage(signalInfo.Sensor.Door)); StopCore(); return; } } //在规定的时间内没有关闭车门 if (CloseDoorTimeOut()) { BreakRule(DeductionRuleCodes.RC40605); StopCore(); } } }
/// <summary> /// 开始执行项目对数据进行初始化 /// </summary> /// <param name="signalInfo"></param> /// <returns></returns> /// protected override bool InitExamParms(CarSignalInfo signalInfo) { PullOverStepState = PullOverStep.None; return(base.InitExamParms(signalInfo)); }
protected override void ExecuteCore(CarSignalInfo signalInfo) { if ((int)PullOverStepState >= (int)PullOverStep.StopCar) { if (!isSpeakHandBrake && signalInfo.Sensor.Handbrake) { isSpeakHandBrake = true; //请操作完成后下车 Speaker.PlayAudioAsync("请操作完成后下车", SpeechPriority.Normal); } } if (PullOverStepState == PullOverStep.None) { ///拉手刹结束启动靠边停车检测 if (signalInfo.Sensor.Handbrake) { PullOverStepState = PullOverStep.StopCar; StopCarTime = DateTime.Now; Messenger.Send(new EngineRuleMessage(false)); Logger.DebugFormat("{0}-关闭发动机熄火评判规则", Name); } } else if (PullOverStepState == PullOverStep.StopCar) { //停车转向灯检查 PullOverStepState = PullOverStep.OpenPullOverLight; if (!CarSignalSet.Query(StartTime).Any(d => d.Sensor.RightIndicatorLight)) { BreakRule(DeductionRuleCodes.RC40610); } else { var rightIndicator = AdvancedSignal.CheckOperationAheadSeconds(x => x.Sensor.RightIndicatorLight, StartTime, Settings.TurnLightAheadOfTime); if (!rightIndicator) { BreakRule(DeductionRuleCodes.RC40611); } } } else if (PullOverStepState == PullOverStep.OpenPullOverLight) { CheckHandbrake(signalInfo); } else if (PullOverStepState == PullOverStep.PullHandbrake) { //判断靠边停车是否结束 CheckEndMark(signalInfo); } else if (PullOverStepState == PullOverStep.CheckStop) { if (!_isCheckedPulloverStop) { _isCheckedPulloverStop = true; CheckPullOverStop(signalInfo); } if (!(Settings.PullOverEndMark == PullOverEndMark.None || Settings.PullOverEndMark == PullOverEndMark.OpenCloseDoorCheck)) { StopCore(); return; } if (!OpenDoorTime.HasValue) { OpenDoorTime = DateTime.Now; } if (!signalInfo.Sensor.Door) { PullOverStepState = PullOverStep.CloseDoor; Messenger.Send(new DoorChangedMessage(signalInfo.Sensor.Door)); StopCore(); return; } //在规定的时间内没有关闭车门 if (CloseDoorTimeOut()) { BreakRule(DeductionRuleCodes.RC40605); StopCore(); } } }
protected override void ExecuteCore(CarSignalInfo signalInfo) { if (!_isCheckExterior && _ExteriorMirrorTime.HasValue) { //摸后视镜后,不足3秒开门,扣10分 //z做成配置 //如果配置成0 永远false if ((DateTime.Now - _ExteriorMirrorTime.Value).TotalSeconds < Settings.PullOverOpenDoorTime) { if (signalInfo.Sensor.Door) { _isCheckExterior = true; BreakRule(DeductionRuleCodes.RC41705); } } else { _isCheckExterior = true; } } //如果车停了又继续走了,并且状态在结束 标识之前 充值状态 //要求是下车前 //if ((int)PullOverStepState >= (int)PullOverStep.StopCar && signalInfo.CarState != CarState.Stop && PullOverStepState != PullOverStep.CloseDoor && PullOverStepState != PullOverStep.CheckStop) //{ // PullOverStepState = PullOverStep.None; // _isTouchExteriorMirror = false; //} if ((int)PullOverStepState >= (int)PullOverStep.StopCar && !_isTouchExteriorMirror) { if (signalInfo.Sensor.ExteriorMirror) { _ExteriorMirrorTime = DateTime.Now; _isTouchExteriorMirror = true; //TODO:特殊修改 触摸观望镜 播报语音 Speaker.PlayAudioAsync("观望"); //Task.Run(() => //{ // //Thread.Sleep(2 * 1000); // //播放刹车语音 // Speaker.PlayAudioAsync("观望镜确认"); // //Speaker.SpeakBreakeVoice(); //}); } } if (PullOverStepState == PullOverStep.None) { if (signalInfo.Sensor.Handbrake) { PullOverStepState = PullOverStep.StopCar; StopCarTime = DateTime.Now; Messenger.Send(new EngineRuleMessage(false)); Logger.DebugFormat("{0}-关闭发动机熄火评判规则", Name); } //if (signalInfo.CarState == CarState.Stop) //{ // PullOverStepState = PullOverStep.StopCar; // StopCarTime = DateTime.Now; // Messenger.Send(new EngineRuleMessage(false)); // Logger.DebugFormat("{0}-关闭发动机熄火评判规则", Name); //} } else if (PullOverStepState == PullOverStep.StopCar) { //停车转向灯检查 停车前不使用或错误使用转向灯 PullOverStepState = PullOverStep.OpenPullOverLight; if (CarSignalSet.Query(StartTime).Any(d => d.Sensor.LeftIndicatorLight) || !signalInfo.Sensor.RightIndicatorLight) { BreakRule(DeductionRuleCodes.RC40610); } else { //写死检测3秒前的灯 var lastSignal = CarSignalSet.QueryCachedSeconds(Settings.TurnLightAheadOfTime).LastOrDefault(); if (lastSignal == null || !lastSignal.Sensor.RightIndicatorLight) { BreakRule(DeductionRuleCodes.RC40611); } //var advancedSignal = Resolve<IAdvancedCarSignal>(); //var rightIndicator = AdvancedSignal.CheckOperationAheadSeconds(x => x.Sensor.RightIndicatorLight, StartTime, Settings.TurnLightAheadOfTime); //if (!rightIndicator) //{ // BreakRule(DeductionRuleCodes.RC40611); //} } } //开光车门之后再检查手刹 else if (PullOverStepState == PullOverStep.OpenPullOverLight) { CheckHandbrake(signalInfo); PullOverStepState = PullOverStep.PullHandbrake; } else if (PullOverStepState == PullOverStep.PullHandbrake) { //判断靠边停车是否结束 CheckEndMark(signalInfo); } else if (PullOverStepState == PullOverStep.CheckStop) { //if (signalInfo.Sensor.ExteriorMirror) //{ // _isTouchExteriorMirror = true; // Speaker.PlayAudioAsync("sanya/ExteriorMirror.wav", Infrastructure.Speech.SpeechPriority.Normal); //} //检测手刹 // if (!_isCheckedPulloverStop) { _isCheckedPulloverStop = true; CheckPullOverStop(signalInfo); } //如果结束标识 不是开关车门 if (!(Settings.PullOverEndMark == PullOverEndMark.None || Settings.PullOverEndMark == PullOverEndMark.OpenCloseDoorCheck)) { StopCore(); return; } if (!OpenDoorTime.HasValue) { OpenDoorTime = DateTime.Now; } if (!signalInfo.Sensor.Door) { //客户要求结束考试开关车门改为一次 if (CloseDoorCount >= 1) { PullOverStepState = PullOverStep.CloseDoor; //关车门 Messenger.Send(new DoorChangedMessage(signalInfo.Sensor.Door)); StopCore(); return; } } //在规定的时间内没有关闭车门 if (CloseDoorTimeOut()) { BreakRule(DeductionRuleCodes.RC40605); StopCore(); } } }
protected override void ExecuteCore(CarSignalInfo signalInfo) { //启用角度 if (Settings.PulloverAngle > 1 && CheckAngleLight && PullOverStepState < PullOverStep.StopCar) { if (signalInfo.BearingAngle.IsValidAngle() && StartAngle.IsValidAngle() && !GeoHelper.IsBetweenDiffAngle(signalInfo.BearingAngle, StartAngle, Settings.PulloverAngle)) { CheckAngleLight = false; if (CarSignalSet.Query(StartTime).Any(d => d.Sensor.LeftIndicatorLight) || !signalInfo.Sensor.RightIndicatorLight) { CheckRule(true, DeductionRuleCodes.RC40610); } else { var lastSignal = CarSignalSet.QueryCachedSeconds(Settings.TurnLightAheadOfTime).LastOrDefault(); if (lastSignal == null || !lastSignal.Sensor.RightIndicatorLight) { CheckRule(true, DeductionRuleCodes.RC40611); } } } } //如果车停了又继续走了,并且状态在结束 标识之前 充值状态 //要求是下车前 //if ((int)PullOverStepState >= (int)PullOverStep.StopCar && signalInfo.CarState != CarState.Stop && PullOverStepState != PullOverStep.CloseDoor && PullOverStepState != PullOverStep.CheckStop) //{ // PullOverStepState = PullOverStep.None; // _isTouchExteriorMirror = false; //} if ((int)PullOverStepState >= (int)PullOverStep.StopCar && !_isTouchExteriorMirror) { if (signalInfo.Sensor.ExteriorMirror) { _isTouchExteriorMirror = true; //...... //...... //...... //...... Speaker.PlayAudioAsync("观望镜确认"); } } if (PullOverStepState == PullOverStep.None) { if (signalInfo.Sensor.Handbrake) { PullOverStepState = PullOverStep.StopCar; StopCarTime = DateTime.Now; Messenger.Send(new EngineRuleMessage(false)); Logger.DebugFormat("{0}-关闭发动机熄火评判规则", Name); } //if (signalInfo.CarState == CarState.Stop) //{ // PullOverStepState = PullOverStep.StopCar; // StopCarTime = DateTime.Now; // Messenger.Send(new EngineRuleMessage(false)); // Logger.DebugFormat("{0}-关闭发动机熄火评判规则", Name); //} } else if (PullOverStepState == PullOverStep.StopCar) { //停车转向灯检查 停车前不使用或错误使用转向灯 PullOverStepState = PullOverStep.OpenPullOverLight; if (CarSignalSet.Query(StartTime).Any(d => d.Sensor.LeftIndicatorLight) || !signalInfo.Sensor.RightIndicatorLight) { CheckRule(true, DeductionRuleCodes.RC40610); } else { var lastSignal = CarSignalSet.QueryCachedSeconds(Settings.TurnLightAheadOfTime).LastOrDefault(); if (lastSignal == null || !lastSignal.Sensor.RightIndicatorLight) { CheckRule(true, DeductionRuleCodes.RC40611); } //var advancedSignal = Resolve<IAdvancedCarSignal>(); //var rightIndicator = AdvancedSignal.CheckOperationAheadSeconds(x => x.Sensor.RightIndicatorLight, StartTime, Settings.TurnLightAheadOfTime); //if (!rightIndicator) //{ // BreakRule(DeductionRuleCodes.RC40611); //} } } //开光车门之后再检查手刹 else if (PullOverStepState == PullOverStep.OpenPullOverLight) { CheckHandbrake(signalInfo); PullOverStepState = PullOverStep.PullHandbrake; } else if (PullOverStepState == PullOverStep.PullHandbrake) { //判断靠边停车是否结束 CheckEndMark(signalInfo); } else if (PullOverStepState == PullOverStep.CheckStop) { //if (signalInfo.Sensor.ExteriorMirror) //{ // _isTouchExteriorMirror = true; // Speaker.PlayAudioAsync("sanya/ExteriorMirror.wav", Infrastructure.Speech.SpeechPriority.Normal); //} //检测手刹 // if (!_isCheckedPulloverStop) { _isCheckedPulloverStop = true; CheckPullOverStop(signalInfo); } //如果结束标识 不是开关车门 if (!(Settings.PullOverEndMark == PullOverEndMark.None || Settings.PullOverEndMark == PullOverEndMark.OpenCloseDoorCheck)) { StopCore(); return; } if (!OpenDoorTime.HasValue) { OpenDoorTime = DateTime.Now; } if (!signalInfo.Sensor.Door) { PullOverStepState = PullOverStep.CloseDoor; Messenger.Send(new DoorChangedMessage(signalInfo.Sensor.Door)); StopCore(); return; } //在规定的时间内没有关闭车门 if (CloseDoorTimeOut()) { BreakRule(DeductionRuleCodes.RC40605); StopCore(); } } }