PDA

Просмотр полной версии : Время цикла ПЛК больше 100мс



Aplle
28.06.2011, 17:51
Доброе время суток!

Использую ПЛК110-60М + СП270(RS-485-I) + МВ110-8АС(RS-485-II) +
МВ110(RS-485-II) для автоматизации котла ДКВР. Прошивка 2.12.7 Таргет 2.10.

Во время выполнения программы в ПЛК, время цикла составляет чуть более 100 мс. В модуле STATISTIC горит CPU Overloaded. Котел проработал примерно сутки, после чего ПЛК завис. Проявилось это в том, что на панели СП270 значение времени цикла ПЛК из модуля STATISTIC замерло на величине 110, не производилось регулирование ПИД регуляторов (по газу открылась заслонка на максимум и по воздуху закрылась на минимум), ПЛК не отлавливал нажатие кнопки СТОП (прописано в основной программе PLC_PRG). Min cycle length - 50 мс, Max cycle length 1000 мс.

Может ли CPU Overloaded каким нибудь образом способствовать зависанию ПЛК? Какие методы оптимизации рабочей программы можно использовать для предотвращения зависания ПЛК? Какие механизмы имеются в ПЛК, которые выведут его из зависшего состояния? Весь проект написан на ST.

lara197a
28.06.2011, 21:27
Ну, скорее всего нужно смотреть программу.
Где-то зацикливание.
Выкладывайте.

Александр Приходько
28.06.2011, 22:08
Не использовать While, переход на метку и тому подобное. Очень аккуратно обращаться с указателями и все в таком духе.

Aplle
28.06.2011, 22:41
Использую циклы for и крайне редко, указатели не использую вообще. Переходы на метку тоже не использую.

lara197a
28.06.2011, 22:52
Тогда удачи........

Serge_UA
29.06.2011, 12:26
Не использовать While, переход на метку и тому подобное. Очень аккуратно обращаться с указателями и все в таком духе.
Я бы уточнил:
не использовать циклы с неизвестным заведомо количеством итераций;
не использовать переходы на метку назад по коду.

По поводу оптимизации:
Не выполняйте весь код каждый цикл ПЛК. Каждый, логически отдельный, кусок кода выполняйте только тогда, когда есть потребность данных, получаемых в результате выполнения этого куска.
Например:
1. У вас в программе два (или больше) ПИД регулятора. Выполняйте их в периодической задаче каждые Х мс. Думаю для вашего случая Х = 100-200 мс. При этом, каждый ПИД выполняйте в отдельном цикле контроллера (отдельном от других ПИД).
2. Вы рассчитываете технологические параметры по каким-нибудь формулам. Посмотрите кто потребляет эти параметры. Если ПИД, то тех. параметры ему нужны только каждые Х мс, если панель оператора, то ей параметры не нужны чаще, чем раз в 500 мс.
3. Как часто обновляются измеренные аналоговые величины? Рассчитывать тех. параметры чаще, чем обновляются их аналоговые сигналы, не имеет смысла.
4. И т.д. в таком же духе.

Aplle
29.06.2011, 22:36
Очень интересен первый пункт, можно подробнее. Если не затруднит с примером реализации. У меня особенность: пид регуляторы включаются на разных этапах розжига котла. Что такое периодические задачи? Каким образом их применить в моем случае? У меня в проекте текущий этап обозначен через глобальную переменную. Каждый этап описан в своей программе. В PLC_PRG в зависимости от значения этой переменной вызывается программа отвечающая за выполнение текущего этапа.

Адрей
30.06.2011, 08:20
На мой взгляд, лучше для ST писать все в одной программе PLC_PRG без лишних переходов к POU. Делать всё по шагам с привязкой по таймеру.

Малышев Олег
30.06.2011, 08:43
На мой взгляд, лучше для ST писать все в одной программе PLC_PRG без лишних переходов к POU. Делать всё по шагам с привязкой по таймеру.

Это ошибка - при проектах средней сложности время на отладку возрастает на порядок.

Мои рекомендации. Основная программа на ST. Внутри нее небольшая логика по перезапуску машины состояний. Основная машина состояний на SFC. Внутри SFC - на каждое состояние действие которое умещается на один экран. Если больше - лучше вынести в отдельный POU.

"Любимые" блоки - насосы, графики, защиты, регуляторы ... лучше вынести в отдельную библиотеку.

Адрей
30.06.2011, 11:56
Это ошибка - при проектах средней сложности время на отладку возрастает на порядок.
Я с вами согласен про машину состояний (движок программы) применимо для сложных задач вы ответили как штатный программист.... Но для алгоритма автоматики котла нужна высокая оперативность и минимальная загрузка ПЛК. Применять движок, смысла нет. Процесс работы котла ступенчатый значит и алгоритм должен быть таков. А для написания хорошего алгоритма время не должно быть критично. Котел все таки.

Александр Приходько
30.06.2011, 13:31
Я с вами согласен про машину состояний (движок программы) применимо для сложных задач вы ответили как штатный программист.... Но для алгоритма автоматики котла нужна высокая оперативность и минимальная загрузка ПЛК. Применять движок, смысла нет. Процесс работы котла ступенчатый значит и алгоритм должен быть таков. А для написания хорошего алгоритма время не должно быть критично. Котел все таки.

Для разных задач по разному. Иногда смысла лепить ФБ нет. Что касается котла с вами согласен. Делал все на CASE с предварительным анализом аварий. По сути два Case было.

Но во могих задачах ФБ сильно проще.

Что касается разнесения алгоритма по циклам - Case это очень удобная вещь. Наверно почти в каждом из примеров или программ, написанных мной за последние полтора года они присутствуют. И очень отладку упрощают, сразу видно "где встало "
).

и еще примечание! использование ФБ не так сильно сократит время цикла, сколько уменьшит объемы кода и время отладки!

Aplle
01.07.2011, 06:35
Мои рекомендации. Основная программа на ST. Внутри нее небольшая логика по перезапуску машины состояний. Основная машина состояний на SFC. Внутри SFC - на каждое состояние действие которое умещается на один экран.

Почему именно SFC?

Aplle
01.07.2011, 06:41
Вопрос:совместное использование таймеров TP и TON сильно повлияют на время цикла?
Влияет ли CPU overload на зависание ПЛК?