示例#1
0
        private void SetLogicStopInfo(List <线路绘图工具.GraphicElement> Sections, List <线路绘图工具.GraphicElement> Switchs)
        {
            foreach (var item in Sections)
            {
                if (item is Section)
                {
                    if ((item as Section).LogicCount == 1)
                    {
                        CIPacket.SetBit(false);
                    }
                    else
                    {
                        CIPacket.SetBit(false);
                        CIPacket.SetBit(false);
                    }
                }
            }
            List <string> railswitchs = new List <string>();

            foreach (var item in Switchs)
            {
                if (item is RailSwitch)
                {
                    RailSwitch railswitch = item as RailSwitch;
                    if (!railswitchs.Contains(railswitch.SectionName))
                    {
                        CIPacket.SetBit(false);
                        railswitchs.Add(railswitch.SectionName);
                    }
                }
            }
        }
示例#2
0
        public TopolotyNode CurBaliseToIteam(string balise) //根据当前的应答器找到节点,道岔根据sectionName即可
        {
            if (balise.Substring(0, 1) == "T")
            {
                foreach (var item in getxml.data.Topo)
                {
                    if (item.device.Name == balise.Substring(0, 5)) //区段时只需要根据Name判断就可以,nameT0103
                    {
                        return(item);
                    }
                }
            }

            else
            {
                TopolotyNode node = getxml.data.Topo.Find((TopolotyNode toponode) =>   //node是寻找到的节点,返回符合条件的
                {
                    if (toponode.device is RailSwitch)
                    {
                        RailSwitch railSwitch = toponode.device as RailSwitch;
                        return(railSwitch.section.Name == balise.Substring(0, 5));
                    }
                    return(false);
                });
                if (node != null)
                {
                    return(node);
                }
            }
            return(null);
        }
示例#3
0
        public void AddObstacleCollection(List <ObstacleInfo> Obstacle, RailSwitch railSwitch)
        {
            ObstacleInfo railSwitchObstacle = new ObstacleInfo();

            railSwitchObstacle.NC_Obstacle    = 4;
            railSwitchObstacle.NID_Obstacle   = Convert.ToUInt16(railSwitch.ID);
            railSwitchObstacle.Q_Obstacle_Now = (railSwitch.IsPositionNormal == true ? Convert.ToByte(1) : Convert.ToByte(2));
            railSwitchObstacle.Q_Obstacle_CI  = railSwitchObstacle.Q_Obstacle_Now;
            Obstacle.Add(railSwitchObstacle);
        }
示例#4
0
 private void SetRailSwithPosition()
 {
     Num = 0;
     foreach (var item in InRailSwitchs)
     {
         RailSwitch rail = item as RailSwitch;
         rail.IsPositionNormal = Info[Num];
         Num++;
         rail.IsPositionReverse = Info[Num];
         Num++;
         UpdateDevice(item as RailSwitch);
     }
 }
示例#5
0
        private RailSwitch FindAnotherRailswitch(RailSwitch railswitch)
        {
            RailSwitch railNeedToChange = MainWindow.stationElements_.Elements.Find((GraphicElement element) =>
            {
                if (element is RailSwitch)
                {
                    if ((element as RailSwitch).SectionName == railswitch.SectionName && (element as RailSwitch).Name != railswitch.Name)
                    {
                        return(true);
                    }
                }
                return(false);
            }) as RailSwitch;

            return(railNeedToChange);
        }
示例#6
0
        private void HandlePosition(TrainDir trainDir, UInt32 offset, bool isOccupy, UInt16 trainID, Device device)
        {
            if (device is Section)
            {
                (device as Section).SetTrainOccupy(trainDir, offset, isOccupy, trainID);
                UpdateDevice(device);
            }
            else if (device is RailSwitch)
            {
                RailSwitch railswitch = device as RailSwitch;
                railswitch.SetTrainOccupy(trainID, isOccupy);
                UpdateDevice(device);

                RailSwitch railNeedToChange = FindAnotherRailswitch(railswitch);
                if (railNeedToChange != null)
                {
                    railNeedToChange.SetTrainOccupy(trainID, isOccupy);
                    UpdateDevice(railNeedToChange);
                }
            }
        }
