PDA

Просмотр полной версии : ПЛК110 и быстрый таймер... непонятно



Дмитрий Артюховский
05.03.2011, 16:17
ПЛК110-60-220 (перешит в 10.9 ибо с поставляемой 10.12 программа не работает) получен в феврале 2011 года. Программа грузиться, загрузочный проект делается. После включения питания начинает постепенно увеличиваться время цикла до полного исчерпания свободных ресурсов.... если сделать программный сброс кодесисом (online->reset) программа начинает нормально работать. Аналогичная ситуация возникает после загрузки проекта кодесисом в контроллер после запрещения загрузки сохраненного проекта (удержание кнопки старт/стоп после нажатия скрытой кнопки). В программе успользуются прерывания быстрого таймера. В контроллерах купленных осенью данной проблемы нет, 2 установки успешно работают. Все переменные явно инициализируются, в ретайне ничего не храниься.

Николаев Андрей
05.03.2011, 18:25
Сказал бы что программа не корректна, но в Вашем случае шансы - минимальные :)
За это время ничего не менялось в контроллерах...
А пришлите лог терминала...
И если получится фотографию Flash памяти на верхней плате на старом ПЛК (работающем) и на новом...

Дмитрий Артюховский
09.03.2011, 10:14
выслал, надеюсь на скорейшее и положительное )))
кстати, не понятно почему прога не работает в более новой (чем 10.9) прошивке

Дмитрий Артюховский
14.03.2011, 09:29
:eek: изменить время цикла - это не решение проблемы, а только временное решение для отладки второстепенных функций :eek:

!!!! меняю новые ПЛК110 на старые !!!!!
Время цикла 20 мс программа дна и таже....
- старый ПЛК (pic v13) прошивка 2.10.9 реальный цикл 2,5-4,8 мс
- новый ПЛК (pic v14) прошивка 2.10.9 до "ресет" реальный цикл 8.5-11.2; после "ресет" реальный цикл 1,2-2,4 мс
- новый ПЛК (pic v14) прошивка 2.12.7 до "ресет" реальный цикл 9,0 - 11,2; после "ресет" реальный цикл 4,0-7,0 мс

Дмитрий Артюховский
16.03.2011, 11:52
в общем-то стало понятно что произошло... не понятно что делать!

В контроллерах изменилась прошивка железа из-за чего резко поднялись накладные расходы на организацию прерываний таймера (PIC v13 -> PIC v14). Это могут быть какие-то дополнительные проверки, либо появились дополнительные служебные прерывания (либо изменен приоритет каких-либо существовавших ранее). Причем не в базовой прошивке, а в микропрограммах внутренних микропроцессоров обвязки, поскольку установка прошики, на которой работала задача ранее проблемы не решает.
Почему именно накладные ? да потому что загрузка процессора слабо меняется от длины пользовательской программы обработки прерывания таймера (а она не маленькая!!) и очень сильно зависит от частоты вызова прерывания.

"Онлине-ресет" напрочь портит функционирование подсистемы прерываний, поэтому и время цикла нормализуется... но при этом показывается нормальная инициализация библиотеки и что-то там крутиться (потому что заблокировав инициализацию библиотеки уменьшаем время цикла в 2 раза), но функция не работает до инициализации контроллера питанием :eek:

Короче, при при уменьшении частоты вызова прерывания в 5 раз ( до 100 мкс против начальных 20 ) программа стала ворочаться..... но функционал понятно под большим вопросом, быстродейтсвия то не хватает катастрофически.


Блин, второй раз такие капитальные траблы (((( первый раз на ПЛК100 при переходе от 2.03 к 2.05 отработанные программы отказались работать на новых прошивках... теперь "улучшение" ПЛК110, причем уже не устраняется простой перешивкой......
ну, хорошо, зачем-то это нужно.... но дайте возможность заказать ПЛК в проверенном варианте!!!! Мало кто делает разовую установку, в большинстве случаев хочется выполнив разработку один раз, в последствии просто тиражировать ее!!!! Чтож мне теперь выкидывать всю весьма дорогостоящую обвязку закупленную для СЕРИИ установок??? и отказываться от договорных обязательств???

lara197a
16.03.2011, 15:43
прошивки выложены на сайте Овен.

Дмитрий Артюховский
16.03.2011, 16:31
прошивки выложены на сайте Овен.

в том то и есть засада, откат прошивки на рабочую не решает проблемы (((

Филоненко Владислав
17.03.2011, 14:01
Никакая прошивка вспомогательного процессора не способна повлиять на работу основного.
Хорошая была гипотеза...

Дмитрий Артюховский
17.03.2011, 17:22
Ура!! заработало!! - все таки прошивка вспомогательного, пусть и недопроцессора ))))
Вывод => всегда нужен запас { времени, памяти, температуры, производительности и пр } .... плохо только что за этот запас никто не хочет платить )))) (и всегда появиться причина, по которой сделанный запас будет маловат)

Шабельник Николай
30.05.2011, 13:02
Что сделали что бы заработало ?

Филоненко Владислав
31.05.2011, 10:24
Дмитрий, о какой прошивке вспомогательного процессора Вы ведете речь? То, что мы с Вами делали и вроде бы, с Ваших же слов все помогло - никакого отношения к вспомогательному процессору не имело.

А что он сделал - просто разогнал процессор на 10%. С нашей помощью. Но так делать нельзя, в принципе, надо оставлять запас ресурса. Традиционная русская инженерная школа рекомендует запас от 1,5 раз (освещение туалета) до 3-х раз (серьезные проекты) и 10 раз (например, АЭС) :)

Дмитрий Артюховский
31.05.2011, 12:49
Я бы назвал это не "разогнал на 10%", а "вернул на производительность, на которой проект разрабатывался".
А сделано было следующее : после установки нужной прошивки дополнительно выполняется настройка стартового загрузчика специальной утилиткой (любезно предоставленной В. Филоненко) и ядро начинает работать не на 180 МГц, а на 200 МГц положенных по паспорту.

Тупо не хватило ресурсов времени, в проекте активно используется прерывание быстрого таймера, поэтому каждый такт важен. Проект был разработан и принят в серийное производство на контроллерах работавших на частоте 200 МГц, а через год, по каким-либо внутренним причинам разработчики понизили частоту ядра до 180 МГц.

Запас времени цикла при работе с прерываниями расходуется по другому. Сейчас длительность цикла в проекте выставлена 5 мс, согласно модуля статистики Free processor resource = 2400-2500 mks, казалось бы - запас в 100%!!!! Однако, на 180МГц данный запас сжирается по копеечке и через 10-15 секунд работы свободных ресурсов времени не остается, появляется флаг "переписывайте программу" и прочие чудесатые чудеса....

Кстати, быстрое прерывание написано на LD, попытки сформулировать тоже самое на ST давали в 2 раза худшие показатели времени... так что утверждению об одинаковости скорости выполнения программ на разных языках нужно относиться осторожно )))

Филоненко Владислав
31.05.2011, 20:10
Программирование прерываний - особое искусство :)
А чтобы не иметь в таких проектах проблем с производительностью - просто удвойте число команд после того, как получили рабочий макет. Если все продолжает работать - то ОК, если же нет - то надо что-либо менять.
И проблем потом с расширением функционала не будет.