Таймеры CoDeSys |
Ответить | Страница <1 7891011> |
Автор | ||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
Опубликовано: 28 Май 2007 19:07 |
|
Приветствую. С уважением, SAN |
||
Участник Присоединился: 27 Апрель 2005 Категория: Ukraine Online Status: Offline Публикации: 81 |
||
Прочитав вышеприведенную дискуссию, вспомнил ситуацию почти 20-летней давности. Тогда я работал в г. Северодонецк НИИУВМ. Я разрабатывал отладчик микрокода. На этом микрокоде программировались процессорный и другие модули. Так как "микрокодистов" не хватало, поручили писать программы на микрокоде обычным программистам ( а точнее -ткам). Вот и у них возникали точно такие же проблемы: почему после останова все зависает и так далее. С этим они шли ко мне. Когда я обратился к главному разработчику, он мне ответил: "Ты свой отладчик изменить не сможешь и мы архитектуру поменять не сможем, просто эти программы должны писать другие люди, которые понимают где можно ставить точки останова". Ничего вам это не напоминает? |
||
AlexZ
|
||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||
По поводу загромождения кода отладочными кусками: Это естественно. Отладчик дает только базовый набор инструментов, они работают эффективно только в умелых руках . В каждой программе есть своя специфика и соответственно свои узкие места и разные ключевые данные. В CoDeSys V2 нет директив условной трансляции, чтобы включать/выключать отладочные фрагменты. Однако, это удобно делать через биб-ки. Т.е. объединяем ключевые POU в биб-ку и делаем 2 версии: отладочную и рабочую. В менеджере библиотек подключить при компиляции нужную можно 'легким движением руки'. ИМХО Любой POU нужно писать так, как будто он работает во враждебном окружении (концепция защитного программирования). Т.е. может получить на вход совершенно 'дикие' данные, контроль на допустимость лишним не будет. Кроме того, ОЗУ вполне имеет шанс сбойнуть. Программа при этом не должна с ума сойти, а постепенно сама выправить данные. Например, в циклах не стоит писать '=' в качестве условия окончания, лучше '>' или '<'. Если вдруг переменная получает нереальное значение, то надо установить ее в некое разумное значение. Все это совсем не сложно, нужно просто думать об этом и выработать привычку, что достигается практикой. Ну и выуживается из программ и публикаций опытных людей
Отличная мысль! Было бы очень интересно. |
||
Igor Petrov
|
||
Действительный член Присоединился: 19 Апрель 2006 Online Status: Offline Публикации: 136 |
||
Хочу продолжить тему следующим вопросом. Создал я на базе двух блоков TP генераторы коротких импульсов, которые тактируют работу (EN/ENO) инвертеров двух переменных. У TP1 PT1=T#2s , у второго PT2=T#4s. При запуске программы генерируется 2 меандра со скважностью 50% и периодом 2*PT1 и 2*PT2. В начале все синхронно переключается в одной фазе, а потом со временем возникает какая-то рассинхронизация (смещение фазы)... Ума не приложу в чем дело? |
||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||
Возможно, перезапуски таймеров происходят не абсолютно одновременно и эта мизерная разница аккумулируется ими. Я бы после PT1 поставил счетчик/делитель импульсов на 2 вместо PT2 чтобы все было гарантировано четко. |
||
Igor Petrov
|
||
Действительный член Присоединился: 19 Апрель 2006 Online Status: Offline Публикации: 136 |
||
Посидел, подумал еще. И понял, что на сброс генератора импульсов тратится 1 цикл (т.е. в моем случае 100ms), который я не учел, выбирая период. Привильно для входа PT блока TP будет задавать время в виде (T#Ns -T#100ms) , где T#100ms- это период рабочего цикла котроллера! |
||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||
А может использовать не два отдельных генератора, а ОДИН формирователь общей сложной последовательности - практикуется довольно часто, реализуется довольно просто и многими способами (хотя я не в курсе конкретной задачи) С уважением, SAN |
||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||
Логично, это я и предлагал: 1 таймер + делитель.
|
||
Igor Petrov
|
||
Новичок Присоединился: 10 Октябрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 33 |
||
Еще вопрос о таймерах: Требуется чтобы определенное событие проиходило каждые 8мс, как это сделать с помощью таймеров кодесиса? Прерываний я так понял никаких нет по таймерам как например в контроллерах Атмел... |
||
Участник Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
||
Пишешь свой POU в котором делаешь все, что нужно. Далее определяешь его в Task configuration и ставишь время T#8ms. Все.
|
||
Ответить | Страница <1 7891011> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |