PDA

Просмотр полной версии : как подвесить плк100/150?



Dimur
30.04.2010, 16:16
Уважаемые господа автоматчики и программисты!

подскажите, как лучше всего провести ТЕСТ на зависания приборов ПЛК100 и ПЛК150?

Дано: приборы ПЛК устанавливаются заказчиком на довольно ответственную позицию и требуется подтвердить их возможность самостоятельно определять своё зависание (watchdog) и безаварийно выключиться, выставив свои реле и реле приборов МДВВ и МВУ в положение "безопасности", как указано в паспортах и предварительных настройках. Сделать это надо однократно при пуске - на смонтированном объекте. Демонстрация "протоколируется".

Решение: есть возможность включить в программу блок "зависания", обращающийся сам к себе (бесконечный цикл? какой? посоветуйте, плз), который выведет ПЛК в транс и вызовет его отключение. Обращение к блоку вместо нормально загруженной программы можно выполнить замыканием входного контакта ПЛК(есть один, не используется).
То есть тест для крепкого сна заказчика проводится так: устанавливается перемычка на вход, например 1. Если эта перемычка висит 1 минуту - блок-убийца начинает работу и подвешивает ПЛК. Через пару секунд ПЛК рубится, все реле устанавливаюстя в положение безопасности - все счастливы. :о)
Мычка снимается, ПЛК перезагружается снятием питания, и всё начинает/продолжает работу по НОРМАЛЬНОЙ ПРОГРАММЕ...

Собственно, что может вызвать преднамеренное зависание ПЛК?
Что может подвесить ПЛК из нормальной жизни?

Пожалуйста, предложите вариант проверки!
Заранее спасибо!

Филоненко Владислав
30.04.2010, 16:28
while (reset=1) do
reset:=1;
end_while;

rovki
30.04.2010, 23:49
Задача очень интересная и не такая уж простая,а иногда и неразрешимая,я о том как противостоять реальному зависанию.
Как бы самому не обмануться и заказчика не обмануть,если ответственное применение.
Не много о этой проблеме посмотрите здесь http://www.microchip.su/showthread.php?t=4461

Dimur
02.05.2010, 19:02
2 Владислав: к сожалению, этот "бесконечный цикл" не подвесит ПЛК... Да, выхода из него программа не получит. Но ПЛК просто будет иступлённо выполнять этот блок за время 0,1% от минимального времени цикла, а потом ждать до окончания минимального времени цикла и начинать заново... Фактически можно привести в пример такой же блок разогрева оборудования:

while Temperаtura < 100C do
TEN:=true;
end_while;

Прогрев до 100С происходит минимум час (это сотни тысяч циклов программы), а единственное, что работает в ПЛК - вот этот блок, точно такой же, как Ваш... Но это не значит, что во время прогрева - он зависает!..

Вероятно, необходимо сделать в ПЛК такую систему обращений, чтоб время выполнения одного цикла программы стало больше времени, через которое WatchDog перезагрузит ПЛК... максимальное время цикла у меня сейчас стоит 1 секунда (1000 мс). Это именно здесь задаётся время срабатывания ВотчДога (так написано в руководстве по программированию ПЛК, я на всякий случай спросил :о)))?
Специально для проверки зависания делать этот параметр меньше нельзя - ведь в нормальном режиме должна работать нормальная программа - а там своя длина циклов - нельзя всё сбрасывать и перенастраивать...

Может какое-то обращение само к себе использовать... рекурсию или типа того, чтобы один цикл выполнялся очень долго...
типа
шаг 1: go_to 2;
шаг 2: go_to 1;
но как это сделать на ПЛК? он же не признаёт "гоу-ту шаг такой-то"...
впрочем, если это будет язык sfc...

з.ы. как полезно писать на форумах - пока объяснишь чего хочешь - сам поймешь, что надо делать, гы-гы :о))

