Ejemplo n.º 1
0
        /// <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);
                }
            }
        }
Ejemplo n.º 2
0
        /// <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;
            }
        }
Ejemplo n.º 3
0
        /// <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));
        }
Ejemplo n.º 4
0
        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();
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 开始执行项目对数据进行初始化
 /// </summary>
 /// <param name="signalInfo"></param>
 /// <returns></returns>
 ///
 protected override bool InitExamParms(CarSignalInfo signalInfo)
 {
     PullOverStepState = PullOverStep.None;
     return(base.InitExamParms(signalInfo));
 }
Ejemplo n.º 6
0
        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();
                }
            }
        }
Ejemplo n.º 7
0
        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();
                }
            }
        }
Ejemplo n.º 8
0
        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();
                }
            }
        }