示例#7
0
        private void HandlePosition(ushort trainID, Device device)
        {
            if (device is Section)
            {
                (device as Section).SetNonCommunicateTrain(trainID, true);
                UpdateDevice(device);
            }
            else if (device is RailSwitch)
            {
                RailSwitch railswitch = device as RailSwitch;
                railswitch.SetNonCommunicateTrain(trainID, true);
                UpdateDevice(device);

                RailSwitch railNeedToChange = FindAnotherRailswitch(railswitch);
                if (railNeedToChange != null)
                {
                    railNeedToChange.SetNonCommunicateTrain(trainID, true);
                    UpdateDevice(railNeedToChange);
                }
            }
        }
示例#8
0
        private static void HandlePosition(TrainInfo trainInfo, Device position)
        {
            if (position is Section)
            {
                Section section = position as Section;
                section.HasNonComTrain.Remove(trainInfo.NIDTrain);
                UpdateDevice(position);
            }
            else if (position is RailSwitch)
            {
                RailSwitch railSwitch = position as RailSwitch;
                railSwitch.HasNonComTrain.Remove(trainInfo.NIDTrain);
                UpdateDevice(position);

                RailSwitch railSwitchNeedToChange = FindAnotherRailswitch(railSwitch);
                if (railSwitchNeedToChange != null)
                {
                    railSwitchNeedToChange.HasNonComTrain.Remove(trainInfo.NIDTrain);
                    UpdateDevice(position);
                }
            }
        }
示例#9
0
        public string IDTypeConvertName(byte type, byte ID) //用type和id得到名字。当ZC发送MA的type和ID时可以用到。OK
        {
            if (type == 1)                                  //区段
            {
                Section section = getxml.data.Topo.Find((TopolotyNode toponode) =>
                {
                    if (toponode.device is Section)
                    {
                        if ((toponode.device as Section).Id == ID) //区段ID唯一
                        {
                            return(true);
                        }
                    }
                    return(false);
                }).device as Section;
                MAEndLink = section.Name;  // T0301
                return(MAEndLink);
            }

            else if (type == 2)  //道岔
            {
                RailSwitch railswitch = getxml.data.Topo.Find((TopolotyNode toponode) =>
                {
                    if (toponode.device is RailSwitch)
                    {
                        if ((toponode.device as RailSwitch).Id == ID) //type和id可以唯一确定道岔
                        {
                            return(true);
                        }
                    }
                    return(false);
                }).device as RailSwitch;
                MAEndLink = railswitch.section.Name;//W0414
                return(MAEndLink);
            }
            return(null);
        }
示例#10
0
        private void SetSectionARB(List <GraphicElement> Sections, List <GraphicElement> Switchs)
        {
            foreach (var item in Sections)
            {
                if (item is Section)
                {
                    CIPacket.SetBit(false);
                }
            }
            List <string> railswitchs = new List <string>();

            foreach (var item in Switchs)
            {
                if (item is RailSwitch)
                {
                    RailSwitch railswitch = item as RailSwitch;
                    if (!railswitchs.Contains(railswitch.SectionName))
                    {
                        CIPacket.SetBit(false);
                        railswitchs.Add(railswitch.SectionName);
                    }
                }
            }
        }
