コード例 #1
0
ファイル: IOCommutation.cs プロジェクト: lardc/mme_software
        private ushort ReadDeviceStateWithAlarm(Types.Commutation.HWDeviceState WaitedState, int Timeout)
        //реализация чтения состояния конечного автомата
        //в WaitedState принимается состояние, в которое должен перейти конечный автомат
        //реализация ожидает перехода конечного автомата в состояние WaitedState в течении времени Timeout
        //реализация возвращает считанный номер состояния конечного автомата
        //В случаи аларма прекращаем ожидание
        {
            if (m_IsCommutationEmulation)
            {
                return((ushort)WaitedState);
            }

            ushort State = GetDeviceState();

            if (State == (ushort)WaitedState)
            {
                return(State);
            }
            else
            {
                //пока не истёк таймаут - будем перечитывать состояние блока коммутации через каждые 100 мс до тех пор, пока не окажемся в ожидаемом состоянии WaitedState
                var timeStamp = Environment.TickCount + Timeout;

                while (Environment.TickCount < timeStamp)
                {
                    Thread.Sleep(100);

                    State = GetDeviceState();

                    if ((Types.Commutation.HWDeviceState)State == Types.Commutation.HWDeviceState.SafetyTrig)
                    {
                        m_SafetyAlarm = true;
                        FireSafetyEvent(m_SafetyAlarm);
                        return(State);
                    }

                    //считано состояние State, равное ожидаемому состоянию WaitedState - прерываем цикл ожидания
                    if (State == (ushort)WaitedState)
                    {
                        return(State);
                    }
                }

                //раз мы здесь - значит наступил таймаут, а состояния WaitedState мы так и не дождались
                return(State);
            }
        }
コード例 #2
0
ファイル: IOCommutation.cs プロジェクト: lardc/mme_software
        internal bool IsSafetyAlarm()
        {
            //если тип системы безопасности не оптическая шторка - то никакого Alarm и быть не может
            if ((m_SafetyType != ComplexSafety.Optical) || (m_ID != ComplexParts.Commutation))
            {
                return(false);
            }

            //Если безопасность отключенна
            if (_SafetyMode == SafetyMode.Disabled)
            {
                return(false);
            }

            //опрашиваем состояние блока коммутации и если оно SafetyTrig (сработала оптическая шторка) - возвращаем true, иначе false
            Types.Commutation.HWDeviceState devState = (Types.Commutation.HWDeviceState)GetDeviceState(true);

            return(devState == Types.Commutation.HWDeviceState.SafetyTrig);
        }