示例#1
0
        internal IOCommutation(IOAdapter Adapter, BroadcastCommunication Communication, bool CommutationEmulation, int CommutationNode, bool Type6, ComplexParts ID)
        {
            m_ID                     = ID;
            m_IOAdapter              = Adapter;
            m_Communication          = Communication;
            m_IsCommutationEmulation = CommutationEmulation;

            //читаем из файла конфигурации тип установленной системы безопасности
            if (m_ID == ComplexParts.Commutation)
            {
                m_SafetyType = ReadSafetyTypeFromConfig();

                if (m_SafetyType == ComplexSafety.Optical)
                {
                    //если это оптическая шторка - создаём поток, который будет опрашивать её состояние
                    m_CheckSafetyThread = new ThreadService();
                    m_CheckSafetyThread.FinishedHandler += CheckSafetyThread_FinishedHandler;
                }
            }

            m_Node  = (ushort)CommutationNode;
            m_Type6 = Type6;

            SystemHost.Journal.AppendLog(m_ID, LogMessageType.Info, String.Format("Commutation created. Emulation mode: {0}", m_IsCommutationEmulation));
        }
示例#2
0
        private ComplexSafety ReadSafetyTypeFromConfig()
        {
            ComplexSafety Result = ComplexSafety.None;

            //читаем из файла конфигурации тип установленной системы безопасности
            if (!Enum.TryParse(Settings.Default.SafetyType, out Result))
            {
                Result = ComplexSafety.None;
                SystemHost.Journal.AppendLog(ComplexParts.Commutation, LogMessageType.Error, "Unrecognised value on config parameter SafetyType");
            }

            return(Result);
        }
示例#3
0
 public void PostSafetyEvent(bool Alarm, ComplexSafety SafetyType, ComplexButtons Button)
 {
     EnumerateClients(Client => Client.SafetyHandler(Alarm, SafetyType, Button));
 }
示例#4
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();
                        }
                    }
                }
            });
        }