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));
            }
        }
Exemplo n.º 2
0
 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)
                             ));
 }
Exemplo n.º 3
0
 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();
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 7
0
 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();
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
    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);
    }
Exemplo n.º 12
0
#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;
    }
Exemplo n.º 13
0
 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();
     }
 }
Exemplo n.º 14
0
        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())
                });
            }
        }
Exemplo n.º 15
0
    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;
        }
    }
Exemplo n.º 16
0
        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();
            }
        }
Exemplo n.º 17
0
 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>();
     }
 }
Exemplo n.º 18
0
        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
        }
Exemplo n.º 19
0
        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;
                    }
                }
            }
        }
Exemplo n.º 20
0
        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>();
        }
Exemplo n.º 22
0
        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
        }
Exemplo n.º 23
0
        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);
        }
Exemplo n.º 24
0
 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));
 }
Exemplo n.º 25
0
        // 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
        }