Автор: | Света [ 29.08.2017, 12:28 ] |
Тема блога: | Функция-драйвер для локомотивного светофора |
Представляю вашему вниманию завершенный модуль-функцию (драйвер), предназначенную упростить и автоматизировать управление локомотивным светофором С-2-5М. Особенности драйвера: 1. Автоматическая обработка команды. 2. Автоматический переход в режим ожидания после выполнения всех команд. 3. Стабильность временных отсчетов. 4. Встроенный стек команд. 5. Смена показаний светофора происходит с фиксированной скоростью, между отключением прежнего показания и зажиганием нового предусмотрено полное отключение огней, имитирующее переходные процессы в блоке АЛСН. 6. Простота использования. Описание принципа работы: Алгоритм драйвера состоит из 2 блоков - тактового и командного. Командный блок предназначен для обработки команд. При поступлении команды производится сверка текущего режима светофора или, если светофор находится в состоянии переключения - следующего режима; в случае совпадения команда игнорируется. Благодаря этому нет надобности контролировать отправку команд на драйвер - командный блок с этим справится, отсеяв дубликаты. Также командный блок формирует последовательности команд и загружает их в стек. Благодаря этому можно отправлять любые команды в любой последовательности и с любой скоростью, все они будут помещены в стек и выполняться по заданному времени. Если поступила команда на новое показание, в стек предварительно будет загружена команда полного гашения. На практике это даст такой эффект работы - гашение предыдущего показания, задержка, включение нового показания. Если поступила команда тестирования, в стек предварительно будут загружены: команда полного гашения, команда теста, команда полного гашения и текущая выполняемая команда. Эффект работы - гашение текущего показания, задержка, включение всех огней (тест), гашение всех огней, задержка, восстановление предыдущего показания. При получении команды, командный блок переводит драйвер в активный режим. Тактовый блок обрабатывает команды, помещенные в стек, с привязкой ко времени . Как только драйвер переводится в активный режим, проверяется наличие команд в стеке. Если команд нет, драйвер перейдет в режим ожидания. Это означает, что получив тактовый запрос, драйвер проверит свой режим и, если ничего не изменилось, будет выход из функции. Если же команда в стеке обнаружена, драйвер перейдет в активный режим и запустит команду на выполнение. После того, как время, заданное на выполнение команды, истечет, команда будет удалена из стека и цикл повторится. Таким образом, драйвер будет в активном режиме до тех пор, пока последовательно не выполнит все команды, помещенные в стек. Для обеспечения таймеризации драйвер использует функцию Timer (), опубликованную ранее. По завершении отсчетов производится удаление использованных каналов таймера. Использование: Светофор АЛСН должен обслуживаться одним контролом, интерфейс которого состоит из вкладок Interior visibility object - по одной вкладке на каждый режим работы: ![]() В моем случае это 7 вкладок - З, Ж, КЖ, К, Б, КЖ+Б и "тест". Как видно по скрину, в каждой вкладке нужно прописать имя нода огонька светофора и значение контрола, при котором этот огонек будет активироваться. В скрипте нужно создать таблицу, в которой будут указаны команды управления и соответствующие им значения контрола, при которых активируется требуемый нод:
Команды, за исключением жестко заданных "clear" и "test", могут быть любые, но, естественно, удобнее применять очевидные имена. Также надо проинициализировать используемые драйвером переменные:
В функции Update (time) делаем тактирование драйвера:
Для отсылки команды делаем вызов, указав команду (какую команду указываем, такой нод по таблице TabALSN и включится, например:
Код функции: |
Часовой пояс: UTC + 4 часа | |
Powered by phpBB © 2002, 2006 phpBB Group www.phpbb.com |
Blogs powered by User Blog Mod © EXreaction www.lithiumstudios.org |