В этой статье я опишу работу со счетчиками и таймерами в средах разработки Omron CX-One 4 и Delta Electronics ISPSoft 1.03, покажу различия в их реализации.
Это аналог кода Omron, который я привел на первой картинке.
Ссылки к статье
Эта среда разработки мне нравится больше всех (даже чем Siemens STEP 7. ИМХО, слишком наинтегрировали - много лишнего, если проект небольшой).
К счастью для всех (и к несчастью для оригинальности этой статьи), у Omron-а в справке очень подробно описываются практически все инструкции. Но моя цель - показать различия в реализации от разных производителей, так что я конспективно перенесу выдержки из справки.
Счетчики (и таймеры) у Omron делятся на два вида - считающие в BCD-формате и в десятичном. Способ применения одинаковый. Но у первых необходимо вносить данные, соответственно, в BCD. Это может оказаться полезным при работе с часами реального времени, т.к. именно в таком формате хранится текущая дата/время. Минусы при его использовании - максимальное значение в одном слове - 9999 и большее время на обработку инструкций.
![]() |
| Пример применения |
Инициирование счетчика происходит путем его сброса (это связано с тем, что значение счетчика сохраняется при отключении питания (без батарейки некоторое время)). Считает он в обратную сторону, так что, если просмотреть значение регистра C0 (текущее значение, PresentValue, PV), то увидим 10, а после переустановки W0.00 - 9.
В данном примере я объединил два способа сброса. По первому (с использованием W0.01, но вместо него можно на вход сброса поставить и бит C0 (флаг окончания счета)), досчитав, счетчик будет выдавать импульс на С0 и самосбрасываться. В этом способе, необходимо до первого счета уже обнулить счетчик. По второму, с использованием W0.02, остальной программе достаточно подавать счет на W0.00, первый сброс будет самостоятельным.
Также существует реверсивный счетчик. Отличия от обычного:
- Вход не один,а два: по одному текущее значение прибавляется (прямой счет), по второму убавляется (обратный счет)
- При сбросе текущее значение счетчика становится равным 0
- Флаг окончания счета устанавливается только в двух случаях:
- При использовании входа обратного счета был получен 0
- При использовании входа прямого счета было получено установленное значение (Set Value, SV)
Delta Electronics ISPSoft
В данной среде разработки все инструкции делятся на 16- и 32-битные. Для 16-ти битных счетчиков отведены регистры C0..C199, для 32-х - C200..C254. 32-битные поддерживают реверсивность. Достигается путем установки битов M1200~1254 соответственно для счетчиков C200-C254. Так же существуют высокоскоростные счетчики, счет которых может вестись со входов независимо от цикла сканирования (у Omron для этого есть аппаратные функции). Их адреса - с поддержкой обратного счета: С232..С242, C245..C254. С прямым счетом: C243, C244. Счетчики с прямым счетом считают в диапазоне от 0 до установленного значения (максимально 32767 или 2147483647). 16-битные прекратят свой счет после его достижения, 32-битные же продолжат. 32-битные с поддержкой обратного счета считают в диапазоне -2147483648..+2147483647. Флаг достижения счета будет включен только если текущее значение будет равно установленному. После переполнения продолжат с
-2147483648. Без поддержки от 0 до 2147483647. После переполнения продолжат с 0. В отличии от Omron, сброс при первом запуске не требуется. Сброс осуществляется путем применения инструкции RST - "сбросить бит" к имени счетчику. Сбрасывается флаг окончания счета и текущее значение становится 0.
![]() |
| Аналог кода на Omron |
Это аналог кода Omron, который я привел на первой картинке.
Кстати, если в текущее значение (PV) 16-битного счетчика записать число, большее чем уставка (SV),то в следующий раз, когда будет инициирован счет, включится флаг окончания счета и текущее значение счетчика станет равным уставке.
Для более детального рассмотрения высокоскоростных (программных и системных) счетчиков предлагаю ознакомиться с 61-66 руководства (2).
Таймеры
Omron CX-One
Аналогично счетчикам, все таймеры разделяются на считающие в BCD- и BIN-формате. Дополнительно, таймеры разделяются по единицам измерения: 100 мс таймеры, 10 мс и 1мс. 32-битную модификацию имеют только 100-мс таймеры. Считают таймеры с уставки до нуля. Тип таймера определяется при запуске его определенной инструкцией.
![]() |
| Примеры применения |
Таймеры запускаются подачей на них сигнала. После пропадания сигналов 0.00, 0.01 текущие значения T0, T1 (регистры) таймеров становятся равными уставке (даже если счет не закончен) и снимаются T0, T1 (биты) флаги окончания счета.
Также существует накопительный счетчик (100мс, 16-бит, BCD/BIN). Отличается тем, что считает от нуля до уставки, после снятия сигнала счета не сбрасывает своего текущего значения и после восстановления сигнала продолжит счет с того значения, на котором остановился. Сброс таймера осуществляется дополнительным входом сброса. С таким таймером нужно помнить это отличие, чтобы на автомате не забыть, что если подали сигнал сброса, то флаг окончания счета сбросится только в следующем цикле, при исполнении этой инструкции. О таких ситуациях я напишу отдельную статью.
Delta Electronics ISPSoft
Таймеры Delta Electronics отличаются от Omron в том, что их применение заранее определно номером используемого регистра. Все они считают от 0 до уставки и только в десятичном формате. 32-битные инструкции займут два регистра [T0,T1], [T2,T3].
- Регистры для 100-мс таймеров стандартных: T0..T126, T128..183
- Регистры для 100-мс таймеров накопительных: T250..T255
- Если установлен бит M1028, то разрешение T64..T126 - 10 мс.
- Регистры для 10-мс таймеров стандартных: T200..T239
- Регистры для 10-мс таймеров накопительных: T240..T245
- Если установлен бит M1028, то разрешение T200..T245 - 1 мс.
- Регистр для 1-мс таймера стандартного: T127
- Регистры для 1-мс таймера накопительных: T246..T249
В прерываниях и подпрограммах разрешается использовать только T184..T199.
![]() |
| Стандартный таймер |
![]() |
| Накопительный счетчик |
![]() |
| Аналог кода на Omron |
В прерываниях и подпрограммах разрешается использовать только таймеры T184..T199.
У Delta существует обучающийся таймер, который представляет из себя инструкцию TTMR, записывающую в указанный регистр время выбранного бита в положении "включено". Всего в программе можно вызвать её 8 раз. А в прерывании или подпрограмме 1 раз.
Также есть инструкция специального таймера STMR (только 16 бит, для T0..T183), который предназначается для управления определенным образом четырьмя битами в соответствии с установленным временным интервалом.
![]() |
| Специальный таймер: циклограммы управления |







Комментариев нет:
Отправить комментарий