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); } } } }
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); }
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); }
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); } }
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); }
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); } } }
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); } } }
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); } } }
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); }
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); } } } }
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); } } } }
/// <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); }
private void ChangeRailSwitchOccupy(RailSwitch railSwitch, bool isOccupy) { railSwitch.SetTrainOccupy(CurrentTrain.NIDTrain, isOccupy); AddToDeviceNeedToChange(railSwitch); }