2 rovki: благодарен! очень познавательно!!!
К счастью, мы не управляем через этот ПЛК самолётом - в принципе будет достаточно хотя бы минимального встроенного программного ВотчДога - главное, продемонстрировать, что он вообще есть!
и еще важнее, чтоб при зависании - реле переключились в предустановленный "безопасный режим" именно так, как рассказывает нам паспорт ПЛК. Вот это и надо проверить.
Например, второй частью проверки будет - выход в "безопасный режим" релюшек прибора МВУ при пропадании связи с основным ПЛК - для этого я просто откину провод сети RS485, связывающий ПЛК с МВУ, и в процессе выполнения программы МВУ выдаст светодиодом "аварию" и ПЕРЕКЛЮЧИТ реле в предустановленные состояния. Вот это УЖЕ так и работает.. осталось как-то смоделировать зависание ПЛК.
А если ПЛК физически сгорит (и не сработает вотчдог, гы-гы!), как это пытаются "обойти" в указанной Вами ссылке, то случай тут обидный, но к сожалению, его предупреждение не входит ни в ТЗ на программирование, ни в схему оборудования, ни в смету. Зато в смету входит специальный стабилизатор напряжения на все программные элементы шкафа.

Филоненко Владислав
02.05.2010, 19:47
извините, но наверное мне лучше знать повесит или нет :)

Dimur
02.05.2010, 22:11
2 Владислав: Вам лучше знать :о))) но я всё-равно из вредности проверил на ПЛК150...

...озадачен до глубины души... Указанный мной пример работы нагревательного элемента повесит ПЛК ничуть не хуже, чем пример Владислава... и это уже жесть... А что цикл "while do" вообще нельзя использовать? :о(((

В общем, реализация зависания ПЛК150 проведена успешно и весьма просто! Спасибо Владиславу! Правда заодно он подвесил и меня...

ПЛК150 достойно справился с перезагрузкой - выключил выходные реле (FALSE в "безопасном состоянии"), снял напряжение с аналоговых выходов...
к сожалению, добиться включения реле при перезагрузке в "безопасном режиме", то есть установив TRUE в настройках, мне пока не удалось...
ну дык и ладно - все-равно все безопасные режимы планировал делать "НО".

:о)))) если где и надо искать глобальный планетный разум - так это на форумах в инете.

з.ы. подвесить ПЛК переходами с шага на шаг на языке sfc мне не удалось. ;о)

rovki
03.05.2010, 09:07
"в принципе будет достаточно хотя бы минимального встроенного программного ВотчДога"-а,я думал ,что Watchdog timer — аппаратно реализованная схема контроля за зависанием системы,например- http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_44.htm

Dimur
03.05.2010, 13:20
2 rovki: Вы правы, наверняка внутри ПЛК он аппаратный, но тут решающее слово за производителем - как уж они там его реализовали...

Единственное моё прикосновение к нему происходит только в "программе" - выставлением максимального времени цикла - из этих соображений я лично для себя назвал его "программным".
Другое дело, что мы сами не делаем "навесные" дополнительные элементы рядом с ПЛК самостоятельно, как это животрепещуще описали в Ваших ссылках - именно такие "навесы" я бы для себя обозвал "аппаратным вотчдогом"...

Надо быть корректнее в формулировках, Вы правы.

Вероятно Вы сталкивались с проблемой зависания микроконтроллеров? Как часто это происходит в приборах (безотносительно к продукции ОВЕН)?

Николаев Андрей
03.05.2010, 13:25
В ПЛК 2 Watch Dog Один программный - именно его Вы настраиваете временем цикла. Второй аппаратный.

rovki
03.05.2010, 14:34
А доступ (программный ) есть к аппаратному Watchdog timer ?на уровне пользовательской программы.И если можно механизм работы программного Watchdog timer кратенько.И связаны ли два Watchdog timer?
например ,в пр часто приходится применять ,с целью диагностики программные Watchdog timer,собственной конструкции.Которые не спасают от" зависания " пр,так как нет возможности выход такого таймера подать на рестарт,а только на выход,хотя можно косвенно снимать питание с Пр,да и не для выявления зависания они используются,хотя можно в принципе.В то же время на уровне прошивки имеется Watchdog timer ,которым пользуются разработчики прошивки и который ,если я не ошибаюсь имеет аппаратную природу с программным управлением (уставка времени)

Малышев Олег
05.05.2010, 10:11
Дико извиняюсь, что встреваю в дискуссию. Таймер WDT в ПЛК реализован аппаратно внутри процессора AT91RM9200. Сброс WDT идет в конце цикла плк. Пока не было ситуации что бы WDT не срабатывал как положено.
Программа содержащие циклы while, repeat, for время в нахождения которых превышает время цикла ПЛК - заведомо неправильна. Если время внутри цикла сканирования превысит время сброса WDT - программа перезагрузится.
Цикл организованный средствами SFC - не зависнет т.к. после каждого шага - конец цикла и сброс WDT.


