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); } }
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)); }