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