DirectLogic DL06 стиль программирования |
Ответить |
Автор | |
Новичок Присоединился: 22 Июнь 2009 Категория: Russian Federation Online Status: Offline Публикации: 19 |
Опубликовано: 17 Август 2014 15:48 |
Поводом к вопросу на форуме послужили два события.
1. Зимой по всему краю были перебои и резкие броски-провалы напряжения питания. После одного из которых, по утверждению оператора, контроллер с моей программой "завис" и не реагировал ни на датчики ни на кнопки со щита управления. Пришлось его выключать-включать, после чего работа восстановилась. Ситуация больше не повторялась. Моя программа построена по стадийному принципу следующим образом: - ISG S0 - инициализация входов-выходов, включение требуемых стадий, выключение S0 - одновременное выполнение нескольких стадий: пересчёт аналоговых входов, обработка аварийных ситуаций, световая и звуковая сигнализация, пересчёты для взаимодействия с панелью оператора, шаговый командоаппарат для управления техпроцессом и ещё некоторые. Т.е. стадии я использовал для подобия структуризации кода. И после сообщения о "зависании" я предполагал, что из-за нестабильности напряжения оказались неактивными требуемые для работы стадии. И никаких идей о контроле их активности у меня не было. 2. Недавно, меня привлекали к восстановлению работоспособности другой установки, на таком же ПЛК, но программа была не моей. Я считал программу и первое, что бросилось в глаза - "смешанный стиль". В самом начале программы шли обычные строки LDD (примерно 15-20 строк), а затем начиналась программа в стиле стадийного программирования (ISG S0, SG S1 и т.д.) И, что удивительно, эта программа работала. В этих "внестадийных" строках был код по инициализации аналоговых входов, пересчёт аналоговых входов в физические единицы. Но из-за отсутствия самих аналоговых датчиков в установке (а код, видимо, был универсальным), все эти строки были бесполезны. В связи с такими вводными, у меня появились вопросы: 1. Насколько корректен "смешанный стиль", действительно ли выполняются первые "внестадийные" строки, если выполняются, то как - один раз или в каждом цикле? 2. Если они выполняются постоянно вне зависимости от активности всех стадий, то может быть можно в этих строках реализовать защиту от дезактивации рабочих стадий из-за бросков электричества? |
|
Новичок Присоединился: 07 Октябрь 2009 Категория: Russian Federation Online Status: Offline Публикации: 9 |
|
1. вполне корректно, не вижу ограничения на использование, каждый цикл
2. Все выполняется по правилам, программа выполняется с начала. Вопрос, из-за чего возникают проблемы, если по какой-то причине не сработал переход от стадии к стадии, то контролировать процесс остановки можно из любой активной стадии. Можно сделать S0 дежурной, которая будет включаться как ISG и не иметь выключения, а для пущей надежности в самом начале каждого цикла ее можно включать, и из нее контролировать переход по стадиям, если процесс подзависнет сбрасывать все стадии и запускать первую, как вариант. Если какой-то глюк проца, логикой его не победить, ставьте бесперебойники. Т.к. название темы стиль программирования, хочу поделиться опытом: если программа не очень большая и не сильно критично время цикла программы, а стадии используются для реализации не всегда необходимой явной последовательности выполнения программы, и нет острой необходимости отключать куски программы, лучше вообще без стадий. Отладка меньше времени занимает, вопрос привычки. Стадии это не графы, это куски программы которые можно включать в расчет или заставлять игнорировать. |
|
Нет такой ситуации, из которой невозможно было бы выйти без позора.
|
|
Действительный член Присоединился: 18 Декабрь 2006 Категория: Russian Federation Online Status: Offline Публикации: 275 |
|
1. Такое программирование не стильно, но вполне корректно. Но сам предпочитаю Ваш вариант - делать подобные пересчеты в постоянно активных стадиях. Анализируется нестадийная часть (в Вашем втором примере) каждый цикл, исполняется - в зависимости от условной части рангов.
2. Согласен с Полезным - от аппаратного сбоя программа вряд ли защитит. Что касается программных "зависаний" при пропадании питания - это сугубо логика (вернее, ошибки в ней) программы. Значит, алгоритм не отрабатывает часть ситуаций. Впрочем, не исключаю, что эксплуатация не разобралась до конца с ситуацией и вводит в заблуждение. В принципе, Вы можете в постоянно активной стадии анализировать пропадание или появление питания, заведя отдельный физический сигнал на контроллер - и делать по этому условию все, что посчитаете нужным, в том числе и сбрасывать все стадии, ожидая появления питания, после чего стартовать с начала алгоритма, как будто бы при отключении-включении питания контроллера Мне стадии нравятся больше (даже если время цикла не критично по величине) - на мой взгляд, программа более структурирована. ИМХО. |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |