示例#1
0
        public SystemContol(IJournal journal, ISignalsFactory signals, bool isdebug = false)
        {
            debug    = isdebug;
            mJournal = journal;

            mSystemCode        = signals.GetSignal("derivative.system.code");
            mBlockedByPassword = signals.GetSignal("derivative.system.authorize");
            if (debug)
            {
                mBlockedByPassword.OnChange += signal => Console.WriteLine("derivative.system.authorize: {0}", signal.ValueAsInt);
                mSystemCode.OnChange        += signal => Console.WriteLine("system.code: {0}", signal.ValueAsInt);
            }


            SetState(SystemState.Init, SystemStateCodes.State.Initialization);

            Pedals.Init(signals);
            SoundAlarm.Init(mJournal, signals);

            Pump.Init(mJournal, signals);
            Pump.OnError += code =>
            {
                // TODO: отверить процедуру отключения по ошибке насоса (в теории, выключается все сразу)
                mJournal.Error(string.Format("Защита по маслостанции: {0}", mState), MessageLevel.System);
                SetState(SystemState.Failure, code);

                Engine.SetMode(EngineMode.Deactivate);
                Pump.Stop();
            };

            Pump.OnWarning += code => SetState(mState, code);

            switch (Environment.OSVersion.Platform)
            {
            case PlatformID.Unix:
                Engine.Init(journal, signals, "/dev/ttySP0", 19200);
                break;

            default:
                Engine.Init(journal, signals, "COM1", 19200);
                break;
            }

            //Engine.Init(journal, signals, "/dev/ttySP1", 38400); // last worked
            //Engine.Init(journal, signals, "/dev/ttySP1", 57600);
            //Engine.Init(journal, signals, "COM38", 38400);

            // ошибки частотников, ошибки кордов, ошибки реле kv1, kv8, kv8
            Engine.OnError += code =>
            {
                mJournal.Error(string.Format("Защита по частотникам, кордам, реле: {0}", mState), MessageLevel.System);
                SetState(SystemState.Failure, code);
                Engine.SetMode(EngineMode.Deactivate);
            };

            Pump.OnStop += signal => Engine.SetMode(EngineMode.Deactivate);

            KeyboardInit();

            mThread = new Thread(Update);
            mThread.Start();
        }
