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)); }
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); }
public void PostSafetyEvent(bool Alarm, ComplexSafety SafetyType, ComplexButtons Button) { EnumerateClients(Client => Client.SafetyHandler(Alarm, SafetyType, Button)); }
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(); } } } }); }