Ясно, спасибо.
По ссылке, которую я давал чуть раньше, как раз обсуждались нюансы сохранения Retain'ов при перезапуске по бесконечному циклу через watchdog. Не в этом ли причина?все же - как именно сбрасывает вотчдог? Идет ли после этого неявная инициализация переменных?
Но это не то, братцы...
Я не использую RETAIN вообще. Но есть много обычных переменных. Инициализация их идет такими способами:
1) Совершенно неявно: начальное значение переменной не имеет для меня значения, т.к. при первом ее использование предполагается, что этой переменной будет присвоено значение (это большинство очень локальных, временных переменных). Первая операция - запись переменной.
2) Операцией присвоения в процессе инициализации программы: есть часть кода, которая выполняется 1 раз после старта программы. В дальнейшем значение переменной может либо использоваться в операциях чтения-записи, либо только читаться.
3) Операцией присвоения при объявлении переменной. Интересно, эта операция производится при перезапуске от собаки?
4) Думаю, что при запуске работы контроллера он может устанавливать свое ОЗУ в определенное состояние (скорее всего, нули). Происходит ли это в ПЛК100? Происходит ли это при перезапуске от собаки?
Ответов на эти вопросы в той ветке я не нашел. Где-то еще есть описание разных типов сбросов ПЛК (в режиме ОНЛАЙН), сейчас буду искать. Но не уверен, что там четко сказано о собаке.
Ну, братцы, я таки действительно доигрался.
Прошу подсказать, как мне теперь сбросить программу у ПЛК. В ходе своих экспериментов я сделал шедевр, в котором за 50 мс после старта программа уходит в мертвый цикл. После положенных 1000 мс вотчдог дает рестарт. ПЛК вякает своим противным зуммером и сидит некоторое время в глубокомысленных стартовых процедурах ("что он там так долго делает?" Обычный вопрос возле туалетной комнаты в коммуналке...). Затем он 50 мс работает. И все повторяется.
А чуднодивный гейтвей устроен так, что системе не все равно, чем там занят процессор. Ей, видишь ли, нужно, чтобы процессор работал.
В результате, ОНЛАЙН не включится, если проц сидит в мертвой петле. После перезапуска ПЛК система тоже не хочет с ним вязаться. Вероятно, те единственные 50 мс, когда ПЛК работает по программе, слишком малы, чтобы установить ОНЛАЙН.
Сухой остаток: я не могу теперь подключиться к ПЛК. Я не могу перешить программу или хоть стереть ее как-то. Кто знает, каковы выходы? "Выбросить в форточку" - плохой совет. У меня 13-й этаж.
Для меня это набор английских букв и символов))) всегда когда смотришь на это и думаешь неужели я когда буду в этом разбиратся
там вроде при нажатой утопленной кнопке сброса надо выключить питание, вроде как то так
"Отче наш" читать или нет?
Впрочем, пробовал и так, и эдак. Не помогло.
Какие еще варианты?
ДОБАВЛЕНО: Перепрошивка помогла. Очевидно, во время загадочной надписи "Идет форматирование" (с очень эмоциональным восклицательным знаком) форматируется таки память. Слава Богу!
Последний раз редактировалось drvlas; 11.12.2012 в 15:47.
Итак, работоспособность ПЛК восстаноовлена.
Снова вернемся к вопросу рестарта программы. Сброс неодинаков от меню СБРОС отладчика и от включения питания
В приложении проект. Желающие могут его развернуть и проверить, мож у меня руки кривые...
Опишу кратко для тех, кому влом запускать проект.
Весь_проект_с_собакой.jpg
В проекте запускается аппаратный генератор на дискретном выходе 6.0. Частота генератора должна быть 10 Гц, меандр.
В Конфигураторе создал Генератор с частотой Out11Freq, дьюти-сайклом Out11Duty и непрерывной генерацией.
В программе есть начальный участок, который устанавливает частоту генератора 10 Гц. Этого должно быть достаточно, если никто больше к переменной Out11Freq не обращается?
Компилируем, грузим проект. Запускаем, видим частоту 10 Гц. Можно и без осциллографа - в отладчике при работе ОНЛАЙН видно, что переменная Out11Freq таки равна 10.
Сброс от Кодесиса ничего не меняет, все работает прекрасно.
А теперь сброс кнопкой на ПЛК. И, о-па! Частота стала 1 Гц. Это видно и осциллом, и по значению переменной Out11Freq, если сейчас подключиться отладчиком. Она равна 1, то есть 1 Гц.
Такое же поведение при выключении питания и повторном включении.
Я так понимаю, что инициализации переменных не произошло, переменная Initialized не стала ЛОЖЬю, начальный участок программы не прокрутился... Или где? Где рыться. чтобы понять разницу в сбросах от системы отладки и от выключения питания?
Причем, что прискорбно, именно сброс от выключения питания дает плохой (для моей задачи) результат. Бог с ней, с системой отладки, но как же работать с непонятной мне инициализацией переменных?