示例#2
0
        private void KeyboardInit()
        {
            var pressLockTime = DateTime.MaxValue;

            Keyboard.OnPress += code =>
            {
                switch (code)
                {
                    #region lock & fault reset
                case KeyboardCode.Reserved:
                {
                    switch (mState)
                    {
                    case SystemState.Init:
                    case SystemState.Ready:
                    case SystemState.Failure:
                    {
                        mJournal.Debug(string.Format("Сброс системы: {0}", mState), MessageLevel.System);
                        Pump.ResetFault();
                        Engine.ResetFault();
                        SetState(SystemState.Init, SystemStateCodes.State.Initialization);
                    }
                    break;
                    }
                }
                break;

                //now this button is reset
                case KeyboardCode.UserLock:
                {
                    //pressLockTime = DateTime.Now;
                    switch (mState)
                    {
                    case SystemState.Init:
                    case SystemState.Ready:
                    case SystemState.Failure:
                    {
                        mJournal.Debug(string.Format("Сброс системы: {0}", mState), MessageLevel.System);
                        Pump.ResetFault();
                        Engine.ResetFault();
                        SetState(SystemState.Init, SystemStateCodes.State.Initialization);
                    }
                    break;
                    }
                }
                break;
                    #endregion

                    #region engine
                // now is speed 4 button
                case KeyboardCode.SpeedUp:
                {
                    /*switch (mState)
                     * {
                     *  //case SystemState.Init:
                     *  case SystemState.Ready:
                     *  case SystemState.Active:
                     *      Engine.SpeedUp(EngineMode.Motion);
                     *      break;
                     * }
                     */
                    switch (mState)
                    {
                    // можем запускать только из состояния, когда включен только насос
                    case SystemState.Ready:
                    {
                        Engine.SetMode(EngineMode.Motion);

                        // если нет блокировок на запуск, то mIsActionBlock == false
                        if (!mIsActionBlock)
                        {
                            SetState(SystemState.Active, SystemStateCodes.State.MotionMode);
                        }

                        Engine.Speed4(EngineMode.Motion);
                    }

                    break;
                    }
                }
                break;

                // now this is speed 2 button
                case KeyboardCode.SpeedDown:
                {
                    /*
                     * switch (mState)
                     * {
                     *
                     *  //case SystemState.Init:
                     *  case SystemState.Ready:
                     *  case SystemState.Active:
                     *      Engine.SpeedDown(EngineMode.Motion);
                     *      break;
                     *
                     * }
                     */
                    switch (mState)
                    {
                    // можем запускать только из состояния, когда включен только насос
                    case SystemState.Ready:
                    {
                        Engine.SetMode(EngineMode.Motion);

                        // если нет блокировок на запуск, то mIsActionBlock == false
                        if (!mIsActionBlock)
                        {
                            SetState(SystemState.Active, SystemStateCodes.State.MotionMode);
                        }

                        Engine.Speed2(EngineMode.Motion);
                    }

                    break;
                    }
                }
                break;

                //now is speed 3 button
                case KeyboardCode.MotionStart:
                {
                    switch (mState)
                    {
                    // можем запускать только из состояния, когда включен только насос
                    case SystemState.Ready:
                    {
                        Engine.SetMode(EngineMode.Motion);

                        // если нет блокировок на запуск, то mIsActionBlock == false
                        if (!mIsActionBlock)
                        {
                            SetState(SystemState.Active, SystemStateCodes.State.MotionMode);
                        }

                        Engine.Speed3(EngineMode.Motion);
                    }

                    break;
                    }
                }
                break;

                // now is speed1 button
                case KeyboardCode.MotionStop:
                {
                    switch (mState)
                    {
                    // можем запускать только из состояния, когда включен только насос
                    case SystemState.Ready:
                    {
                        Engine.SetMode(EngineMode.Motion);

                        // если нет блокировок на запуск, то mIsActionBlock == false
                        if (!mIsActionBlock)
                        {
                            SetState(SystemState.Active, SystemStateCodes.State.MotionMode);
                        }

                        Engine.Speed1(EngineMode.Motion);
                    }

                    break;
                    }
                }
                break;
                    #endregion

                    #region conveyor

                case KeyboardCode.ConveyorUp:
                {
                    switch (mState)
                    {
                    case SystemState.Init:
                    case SystemState.Ready:
                    case SystemState.Active:
                        Engine.ConveyorSpeed2();
                        Engine.ConveyorOn(1);
                        //Engine.SpeedUp(EngineMode.Conveyor);
                        break;
                    }
                }
                break;

                case KeyboardCode.ConveyorDown:
                {
                    switch (mState)
                    {
                    case SystemState.Init:
                    case SystemState.Ready:
                    case SystemState.Active:
                        Engine.ConveyorOn(0);
                        Engine.ConveyorSpeed1();
                        //Engine.SpeedDown(EngineMode.Conveyor);
                        break;
                    }
                }
                break;

                case KeyboardCode.ConveyorStart:
                {
                    if (mState != SystemState.Failure)
                    {
                        Engine.ConveyorOn(0);
                    }

                    /*
                     * switch (mState)
                     * {
                     *  // можем запускать только из состояния, когда включен только насос
                     *  case SystemState.Ready:
                     *      {
                     *          Engine.SetMode(EngineMode.Conveyor);
                     *
                     *          // если нет блокировок на запуск, то mIsActionBlock == false
                     *          if (!mIsActionBlock)
                     *              SetState(SystemState.Active, SystemStateCodes.State.ConveyorMode);
                     *      }
                     *
                     *      break;
                     * }
                     */
                }
                break;

                case KeyboardCode.ConveyorStop:
                {
                    Engine.ConveyorOff();

                    /*
                     *  if(Engine.Mode == EngineMode.Conveyor)
                     *  switch (mState)
                     *  {
                     *      case SystemState.Active:
                     *          Engine.SetMode(EngineMode.Deactivate);
                     *          SetState(SystemState.Ready, SystemStateCodes.State.ReadyToUse);
                     *          break;
                     *  }
                     */
                }
                break;

                    #endregion

                    #region pump

                case KeyboardCode.PumpStart:
                {
                    switch (mState)
                    {
                    case SystemState.Ready:
                        Pump.Start();
                        break;
                    }
                }
                break;

                case KeyboardCode.PumpStop:
                {
                    Pump.Stop();
                    SetState(SystemState.Init, SystemStateCodes.State.Initialization);
                }
                break;

                    #endregion

                    #region alarm

                case KeyboardCode.SoundAlarm:
                {
                    SoundAlarm.On();
                }
                break;

                    #endregion
                }
            };

            Keyboard.OnRelese += code =>
            {
                switch (code)
                {
                    #region alarm

                case KeyboardCode.SoundAlarm:
                {
                    SoundAlarm.Off();
                }
                break;

                    #endregion

                    #region conveyor

                case KeyboardCode.ConveyorStart:
                {
                    Engine.ConveyorOff();
                }
                break;

                    #endregion
                //not used
                case KeyboardCode.UserLock:
                {
                    /*
                     * if (DateTime.Now.Subtract(pressLockTime).TotalMilliseconds > 3000)
                     * {
                     *  mJournal.Debug("Станция заблокирована оператором", MessageLevel.System);
                     *  //SetState(SystemState.UserLock);
                     * }
                     */
                }
                break;
                }
            };
        }