Таймеры CoDeSys |
Ответить | Страница <1 678910 11> |
Автор | |
Участник Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
Опубликовано: 22 Май 2007 12:01 |
А почему после остановки программы через точки останова, таймеры продолжают работать? т.е. по истечении времени .PT, таймер все равно установит выход .Q в TRUE, не зависимо от того, стоим на точке останова или программа продолжает работать. Уж очень это не удобно, да и не правильно по-моему.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Вообще говоря, режим Реального Времени и точки останова - две вещи несовместные ! Но есть куча приемов для отладки в режиме RT. Все зависит от конкретной частной задачи. Все таймеры и счетчики в CoDeSys сами ничего не считают. Они только "выхватывают" значения системного аппаратного счетчика, который работает непрерывно. После открытия счета таймеры начинают давать приращение своей внутренней переменной. При сбросе - обнуляют. На выходе TP сигнал Q меняется не сам-собой, а после нажатия кнопки отладки (F5). По истечении заданного времени (реального) системный счетчик достигнет величины срабатывания (и продолжит считать дальше), но сигнал на выходе не изменится - таймер будет "заморожен". Его состояние изменится при нажатии кнопки. Это равносильно тому, что время срабатывания таймера было задано вручную - и смысл отладки достигнут ! Не видно никаких "неудобств". С уважением, SAN |
|
Действительный член Присоединился: 01 Июнь 2006 Категория: Russian Federation Online Status: Offline Публикации: 464 |
|
ИМХО точки останова никак не связаны с концепцией распределения аппаратных ресурсов в многопоточной среде. Обеспечивает это распределение детерминированное выполнение в системе реального времени или реализующее вытесняющую многозадачность. Какая собственно разница. Сам по себе процесс по большому счету любой может быть остановлен на любом шаге, если при этом будут остановлены все сопутствующие процессы. Это видно из простых логических умозаключений. Другое дело, что среда программирования прерывает только процесс разрабатываемого приложения, но среда исполнения при этом никаких изменений не претерпевает, продолжая функционировать в обычном режиме, посему и таймер привязанный к аппаратному таймеру не может быть остановлен. Но это вовсе не говорит о неприемлемости точек останова. Более того возьмите хоть SoftIce он позволяет поставить в стоп вообще всю ОС. Да собственно выполнение любого кода останавливается по завершении кванта времени выделенного потоку. Так что это нормально естественно и логично, и ничего предосудительного в поведении таймера нет… |
|
Участник Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
|
Задача была следующая:
Tmr_cycle(IN :=TRUE, PT:=_T_cycle); IF Tmr_cycle.Q THEN Tmr_cycle.IN:=FALSE; ELSE (* операторы *) END_IF; нужно было было определить как изменяются перемееные во врмя работы таймера и после его срабатывания. Делаем останов на строке запуска таймера, пошагово проходим операторы которые программа должна сделать после запуска и доходим до строки, где идет проверка срабатывания нашего таймера. Реально конечно проходит больше времени чем _T_cycle. Поэтому условие однозначно выполняется и таймер отключается. И мы не можем увидеть как же выполняются наши операторы после ELSE. |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Дэк-с ... Проблемы-то вроде нету. Теоретическая часть. С уважением, SAN |
|
Участник Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
|
Ну, а разве не для отладки придуманы всякие там точки остановки, пошаговый режим и симуляция? По-моему как раз для того, чтобы посмотреть как будет себя вести система в каком-то определенном случае. Мне просто хочется видеть как изменится время в таймере через один, два, ... шага. Внутренний счетчик таймера можно же останавливать, на время когда точки останова активны.
И почему приходится вставлять дополнительный код в программу только для отладки? Я не говорю, о том, что мне жалко времени или памяти контроллера для дополнительных переменных. Но на мой взгляд - это недостаток среды, если приходится дописывать что-то только для отладки. |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Отнюдь ! Но это еще не все. В окончательном варианте, кроме основной своей части, программа набита еще вспомогательным кодом, который отрабатывает всякие нештатные ситуации. То была статическая отладка. Динамическая (в реальном времени) добавляет свои специфичные особенности. 2-ое. Надо уточнить фразу : " .. посмотреть как считает счетчик ..". И если сделать цикл очень медленным (для отладки), то можно спокойно наблюдать за происходящим и без всяких точек останова, в реальном времени ! Правда скачки приращений будут довольно большими, но для отладки переменные всегда можно подогнать под нужную кратность пересчета. 3-тье. Останавливать счетчик RT не имеет смысла - на то он и счетчик Реального Времени ! Дело не в плохой разработке среды. Есть вещи принципиально невозможные. Рассмотрение момента времени и движущееся время - несовместимы (как длину измерять в квадратных килограммах). Если остановить счетчик, то он перестанет быть счетчиком Реального Времени - в этом смысл его сути (). Часто бывает надо выяснить какую-то конкретную предполагаемую ситуацию. Например, значения переменных при определенном значении другой переменной. Или состояние при достижении какого-то числа счетчика и т.д. Специально на эти случаи вставляется отладочный код, или точка останова. С уважением, SAN |
|
Участник Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
|
Спасибо, за объяснение. Может быть (наверное) Вы и правы. Я осознал свою ошибку.
Прошу не обижаться кого может быть обидел. Видимо знаний моих критически мало. Необходимо их пополнять. Не подскажите где можно найти информацию кроме И.В. Петров Программируемые контроллеры и документации по CoDeSys? |
|
Участник Присоединился: 04 Апрель 2005 Категория: Russian Federation Online Status: Offline Публикации: 80 |
|
To Mixer http://www.prolog-plc.ru/tmpl.php?content=info3.htm SAN, а вы не думали оформить эти измышления в виде публикации? Почитать было бы многим интересно а не только форумчанам. |
|
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
|
Поставил точку останова на IF, попал в нее. Далее вручную поменял значение выхода Tmr_cycle.Q и пошел в какую надо ветку. Экземпляр FB таймера вообще можно раскрыть в отладчике и поменять значения внутренних перемененных, дабы привести его желаемое состояние. Жалко конечно, что время нельзя останавливать. Пока я сплю будильник (аналог таймера МЭК) мог бы постоять |
|
Igor Petrov
|
|
Ответить | Страница <1 678910 11> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |