Найти в Дзене

Программирование в owenlogic. Универсальный счетчик CTN.

Продолжим рассмотрение счетчиков в среде owenlogic. Предыдущая статья про счетчик CT. (ссылка) Основные отличия от предыдущего счетчика: 1. Наличие входа для уменьшения счетчика. 2. Выход Q теперь не булевое значение, а целое. Блок выставляет текущее значение счета. Набросаем простенькие программки, чтобы посмотреть, как работает этот функциональный блок. I1 - для инкрементного счета, I2 - для декрементного счета. I3 - присваивание значения уставки. Конструкция "X->B" нужна для, того чтобы связать блок с выходом контроллера, иначе симулятор не будет показывать значение (особенность owenlogic). Видео на ютубе. Обратите внимаение, что при уменьшении после нуля счетчик принимает значение 65535. Это из-за того,что в owenlogic целые числа только положительные (у сегнетика же область значений -32768 ... 32767, и еще tcnm 32 битные). Сейчас сделаем аналогично предыдущей статье (в ней более подробно и про блинкер, и про запись уставки), только все сразу :) BLINK1 задает импульсы - переменна

Продолжим рассмотрение счетчиков в среде owenlogic. Предыдущая статья про счетчик CT. (ссылка)

Скрин справки по счетчику CTN
Скрин справки по счетчику CTN

Основные отличия от предыдущего счетчика:

1. Наличие входа для уменьшения счетчика.

2. Выход Q теперь не булевое значение, а целое. Блок выставляет текущее значение счета.

Набросаем простенькие программки, чтобы посмотреть, как работает этот функциональный блок.

-2

I1 - для инкрементного счета, I2 - для декрементного счета. I3 - присваивание значения уставки. Конструкция "X->B" нужна для, того чтобы связать блок с выходом контроллера, иначе симулятор не будет показывать значение (особенность owenlogic).

Видео на ютубе. Обратите внимаение, что при уменьшении после нуля счетчик принимает значение 65535. Это из-за того,что в owenlogic целые числа только положительные (у сегнетика же область значений -32768 ... 32767, и еще tcnm 32 битные).

Сейчас сделаем аналогично предыдущей статье (в ней более подробно и про блинкер, и про запись уставки), только все сразу :)

-3

BLINK1 задает импульсы - переменная pulsar. Вход I1 - увеличение, вход I2 - уменьшение, блоки AND пропускают импульсы на вход счетчика, в зависимости от того, какой вход включили. I3 - запись уставки.

Видео на ютубе.

В завершение статьи можно сделать макрос для запуска вентсистемы. Алгоритм стырим у сегнетика (в конструкторе вентиляций сегнетика у калорифера есть метод запуска №2, статья про конструктор здесь). Суть этого метода в том, что Сигнал с ПИД-регулятора подпираем плавно снижающейся прямой, таким образом ПИД-регулятор с перегревом, но выходит на задание без закрытия клапана в ноль. Помогает при низких температурах, или когда система очень медленно реагирует.

Макрос
Макрос

В этот макрос я еще встроил входы для защит по угрозе заморозки от термостата, авария насоса, низкая температура воды, низкая температура канала.

Работа макроса:

Сигнал на калорифер 0-100

Если приходит любой из аварийных сигналов, то на выход макроса выставляется фиксированное значение 95.

Если аварийных сигналов нет, то на выход подаем Y_fromPID. Выходной сигнал ограничен сверху значением 100, снизу low_limit (который мы, собственно, плавно снижаем при старте). Как это происходит:

Из программы на вход F_progrev при старте поступает логическая единица, которая взводит счетчик в значение 100. На вход сравнивалки GT подается соточка и GT запускает блинкер, который подает импульсы на счетчик. Счетчик , в свою очередь, уменьшается с каждым импульсом (скорость снижения задается настройками блинкера). Выход счетчика и есть low_limit, который подпирает сигнал на пид-регулятор. Постепенно счетчик снижается до нуля и GT останавливает блинкер. Ссылка на макрос.