|
uniset-algorithms
0.2
|
В проекте предусмотрено два режима вызова механиков "ручной" и "автоматический".
Для ручного выхова механиков на пульте ЦПУ расположены следующие органы управления: # - двухпозиционныцй перпеключатель "Главный механик" - "Второй электромеханик". # - кнопка "Вызов"
Помимо это в каютах главного механика и второй электромеханика, расположены звонки и кнопки "Подтверждения вызова".
Логику работы см. Caller
Автоматический выхов механиков (согласно регистру) осуществляется в случае если в течение заданного времени (обычно 2 минуты) после срабатывания АПС, не произошло её квитирование в ЦПУ. При этом, в текущей реализации, происходит включение звонков сразу и у главного механика и второго электромеханика.
Программная реализация построена на базе объектов класса Caller. Фактически в проекте получается три "аббонента" (объекта):
Т.к. для ручного вызова (главного и второго механиков) основные органы управления расположены на пульте ЦПУ, то принято решение создавать объекты (процесс) на контроллере tscpu. (см. mcaller.cc).
Для автоматического вызова все необхоимые датчики и органы управления, подключены к шкафу ШУ ТС1, поэтому объект (процесс) запускается на контроллере ts1. (см. automcaller.cc).
Все настройки по каждому объекту расположены в configure.xml. Секции <MainMechanic> , <SecondMechanic>. <AutoMCaller>.
Класс Caller реализует логику "вызова" для одной группы кнопок и звонков. Поэтому для каждого "адресата" (главнй механик, помошник и т.п.) создаётся свой объект класса Caller.
Т.к. для автоматического вызова, используется универсальный класс Caller, требующий наличия кнопки "выбор". То создан специальный искуственный датчик Select_AutoMCaller_FS, который всегда равен "1". Вызов производится по датчику "Сработала АПС" (APS_FS) и идёт сразу в два места (в каюты механиков).
При данной реализации получается, что одними и теми же звонками необходимо управлять сразу двум процессам "ручному вызову" и "автоматическому вызову". Для "разруливания" этой ситуации используется специальный класс CommonHorn. Для каждого объекта созданы искуственные "звонки" MainMech_Horn1_C, MainMech_Horn2_C, SecondMech_Horn1_C, SecondMech_Horn_C. Т.е. каждый объект класса Caller управляет своим "звонком". Эти искуственные звонки по логике "ИЛИ" объединяемые объектом класса CommonHorn - MainMech_Horn и SecondMech_Horn (см. automcaller.cc), выставляющим "реальный" выход.
1.7.6.1