예제 #1
0
        public void AddAccess(string path, List <CItable> CITableList)
        {
            StreamReader  sr = new StreamReader(path, Encoding.Default);
            String        line;
            List <string> list = new List <string>();

            while ((line = sr.ReadLine()) != null)
            {
                list.Add(line);
            }
            sr.Close();
            foreach (var item in list)
            {
                string[] strs   = item.Split(new char[] { ',' });
                CItable  access = new CItable();
                access.Number       = Convert.ToInt16(strs[0]);
                access.StartSection = strs[1];
                access.EndSection   = strs[2];
                access.AccessState  = 0;
                access.Direction    = Convert.ToInt16(strs[6]);
                string[] section = strs[5].Split(new char[] { '#' });
                access.Section = new List <string>();
                foreach (var sec in section)
                {
                    access.Section.Add(sec);
                }
                CITableList.Add(access);
            }
        }
예제 #2
0
        public byte[] DetermineMA(HandleVOBCData Handle)
        {
            int    TrainSectionInt    = Convert.ToInt16(HandleVOBCData.TrainPosition[Handle.NID_Train][1]) * 256 + Convert.ToInt16(HandleVOBCData.TrainPosition[Handle.NID_Train][0]);//纯数字
            int    RailSwitchInt      = Convert.ToInt16(HandleVOBCData.TrainPosition[Handle.NID_Train][2]);
            string RailSwitchString   = RailSwitchInt.ToString();
            string TrainSectionString = TrainSectionInt.ToString();
            int    TrainDir           = Handle.Q_TrainRealDirection;

            foreach (var item in MainWindow.stationElements_.Elements)
            {
                try
                {
                    if (item is Section)
                    {
                        if (item.Name.Substring(0, 3) == TrainSectionString)
                        {
                            FindCurTrainIn(TrainSectionString + "-0", TrainDir);
                        }
                    }
                    if (item is RailSwitch)
                    {
                        if ((item as RailSwitch).SectionName.Substring(0, 3) == TrainSectionString)
                        {
                            FindCurTrainIn(TrainSectionString + "-" + RailSwitchString, TrainDir);
                        }
                    }
                }
                catch (Exception e)
                {
                }
            }
            CItable NextAccess = null;

            if (CurTrainIn.Count != 0)
            {
                foreach (var item in CurTrainIn)
                {
                    int num = item.Section.IndexOf(TrainSectionString + "-" + RailSwitchString);
                    for (int i = num; i < item.Section.Count; i++)
                    {
                        if (!Route.Contains(item.Section[i]))
                        {
                            Route.Add(item.Section[i]);
                        }
                        byte[] a = SectionAxleOccpy(item.Section[i], TrainDir);
                        if (a != null)
                        {
                            return(a);
                        }
                        if (IsApproachSection(item.Section[i], TrainDir) != null)
                        {
                            NextAccess = IsApproachSection(item.Section[i], TrainDir);
                        }
                    }
                }
            }
            if (NextAccess != null)
            {
                bool HasNextAccessOpen = true;
                while (HasNextAccessOpen)
                {
                    CItable Next = null;
                    for (int i = 0; i < NextAccess.Section.Count; i++)
                    {
                        if (NextAccess.Section[i] == TrainSectionString + "-" + RailSwitchString)
                        {
                        }
                        else
                        {
                            if (!Route.Contains(NextAccess.Section[i]))
                            {
                                Route.Add(NextAccess.Section[i]);
                            }
                            byte[] a = SectionOccpy(NextAccess.Section[i], TrainDir);
                            if (a != null)
                            {
                                return(a);
                            }
                            Next = IsApproachSection(NextAccess.Section[i], TrainDir);
                        }
                    }
                    if (Next != null)
                    {
                        NextAccess = Next;
                    }
                    else
                    {
                        HasNextAccessOpen = false;
                    }
                }
            }
            else
            {
                NextAccess = CurTrainIn[CurTrainIn.Count - 1];
            }

            MASection = NextAccess.EndSection;
            foreach (var item in MainWindow.stationTopoloty_.Nodes)
            {
                try
                {
                    if (item.NodeDevice is Section)
                    {
                        if ((item.NodeDevice as Section).Name.Substring(0, 3) == MASection.Substring(0, 3))
                        {
                            MAOffset = 100;
                            MADir    = TrainDir;
                        }
                    }
                    else if (item.NodeDevice is RailSwitch)
                    {
                        if ((item.NodeDevice as RailSwitch).SectionName.Substring(0, 3) == MASection.Substring(0, 3) &&
                            (item.NodeDevice as RailSwitch).Name == MASection.Substring(4))
                        {
                            MAOffset = SetMAOffset(item.NodeDevice);
                            MADir    = TrainDir;
                        }
                    }
                }
                catch (Exception e)
                {
                }
            }
            foreach (var item in MainWindow.stationTopoloty_1_.Nodes)
            {
                try
                {
                    if (item.NodeDevice is Section)
                    {
                        if ((item.NodeDevice as Section).Name.Substring(0, 3) == MASection.Substring(0, 3))
                        {
                            MAOffset = 100;
                            MADir    = TrainDir;
                        }
                    }
                    else if (item.NodeDevice is RailSwitch)
                    {
                        if ((item.NodeDevice as RailSwitch).SectionName.Substring(0, 3) == MASection.Substring(0, 3) &&
                            (item.NodeDevice as RailSwitch).Name == MASection.Substring(4))
                        {
                            MAOffset = SetMAOffset(item.NodeDevice);
                            MADir    = TrainDir;
                        }
                    }
                }
                catch (Exception e)
                {
                }
            }
            return(ConvertToByte(MASection, MAOffset, MADir));
        }