![]() |
Таймеры CoDeSys |
Ответить ![]() |
Страница <1 56789 11> |
Автор | |||
![]() Действительный член ![]() Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
![]() ![]() ![]() ![]() Опубликовано: 06 Апрель 2007 21:06 |
||
PS. Вычисления в CoDeSys выполняются не матричными уравнениями как в SPICE моделировании радиосхем, а простыми - линейными. Можно набросать какую-нибудь блок-схему, преобразовать в текст IL , и терпеливо поизучать в каком порядке выполняются логические уравнения, и расположены в них переменные с неизвестными. В еще большее заблуждение можно впасть при использовании динамических элементов с обратными связями, например - триггеры. Я это излагаю за тем, чтобы кто-то сразу принял бы верный тон, начиная творить в CoDeSys. С уважением, SAN
|
|||
![]() |
|||
![]() Действительный член ![]() Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
![]() ![]() ![]() ![]() |
||
В смысле, что надо русский? Открыть нет проблем, нужен только модератор доброволец (ежедневная, кропотливая бесплатная работа).
Тут надо исхитриться строго одновременно ставить оба входа, иначе блок успевает сработать 1 раз и уже измененное значение X2 правильно присваивается само себе. Сделайте другую переменную X3 на вход и все станет на места.
Это же очевидно, просто нужно думать, как ставить порядок выполнения блоков в CFC. Кстати напоминаю про конференцию! Пора записываться! |
|||
Igor Petrov
|
|||
![]() |
|||
![]() Участник ![]() Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
![]() ![]() ![]() ![]() |
||
ясно. Спасибо
|
|||
![]() |
|||
![]() Участник ![]() Присоединился: 02 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 54 |
![]() ![]() ![]() ![]() |
||
вот я преобразовал SEL в LD, и что я вижу - там тот же SEL. А как он будет выполняться? За один цикл или он в свою очередь тоже "подразумевает", что за ним там целая программа выполняется? А вообще где то указывется за сколько тактов можно ждать на выходе функционального блока ответа? |
|||
![]() |
|||
![]() Действительный член ![]() Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
![]() ![]() ![]() ![]() |
||
Ну вот - дальше LD перевести в IL, то-есть в последовательность строчек текста. Лучше бы конечно в ST, но такого преобразования нет. Смысл тут в том, что последующие уравнения используют результаты предыдущих, которын в свою очередь еще не готовы, и т.д. Очень наглядно это видно на простейшем триггере из двух И-НЕ. По идее он должен быть полностью симметричным, но после пары шагов (в ручном режиме) становится ясно, что модель не совпадает с реальным прототипом. С уважением, SAN
|
|||
![]() |
|||
![]() Действительный член ![]() ![]() Присоединился: 15 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 805 |
![]() ![]() ![]() ![]() |
||
К _IP_: А вот возник вопрос такой: известно ли как устроена в CoDeSys функция TIME? Просто возвращает содержимое какого-то регистра или может быть вдруг какие-то прерывания обрабатываются или еще что?
|
|||
![]() |
|||
![]() Действительный член ![]() ![]() Присоединился: 15 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 805 |
![]() ![]() ![]() ![]() |
||
А если это просто регистр, то как часто обновляется? Независимо или поцикленно? |
|||
![]() |
|||
![]() Действительный член ![]() Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
![]() ![]() ![]() ![]() |
||
Что за функция TIME, в смысле стандартные МЭК функц. блоки таймеров TON, TOF? Они работают внутри так: в контроллере есть 1 аппаратный таймер. Экземпляров функц. блоков TON, TOF может быть неограниченно много. Каждый из них имеет внутри переменную, по которой 'засекает время' при старте. Далее при каждом очередном вызове он проверяет, вышло ли заданное время или нет. Т.е. прежде чем проверить изменение выхода таймера, его нужно обязательно перед этим вызвать. Если блок не вызывать (например, обойти его в программе), то время все равно идет. В целом стандартный таймер позволяет определить что время уже вышло, но не гарантирует, как давно оно вышло. Чтобы поймать этот момент с нужной точностью нужно с соответствующей частотой его опрашивать. По умолчанию, аппаратный таймер = регистр, который обновляется независимо по прерыванию через 1мс. Должно быть так. |
|||
Igor Petrov
|
|||
![]() |
|||
![]() Действительный член ![]() ![]() Присоединился: 15 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 805 |
![]() ![]() ![]() ![]() |
||
Есть там функция TIME(); |
|||
![]() |
|||
![]() Действительный член ![]() Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
![]() ![]() ![]() ![]() |
||
Да, она просто возвращает значение вышеописанного регистра. Практически это время с момента рестарта. |
|||
Igor Petrov
|
|||
![]() |
Ответить ![]() |
Страница <1 56789 11> |
Переход на форум | Права доступа на форуме ![]() Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |