Ejemplo n.º 1
0
        public override void Update()
        {
            int           nextNormalSignalId         = NextSignalId("NORMAL");
            string        nextNormalSignalTextAspect = nextNormalSignalId >= 0 ? IdTextSignalAspect(nextNormalSignalId, "NORMAL") : "FR_TVM430 Ve80 Vc000";
            List <string> nextNormalParts            = nextNormalSignalTextAspect.Split(' ').ToList();

            nextNormalSignalTextAspect = string.Join(" ", nextNormalParts.Where(x =>
                                                                                x.StartsWith("FR_TVM") ||
                                                                                x.StartsWith("Ve") ||
                                                                                x.StartsWith("Vc") ||
                                                                                x.StartsWith("Va")));

            TVMSpeedType Vc = TVMSpeedType.Any;

            foreach (string part in nextNormalParts)
            {
                if (part.StartsWith("Vc"))
                {
                    Vc = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
            }

            MstsSignalAspect = MstsTranslation[Vc];

            if (MstsSignalAspect < Aspect.Restricting)
            {
                MstsSignalAspect = Aspect.Restricting;
            }

            TextSignalAspect = nextNormalSignalTextAspect + " BSP_ESL";

            DrawState = DefaultDrawState(MstsSignalAspect);
        }
Ejemplo n.º 2
0
 public static Aspect TVMSpeedTypeToAspectV320(TVMSpeedType Vc, bool permissive)
 {
     if (!permissive)
     {
         return(Aspect.Stop);
     }
     else
     {
         return(SNCFV320MstsTranslation[Vc]);
     }
 }
Ejemplo n.º 3
0
        public override void Update()
        {
            if (HasHead(8))
            {
                VeAg = TVMSpeedType._000;
            }
            else if (HasHead(7))
            {
                VeAg = TVMSpeedType._60;
            }
            else if (HasHead(6))
            {
                VeAg = TVMSpeedType._80;
            }
            else if (HasHead(5))
            {
                VeAg = TVMSpeedType._130;
            }
            else if (HasHead(4))
            {
                VeAg = TVMSpeedType._160;
            }
            else if (HasHead(3))
            {
                VeAg = TVMSpeedType._170;
            }
            else if (HasHead(2))
            {
                VeAg = TVMSpeedType._200;
            }
            else if (HasHead(1))
            {
                VeAg = TVMSpeedType._220;
            }
            else
            {
                VeAg = TVMSpeedType._230;
            }

            MstsSignalAspect = Aspect.Clear_2;
            TextSignalAspect = "FR_TVM430_AG Ve" + VeAg.ToString().Substring(1);
            DrawState        = DefaultDrawState(MstsSignalAspect);
        }
Ejemplo n.º 4
0
        public override void Update()
        {
            if (IsSignalFeatureEnabled("USER4"))
            {
                Vpf[1] = TVMSpeedType._80E;
            }
            else if (IsSignalFeatureEnabled("USER3"))
            {
                Vpf[1] = TVMSpeedType._170E;
            }
            else if (IsSignalFeatureEnabled("USER2"))
            {
                Vpf[1] = TVMSpeedType._230V;
            }
            else if (IsSignalFeatureEnabled("USER1"))
            {
                Vpf[1] = TVMSpeedType._270V;
            }
            else
            {
                Vpf[1] = TVMSpeedType._300V;
            }

            int           nextNormalSignalId = NextSignalId("NORMAL");
            List <string> nextNormalParts    = new List <string>();

            if (nextNormalSignalId >= 0)
            {
                nextNormalParts = IdTextSignalAspect(nextNormalSignalId, "NORMAL").Split(' ').ToList();
                SendSignalMessage(nextNormalSignalId, "FR_TVM430 Vpf" + Vpf[1].ToString().Substring(1));
            }

            TVMSpeedType[] Ve = new TVMSpeedType[2] {
                TVMSpeedType.Any, TVMSpeedType.Any
            };
            TVMSpeedType[] Vc = new TVMSpeedType[2] {
                TVMSpeedType.Any, TVMSpeedType.Any
            };
            TVMSpeedType[] Va = new TVMSpeedType[2] {
                TVMSpeedType.Any, TVMSpeedType.Any
            };

            foreach (string part in nextNormalParts)
            {
                if (part.StartsWith("Ve"))
                {
                    Ve[1] = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
                else if (part.StartsWith("Vc"))
                {
                    Vc[1] = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
                else if (part.StartsWith("Va"))
                {
                    Va[1] = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
            }

            if (CurrentBlockState != BlockState.Clear ||
                !nextNormalParts.Contains("FR_TVM430") ||
                Ve[1] == TVMSpeedType.Any ||
                Vc[1] == TVMSpeedType.Any)
            {
                Vcond   = TVMSpeedType._RRR;
                Ve[1]   = TVMSpeedType._000;
                Vc[1]   = TVMSpeedType._RRR;
                RRRAval = true;
            }
            else
            {
                Vcond   = Vpf[0];
                Ve[1]   = Min(Ve[1], TAB2[Vpf[1]]);
                RRRAval = false;
            }

            Vc[0] = Min(Vcond, Ve[1]);
            Ve[0] = Min(TAB2[Vcond], TAB1[Vc[0]]);
            Va[0] = TAB2[Vc[1]];

            if (Va[0] >= Vc[0])
            {
                Va[0] = TVMSpeedType.Any;
            }

            if (Ve[0] != VeE || Vc[0] != VcE || Va[0] != VaE)
            {
                if (Ve[0] < VeE || Vc[0] < VcE || VcE == TVMSpeedType._RRR)
                {
                    VeE = Ve[0];
                    VcE = Vc[0];
                    VaE = Va[0];
                    AspectChangeTimer.Start();
                }
                else
                {
                    if (AspectChangeTimer.Started)
                    {
                        if (AspectChangeTimer.Triggered)
                        {
                            AspectChangeTimer.Stop();
                        }
                    }
                    else
                    {
                        VeE = Ve[0];
                        VcE = Vc[0];
                        VaE = Va[0];
                    }
                }
            }

            MstsSignalAspect = TVMSpeedTypeToAspectV320(VcE, true);
            TextSignalAspect = "FR_TVM430"
                               + " Ve" + VeE.ToString().Substring(1)
                               + " Vc" + VcE.ToString().Substring(1)
                               + (VaE != TVMSpeedType.Any ? " Va" + VaE.ToString().Substring(1) : string.Empty)
                               + (RRRAval ? " RRRAval" : string.Empty);

            DrawState = DefaultDrawState(MstsSignalAspect);
        }
Ejemplo n.º 5
0
        public override void Update()
        {
            int           nextNormalSignalId = NextSignalId("NORMAL");
            List <string> nextNormalParts    = new List <string>();

            if (nextNormalSignalId >= 0)
            {
                nextNormalParts = IdTextSignalAspect(nextNormalSignalId, "NORMAL").Split(' ').ToList();
                SendSignalMessage(nextNormalSignalId, "FR_TVM430 Vpf" + Vpf[1].ToString().Substring(1));
            }

            int           nextInfoSignalId         = NextSignalId("INFO");
            string        nextInfoSignalTextAspect = nextInfoSignalId >= 0 ? IdTextSignalAspect(nextInfoSignalId, "INFO") : string.Empty;
            List <string> nextInfoParts            = nextInfoSignalTextAspect.Split(' ').ToList();

            TVMSpeedType[] Ve = new TVMSpeedType[2] {
                TVMSpeedType.Any, TVMSpeedType.Any
            };
            TVMSpeedType[] Vc = new TVMSpeedType[2] {
                TVMSpeedType.Any, TVMSpeedType.Any
            };
            TVMSpeedType[] Va = new TVMSpeedType[2] {
                TVMSpeedType.Any, TVMSpeedType.Any
            };

            foreach (string part in nextNormalParts)
            {
                if (part.StartsWith("Ve"))
                {
                    Ve[1] = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
                else if (part.StartsWith("Vc"))
                {
                    Vc[1] = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
                else if (part.StartsWith("Va"))
                {
                    Va[1] = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                }
            }

            TVMSpeedType VeAg = TVMSpeedType._170E;

            if (nextInfoParts.Contains("FR_TVM430_AG"))
            {
                foreach (string part in nextInfoParts)
                {
                    if (part.StartsWith("Ve"))
                    {
                        VeAg = (TVMSpeedType)Enum.Parse(typeof(TVMSpeedType), "_" + part.Substring(2));
                    }
                }
            }

            // Repère Nf fermé => Arret réduit + BSP CNf puis marche à vue (RRR)
            if (!Enabled ||
                CurrentBlockState != BlockState.Clear ||
                Ve[1] == TVMSpeedType.Any ||
                Vc[1] == TVMSpeedType.Any)
            {
                Vcond   = TVMSpeedType._80E;
                Ve[1]   = TVMSpeedType._000;
                Vc[1]   = TVMSpeedType._RRR;
                CNf     = true;
                RRRAval = true;
            }
            // Entrée sur VS => Arrêt réduit puis marche à vue (RRR)
            else if (!nextNormalParts.Contains("FR_TVM430"))
            {
                Vcond   = TVMSpeedType._80E;
                Ve[1]   = TVMSpeedType._000;
                Vc[1]   = TVMSpeedType._RRR;
                CNf     = false;
                RRRAval = true;
            }
            else
            {
                Vcond = Vpf[0];
                if (!RouteSet)
                {
                    Ve[1] = Min(VeAg, Ve[1]);
                }
                Ve[1]   = Min(Ve[1], Vpf[1]);
                CNf     = false;
                RRRAval = false;
            }

            Vc[0] = Min(Vcond, Ve[1]);
            Ve[0] = Min(TAB2[Vcond], TAB1[Vc[0]]);
            Va[0] = TAB2[Vc[1]];

            if (Va[0] >= Vc[0])
            {
                Va[0] = TVMSpeedType.Any;
            }

            if (Ve[0] != VeE || Vc[0] != VcE || Va[0] != VaE)
            {
                if (Ve[0] < VeE || Vc[0] < VcE || VcE == TVMSpeedType._RRR)
                {
                    VeE = Ve[0];
                    VcE = Vc[0];
                    VaE = Va[0];
                    AspectChangeTimer.Start();
                }
                else
                {
                    if (AspectChangeTimer.Started)
                    {
                        if (AspectChangeTimer.Triggered)
                        {
                            AspectChangeTimer.Stop();
                        }
                    }
                    else
                    {
                        VeE = Ve[0];
                        VcE = Vc[0];
                        VaE = Va[0];
                    }
                }
            }

            MstsSignalAspect = TVMSpeedTypeToAspectV320(VcE, !CNf);
            TextSignalAspect = "FR_TVM430"
                               + " Ve" + VeE.ToString().Substring(1)
                               + " Vc" + VcE.ToString().Substring(1)
                               + (VaE != TVMSpeedType.Any ? " Va" + VaE.ToString().Substring(1) : string.Empty)
                               + (CNf ? " BSP_CNf" : string.Empty)
                               + (RRRAval ? " RRRAval" : string.Empty);

            DrawState = DefaultDrawState(MstsSignalAspect);
        }
Ejemplo n.º 6
0
        public override void Update()
        {
            if (IsSignalFeatureEnabled("USER1"))
            {
                Vpf = TVMSpeedType._130E;
            }
            else
            {
                Vpf = TVMSpeedType._160E;
            }

            int           nextNormalSignalId         = NextSignalId("NORMAL");
            string        nextNormalSignalTextAspect = nextNormalSignalId >= 0 ? IdTextSignalAspect(nextNormalSignalId, "NORMAL") : string.Empty;
            List <string> nextNormalParts            = nextNormalSignalTextAspect.Split(' ').ToList();

            if (!Enabled ||
                CurrentBlockState == BlockState.Obstructed)
            {
                MstsSignalAspect = Aspect.Stop;
                TextSignalAspect = "FR_C_BAL FR_TVM430 Ve80 Vc000";
            }
            else if (CurrentBlockState == BlockState.Occupied)
            {
                MstsSignalAspect = Aspect.StopAndProceed;
                TextSignalAspect = "FR_S_BAL FR_TVM430 Ve80 Vc000";
            }
            else if (RouteSet)
            {
                if (nextNormalParts.FindAll(x => x == "FR_C_BAL" ||
                                            x == "FR_CV" ||
                                            x == "FR_S_BAL" ||
                                            x == "FR_S_BAPR" ||
                                            x == "FR_S_BM" ||
                                            x == "FR_SCLI" ||
                                            x == "FR_MCLI" ||
                                            x == "FR_M" ||
                                            x == "FR_RR_A" ||
                                            x == "FR_RR_ACLI" ||
                                            x == "FR_RR" ||
                                            x == "FR_RRCLI_A" ||
                                            x == "FR_RRCLI_ACLI" ||
                                            x == "FR_RRCLI"
                                            ).Count > 0)
                {
                    if (Vpf == TVMSpeedType._130E)
                    {
                        MstsSignalAspect = Aspect.Approach_2;
                        TextSignalAspect = "FR_A FR_TVM430 Ve130 Vc130E";
                    }
                    else
                    {
                        MstsSignalAspect = Aspect.Approach_1;
                        TextSignalAspect = "FR_A FR_TVM430 Ve160 Vc160E";
                    }
                }
                else
                {
                    if (Vpf == TVMSpeedType._130E)
                    {
                        MstsSignalAspect = Aspect.Clear_2;
                        TextSignalAspect = "FR_VL_INF FR_TVM430 Ve130 Vc130E";
                    }
                    else
                    {
                        MstsSignalAspect = Aspect.Clear_1;
                        TextSignalAspect = "FR_VL_INF FR_TVM430 Ve160 Vc160E";
                    }
                }
            }
            else
            {
                if (nextNormalParts.FindAll(x => x == "FR_C_BAL" ||
                                            x == "FR_CV" ||
                                            x == "FR_S_BAL" ||
                                            x == "FR_S_BAPR" ||
                                            x == "FR_S_BM" ||
                                            x == "FR_SCLI" ||
                                            x == "FR_MCLI" ||
                                            x == "FR_M" ||
                                            x == "FR_RR_A" ||
                                            x == "FR_RR_ACLI" ||
                                            x == "FR_RR" ||
                                            x == "FR_RRCLI_A" ||
                                            x == "FR_RRCLI_ACLI" ||
                                            x == "FR_RRCLI"
                                            ).Count > 0)
                {
                    MstsSignalAspect = Aspect.Approach_3;
                    if (Vpf == TVMSpeedType._130E)
                    {
                        TextSignalAspect = "FR_RRCLI_A FR_TVM430 Ve130 Vc60";
                    }
                    else
                    {
                        TextSignalAspect = "FR_RRCLI_A FR_TVM430 Ve160 Vc60";
                    }
                }
                else
                {
                    MstsSignalAspect = Aspect.Restricting;
                    if (Vpf == TVMSpeedType._130E)
                    {
                        TextSignalAspect = "FR_RRCLI FR_TVM430 Ve130 Vc60";
                    }
                    else
                    {
                        TextSignalAspect = "FR_RRCLI FR_TVM430 Ve160 Vc60";
                    }
                }
            }

            TextSignalAspect += " Vpf" + Vpf.ToString().Substring(1);

            DrawState = DefaultDrawState(MstsSignalAspect);
        }