Как я понял ошибка Watchdog'a не исправимая.
(из документа, да я и сам пробовал сбрасывать биты и сам таймер - безрезультатно)
Решил предупреждать переполнение Watchdog'a. Настроил прерывание через каждые 30 мс
( STI file number S:31= 50 - № файла прерывания
Set point S:30=3 - период прерывания 30 мс ).
В обработке прерывания (LAD50) проверяю достиг ли Watchdog(Current) некоторого значения. Все работает!
Только все-таки не получается организовать перезагрузку SLC. Пробовал использовать JMP и LBL, но невыходит из LAD50 прыгнуть в LAD2.
А у меня требование: при зависании произвести перезагрузку.
Раньше я микроконтроллерами PIC занимался, так там как раз при переполнении Watchdog контроллер именно перезапускался.
Решил предупреждать переполнение Watchdog'a. Настроил прерывание через каждые 30 мс
А смысл? Watchdog сбрасывается автоматически после каждого удачного цикла. А если уж процессор завис и Watchdog сработал, то сбросить невосстановимую ошибку процессор самотстоятельно никак не может (и не должен). Только вручную.
Цитата:
А у меня требование: при зависании произвести перезагрузку.
Ну как Вы себе представляете перезагрузку, т.е. выполнение процессором каких-то действий, если он уже завис и никаких действий больше не выполняет? Просто теоретически - как?
Решил предупреждать переполнение Watchdog'a. Настроил прерывание через каждые 30 мс
( STI file number S:31= 50 - № файла прерывания
Set point S:30=3 - период прерывания 30 мс ).
Зачем так сложно
Когда все отладишь в S:3 запиши значение из S:22 умноженное на два.
Nikolay писал(а):
А у меня требование: при зависании произвести перезагрузку.
Сделай внешней схемой с реле времени: подходящий бит из S:4 отправь на физический выход, который сбрасывает отсчет в реле времени, когда реле достигнет уставки - передернуть питание контроллера (имей ввиду: SLC может игнорировать короткое пропадание питания, при переходе в Program или Test эта схема сработает).
Только зачем это? Неверие в технику?
К реле времени добавь счетчик, чтобы знать сколько раз сработало.
- "Вы, знаете Киса, мне мне вчера предложили вечную иглу для примуса. А зачем она мне, я не собираюсь жить вечно"
Перезапуск по сторожевому таймеру - это требование надежности.
Предполагается, что зависание возможно из-за ошибки алгоритма, каких-то помех в сети и т.д.. На пиках (PIC) перезапуск - это нормальная практика. При переполнении сторожевого таймера аппаратно срабатывает Reset.
В принципе необходимо произвести восстановление режима работы. (например, высветить теже что и перед ошибкой индикаторы)
По моему, тот, кто ставил Вам задачу, исходит не из той идеологии, которая является традиционной при проектировании систем автоматизации во всём мире ( dv_, я осторожно формулирую ).
Имеется в виду следующее: поскольку контроллер управляет машинами и механизмами, от поведения которых может зависеть жизнь и здоровье людей, ни один контроллер не обладает правом решать, следует ли при возникновении fatal error (простите, но английское выражение в этом случае мне кажется более адекатным, чем его русский перевод) автоматически перезапускать процессор и продолжать движение, или удары молотом, или погружать стержни в реактор, или ещё что-то такое.
Право принятия решения в такой ситуации принадлежит только и исключительно человеку, т.к. он несёт за ситуацию вполне определённую ответственность.
В промышленных, не самодельных контроллерах бит ошибки по сторожевому таймеру всегда fatal error, и никакого автоматического перезапуска, упаси Боже, не бывает и быть не может.
Цитата:
При переполнении сторожевого таймера аппаратно срабатывает Reset.
Замечательно. Человек попал под пресс, пресс заклинило, движения плиты нет уже 2 секунды, следует автоматический ресет, и пресс идёт вверх в исходное положение и снова бьёт и убивает человека. Так?
Цитата:
Предполагается, что зависание возможно из-за ошибки алгоритма, каких-то помех в сети и т.д..
Ошибок алгоритма отлаженной и сданной в эксплуатацию системе быть не должно. Если они есть, то система не до конца правильно спроектирована и реализована.
При помехах в сети есть соответствующая диагностика которая обычно никакого отношения к срабатыванию сторожевого таймера не имеет.
Цитата:
В принципе необходимо произвести восстановление режима работы. (например, высветить теже что и перед ошибкой индикаторы)
Для этого существует периодическое автоматическое сохранение данных и восстановление последнего сохранённого контекста при рестарте.
Начальник все думает (ждёт кого-то чтоб посоветоваться).
Если всё если же настоят на данном требовании (ведь мой контроллер в основном только индикацией занимается), можно реализовать запуск программы с первой строки после ошибки Watchdog'a?
В моем случае осталось переити из п/п обработки прерывания(LAD50) в начало программы (LAD2). А как незнаю.
По моему, тот, кто ставил Вам задачу, исходит не из той идеологии, которая является традиционной при проектировании систем автоматизации во всём мире ( dv_, я осторожно формулирую ).
Одобрям!
oldDad писал(а):
Цитата:
В принципе необходимо произвести восстановление режима работы. (например, высветить теже что и перед ошибкой индикаторы)
Для этого существует периодическое автоматическое сохранение данных и восстановление последнего сохранённого контекста при рестарте.
А, вот здесь вставлю свои пять копеек
При старте SLC все помнит, если батарейка в наличии и целая.
Забывает только биты включенные по OTE (пресс oldDad только так и включать - стукнет раз, но добивать не станет ), ну и еще кое-что, например в таймерах.
PS. Из личного опыта запомнилось про SLC 5/03 (1747-L532):
1) на чужом объекте примерный диалог:
- У вас батарейка плохая или ее нет.
- Не может этого быть, у нас были перерывы с питанием более суток.
- Значит у вас стоит ПЗУ.
- Может быть.
Выключаем, вынимаем процессор - батарейка отключена, ПЗУ нет!?
2) Примерно через месяц после 1). Едем на внедрение: отключаем SLC от сети (батарейка отключена) в понедельник около 12 часов. Уезжаем на объект. Объект не готов. Подключение к сети состоялось в субботу после трех часов дня. SLC начал выполнять программу!?
AB для SLC обещает до 30 минут без батарейки и до двух лет без подключения к сети с батарейкой.
Начальник все думает (ждёт кого-то чтоб посоветоваться).
Наверно боится ответственности.
Nikolay писал(а):
... (ведь мой контроллер в основном только индикацией занимается)
Значит есть персонал, который увидит зависание.
Nikolay писал(а):
... после ошибки Watchdog'a?
Сработал Watchdog ищи ошибку в программе, если будешь сбрасывать, тогда ты ее никогда не найдешь.
oldDad правду пишет, верь ему:
oldDad писал(а):
В промышленных, не самодельных контроллерах бит ошибки по сторожевому таймеру всегда fatal error, и никакого автоматического перезапуска, упаси Боже, не бывает и быть не может.
Последний раз редактировалось: dv_ (Чт 16 Авг, 2007 14:01:20), всего редактировалось 1 раз
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна. Открытие страницы: 0.141 секунды