Сигнализация

Задача. ALARMS.
Составить программу для аварийной световой и звуковой сигнализации, при следующих условиях. Состояние Тревоги (Аварийного предупреждения) описывается следующей диаграммой:
1) Alarm OFF - нет активной и неподтвержденной тревоги (Alarm);
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, а также условия перехода в другое состояние.
 
    
Comments