示例#11
0
        public void SetLogicState(List <线路绘图工具.GraphicElement> Sections, List <线路绘图工具.GraphicElement> Switchs)
        {
            foreach (var item in Sections)
            {
                if (item is Section)
                {
                    if ((item as Section).LogicCount == 1)
                    {
                        bool bitFront = (item as Section).IsFrontLogicOccupy.Count == 0 ? false : true;
                        CIPacket.SetBit(!bitFront);
                    }
                    else
                    {
                        bool bitFront = (item as Section).IsFrontLogicOccupy.Count == 0 ? false : true;
                        CIPacket.SetBit(!bitFront);
                        bool bitLast = (item as Section).IsLastLogicOccupy.Count == 0 ? false : true;
                        CIPacket.SetBit(!bitLast);
                    }
                }
            }
            List <string> railswitchs = new List <string>();

            foreach (var item in Switchs)
            {
                if (item is RailSwitch)
                {
                    RailSwitch railswitch = item as RailSwitch;
                    if (!railswitchs.Contains(railswitch.SectionName))
                    {
                        bool bit = (item as RailSwitch).TrainOccupy.Count != 0 ? false : true;
                        CIPacket.SetBit(bit);
                        railswitchs.Add(railswitch.SectionName);
                    }
                }
            }
        }
示例#12
0
        /// <summary>
        /// 将区段或道岔加到AdvanceRoute中
        /// </summary>
        /// <param 要处理的device="CurrentRoute"></param>
        /// <returns 如果遇到MA终点,返回true,否则返回false></returns>
        private bool AddToAdvanceRoute(Device device)
        {
            List <TopolotyNode> NextNodes = FindNextNode();

            if (device is Section)
            {
                Section inSection = device as Section;
                if (inSection.HasNonComTrain.Count != 0)
                {
                    DeletePreSection(inSection);
                    return(true);
                }
                else if (inSection.GetIsEB() || inSection.GetIsDoorOpen())
                {
                    return(true);
                }
                else if (inSection.AxleOccupy && device != trainInfo.HeadPosition && inSection.GetTrainOccupy() == TrainOccupy.NonOccupy)
                {
                    #region 适应时序前
                    //return true;
                    #endregion
                    #region 适应时序后
                    if (NextNodes.Contains(MainWindow.stationTopoloty_.Nodes.Find((TopolotyNode inputNode) => { return(inputNode.NodeDevice == inSection); })))
                    {
                        Add(inSection);
                    }
                    else
                    {
                        return(true);
                    }
                    #endregion
                }
                else if (inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.AllOccupy)
                {
                    return(true);
                }
                else if (trainInfo.TrainDirection == TrainDir.Right && inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.LeftOccupy)
                {
                    return(true);
                }
                else if (trainInfo.TrainDirection == TrainDir.Left && inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.RightOccupy)
                {
                    return(true);
                }
                else if (inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.NonOccupy)
                {
                    Add(device);
                }
                else
                {
                    Add(device);
                    return(true);
                }
            }
            else if (device is RailSwitch)
            {
                RailSwitch inRailSwitch = device as RailSwitch;
                if (inRailSwitch.HasNonComTrain.Count != 0)
                {
                    DeletePreSection(inRailSwitch);
                    return(true);
                }
                else if (inRailSwitch.AxleOccupy && inRailSwitch != trainInfo.HeadPosition)
                {
                    #region 适应时序前
                    //return true;
                    #endregion
                    #region 适应时序后
                    if (inRailSwitch.TrainOccupy.Count != 0)
                    {
                        return(true);
                    }
                    else
                    {
                        if (NextNodes.Contains(MainWindow.stationTopoloty_.Nodes.Find((TopolotyNode inputNode) => { return(inputNode.NodeDevice == inRailSwitch); })))
                        {
                            Add(inRailSwitch);
                        }
                        else
                        {
                            return(true);
                        }
                    }
                    #endregion
                }
                else if (inRailSwitch.GetTrainOccupy(trainInfo.NIDTrain))
                {
                    return(true);
                }
                else
                {
                    Add(device);
                }
            }
            return(false);
        }
示例#13
0
 private void ChangeRailSwitchOccupy(RailSwitch railSwitch, bool isOccupy)
 {
     railSwitch.SetTrainOccupy(CurrentTrain.NIDTrain, isOccupy);
     AddToDeviceNeedToChange(railSwitch);
 }