Задача. ALARMS. Составить программу для аварийной световой и звуковой сигнализации, при следующих условиях. Состояние Тревоги (Аварийного предупреждения) описывается следующей диаграммой: 2) Alarm ON Not Ack - есть активная неподтверженная тревога; 3) Alarm ON Ack - есть активная тревога, но оператор её не подтвердил (не квитировал, NOT Acknowledge) 4) Alarm OFF Not Ack - активных тревог нет, но оператор не сделал подтверждение последней тревоги; Тревога переходит с состояние в состояние по 2-м типам события: - возникновение или пропадание аварийного сигнала; - команда подтверждения тревоги оператором (квитирование тревоги, Acknowledge). Световой индикатор может быть в 3-х состояниях: - не горит, при Alarm OFF, то есть нет активных тревог; - мигает, Alarm ON Not ACK или Alarm OFF Not Ack, то есть когда есть неподтвержденные тревоги; - горит, при Alarm ON Ack, то есть когда есть активные тревоги но они подтвержены оператором; Звуковая сигнализация может быть в 2-х состояниях: - включена, есть неподтвержденные тревоги; - отключена, когда нет неподтвержденных тревог; Диаграмма работы световой и звуковой сигнализации приведена на рисунке: Решение 1. LD. В качестве аварийного сигнала будем использовать переменную Alarm, кнопки подтверждения - cmdAck, выход на звуковую сигнализацию - AlarmSong, на световой индикатор - AlarmLamp. Один из вариантов программы на LD приведен ниже: В программе использована переменная Imp_1_05, которая включается на 1 секунду с периодичностью 1.5 с. Программа для генерации такого импульсного сигнала приведена в теме "Генерация импульсов". Вместо неё можно использовать системный меандр %S6. Учитывая, что кнопка квитирования аварии cmdAck без фиксации, в программе использована промежуточная переменная alarmAck. Опишем коротко работу программы. При активации аварийного сигнала включается AlarmSong. Катушка с фиксацией -(S)- не даст отключиться звуковой сигнализации, даже если аварийный сигнал пропадет. Но если квитирование произошло (alarmAck=TRUE) - включать звуковую сигнализацию повторно не нужно, этим объясняется нормально замкнутый контакт в разрыве. Работающий AlarmSong говрит о состоянии "Alarm ON NOT Ack" или "Alarm OFF Not ACK". В этом состоянии световой индикатор AlarmLamp должен мигать. Это реализуется последовательно соединенными контактами AlarmSong и Imp_1_05. В состоянии "Alarm ON Ack" индикатор должен гореть, что обеспечивается паралельно подключеной цепью с последовательными контактами Alarm и alarmAck. При нажатии кнопки cmdAck, состояние квитирования сохраняется в alarmAck одновременно со сбросом звукового сигнала. Обнуляется состояние квитирования только при переходе в состояние "Alarm OFF". Решение 2. ST. В качестве аварийного сигнала будем использовать переменную Alarm, кнопки подтверждения - cmdAck, выход на звуковую сигнализацию - AlarmSong, на световой индикатор - AlarmLamp. Один из вариантов программы на ST приведен ниже Это решение базируется на использовании автоматного подхода. Для определения каждого состояния тревоги, описаного высше, выделена переменная AlarmState, которая принимает следующие значения: 0 - Alarm OFF 1 - Alarm ON Not Ack 2 - Alarm ON Ack 3 - Alarm OFF Not Ack другие значения - неопределенность Для определения состояния тревоги используется программная структура CASE. На каждом из состояний определены значения AlarmSong и AlarmAlamp, а также условия перехода в другое состояние. |