Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > ПЛК и микроконтроллеры
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

DirectLogic DL06 стиль программирования

 Ответить Ответить
Автор
Сообщение
FPavel Смотреть выпадающим
Новичок
Новичок


Присоединился: 22 Июнь 2009
Категория: Russian Federation
Online Status: Offline
Публикации: 19
Свойства публикации Свойства публикации   Ответить, цитируя автора - FPavel Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: DirectLogic DL06 стиль программирования
    Опубликовано: 17 Август 2014 15:48
Поводом к вопросу на форуме послужили два события.

1. Зимой по всему краю были перебои и резкие броски-провалы напряжения питания. После одного из которых, по утверждению оператора, контроллер с моей программой "завис" и не реагировал ни на датчики ни на кнопки со щита управления. Пришлось его выключать-включать, после чего работа восстановилась. Ситуация больше не повторялась.
Моя программа построена по стадийному принципу следующим образом:
- ISG S0 - инициализация входов-выходов, включение требуемых стадий, выключение S0
- одновременное выполнение нескольких стадий: пересчёт аналоговых входов, обработка аварийных ситуаций, световая и звуковая сигнализация, пересчёты для взаимодействия с панелью оператора, шаговый командоаппарат для управления техпроцессом и ещё некоторые. Т.е. стадии я использовал для подобия структуризации кода.
И после сообщения о "зависании" я предполагал, что из-за нестабильности напряжения оказались неактивными требуемые для работы стадии. И никаких идей о контроле их активности у меня не было.

2. Недавно, меня привлекали к восстановлению работоспособности другой установки, на таком же ПЛК, но программа была не моей. Я считал программу и первое, что бросилось в глаза - "смешанный стиль". В самом начале программы шли обычные строки LDD (примерно 15-20 строк), а затем начиналась программа в стиле стадийного программирования (ISG S0, SG S1 и т.д.) И, что удивительно, эта программа работала.
В этих "внестадийных" строках был код по инициализации аналоговых входов, пересчёт аналоговых входов в физические единицы. Но из-за отсутствия самих аналоговых датчиков в установке (а код, видимо, был универсальным), все эти строки были бесполезны.

В связи с такими вводными, у меня появились вопросы:
1. Насколько корректен "смешанный стиль", действительно ли выполняются первые "внестадийные" строки, если выполняются, то как - один раз или в каждом цикле?
2. Если они выполняются постоянно вне зависимости от активности всех стадий, то может быть можно в этих строках реализовать защиту от дезактивации рабочих стадий из-за бросков электричества?
Наверх
Useful Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 07 Октябрь 2009
Категория: Russian Federation
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - Useful Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Ноябрь 2015 20:27
  1. вполне корректно, не вижу ограничения на использование, каждый цикл
  2. Все выполняется по правилам, программа выполняется с начала. Вопрос, из-за чего возникают проблемы, если по какой-то причине не сработал переход от стадии к стадии, то контролировать процесс остановки можно из любой активной стадии. Можно сделать S0 дежурной, которая будет включаться как ISG и не иметь выключения, а для пущей надежности в самом начале каждого цикла ее можно включать, и из нее контролировать переход по стадиям, если процесс подзависнет сбрасывать все стадии и запускать первую, как вариант. Если какой-то глюк проца, логикой его не победить, ставьте бесперебойники.

Т.к. название темы стиль программирования, хочу поделиться опытом: если программа не очень большая и не сильно критично время цикла программы, а стадии используются для реализации не всегда необходимой явной последовательности выполнения программы, и нет острой необходимости отключать куски программы, лучше вообще без стадий. Отладка меньше времени занимает, вопрос привычки. Стадии это не графы, это куски программы которые можно включать в расчет или заставлять игнорировать.
Нет такой ситуации, из которой невозможно было бы выйти без позора.
Наверх
Astilya Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 18 Декабрь 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 275
Свойства публикации Свойства публикации   Ответить, цитируя автора - Astilya Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 10 Ноябрь 2015 17:59
1. Такое программирование не стильно, но вполне корректно. Но сам предпочитаю Ваш вариант - делать подобные пересчеты в постоянно активных стадиях. Анализируется нестадийная часть (в Вашем втором примере) каждый цикл, исполняется - в зависимости от условной части рангов.
2. Согласен с Полезным - от аппаратного сбоя программа вряд ли защитит. Что касается программных "зависаний" при пропадании питания - это сугубо логика (вернее, ошибки в ней) программы. Значит, алгоритм не отрабатывает часть ситуаций. Впрочем, не исключаю, что эксплуатация не разобралась до конца с ситуацией и вводит в заблуждение.
В принципе, Вы можете в постоянно активной стадии анализировать пропадание или появление питания, заведя отдельный физический сигнал на контроллер - и делать по этому условию все, что посчитаете нужным, в том числе и сбрасывать все стадии, ожидая появления питания, после чего стартовать с начала алгоритма, как будто бы при отключении-включении питания контроллера

Мне стадии нравятся больше (даже если время цикла не критично по величине) - на мой взгляд, программа более структурирована. ИМХО.
Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz