Просмотр полной версии : Порча RETAIN переменной при срабатывании Watchdog'а
ПЛК73, булевская RETAIN переменная. При старте устанавливается в FALSE. Больше в коде записи в эту переменную нет вообще -- программа еще не дописана.
По ходу написания сделал случайно долгий цикл, словил рестарт по вочдогу. С изумлением увидел, что после такого рестарта эта переменная оказалась в состоянии TRUE.
Вообще, наверно, "reset" в неудачный момент времени может поломать запись в eeprom.
Поделитесь опытом. Есть такое -- порча RETAIN переменных? Кто как борется?
Дмитрий Артюховский
23.11.2015, 17:32
ретаин переменная запишется в память при выключении питания, никак не раньше... при ресетах и вачдогах, разряженных аккумуляторах вообще никогда ))) бороться - только организовывая собственное хранилище и сбрасывая туда инфо периодически
ретаин переменная запишется в память при выключении питания, никак не раньше... при ресетах и вачдогах, разряженных аккумуляторах вообще никогда ))) бороться - только организовывая собственное хранилище и сбрасывая туда инфо периодически
Насколько я смог прочитать в каком-то местном треде, у ПЛК63/73 другой подход, пишется сразу.
В 63/73 с собственными бортовыми хранилищами - проблема, но и резет "случайно" не прокатит.
Не доводить до собаки - и все будет пучком. С батарейкой само собой - иногда.
А что ТС ответил на предложение при соединении после собаки ?
В 63/73 с собственными бортовыми хранилищами - проблема, но и резет "случайно" не прокатит.
Не доводить до собаки - и все будет пучком. С батарейкой само собой - иногда.
А что ТС ответил на предложение при соединении после собаки ?
Извините, я не понял вопроса ) и ответа, пожалуй, тоже.
ТС это кто? и что именно с батарейкой иногда?
А файловой системы у 73 нету, да.
Нашел тред, http://www.owen.ru/forum/showthread.php?t=14258
И правда, сохраняется по потере питания.
Это, правда, не меняет сути изначальной проблемы -- мусор в RETAIN переменнной после вочдога.
Разъясните тупому -- такое бывает (или я что-то неверно проинтерпретировал)?
В чем проблема-то. В нормальной программе собаки в принципе быть не должно. И что там при ней случается - абсолютно ..ю
В чем проблема-то. В нормальной программе собаки в принципе быть не должно.
Согласен. Но в программах бывают ошибки.
И что там при ней случается - абсолютно ..ю
Не согласен. Такой вочдог, котоый мусорит в памяти, не лучше тупого зависания.
"Собака" нужна для сохранения работоспособности при возникновении не отловленной на этапе тестирования баги. Для программирования в других областях концепция вообще спорная -- сервер при возникновении серьезной ошибки пусть уж лучше упадет, вывалив в логи всю подноготную, чем будет изображать работу.
А когда данные испорчены -- ну что контроллер хорошего сделает? Если например уставки слетели, или что-то в таком роде..
Как минимум, нужно иметь возможность в программе узнать, не сработал ли вочдог в прошлом ресете.
"Собака" нужна для сохранения работоспособности при возникновении не отловленной на этапе тестирования баги
Ватчдог это голимое зацикливание. Его не исключить - расписаться в месторождении рук.Только на стадии написания.
Автор не понимает поведения своей собственной программы ? )))
Для программирования в других областях...
Для выпекания пирожков тоже не подходит.
Ватчдог это голимое зацикливание
Нет. Вотчдог это ресет, который случается, когда зацикливание случилось. Дополнительная фича.
Как вы думаете, зачем такая возможность предусмотрена? Почему бы не оставить контроллер в глухом цикле, например?
приборист
24.11.2015, 14:17
Нет. Вотчдог это ресет, который случается, когда зацикливание случилось. Дополнительная фича.
Как вы думаете, зачем такая возможность предусмотрена? Почему бы не оставить контроллер в глухом цикле, например?
Это не дополнительная фича.
Это ошибка, как не крути, причем фатальная.
Оставить в глухом цикле?
Ну пусть ПЛК вечно будет по кругу гонять, на выхода\входа наплюет, будет искать выход из лабиринта пользовательского кода.
Давайте будем точны в понятиях. Ошибка -- это именно глухой цикл. Вотчдог -- это способ минимизировать последствия такой ошибки.
Что глухой цикл это ошибка, никто не спорит.
Вот вы выходы упомянули. Для них предусмотрены безопасные дефолтные состояния. Понятно почему -- между ресетом и инициализацией пользовательского кода есть сколько-то времени, в это время лишних действий установка делать не должна.
Retain переменные для чего нам нужны? Чтобы в широком смысле знать, каково состояние установки. Сколько проработала, выключили ее нормально или питание обрубили, и все такое. Разрушение этих данных может быть настолько же фатально, как неконтролируемое состояние входов.
Грубо говоря, если сработал вочдог -- надо прекращать всякую работу и начинать отладку. беда в том, что из-за порчи флагов как раз и невозможно точно сказать -- стартуем мы после нормального включения, или после вочдога.
Поэтому retain не должен портится. Ну или пользователь должен быть предупрежден, чтобы сохранять данные с камим-нибудь CRC.
Филоненко Владислав
25.11.2015, 19:17
Если этот ретайн вообще есть... А если ни разу питания не выключалось?
Заводим флаг "была авария". Сбрасываем его только в процедуре штатного выключения. Если при старте флаг выставлен -- что-то было не так, а если сброшен -- то, значит, выключали как положено. Ну или данные испорчены :mad:
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot