예제 #1
0
        internal bool GetButtonState(ComplexButtons Button)
        {
            switch (Button)
            {
            //true  - зажим стоит в рабочем положении
            //false - зажим выдвинут из рабочего положения
            case ComplexButtons.ClampSlidingSensor:
                if (m_IsClampingEmulation)
                {
                    return(true);
                }
                else
                {
                    return(ReadRegister(REG_SLIDING_SENSOR) != 0);
                }

            default:
                string mess = String.Format("Realization does not know Button={0}.", Button.ToString());
                throw new Exception(string.Format("{0}.{1}.{2}", GetType().Name, MethodBase.GetCurrentMethod().Name, mess));
            }
        }
예제 #2
0
        public void AddSafetyHandlerEvent(bool Alarm, ComplexSafety SafetyType, ComplexButtons Button)
        {
            m_ActionQueue.Enqueue(delegate
            {
                //максимально быстро реагируем на возникший Safety Alarm
                if (Alarm)
                {
                    Cache.Net.Stop();
                }

                //показываем или прячем иконку состояния системы Safety
                Cache.Main.IsSafetyBreakIconVisible = Alarm;

                if (Alarm)
                {
                    //вывешиваем пользователю форму с сообщением о сработавшей системе безопасности
                    string Message;

                    //определяемся с тем, какая система безопасности сработала чтобы выдать пользователю вразумительное сообщение
                    switch (SafetyType)
                    {
                    case ComplexSafety.Optical:
                        //принятый параметр Button для случая оптической шторки не имеет никакого значения
                        Message = Resources.SafetyOpticalAlarm;
                        break;

                    case ComplexSafety.Mechanical:
                        //дописываем какой датчик сработал
                        Message = Resources.CloseSafetyHood + " (" + Button.ToString() + ").";
                        break;

                    default:
                        Message = "Unknown safety system is in alarm, realization fault.";
                        break;
                    }

                    var dw = new DialogWindow(Resources.Information, Message);

                    dw.ButtonConfig(DialogWindow.EbConfig.OK);
                    dw.ShowDialog();

                    if (dw.DialogResult ?? false)
                    {
                        //пользователь нажал в появившемся диалоговом окне кнопку OK
                        //сбрасываем состояние SafetyTrig. справедливо и для оптической и механической шторки. только после этого можно разжимать пресс
                        Cache.Net.ClearSafetyTrig();

                        //разжимаем зажимное устройство
                        Cache.Clamp.IsRunning = false;
                        Cache.Clamp.Unclamp();

                        //прячем иконку Safety
                        Cache.Main.IsSafetyBreakIconVisible = false;

                        //строим строку с именами устройств, которые не готовы к очередному измерению
                        string NotReadyDevicesToStart        = Cache.Net.NotReadyDevicesToStart();
                        string NotReadyDevicesToStartDynamic = Cache.Net.NotReadyDevicesToStartDynamic();

                        if (NotReadyDevicesToStartDynamic != "")
                        {
                            if (NotReadyDevicesToStart != "")
                            {
                                NotReadyDevicesToStart = NotReadyDevicesToStart + ", ";
                            }

                            NotReadyDevicesToStart = NotReadyDevicesToStart + NotReadyDevicesToStartDynamic;
                        }

                        //проверяем есть ли блоки, которые не готовы к проведению очередного измерения
                        if (NotReadyDevicesToStart != "")
                        {
                            //ругаемся, т.к. есть блоки, которые не готовы выполнить очередное измерение
                            //вывешиваем пользователю форму с сообщением о не готовых к очередному измерению блоках
                            dw = new DialogWindow(Resources.Information, "Блоки: " + NotReadyDevicesToStart + " не готовы для проведения измерений.");

                            dw.ButtonConfig(DialogWindow.EbConfig.OK);
                            dw.ShowDialog();
                        }
                    }
                }
            });
        }