static void Postfix(Coupler __instance, ref ConfigurableJoint __result) { instance = __instance; SoftJointLimit softJointLimit = new SoftJointLimit(); if (__instance.train.carType == TrainCarType.LocoSteamHeavy && __instance.coupledTo.train.carType == TrainCarType.Tender || __instance.train.carType == TrainCarType.Tender && __instance.coupledTo.train.carType == TrainCarType.LocoSteamHeavy) { instance.StartCoroutine(__instance.GetComponent <CouplerCustom>().ReduceLimit(0.03f, __result)); } else { instance.StartCoroutine(__instance.GetComponent <CouplerCustom>().ReduceLimit(0.25f, __result)); } __result.enableCollision = false; if (instance.train.carType != TrainCarType.Tender && instance.train.carType != TrainCarType.TenderBlue) { foreach (Transform child in __instance.train.transform) { if (child.gameObject.name == "[collision]") { child.gameObject.SetActive(false); } } instance.StartCoroutine(ResetCollisionState(__instance.train)); } }
private static void WriteCouplerNode(XElement parent, Coupler coupler) { parent.Add(new XElement("Coupler", new XElement("Min", coupler.Min), new XElement("Max", coupler.Max), new XElement("Object", coupler.Object) )); }
protected Coupler(SerializationInfo info, StreamingContext context) : base(info, context) { body = (Body)info.GetValue(KEY_BODY, typeof(Body)); isFront = info.GetBoolean(KEY_IS_FRONT); height = info.GetSingle(KEY_HEIGHT); length = info.GetSingle(KEY_LENGTH); connectingCoupler = (Coupler)info.GetValue(KEY_CONNECTING_COUPLER, typeof(Coupler)); localRot = ((SerializableQuaternion)info.GetValue(KEY_LOCAL_ROT, typeof(SerializableQuaternion))).toQuaternion(); }
bool IsCouplerInRange(float range) { Coupler lastCoupler = CouplerLogic.GetLastCoupler(this.RouteTracker.Trainset.firstCar.frontCoupler); Coupler lastCoupler2 = CouplerLogic.GetLastCoupler(this.RouteTracker.Trainset.lastCar.rearCoupler); Coupler firstCouplerInRange = lastCoupler.GetFirstCouplerInRange(range); Coupler firstCouplerInRange2 = lastCoupler2.GetFirstCouplerInRange(range); return(firstCouplerInRange != null || firstCouplerInRange2 != null); }
public static List <TrainCar> GetCarsCoupledTo(Coupler coupler) { List <TrainCar> trainCarList = new List <TrainCar>(); for (coupler = coupler.GetCoupled(); coupler != null; coupler = coupler.GetOppositeCoupler().GetCoupled()) { trainCarList.Add(coupler.train); } return(trainCarList); }
void ApplyTrainForce(float force, Coupler coupler) { var dir = 1f; if (coupler.train.frontCoupler.Equals(coupler)) { dir = -1f; } coupler.train.rb.AddForce(coupler.train.transform.forward * force * dir); }
public void Decouple() { if (other != null) { wagon.Train.SplitBetween(wagon, other.wagon); other.other = null; other.yawTransform.localRotation = other.restBackwards ? Quaternion.Euler(0, 180, 0) : Quaternion.identity; yawTransform.localRotation = restBackwards ? Quaternion.Euler(0, 180, 0) : Quaternion.identity; other = null; } }
void Awake() { coupler = GetComponent <Coupler>(); trainRigidbody = coupler.train.GetComponent <Rigidbody>(); isCouplerFront = coupler.train.frontCoupler.Equals(coupler); SetAnchor(); FindBuffers(); }
public void SimpleCoupling() { List <int> l1 = new List <int> { 1, 5, 7 }, l2 = new List <int> { 3, 6, 9 }; var cpls = new Coupler().Couple(l1, l2).ToList(); Assert.AreEqual(3, cpls.Count); }
public void Unbalanced() { List <int> l1 = new List <int> { 1, 60, 76 }, l2 = new List <int> { 3, 19, 22, 51, 56, 66, 67, 90 }; var cpls = new Coupler().Couple(l1, l2).ToList(); Assert.AreEqual(2, cpls.Count); Assert.AreEqual(1, cpls[0].Begin); Assert.AreEqual(66, cpls[1].End); }
public void Couple(Coupler other) { Decouple(); if (wagon.Placed == false || other.wagon.Placed == false) { return; } this.other = other; other.other = this; Train.Join(wagon, other.wagon); wagon.OnCoupled(other.wagon); other.wagon.OnCoupled(wagon); }
#pragma warning disable IDE0051 // Remove unused private members private void Awake() { Main.Log($"NetworkTrainCouplerSync.Awake()"); coupler = GetComponent <Coupler>(); Main.Log($"[{coupler.train.ID}-{(coupler.isFrontCoupler ? "Front" : "Back")}] NetworkTrainCouplerSync Awake called"); Main.Log($"[{coupler.train.ID}-{(coupler.isFrontCoupler ? "Front" : "Back")}] Listening to coupled event"); coupler.Coupled += CouplerCoupled; Main.Log($"[{coupler.train.ID}-{(coupler.isFrontCoupler ? "Front" : "Back")}] Listening to uncoupled event"); coupler.Uncoupled += CouplerUncoupled; Main.Log($"[{coupler.train.ID}-{(coupler.isFrontCoupler ? "Front" : "Back")}] Listening to hose connection changed event"); coupler.HoseConnectionChanged += CouplerHoseConChanged; Main.Log($"[{coupler.train.ID}-{(coupler.isFrontCoupler ? "Front" : "Back")}] Listening to c**k changed event"); coupler.CockChanged += CouplerCockChanged; }
internal static void Process(MainForm form) { mainForm = form; if (!System.IO.File.Exists(FileName)) { mainForm.updateLogBoxText += "INFO: No extensions.cfg file was detected- Generating default XML." + Environment.NewLine; //No extensions.cfg file exists, so just spin up a default XML file GenerateDefaultXML(); } else { mainForm.updateLogBoxText += "Loading existing extensions.cfg file " + ConvertExtensionsCfg.FileName + Environment.NewLine; CarInfos = new Car[ConvertTrainDat.NumberOfCars]; Couplers = new Coupler[ConvertTrainDat.NumberOfCars - 1]; ReadExtensionsCfg(); GenerateExtensionsCfgXML(); } }
public static void Initwago750494(Coupler wago, ISignalsFactory signals) { { W750493.Add(wago, 0, new List <ISignal> { signals.GetSignal(SensorName.Phase(1, SignalName.Voltage)) }); W750514.Add(wago, 518, new List <ISignal> { signals.GetSignal(SensorName.Relay(RelayName.Kv4)), // sound alarm signals.GetSignal(SensorName.Relay(RelayName.Kv11)), // pump on signals.GetSignal(SensorName.Relay(RelayName.Kv10)), // signals.GetSignal(SensorName.Relay(RelayName.Kv9)), // signals.GetSignal(SensorName.Relay(RelayName.RectifierReset)), // rectifier reset//null,//new Signal(SensorName.Relay(RelayName.Kv10)),//mode mix, signals.GetSignal(SensorName.Relay(RelayName.Kv1)), // rectifier active mode }); W7501405.Add(wago, 6, new List <ISignal> { signals.GetSignal(SensorName.Drive(SignalName.Forward)), // SignalType.Ushort), signals.GetSignal(SensorName.Drive(SignalName.Reverse)), // SignalType.Ushort), signals.GetSignal(SensorName.Cord(1)), //SignalType.Ushort), // F1 signals.GetSignal(SensorName.Cord(2)), //SignalType.Ushort), // F2 signals.GetSignal(SensorName.Cord(3)), //SignalType.Ushort), // F3 signals.GetSignal(SensorName.Cord(4)), //SignalType.Ushort), // F4 signals.GetSignal(SensorName.Cord(5)), //SignalType.Ushort), // F5 signals.GetSignal(SensorName.Cord(6)), //SignalType.Ushort), // F6 null, //new Signal(SensorName.Empty()), signals.GetSignal(SensorName.Relay(RelayName.Kv11, SignalName.Feedback)), //SignalType.Ushort),// K1 signals.GetSignal(SensorName.Relay(RelayName.Kv2, SignalName.Feedback)), //SignalType.Ushort),// K2 signals.GetSignal(SensorName.Relay(RelayName.Kv1, SignalName.Feedback)), //SignalType.Ushort),// K3 - signals.GetSignal(SensorName.Relay(RelayName.Kv9, SignalName.Feedback)), //SignalType.Ushort),// K4 //signals.GetSignal(SensorName.Relay(RelayName.Kv8, SignalName.Feedback)), //SignalType.Ushort),// K4 - signals.GetSignal(SensorName.Relay(RelayName.Kv10, SignalName.Feedback)), //SignalType.Ushort),// K5 - null, //signals.GetSignal(SensorName.Relay(RelayName.Kv10, SignalName.Feedback)), //SignalType.Ushort),// K6, now K4 null //new Signal(SensorName.Empty()) }); } }
public void PlaceCouplerButton() { foreach (var body in Main.selectingObjs.Where(obj => obj is Body).OfType <Body>().ToList()) { var c = new Coupler(Main.playingmap); c.body = body; Main.editingCoupler = c; c.generate(); Main.INSTANCE.couplerSettingPanel.isNew = true; Main.INSTANCE.couplerSettingPanel.show(true); Main.INSTANCE.couplerSettingPanel.transform.position = new Vector3( Mathf.Clamp(Input.mousePosition.x, 0, Screen.width - ((RectTransform)Main.INSTANCE.couplerSettingPanel.transform).rect .width), Mathf.Clamp(Input.mousePosition.y, ((RectTransform)Main.INSTANCE.couplerSettingPanel.transform).rect.height, Screen.height)); break; } }
private void FormClosed(MainWindow form) { if (!form.Result) { return; } var positions = form.Positions.OrderBy(p => p.Index).ToList(); Document doc = Globals.ThisAddIn.Application.ActiveDocument; try { doc.Application.UndoRecord.StartCustomRecord("Fixing citations"); Range litRange = doc.Application.Selection.Range; var lits = form.Positions.OrderBy(p => p.NewIndexValue).ToList(); litRange.Text = lits.Select(p => p.Ref).Aggregate((s1, s2) => string.Format("{0}\r{1}", s1, s2)); var template = doc.Application.ListGalleries[WdListGalleryType.wdNumberGallery].ListTemplates[1]; template.ListLevels[1].StartAt = lits[0].NewIndexValue; litRange.ListFormat.ApplyListTemplate(template); var lb = Counter.SymbolIndices(doc.Range(), "["); var rb = Counter.SymbolIndices(doc.Range(), "]"); var ranges = new Coupler().Couple(lb, rb).ToList(); var places = ranges .Select(r => Tuple.Create(r, doc.Range(r.Begin + 1, r.End))) .Select(t => new CitationPlace(t.Item1, t.Item2.Text)) .OrderByDescending(p => p.Loc.Begin).ToList(); foreach (var p in places) { var range = doc.Range(p.Loc.Begin + 1, p.Loc.End); range.Text = p.Format(i => positions[i].NewIndexValue); } } finally { doc.Application.UndoRecord.EndCustomRecord(); } }
private void FindComponents() { if (wheels == null || wheels.Length == 0) { wheels = transform.GetComponentsInChildren <WheelMarker>(); if (wheels.Length != 2) { Debug.LogError("Wagon " + name + " does not have 2 wheel sets!"); } else { wheelBase = Vector3.Distance(wheels[0].transform.position, wheels[1].transform.position); } couplers = transform.GetComponentsInChildren <Coupler>(); if (couplers.Length != 2) { Debug.LogErrorFormat("Wagon {0} has {1} couplers, must be 2!", name, couplers.Length); } else { var relPosZero = transform.InverseTransformPoint(couplers[0].transform.position); var relPosOne = transform.InverseTransformPoint(couplers[1].transform.position); bool zeroIsForward = relPosZero.z > relPosOne.z; if (zeroIsForward) { frontCoupler = couplers[0]; rearCoupler = couplers[1]; } else { frontCoupler = couplers[1]; rearCoupler = couplers[0]; } LoC = Vector3.Distance(frontCoupler.transform.position, rearCoupler.transform.position); } rigidbody = GetComponent <Rigidbody>(); } }
static void Main() { //var journal = new ConsoleJournal();//journalService.GetJournal(); //var journal = new SqLiteJournal {IsConsoleEnable = true};//journalService.GetJournal(); //var journal = new JournalClient("127.0.0.1"); //Console.OutputEncoding = System.Text.Encoding.GetEncoding(1251); //Console.OutputEncoding = System.Text.Encoding.GetEncoding("UTF-8"); //Console.OutputEncoding = System.Text.Encoding.GetEncoding(866); bool debug = false; bool oldPanel43 = false; var mJServer = new JournalService(true); mJServer.Start(); var journal = mJServer.GetJournal(); var mMsgLvlSys = MessageLevel.System; journal.Warning("Старт работы PCproc", mMsgLvlSys); var signals = new SignalsFactory(journal); ConfigureSignalFactory(signals); journal.Warning("Запуск и конфигурирование Фабрики сигналов", mMsgLvlSys); //ModBusWago(); var wago = new Coupler(journal, "192.168.1.111"); //if (CouplerConfigurator.W750493_flag == false) wago.SetBaseAddr(524); CouplerConfigurator.Init(wago, signals); journal.Warning("Инициализация Ваго", mMsgLvlSys); List <ITask> tasklets; //if (oldPanel43) { var local = new RemoteConsole(journal, signals, 5000); journal.Warning(" Подключение к порту журнала на 5000 ", mMsgLvlSys); tasklets = new List <ITask> { local, wago, signals }; //} else tasklets = new List<ITask> { wago, signals }; /* This code added to support Qt GUI version of 4.3 Panel*/ var qt = new qt(ref mJServer, ref signals, ref journal, true); qt.startLiterner(); /* This code added to support Qt GUI version of 4.3 Panel*/ try { //signals.GetSignal(SensorName.Keyboard()).OnChange += signal => Console.WriteLine("Keyboard: {0}", signal.Value); //signals.GetSignal(SensorName.Tank(SignalName.Level)).OnUpdate += signal => journal.Debug(string.Format("Level: {0}", signal.Value), MessageLevel.User); //signals.GetSignal("encoder.point").OnUpdate += signal => journal.Info(string.Format("Angle: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Tank(SignalName.Temperature)).OnChange += signal => Console.WriteLine("Temp: {0}", signal.Value); //signals.GetSignal(SensorName.Cabel(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Cabel: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Filter(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Filter: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Steering(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Steering: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Brake(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Brake: {0}", signal.Value), MessageLevel.User); //var pStatus = signals.GetSignal(SensorName.Derivative(SystemName.Pump, SignalName.Status)); //var uz2Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 2, SignalName.Status)); //var uz3Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 3, SignalName.Status)); //var uz4Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 4, SignalName.Status)); //var uz5Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 5, SignalName.Status)); //var cStatus = signals.GetSignal(SensorName.Derivative(SystemName.Conveyor, SignalName.Status)); //var code = 0; //cStatus.Update(code); //code++; // проверяем не включена ли сейчас станция //foilstationstate = checkValueAsBool(signals.GetSignal("relay.kv11.k1").Value); // подписываемся на событие ОС по маслостанции, чтобы ставить флаг ее работы (так быстрее, чем постоянно спрашивать сигнал) signals.GetSignal("relay.kv11.k1").OnChange += sensor => oilStationState(sensor); int MotoSeconds = 0; int OilSeconds = 0; //float TotalMotoHours = 0; float Moto = signals.GetSignal("system.settings.MotoHours").Value; float Oil = signals.GetSignal("system.settings.OilHours").Value; //float TotalMotoHours = signals.GetSignal("system.settings.TotalMotoHours").Value; using (new SystemContol(journal, signals)) { //signals.PrintInfo(); //отладка сигналов в процессоре foreach (var task in tasklets) { task.Start(); } while (true) { Thread.Sleep(5000); //проверка состояния насоса маслостанции //var signalPump = signals.GetSignal("derivative.pump.status").Value; //foilstationstate = true; if (foilstationstate) { //насос включен //Считаем секунды MotoSeconds += 5; if (MotoSeconds >= 60 * 15) //одна минута { MotoSeconds = 0; //сброс секунд Moto = signals.GetSignal("system.settings.MotoHours").Value; Moto += 0.25f; signals.Update("system.settings.MotoHours", Moto); } OilSeconds += 5; if (OilSeconds >= 60 * 15) //одна минута { OilSeconds = 0; //сброс секунд Oil = signals.GetSignal("system.settings.OilHours").Value; Oil += 0.25f; signals.Update("system.settings.OilHours", Oil); } //if (MotoHours >= 200) //Замена масла через 200 М.ч. } } } } catch (Exception ex) { journal.Fatal(ex.ToString(), MessageLevel.System); } #region stop tasks tasklets.Reverse(); foreach (var task in tasklets) { task.Stop(); } #endregion }
internal static void ReadExtensionsCfg() { string[] Lines = System.IO.File.ReadAllLines(FileName, System.Text.Encoding.Default); for (int i = 0; i < Lines.Length; i++) { int j = Lines[i].IndexOf(';'); if (j >= 0) { Lines[i] = Lines[i].Substring(0, j).Trim(new char[] { }); } else { Lines[i] = Lines[i].Trim(new char[] { }); } } for (int i = 0; i < Lines.Length; i++) { if (Lines[i].Length != 0) { switch (Lines[i].ToLowerInvariant()) { case "[exterior]": // exterior i++; while (i < Lines.Length && !Lines[i].StartsWith("[", StringComparison.Ordinal) & !Lines[i].EndsWith("]", StringComparison.Ordinal)) { if (Lines[i].Length != 0) { int j = Lines[i].IndexOf("=", StringComparison.Ordinal); if (j >= 0) { string a = Lines[i].Substring(0, j).TrimEnd(new char[] { }); string b = Lines[i].Substring(j + 1).TrimStart(new char[] { }); int n; if (int.TryParse(a, System.Globalization.NumberStyles.Integer, Culture, out n)) { if (n >= 0 & n < ConvertTrainDat.NumberOfCars) { if (!String.IsNullOrEmpty(b) && !Path.ContainsInvalidChars(b)) { string File = OpenBveApi.Path.CombineFile(System.IO.Path.GetDirectoryName(FileName), b); if (System.IO.File.Exists(File)) { CarInfos[n].Object = b; } } } } } } i++; } i--; break; default: if (Lines[i].StartsWith("[car", StringComparison.OrdinalIgnoreCase) & Lines[i].EndsWith("]", StringComparison.Ordinal)) { // car string t = Lines[i].Substring(4, Lines[i].Length - 5); int n; if (int.TryParse(t, System.Globalization.NumberStyles.Integer, Culture, out n)) { if (n >= 0 & n < ConvertTrainDat.NumberOfCars) { i++; while (i < Lines.Length && !Lines[i].StartsWith("[", StringComparison.Ordinal) & !Lines[i].EndsWith("]", StringComparison.Ordinal)) { if (Lines[i].Length != 0) { int j = Lines[i].IndexOf("=", StringComparison.Ordinal); if (j >= 0) { string a = Lines[i].Substring(0, j).TrimEnd(new char[] { }); string b = Lines[i].Substring(j + 1).TrimStart(new char[] { }); switch (a.ToLowerInvariant()) { case "object": if (!String.IsNullOrEmpty(b) && !Path.ContainsInvalidChars(b)) { string File = OpenBveApi.Path.CombineFile(System.IO.Path.GetDirectoryName(FileName), b); if (System.IO.File.Exists(File)) { CarInfos[n].Object = b; } } break; case "length": { double m; if (double.TryParse(b, System.Globalization.NumberStyles.Float, Culture, out m)) { if (m > 0.0) { CarInfos[n].Length = m; } } } break; case "axles": int k = b.IndexOf(','); if (k >= 0) { string c = b.Substring(0, k).TrimEnd(new char[] { }); string d = b.Substring(k + 1).TrimStart(new char[] { }); double rear, front; if (double.TryParse(c, System.Globalization.NumberStyles.Float, Culture, out rear) && double.TryParse(d, System.Globalization.NumberStyles.Float, Culture, out front)) { CarInfos[n].RearAxle = rear; CarInfos[n].FrontAxle = front; CarInfos[n].AxlesDefined = true; } } break; case "reversed": CarInfos[n].Reversed = b.Equals("true", StringComparison.OrdinalIgnoreCase); break; case "loadingsway": CarInfos[n].LoadingSway = b.Equals("true", StringComparison.OrdinalIgnoreCase); break; } } } i++; } i--; } } } else if (Lines[i].StartsWith("[coupler", StringComparison.OrdinalIgnoreCase) & Lines[i].EndsWith("]", StringComparison.Ordinal)) { // coupler string t = Lines[i].Substring(8, Lines[i].Length - 9); int n; if (int.TryParse(t, System.Globalization.NumberStyles.Integer, Culture, out n)) { if (n >= 0 & n < Couplers.Length) { i++; while (i < Lines.Length && !Lines[i].StartsWith("[", StringComparison.Ordinal) & !Lines[i].EndsWith("]", StringComparison.Ordinal)) { if (Lines[i].Length != 0) { int j = Lines[i].IndexOf("=", StringComparison.Ordinal); if (j >= 0) { string a = Lines[i].Substring(0, j).TrimEnd(new char[] { }); string b = Lines[i].Substring(j + 1).TrimStart(new char[] { }); switch (a.ToLowerInvariant()) { case "distances": { int k = b.IndexOf(','); if (k >= 0) { string c = b.Substring(0, k).TrimEnd(new char[] { }); string d = b.Substring(k + 1).TrimStart(new char[] { }); double min, max; if (!double.TryParse(c, System.Globalization.NumberStyles.Float, Culture, out min)) { } else if (!double.TryParse(d, System.Globalization.NumberStyles.Float, Culture, out max)) { } else { Couplers[n] = new Coupler { Min = min, Max = max }; } } } break; } } } i++; } i--; } } } else if (Lines[i].StartsWith("[bogie", StringComparison.OrdinalIgnoreCase) & Lines[i].EndsWith("]", StringComparison.Ordinal)) { // car string t = Lines[i].Substring(6, Lines[i].Length - 7); int n; if (int.TryParse(t, System.Globalization.NumberStyles.Integer, Culture, out n)) { //Assuming that there are two bogies per car bool IsOdd = (n % 2 != 0); int CarIndex = n / 2; if (n >= 0 & n < ConvertTrainDat.NumberOfCars * 2) { i++; while (i < Lines.Length && !Lines[i].StartsWith("[", StringComparison.Ordinal) & !Lines[i].EndsWith("]", StringComparison.Ordinal)) { if (Lines[i].Length != 0) { int j = Lines[i].IndexOf("=", StringComparison.Ordinal); if (j >= 0) { string a = Lines[i].Substring(0, j).TrimEnd(new char[] { }); string b = Lines[i].Substring(j + 1).TrimStart(new char[] { }); switch (a.ToLowerInvariant()) { case "object": if (!String.IsNullOrEmpty(b) && !Path.ContainsInvalidChars(b)) { string File = OpenBveApi.Path.CombineFile(System.IO.Path.GetDirectoryName(FileName), b); if (System.IO.File.Exists(File)) { if (IsOdd) { CarInfos[CarIndex].RearBogie.Object = b; } else { CarInfos[CarIndex].FrontBogie.Object = b; } } } break; case "axles": int k = b.IndexOf(','); if (k >= 0) { string c = b.Substring(0, k).TrimEnd(new char[] { }); string d = b.Substring(k + 1).TrimStart(new char[] { }); double rear, front; if (double.TryParse(c, System.Globalization.NumberStyles.Float, Culture, out rear) && double.TryParse(d, System.Globalization.NumberStyles.Float, Culture, out front)) { if (IsOdd) { CarInfos[CarIndex].RearBogie.RearAxle = rear; CarInfos[CarIndex].RearBogie.FrontAxle = front; CarInfos[CarIndex].RearBogie.AxlesDefined = true; } else { CarInfos[CarIndex].FrontBogie.RearAxle = rear; CarInfos[CarIndex].FrontBogie.FrontAxle = front; CarInfos[CarIndex].FrontBogie.AxlesDefined = true; } } } break; case "reversed": if (IsOdd) { CarInfos[CarIndex].FrontBogie.Reversed = b.Equals("true", StringComparison.OrdinalIgnoreCase); } else { CarInfos[CarIndex].RearBogie.Reversed = b.Equals("true", StringComparison.OrdinalIgnoreCase); } break; } } } i++; } i--; } } } break; } } } }
private static bool Prefix(HoseSeparationChecker __instance, List <HoseSeparationChecker.BrakeHoseCheckPair> ___brakeHosesToCheck, List <HoseSeparationChecker.MUCableCheckPair> ___muCablesToCheck) { if (NetworkManager.IsClient()) { if (Trainset.allSets.Count == 0 || Brakeset.allSets.Count == 0) { return(false); } for (int i = ___brakeHosesToCheck.Count - 1; i >= 0; i--) { HoseSeparationChecker.BrakeHoseCheckPair brakeHoseCheckPair = ___brakeHosesToCheck[i]; BrakeSystem parentSystem = brakeHoseCheckPair.a.parentSystem; BrakeSystem parentSystem2 = brakeHoseCheckPair.b.parentSystem; if (parentSystem == null || parentSystem2 == null) { ___brakeHosesToCheck.RemoveAt(i); } else { TrainCar component = parentSystem.GetComponent <TrainCar>(); TrainCar component2 = parentSystem2.GetComponent <TrainCar>(); if (!component.GetComponent <NetworkTrainPosSync>().hasLocalPlayerAuthority&& !component2.GetComponent <NetworkTrainPosSync>().hasLocalPlayerAuthority) { continue; } Coupler coupler = brakeHoseCheckPair.a.isFront ? component.frontCoupler : component.rearCoupler; Coupler c = brakeHoseCheckPair.b.isFront ? component2.frontCoupler : component2.rearCoupler; CouplingHoseRig rig = CouplingHoseRig.GetRig(coupler); CouplingHoseRig rig2 = CouplingHoseRig.GetRig(c); if (rig && rig2 && Vector3.SqrMagnitude(rig.ropeAnchor.position - rig2.ropeAnchor.position) > 1.9599999f) { Debug.Log("Breaking hose connection due to separation", __instance); coupler.DisconnectAirHose(true); } } } for (int j = ___muCablesToCheck.Count - 1; j >= 0; j--) { HoseSeparationChecker.MUCableCheckPair mucableCheckPair = ___muCablesToCheck[j]; MultipleUnitModule muModule = mucableCheckPair.a.muModule; MultipleUnitModule muModule2 = mucableCheckPair.b.muModule; if (muModule == null || muModule2 == null) { Debug.LogError(string.Format("Encountered null for {0} a: {1} b: {2}, removing pair", "MultipleUnitModule", muModule == null, muModule2 == null)); ___muCablesToCheck.RemoveAt(j); } else { if (!muModule.GetComponent <NetworkTrainPosSync>().hasLocalPlayerAuthority&& !muModule2.GetComponent <NetworkTrainPosSync>().hasLocalPlayerAuthority) { continue; } CouplingHoseMultipleUnitAdapter hoseAdapter = mucableCheckPair.a.HoseAdapter; CouplingHoseRig couplingHoseRig = (hoseAdapter != null) ? hoseAdapter.rig : null; CouplingHoseMultipleUnitAdapter hoseAdapter2 = mucableCheckPair.b.HoseAdapter; CouplingHoseRig couplingHoseRig2 = (hoseAdapter2 != null) ? hoseAdapter2.rig : null; if (couplingHoseRig && couplingHoseRig2 && Vector3.SqrMagnitude(couplingHoseRig.ropeAnchor.position - couplingHoseRig2.ropeAnchor.position) > 1.9599999f) { Debug.Log("Breaking MU hose connection due to separation", __instance); mucableCheckPair.a.Disconnect(true); } } } return(false); } return(true); }
static void Postfix(Coupler __instance) { var position = __instance.transform.localPosition; float coef = 0.37f; if (__instance.train.carType == TrainCarType.LocoShunter) { coef = 0.3f; } if ((__instance.train.carType == TrainCarType.LocoSteamHeavy || __instance.train.carType == TrainCarType.LocoSteamHeavyBlue) && __instance.train.rearCoupler.Equals(__instance)) { coef -= 0.8f; } if ((__instance.train.carType == TrainCarType.Tender || __instance.train.carType == TrainCarType.TenderBlue) && __instance.train.frontCoupler.Equals(__instance)) { coef -= 0.7f; } if ((__instance.train.carType == TrainCarType.Tender || __instance.train.carType == TrainCarType.TenderBlue) && __instance.train.rearCoupler.Equals(__instance)) { coef = 0.2f; } if (__instance.train.carType == TrainCarType.RefrigeratorWhite) { coef = 0.4f; } if (__instance.train.carType == TrainCarType.BoxcarBrown || __instance.train.carType == TrainCarType.BoxcarGreen || __instance.train.carType == TrainCarType.BoxcarPink || __instance.train.carType == TrainCarType.BoxcarRed) { coef = 0.4f; } if (__instance.train.carType == TrainCarType.PassengerBlue || __instance.train.carType == TrainCarType.PassengerGreen) { coef = 0.4f; } if (__instance.train.carType == TrainCarType.PassengerRed) { coef = 0.42f; } if (__instance.train.frontCoupler.Equals(__instance)) { position.z -= coef; } else { position.z += coef; } __instance.transform.localPosition = position; __instance.gameObject.AddComponent <CouplerCustom>(); }
static void Main() { //ConfiguratorTest(); log4net.Config.XmlConfigurator.Configure(); var journal = new Journal(LogManager.GetLogger("logger")); var signals = new SignalsFactory(journal); var wago = new Coupler(journal, signals, "192.168.1.111"); CouplerConfigurator.Init(wago); var local = new RemoteConsole(journal, signals, 5000); //var invertors = new InvertorsService(journal, signals, "COM7"); //var invertors = new InvertorsService(journal, signals, "/dev/ttySP1"); signals.PrintInfo(); #region start //var tasklets = new List<ITask> { invertors, local, wago, signals }; var tasklets = new List <ITask> { local, wago, signals }; foreach (var task in tasklets) { task.Start(); } #endregion #region test & dump { Thread.Sleep(500); //TestRelay(signals); TestKeyboard(signals); //signals.SensorInfo(); //signals.OutputInfo(); } #endregion while (true) { Thread.Sleep(100); } //using (new SystemContol(journal, invertors, signals)) { //Console.WriteLine("press Enter to stop"); //Console.ReadLine(); while (true) { Thread.Sleep(100); } } #region stop tasks tasklets.Reverse(); foreach (var task in tasklets) { task.Stop(); } #endregion }
internal CouplerViewModel(Coupler coupler) { CultureInfo culture = CultureInfo.InvariantCulture; Model = coupler; Min = coupler .ToReactivePropertyAsSynchronized( x => x.Min, x => x.ToString(culture), x => double.Parse(x, NumberStyles.Float, culture), ignoreValidationErrorValue: true ) .AddTo(disposable); Max = coupler .ToReactivePropertyAsSynchronized( x => x.Max, x => x.ToString(culture), x => double.Parse(x, NumberStyles.Float, culture), ignoreValidationErrorValue: true ) .AddTo(disposable); Object = coupler .ToReactivePropertyAsSynchronized(x => x.Object) .AddTo(disposable); Min.SetValidateNotifyError(x => { double min; string message; if (Utilities.TryParse(x, NumberRange.Any, out min, out message)) { double max; if (Utilities.TryParse(Max.Value, NumberRange.Any, out max) && min > max) { message = "MaxはMin以上でなければなりません。"; } } return(message); }) .Subscribe(_ => Max.ForceValidate()) .AddTo(disposable); Min.ObserveHasErrors .ToReadOnlyReactivePropertySlim(mode: ReactivePropertyMode.DistinctUntilChanged) .Where(x => !x) .Subscribe(_ => Min.ForceNotify()) .AddTo(disposable); Max.SetValidateNotifyError(x => { double max; string message; if (Utilities.TryParse(x, NumberRange.Any, out max, out message)) { double min; if (Utilities.TryParse(Min.Value, NumberRange.Any, out min) && max < min) { message = "MaxはMin以上でなければなりません。"; } } return(message); }) .Subscribe(_ => Min.ForceValidate()) .AddTo(disposable); Max.ObserveHasErrors .ToReadOnlyReactivePropertySlim(mode: ReactivePropertyMode.DistinctUntilChanged) .Where(x => !x) .Subscribe(_ => Max.ForceNotify()) .AddTo(disposable); }
private static void WriteCouplerNode(string fileName, StringBuilder builder, int couplerIndex, Coupler coupler) { builder.AppendLine($"[Coupler{couplerIndex.ToString(CultureInfo.InvariantCulture)}]"); WriteKey(builder, "Distances", coupler.Min, coupler.Max); WriteKey(builder, "Object", Utilities.MakeRelativePath(fileName, coupler.Object)); }
// wago - 192.168.1.111 // gate - 192.168.1.121 // 4.3" - 192.168.1.122 // 10" - 192.168.1.131 // stm32 - 192.168.1.141 // wago test modules static void Main() { //var journal = new ConsoleJournal();//journalService.GetJournal(); //var journal = new SqLiteJournal {IsConsoleEnable = true};//journalService.GetJournal(); //var journal = new JournalClient("127.0.0.1"); //Console.OutputEncoding = System.Text.Encoding.GetEncoding(1251); //Console.OutputEncoding = System.Text.Encoding.GetEncoding("UTF-8"); //Console.OutputEncoding = System.Text.Encoding.GetEncoding(866); bool debug = false; bool oldPanel43 = false; var mJServer = new JournalService(true); mJServer.Start(); var journal = mJServer.GetJournal(); var mMsgLvlSys = MessageLevel.System; journal.Warning("Старт работы PCproc", mMsgLvlSys); var signals = new SignalsFactory(journal); ConfigureSignalFactory(signals); journal.Warning("Запуск и конфигурирование Фабрики сигналов", mMsgLvlSys); //ModBusWago(); var wago = new Coupler(journal, "192.168.1.111"); //if (CouplerConfigurator.W750493_flag == false) wago.SetBaseAddr(524); CouplerConfigurator.Init(wago, signals); journal.Warning("Инициализация Ваго", mMsgLvlSys); List <ITask> tasklets; //if (oldPanel43) { var local = new RemoteConsole(journal, signals, 5000); journal.Warning(" Подключение к порту журнала на 5000 ", mMsgLvlSys); tasklets = new List <ITask> { local, wago, signals }; //} else tasklets = new List<ITask> { wago, signals }; /* This code added to support Qt GUI version of 4.3 Panel*/ var qt = new qt(ref mJServer, ref signals, ref journal, true); qt.startLiterner(); /* This code added to support Qt GUI version of 4.3 Panel*/ try { //signals.GetSignal(SensorName.Keyboard()).OnChange += signal => Console.WriteLine("Keyboard: {0}", signal.Value); //signals.GetSignal(SensorName.Tank(SignalName.Level)).OnUpdate += signal => journal.Debug(string.Format("Level: {0}", signal.Value), MessageLevel.User); //signals.GetSignal("encoder.point").OnUpdate += signal => journal.Info(string.Format("Angle: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Tank(SignalName.Temperature)).OnChange += signal => Console.WriteLine("Temp: {0}", signal.Value); //signals.GetSignal(SensorName.Cabel(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Cabel: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Filter(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Filter: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Steering(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Steering: {0}", signal.Value), MessageLevel.User); //signals.GetSignal(SensorName.Brake(SignalName.Pressure)).OnUpdate += signal => journal.Debug(string.Format("Brake: {0}", signal.Value), MessageLevel.User); //var pStatus = signals.GetSignal(SensorName.Derivative(SystemName.Pump, SignalName.Status)); //var uz2Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 2, SignalName.Status)); //var uz3Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 3, SignalName.Status)); //var uz4Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 4, SignalName.Status)); //var uz5Status = signals.GetSignal(SensorName.Derivative(SystemName.Uz, 5, SignalName.Status)); //var cStatus = signals.GetSignal(SensorName.Derivative(SystemName.Conveyor, SignalName.Status)); //var code = 0; //cStatus.Update(code); //code++; //if (code > 2) // code = 0; int first_cycle = 0; int show_delay = 0; int MotoSeconds = 0; int MotoMinutes = 0; int MotoDays = 0; //float TotalMotoHours = 0; float MotoHours = signals.GetSignal("system.settings.MotoHours").Value; //float TotalMotoHours = signals.GetSignal("system.settings.TotalMotoHours").Value; using (new SystemContol(journal, signals)) { //signals.PrintInfo(); //отладка сигналов в процессоре foreach (var task in tasklets) { task.Start(); } while (true) { Thread.Sleep(1000); //проверка состояния насоса маслостанции var signalPump = signals.GetSignal("derivative.pump.status").Value; if (debug) { if (signalPump == 0) { Console.WriteLine("Pump stopped: " + signalPump); } } //debug signalPump=1 signalPump = 1; //Debug 1sec = 1min MotoMinutes = MotoSeconds; if (signalPump == 1) { //насос включен if (debug) { Console.WriteLine("Pump started: " + signalPump); } //первый проход забрали из базы и прибавили к текущему время if (debug) { Console.WriteLine(">>>>>> Moto hours from DB: " + MotoHours); } //first_cycle = 1; //if (first_cycle == 1) MotoHours = MotoHours + MotoSeconds / 120; //Считаем секунды MotoSeconds++; if (MotoSeconds == 60) //одна минута { MotoSeconds = 0; //сброс секунд MotoMinutes = MotoMinutes + 1; } if (debug) { Console.WriteLine("Moto seconds: " + MotoSeconds); Console.WriteLine("Moto Minutes: " + MotoMinutes); } //Считаем минуты if (MotoMinutes == 60) { //Сброс минут по накоплении одного часа MotoMinutes = 0; //Cчитаем часы MotoHours = MotoHours + 1; //MotoHours = MotoHours + 100; if (debug) { Console.WriteLine("Moto seconds: " + MotoSeconds); Console.WriteLine("Moto Minutes: " + MotoMinutes); Console.WriteLine(">>>>>> Moto hours now: " + MotoHours); } signals.Update("system.settings.MotoHours", MotoHours); } //Защита от переполнения счетчика if (MotoHours >= 250000) // Т.е. 250 000 часов это 28 лет { MotoHours = 0; if (debug) { Console.WriteLine(">>>>>> Moto hours now: " + MotoHours); } } //if (MotoHours >= 200) //Замена масла через 200 М.ч. } show_delay++; if (show_delay == 3) { // signals.PrintInfo(); //отладка сигналов в процессоре //signals.WriteInfo(@"/mnt/sdcard/failsignals.raw"); //отладка сигналов в процессоре rwfs директория для перезаписи show_delay = 0; //сброс таймера задержки //Учет входа в меню сервисантов и инжинеров } } } } catch (Exception ex) { journal.Fatal(ex.ToString(), MessageLevel.System); } #region stop tasks tasklets.Reverse(); foreach (var task in tasklets) { task.Stop(); } #endregion }