И наконец - РЕАЛЬНАЯ проблема - пользователь пишет программу в которой при некотором сочетании входных элементов и параметров происходит подвисание срабатывает WDT, программа загружается и снова WDT - и так бесконечно. Вот от таких вещей надо защитится

Dimur
05.05.2010, 12:32
Программа содержащие циклы while, repeat, for время в нахождения которых превышает время цикла ПЛК - заведомо неправильна.

Цикл организованный средствами SFC - не зависнет т.к. после каждого шага - конец цикла и сброс WDT.



я вот в ходе тестов, описанных здесь ранее, подвесил ПЛК150 вот таким безобидным кодом:

while Temperаtura < 100 do
TEN:=true;
end_while;
где Temperаtura - прямое обращение к аналоговому входу 1, а TEN - прямое обращение к дискретному выходу 3...

и вот это тоже РЕАЛЬНАЯ проблема, на мой взгляд. Ведь за время цикла ПЛК в 10 мс (да и за максимальные 1000 мс) ничего нагреть не успеешь, никакой датчик среагировать не успеет, никакой процесс не изменит своих выходных параметров... получается область применения циклов While - это только энкодеры и какие-то быстрые вычислительные процессы (даже представить не могу, как его можно применить "в жизни", не повесив ПЛК)...

While do может повесить ПЛК! - до сих пор не укладывается в голове - я даже Владислава здесь обидел своими сомнениями...
Впрочем, теперь воспринимается как "с этим надо жить, это - реальность". :о))))

Да, реальность такова - переписываю блоки управления температурой с while на if и вставляю блок "ПЛК-киллер" с одним единственным безобиднейшим циклом While do...

з.ы. и For туда же??? я плакаю :о((( а что тогда остаётся?..
з.з.ы. да, про sfc понятно, спасибо! на самом деле эти "шаги" - не те "гоу-то", какие были в Паскале, это совсем другая кухня в принципе...
з.з.з.ы. хм, единичный циклик (Step) в sfc это - "делать содержимое в скобках до тех пор, пока не выполняется условие выхода"... но это и есть практически: repeat () until (условие); или while (условие) do ( ) end_while;

Малышев Олег
05.05.2010, 14:03
И еще раз ВНИМАТЕЛЬНО читаем

"И наконец - РЕАЛЬНАЯ проблема - пользователь пишет программу в которой при некотором сочетании входных элементов и параметров происходит подвисание срабатывает WDT, программа загружается и снова WDT - и так бесконечно. Вот от таких вещей надо защитится"

ПЛК не подвешивается, а уходит в бесконечную перезагрузку. Есть способ ее прервать - удерживать пуск.

Еще раз - программы для ПЛК так не пишут - читам букварь IEC-61131-3. Цикл ПЛК и есть нужный цикл - не нужно плодить лишних
TEN :=(Temperаtura < 100);

И насчет, истина - предлагаю выложить номер прошивки, таргета, зав. номер прибора и программу проверить на ПЛК150 не составит труда.
Чудес не бывает. Не может быть что бы в кристалле процессора прошли такие изменения что не работает WDT

Малышев Олег
05.05.2010, 14:14
Цикл плк измеряется от 1 до 1000 ms
ЦИКЛ ПЛК
чтение входов
выполнение пользовательских программ
(обслуживание системы)
запись выходов
сброс WDT
отдых
КОНЕЦ_ЦИКЛА_ПЛК

Dimur
05.05.2010, 15:28
Спасибо за ликбез, учту.
Довольно непривычно перекладывать Паскаль на ПЛК.

я без труда реализую то, что было задумано доступными средствами, без while do.

Самое главное, что тема раскрыта, спасибо!

2 Малышев Олег: я вечеров пришлю Вам в личку номер ПЛК, год, прошивку и программку - проверки и установки безопасного режима при перезагрузке ПЛК, как я её вижу.
пока что все реле ПЛК150 не замыкаются на True, установленное в качестве "безопасного режима", но успешно размыкаются, при False. Коряворучие собственное не исключаю, естественно, но уж дюже хочется его проверить.