Пример #1
0
        /// <summary>
        /// Send the loc direction and F1-F4 of the given loc towards the railway.
        /// </summary>
        /// <return>True on success</return>
        public bool SendLocDirectionAndFunctions(ILocState loc)
        {
            log.Trace("SendLocDirectionAndFunctions: {0}", loc);
            var slot = RequestSlot(loc);

            if (slot == null)
            {
                log.Error("No slot available for {0}", loc);
                return(false);
            }

            // Send loc direction
            log.Trace("Send: LocoDirFuncRequest: slot={0}, direction={1}", slot.SlotNumber, loc.Direction.Requested);
            var forward = (loc.Direction.Requested == LocDirection.Forward);
            var f1      = loc.GetFunctionRequestedState(LocFunction.F1);
            var f2      = loc.GetFunctionRequestedState(LocFunction.F2);
            var f3      = loc.GetFunctionRequestedState(LocFunction.F3);
            var f4      = loc.GetFunctionRequestedState(LocFunction.F4);
            var dirMsg  = new LocoDirFuncRequest(slot.SlotNumber,
                                                 forward, loc.F0.Requested, f1, f2, f3, f4);

            dirMsg.Execute(lb);
            slot.Touch();
            return(true);
        }
Пример #2
0
        /// <summary>
        /// Send the speed and direction of the given loc towards the railway.
        /// </summary>
        protected override void OnSendLocSpeedAndDirection(ILocState loc)
        {
            Log.Trace("OnSendLocSpeedAndDirection: {0}", loc);
            try
            {
                var forward = (loc.Direction.Requested == LocDirection.Forward);
                var f1      = loc.GetFunctionRequestedState(LocFunction.F1);
                var f2      = loc.GetFunctionRequestedState(LocFunction.F2);
                var f3      = loc.GetFunctionRequestedState(LocFunction.F3);
                var f4      = loc.GetFunctionRequestedState(LocFunction.F4);
                client.LocCommand(loc.Address.ValueAsInt, loc.SpeedInSteps.Requested, forward, loc.F0.Requested, f1, f2, f3, f4);
                loc.Direction.Actual = loc.Direction.Requested;
                loc.Speed.Actual     = loc.Speed.Requested;
                loc.F0.Actual        = loc.F0.Requested;
                loc.SetFunctionActualState(LocFunction.F1, f1);
                loc.SetFunctionActualState(LocFunction.F2, f2);
                loc.SetFunctionActualState(LocFunction.F3, f3);
                loc.SetFunctionActualState(LocFunction.F4, f4);

                var f5 = loc.GetFunctionRequestedState(LocFunction.F5);
                var f6 = loc.GetFunctionRequestedState(LocFunction.F6);
                var f7 = loc.GetFunctionRequestedState(LocFunction.F7);
                var f8 = loc.GetFunctionRequestedState(LocFunction.F8);
                client.LocFunctions(loc.Address.ValueAsInt, f1, f2, f3, f4, f5, f6, f7, f8);
                loc.SetFunctionActualState(LocFunction.F1, f1);
                loc.SetFunctionActualState(LocFunction.F2, f2);
                loc.SetFunctionActualState(LocFunction.F3, f3);
                loc.SetFunctionActualState(LocFunction.F4, f4);
                loc.SetFunctionActualState(LocFunction.F5, f5);
                loc.SetFunctionActualState(LocFunction.F6, f6);
                loc.SetFunctionActualState(LocFunction.F7, f7);
                loc.SetFunctionActualState(LocFunction.F8, f8);

                var f9  = loc.GetFunctionRequestedState(LocFunction.F9);
                var f10 = loc.GetFunctionRequestedState(LocFunction.F10);
                var f11 = loc.GetFunctionRequestedState(LocFunction.F11);
                var f12 = loc.GetFunctionRequestedState(LocFunction.F12);
                var f13 = loc.GetFunctionRequestedState(LocFunction.F13);
                var f14 = loc.GetFunctionRequestedState(LocFunction.F14);
                var f15 = loc.GetFunctionRequestedState(LocFunction.F15);
                var f16 = loc.GetFunctionRequestedState(LocFunction.F16);
                client.LocFunctions2(loc.Address.ValueAsInt, f9, f10, f11, f12, f13, f14, f15, f16);
                loc.SetFunctionActualState(LocFunction.F9, f9);
                loc.SetFunctionActualState(LocFunction.F10, f10);
                loc.SetFunctionActualState(LocFunction.F11, f11);
                loc.SetFunctionActualState(LocFunction.F12, f12);
                loc.SetFunctionActualState(LocFunction.F13, f13);
                loc.SetFunctionActualState(LocFunction.F14, f14);
                loc.SetFunctionActualState(LocFunction.F15, f15);
                loc.SetFunctionActualState(LocFunction.F16, f16);
            }
            catch (Exception ex)
            {
                Log.Warn("Loc command failed: " + ex);
            }
        }