示例#1
0
        /// <summary>
        /// There are 4 braking force levels
        /// These are communicated to the braking systems via pins 8-12 of GPIOC.
        /// --> Pin 8 on means minimum braking force
        /// --> Pin 12 on means maximum braking force
        /// Pins 8-11 are used to report the position of the braking lever.
        /// Pin 12 is used only for emergency braking.
        /// Outputs must be configured as push-pull.
        /// </summary>
        private void WriteOutput(lever_position lever_Position)
        {
            switch (lever_Position)
            {
            case lever_position.minimum_acceleration:
                this._variables.WritePinOutput(4);
                break;

            case lever_position.medium_acceleration:
                this._variables.WritePinOutput(5);
                break;

            case lever_position.maximum_acceleration:
                this._variables.WritePinOutput(6);
                break;

            case lever_position.no_acceleration:
                this._variables.WritePinOutput(7);
                break;

            case lever_position.minimum_braking:
                this._variables.WritePinOutput(8);
                break;

            case lever_position.medium_braking:
                this._variables.WritePinOutput(9);
                break;

            case lever_position.strong_braking:
                this._variables.WritePinOutput(10);
                break;
            }
        }
示例#2
0
        private void ReadInput(string value)
        {
            if (value[0] == '1')
            {
                CurrentState         = state.EMERGENCY;
                CurrentLeverPosition = lever_position.strong_braking;
                _is_emergency_ON     = true;
            }

            if (value[1] == '1')
            {
                CurrentState         = state.STOP;
                CurrentLeverPosition = lever_position.medium_braking;
                _is_stop_ON          = true;
            }

            if (value[2] == '1')
            {
                CurrentState         = state.NORMAL;
                CurrentLeverPosition = lever_position.strong_braking;
            }

            if (value[3] == '1')
            {
                CurrentState         = state.NORMAL;
                CurrentLeverPosition = lever_position.medium_braking;
            }

            if (value[4] == '1')
            {
                CurrentState         = state.NORMAL;
                CurrentLeverPosition = lever_position.minimum_braking;
            }

            if (value[5] == '1')
            {
                CurrentState         = state.NORMAL;
                CurrentLeverPosition = lever_position.no_acceleration;
            }

            if (value[6] == '1')
            {
                CurrentState         = state.NORMAL;
                CurrentLeverPosition = lever_position.minimum_acceleration;
            }

            if (value[7] == '1')
            {
                CurrentState         = state.NORMAL;
                CurrentLeverPosition = lever_position.medium_acceleration;
            }

            //if (value[8] == '1')
            //{
            //    CurrentState = state.NORMAL;
            //    CurrentLeverPosition = lever_position.maximum_acceleration;
            //}
        }
示例#3
0
        public void WriteInput(state state, lever_position lever_position)
        {
            switch (state)
            {
            case state.NORMAL:
                WritePinInput((int)lever_position);
                break;

            case state.EMERGENCY:
                WritePinInput(0);
                break;

            case state.STOP:
                WritePinInput(1);
                break;
            }
        }
示例#4
0
        // The thread procedure performs the task, such as formatting
        // and printing a document.
        public void Run()
        {
            try
            {
                Console.WriteLine("");
                Console.WriteLine("TrainController started");

                while (true)
                {
                    ReadInput(this._variables.GPIO_B);

                    PrintGPIOValues();

                    if (_is_emergency_ON)
                    {
                        CurrentState         = state.EMERGENCY;
                        CurrentLeverPosition = lever_position.strong_braking;
                        PrintMyStatus();
                        continue;
                    }

                    if (_is_stop_ON)
                    {
                        CurrentState         = state.STOP;
                        CurrentLeverPosition = lever_position.medium_braking;
                        ManageStopSignal();
                        PrintMyStatus();
                        continue;
                    }

                    switch (CurrentState)
                    {
                    case state.EMERGENCY:
                        this._is_emergency_ON = true;
                        WriteOutput(lever_position.strong_braking);
                        break;


                    case state.STOP:
                        this._is_stop_ON = true;
                        WriteOutput(lever_position.medium_braking);
                        break;


                    case state.NORMAL:
                        WriteOutput(CurrentLeverPosition);
                        break;
                    }


                    PrintMyStatus();

                    tic++;
                }
            }
            catch (Exception ex) {
                Console.WriteLine("");
                Console.WriteLine("TrainController Exception");
                Console.WriteLine(ex.Message);
            }
        }