public ActivationWorkPlacePage()
        {
            InitializeComponent();
            m_ActionQueue = new ConcurrentQueue <Action>();
            m_Timer       = new DispatcherTimer {
                Interval = new TimeSpan(0, 0, 0, 0, 50)
            };
            m_Timer.Tick += TimerTick;

            //считываем из конфигурационного файла и запоминаем значение используемого канала измерения
            ChByClampType = (ChannelByClumpType)Settings.Default.ChannelByClampType;

            //узнаём номер регистра активации рабочего места, чтобы поток мог с ним работать
            REG_WORKPLACE_ACTIVATION_STATUS = Cache.Net.ActivationWorkPlace(ComplexParts.Sctu, ChannelByClumpType.NullValue, Types.SCTU.SctuWorkPlaceActivationStatuses.WORKPLACE_IS_FREE);
        }
Beispiel #2
0
        internal ushort ActivationWorkPlace(ChannelByClumpType ChByClumpType, SctuWorkPlaceActivationStatuses ActivationStatus)
        {
            SystemHost.Journal.AppendLog(ComplexParts.Sctu, LogMessageType.Note, "Sctu activation workplace");

            switch (ActivationStatus)
            {
            //мы хотим активировать рабочее место. прежде чем активировать рабочее место - проверим, что оно ещё не активировано
            case (SctuWorkPlaceActivationStatuses.WORKPLACE_IN_USE):
                //если рабочее место свободно - активируем его, при этом реализация записи в регистр активации сама позоботится об установке статуса активации для 'другого' рабочеего места
                if (ReadRegister(REG_WORKPLACE_ACTIVATION_STATUS) == (ushort)SctuWorkPlaceActivationStatuses.WORKPLACE_IS_FREE)
                {
                    //пишем статус активации
                    WriteRegister(REG_WORKPLACE_ACTIVATION_STATUS, (ushort)ActivationStatus);

                    //пишем какой аналоговый канал нам надо использовать
                    if (ChByClumpType != ChannelByClumpType.NullValue)
                    {
                        WriteRegister(REG_CHANNELBYCLAMPTYPE, (ushort)ChByClumpType);
                    }
                }

                break;

            //мы хотим заблокировать рабочее место - блокировкой рабочего места управляет WriteRegister - поэтому ничего не делаем
            case (SctuWorkPlaceActivationStatuses.WORKPLACE_IS_BLOCKED):
                break;

            //мы хотим освободить рабочее место
            case (SctuWorkPlaceActivationStatuses.WORKPLACE_IS_FREE):
                //если рабочее место занято - освобождаем его, при этом реализация записи в регистр активации сама позоботится об установке статуса активации для 'другого' рабочеего места
                if (ReadRegister(REG_WORKPLACE_ACTIVATION_STATUS) == (ushort)SctuWorkPlaceActivationStatuses.WORKPLACE_IN_USE)
                {
                    WriteRegister(REG_WORKPLACE_ACTIVATION_STATUS, (ushort)ActivationStatus);
                }

                break;
            }

            //возвращаем номер регистра статуса активации рабочего места вызывающей реализации
            return(REG_WORKPLACE_ACTIVATION_STATUS);
        }
Beispiel #3
0
 ushort IExternalControl.ActivationWorkPlace(ComplexParts Device, ChannelByClumpType ChByClumpType, SctuWorkPlaceActivationStatuses ActivationStatus)
 {
     return(_IoMain.ActivationWorkPlace(Device, ChByClumpType, ActivationStatus));
 }
 public ushort ActivationWorkPlace(ComplexParts Device, ChannelByClumpType ChByClumpType, SctuWorkPlaceActivationStatuses ActivationStatus)
 {
     return(Channel.ActivationWorkPlace(Device, ChByClumpType, ActivationStatus));
 }