Модули измерения и отсчета времени

ALARM_2

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

X

REAL

Контролируемое значение

LO_1

REAL

Нижний предел 1

HI_1

REAL

Верхний предел 1

LO_2

REAL

Нижний предел 2

HI_2

REAL

Верхний предел 2

HYS

REAL

Значение гистерезиса

Выходы

Q1_LO

BOOL

Флаг «значение меньше нижнего предела 1»

Q1_HI

BOOL

Флаг «значение больше верхнего предела 1»

Q2_LO

BOOL

Флаг «значение меньше нижнего предела 2»

Q2_HI

BOOL

Флаг «значение больше верхнего предела 2»

Функциональный блок ALARM_2 проверяет входное значение X на принадлежность диапазонам [LO_1…HI_1] и [LO_2…HI_2]. Вход HYS определяет величину гистерезиса. Выходы блока становятся активными в следующих случаях:

Graphic

Обычно с помощью диапазона [LO_1…HI_1] задаются пороговые значения для сигнала тревоги, с помощью [LO_2…HI_2] – для сигнала аварии.

Пример

VAR (* Экземпляр функционального блока ALARM_2 *) Alarm : OSCAT_BASIC.ALARM_2; (* Контролируемое значение (температура) *) Temperature : REAL := 85.0; (* 85 °C *) (* Настройки пределов *) LO_1 : REAL := 60.0; (* Нижний предел 1 (тревога) *) HI_1 : REAL := 80.0; (* Верхний предел 1 (тревога) *) LO_2 : REAL := 50.0; (* Нижний предел 2 (авария) *) HI_2 : REAL := 90.0; (* Верхний предел 2 (авария) *) HYS : REAL := 2.0; (* Гистерезис 2 °C *) (* Выходные флаги *) AlarmLO1 : BOOL; (* Меньше нижнего предела 1 *) AlarmHI1 : BOOL; (* Больше верхнего предела 1 *) AlarmLO2 : BOOL; (* Меньше нижнего предела 2 *) AlarmHI2 : BOOL; (* Больше верхнего предела 2 *) (* Состояние системы *) StatusMessage : STRING[50]; END_VAR (* Настройка параметров блока *) Alarm( LO_1 := LO_1, HI_1 := HI_1, LO_2 := LO_2, HI_2 := HI_2, HYS := HYS ); (* Циклический вызов блока с текущим значением *) Alarm(X := Temperature); (* Чтение выходных флагов *) AlarmLO1 := Alarm.Q1_LO; AlarmHI1 := Alarm.Q1_HI; AlarmLO2 := Alarm.Q2_LO; AlarmHI2 := Alarm.Q2_HI; (* Логика обработки *) IF AlarmHI2 THEN StatusMessage := 'АВАРИЯ: превышение верхнего предела 90 °C!'; ELSIF AlarmLO2 THEN StatusMessage := 'АВАРИЯ: падение ниже нижнего предела 50 °C!'; ELSIF AlarmHI1 THEN StatusMessage := 'ПРЕДУПРЕЖДЕНИЕ: температура выше 80 °C'; ELSIF AlarmLO1 THEN StatusMessage := 'ПРЕДУПРЕЖДЕНИЕ: температура ниже 60 °C'; ELSE StatusMessage := 'Нормальный режим'; END_IF; (*Результат при Temperature = 85 °C: - AlarmHI1 = TRUE (85 > 80) - AlarmHI2 = FALSE (85 < 90) - StatusMessage = 'ПРЕДУПРЕЖДЕНИЕ: температура выше 80 °C'*) END_PROGRAM (*Объявление конца программы*)

BAR_GRAPH

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

X

REAL

Контролируемое значение

rst

REAL

Сигнал сброса тревоги

Выходы

LOW

BOOL

Флаг «значение меньше нижнего предела»

Q1…Q6

BOOL

Флаги «значение в зоне 1…6»

HIGH

BOOL

Флаг «значение больше верхнего предела»

Alarm

BOOL

Флаг «тревога»

Status

BYTE

ESR-код

Параметры

trigger_Low

REAL

Нижний предел

trigger_High

REAL

Верхний предел

Alarm_low

BOOL

Режим «обработка нижнего предела тревоги»

Alarm_high

BOOL

Режим «обработка верхнего предела тревоги»

log_scale

BOOL

Режим «логарифмирование интервалов»

Функциональный блок BAR_GRAPH проверяет входное значение X на принадлежность диапазону [trigger_Low…trigger_High]. Выход LOW принимает значение TRUE, если значение X меньше нижней границы диапазона, выход HIGH – если больше верхней границы. Если параметры Alarm_low и Alarm_high имеют значение TRUE, то при выходе значения X за границы допустимого диапазона выход Alarm принимает значение TRUE. Выход Alarm остается активным до тех пор, пока не будет сброшен с помощью сигнала по переднему фронту на входе rst.

Если значение X находится в пределах диапазона, то активен один из выходов Q1…Q6, характеризующий интервал, в котором находится значение. По умолчанию интервалы являются равными:

Graphic

Если параметр log_ scale имеет значение TRUE, то размеры интервалов связаны через логарифм:

Graphic

Выход Status определяет состояние блока и совместим с ESR-модулями:

Значение выхода Status

Описание

110

Значение X находится в диапазоне [trigger_Low…trigger_High]

111

Значение X меньше trigger_Low, выход LOW равен TRUE

112

Значение X больше trigger_High выход HIGH равен TRUE

1

Значение X меньше trigger_Low, выход ALARM равен TRUE

2

Значение X больше trigger_High выход ALARM равен TRUE

CALIBRATE

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

X

REAL

Сигнал датчика

CO

BOOL

Сигнал датчика для нижнего предела

CS

BOOL

Сигнал датчика для верхнего предела

Выходы

Y

REAL

Измеренное значение

Параметры

Y_Scale

REAL

Верхний предел измеренного значения

Y_Offset

REAL

Нижний предел измеренного значения

Функциональный блок CALIBRATE используется для калибровки сигнала аналогового датчика X. Параметры Y_Offset и Y_Scale определяют нижний и верхний предел измеряемого значения. По переднему фронту на входе CO в блок записывается измеренное значение для нижнего предела, по переднему фронту на входе CS – для верхнего. После этого значение входа X будет линейно масштабироваться и подаваться на выход Y c учетом рассчитанных коэффициентов. Коэффициенты являются энергонезависимыми (VAR RETAIN).

Поясним вышесказанное на примере. Предположим, мы получаем от датчика температуры сигнал 4-20 мА, который соответствует диапазону 0-100 °C. Зададим Y_Offset=0 и Y_Scale=100. Поместим датчик в среду с температурой 0 °C (значение температуры должно быть измерено с помощью эталонного термометра) и подадим импульс по переднему фронту на входе CO. Блок вычислит значение смещения сигнала. Нагреем датчик до 100 °C и подадим импульс по переднему фронту на входе CS. Блок вычислит коэффициент масштабирования для входного сигнала. В случае, если датчик изначально откалиброван, смещение должно составить

Graphic

а коэффициент масштабирования –

Graphic

Теперь если подать на вход X измеренное датчиком значение (например, 12 мА), то на выходе Y будет получено значение температуры – 50 °C. Поскольку в реальной жизни по мере эксплуатации характеристики датчиков могут изменяться, использование данного блока позволит поддерживать точность измеренного значения на приемлемом уровне.

CYCLE_TIME

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

RST

BOOL

Сигнал сброса блока

Выходы

ct_min

TIME

Минимальное время цикла

ct_max

TIME

Максимальное время цикла

ct_last

TIME

Последнее измеренное время цикла

systime

TIME

Время, прошедшее со старта ПЛК

sysdays

INT

Число дней, прошедшее со старта ПЛК

cycles

DWORD

Число циклов ПЛК с момента старта

Используемые модули

T_PLC_MS

Функциональный блок CYCLE_TIME используется для получения статистической информации о времени цикла ПЛК. На выходы ct_min, ct_max и ct_last подается минимальное, максимальное и последнее измеренное время цикла. Выходы systime и sysdays содержат информацию о времени и числе дней, прошедших со старта ПЛК. Выход cycles содержит число циклов ПЛК, прошедших с момента его старта. По переднему фронту на входе RST выходы блока обнуляются и отсчет начинается заново.

DT_SIMU

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

START

DT

Начальное время часов (точка отсчета)

SPEED

REAL

Коэффициент масштаба времени

Выходы

DTS

DT

Текущее время

Используемые модули

T_PLC_MS

Функциональный блок DT_SIMU представляет собой программный модуль RTC с задаваемым масштабом времени. Вход START определяет начальное время, которое будет являться точкой отсчета. Выход DTS отображает текущее время. Вход SPEED определяет масштаб времени относительно стандартного. Например, если SPEED=5.0, то каждую секунду к текущему значению времени на выходе DTS будет прибавляться 5 секунд – т.е. время будет идти в 5 раз быстрее, чем в реальном мире. Это может быть полезным при отладке проектов, связанных с медленно протекающими процессами.

FLOW_METER

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

VX

REAL

Измеренное значение расхода (ед./час)

E

BOOL

Сигнал управления блоком

RST

BOOL

Сигнал сброса блока

Выходы

F

REAL

Мгновенное значение расхода (ед./час)

Входы - выходы

X

REAL

Суммарное значение расхода (дробная часть)

Y

UDINT

Суммарное значение расхода (целая часть)

Параметры

PULSE_MODE

BOOL

Режим работы блока

UPDATE_TIME

TIME

Время опроса входа VX

Используемые модули

INTEGRATE, FLOOR, T_PLC_MS

Функциональный блок FLOW_METER используется для определения суммарного расхода. На вход VX подается измеренное значение расхода. Параметр PULSE_MODE определяет режим работы блока. Если PULSE_MODE имеет значение FALSE, то расходомер работает в режиме интегрирования и пока вход E имеет значение TRUE, значение входа VX интерпретируется как расход за час, а на входах-выходах Y и X отображается целая и дробная часть суммарного расхода за прошедшее с начала работы блока время. На выходе F отображается текущее значение расхода. Параметр UPDATE_TIME частоту опроса входа VX. Если PULSE_MODE имеет значение TRUE, то расходомер работает в импульсном режиме и при импульсе по переднему фронту входа E прибавляет значение VX к суммарному значению расхода Y и X (целая часть/дробная часть). По переднему фронту входа RST происходит сброс памяти блока, после чего отсчет начинается заново.

Суммарное значение расхода представлено в виде двух величин – X и Y. Если суммарный расход = 210.115 л/ч, то Y=210 (целая часть), X=0.115 (дробная часть).

Поясним вышесказанное несколькими примерами.

  1. Пусть VX=3600 л/ч, PULSE_MODE=FALSE, UPDATE_TIME=T#100ms.

    Расходомер работает в режиме интегратора, вход VX опрашивается каждые 100 мс (т.е если значение входа изменится, то блок начнет использовать его вместо предыдущего с задержкой до 100 мс). Значение Y каждую секунду увеличивается на +1 (3600 л/ч = 1 л/с). Значение X содержит дробную часть значения и изменяется с частотой цикла ПЛК.

  2. Пусть VX=10 л/ч, PULSE_MODE=TRUE, UPDATE_TIME=T#100ms

    Расходомер работает в импульсном режиме, вход VX опрашивается каждые 100 мс (т.е если значение входа изменится, то блок начнет использовать его вместо предыдущего с задержкой до 100 мс). Значение Y увеличивается на +10 по переднему фронту на входе E.

M_D

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

start

BOOL

Сигнала начала отсчета

stop

BOOL

Сигнал окончания отсчета

tmax

TIME

Максимальное время отсчета

RST

BOOL

Сигнал сброса блока

Выходы

PT

TIME

Время между сигналом старта и стопа

ET

TIME

Прошедшее время

run

BOOL

Флаг «идет отсчет времени»

Используемые модули

T_PLC_MS

Функциональный блок M_D представляет собой модуль измерения времени между двумя импульсами переднего фронта. По переднему фронту на входе start блок начинает отсчет времени, при этом на выходе ET отображается время, прошедшее с начала отсчета, а выход RUN имеет значение TRUE. По переднему фронту на входе stop отсчет времени прекращается, при этом на выходе PT отображается время окончания отсчета (совпадающее с текущим значением выхода ET), а выход RUN принимает значение FALSE. Вход tmax используется для ограничения продолжительности отсчета – если ET > tmax, то блок прекращает работу, а его выходы обнуляются. По переднему фронту на входе RST происходит принудительная остановка блока с обнулением выходов.

Обратите внимание, старт начала отсчета возможен только в том случае, если входы stop и RST имеют значение FALSE.

M_T

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

IN

BOOL

Контролируемый сигнал

tmax

TIME

Максимальное время отсчета

RST

BOOL

Сигнал сброса блока

Выходы

PT

TIME

Время, которое сигнал был в TRUE

ET

TIME

Прошедшее время

Используемые модули

T_PLC_MS

Функциональный блок M_T представляет собой модуль измерения времени между импульсами переднего и заднего фронта. По переднему фронту на входе IN блок начинает отсчет времени, при этом на выходе ET отображается время, прошедшее с начала отсчета. По заднему фронту на входе IN отсчет времени прекращается, при этом на выходе PT отображается время окончания отсчета (совпадающее с текущим значением выхода ET). Таким образом, блок измеряет время, в течение которого вход IN находился в значении TRUE. Вход tmax используется для ограничения продолжительности отсчета – если ET > tmax, то блок прекращает работу, а его выходы обнуляются. По переднему фронту на входе RST происходит принудительная остановка блока с обнулением выходов.

Обратите внимание, старт начала отсчета возможен только в том случае, если вход RST имеет значение FALSE.

M_TX

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

IN

BOOL

Контролируемый сигнал

tmax

TIME

Максимальное время отсчета

RST

BOOL

Сигнал сброса блока

Выходы

TH

TIME

Время, которое IN был в TRUE

TL

TIME

Время, которое IN был в FALSE

DC

REAL

Процент времени, которое IN был в TRUE (0…1)

F

REAL

Частота изменения сигнала на входе IN

ET

TIME

Прошедшее время

Используемые модули

T_PLC_MS

Функциональный блок M_TX представляет собой модуль сбора статистики о состоянии входа IN По переднему фронту на входе IN блок начинает отсчет времени, при этом на выходе ET отображается время, прошедшее с начала отсчета. По заднему фронту на входе IN отсчет не прекращается; для остановки работы блока необходим импульс по переднему фронту на входе RST, который также обнулит его выходы. На выходах TH и TL отображается время, которое сигнал IN находится в состоянии TRUE и FALSE соответственно. Выход DC сообщает, какой процент времени сигнал находился в состоянии TRUE (например, если DC=0.4, то в течение 40% времени вход IN имел значение TRUE, в течение 60% - значение FALSE). На выходе F отображается частота изменения входа IN. Вход tmax используется для ограничения продолжительности отсчета – если ET > tmax, то блок прекращает работу, а его выходы обнуляются.

Обратите внимание, обновление значений на выходах TH, TL, DC и F происходит после очередного импульса на входе IN. В первый раз значения на этих выходах появятся после второго импульса по переднему фронту на входе IN с начала работы блока.

METER

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

M1

REAL

Контролируемое значение 1

M2

REAL

Контролируемое значение 2

I1

BOOL

Режим контроля значения 1

I2

BOOL

Режим контроля значения 2

D

REAL

Делитель для выхода

RST

BOOL

Сигнал сброса блока

Входы – выходы

MX

REAL

Интегральное значение M1 и M2

Используемые модули

T_PLC_MS, R2_ADD

Функциональный блок METER используется для определения интегрального значения двух величин за заданный период времени. Пока  вход I1 имеет значение TRUE, значение M1 каждый цикл ПЛК прибавляется к последнему сохраненному значению. Пока  вход I2 имеет значение TRUE, значение M2 каждый цикл ПЛК прибавляется к последнему сохраненному значению. Вход D определяет значение делителя для cохраненного значения. Выход MX содержит сумму всех предыдущих значений M1 и M2 за периоды, во время которых I1 и I2 имели значение TRUE, поделенную на D:

Graphic

По переднему фронту на входе RST значение MX обнуляется, после чего суммирование начинается заново.

На рисунке ниже приведена трассировка работы блока, используемого для подсчета суммарной потребляемой электроэнергии для двух нагревателей с мощностью 60 и 85 кВ соответственно. Переменные xI1 и xI2 определяют состояние соответствующего нагревателя (TRUE – включен, FALSE – отключен).

Graphic
Трассировка работы ФБ

METER_STAT

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

IN

REAL

Контролируемое значение

DI

DATE

Текущая дата

RST

BOOL

Сигнал сброса блока

Входы – выходы

Last_Day

REAL

Расход за вчерашний день

Current_Day

REAL

Расход за текущий день

Last_Week

REAL

Расход за прошлую неделю

Current_Week

REAL

Расход за текущую неделю

Last_Month

REAL

Расход за прошлый месяц

Current_Month

REAL

Расход за текущий месяц

Last_Year

REAL

Расход за прошлый год

Current_Year

REAL

Расход за текущий год

Используемые модули

YEAR_OF_DATE, MONTH_OF_DATE, DAY_OF_YEAR, DAY_OF_WEEK

Функциональный блок METER_STAT используется для определения суммарного расхода величины IN за прошлые день (Last_Day), неделю (Last_Week), месяц (Last_Month) и год (Last_Year), а также за текущие день (Current_Day), неделю (Current_Week), месяц (Current_Month) и год (Current_Year). На вход DI подается текущая дата. По переднему фронту на входе RST выходы блока обнуляются, после чего сбор статистики начинается заново.

Логика работы блока подразумевает, что IN является возрастающей с течением времени величиной, характеризующий расход какого-либо вещества, потребление электроэнергии и т.п.

ONTIME

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

IN

BOOL

Контролируемый сигнал

RST

BOOL

Сигнал сброса блока

Входы – выходы

SECONDS

UDINT

Время активного сигнала

CYCLES

UDINT

Число периодов активности сигнала

Используемые модули

T_PLC_MS

Функциональный блок ONTIME представляет собой модуль измерения периода активности сигнала. Если вход IN имеет значение TRUE, то на входе-выходе SECONDS отображается число секунд активности сигнала. Если вход IN принимает значение FALSE, то отсчет времени останавливается, но будет продолжен при следующем переходе в состояние TRUE. По переднему фронту входа IN значение входа-выхода CYCLES увеличивается на +1 – таким образом, эта величина характеризует число периодов активности сигнала. По переднему фронту на входе RST значения SECONDS и CYCLES обнуляются, после чего подсчет начинается заново.

T_PLC_MS

Тип модуля: функция

Переменная

Тип

Описание

Выходы

T_PLC_MS

DWORD

Значение системного таймера ПЛК

Константы

debug

BOOL

Управление режимом отладки

N

INT

Коэффициент масштаба времени

offset

DWORD

Смещение времени таймера, мс

Функция T_PLC_MS возвращает значение системного таймера (время, прошедшее со старта ПЛК) в миллисекундах. Функция T_PLC_MS представляет собой обвязку вокруг системной функции TIME(), но помимо этого позволяет тестировать системный таймер на переполнение. Для этого надо внести изменения в область объявления переменных функции: присвоить константе debug значение TRUE и задать значения для констант N (коэффициент масштаба времени, каждую миллисекунду к значению таймера будет прибавляться 2N миллисекунд) и offset (смещение значения таймера).

Следует помнить, что реализация программной обвязки для системного таймера может отличаться для разных сред программирования.

T_PLC_US

Тип модуля: функция

Переменная

Тип

Описание

Выходы

T_PLC_US

DWORD

Значение системного таймера ПЛК

Константы

debug

BOOL

Управление режимом отладки

N

INT

Коэффициент масштаба времени

offset

DWORD

Смещение времени таймера, мс

Функция T_PLC_US возвращает значение системного таймера (время, прошедшее со старта ПЛК) в микросекундах. Функция T_PLC_US фактически возвращает значение системной функции TIME(), умноженное на 1000. При необходимости эта реализация может быть заменена на вызов системной функции LTIME(), если последняя поддержана на ПЛК. Функция T_PLC_US также содержит режим отладки; см. подробности в описании функции T_PLC_MS.

TC_MS

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

TC

DWORD

Время системного таймера, мс

Используемые модули

T_PLC_MS

Функциональный блок TC_MS возвращает значение длительности (в миллисекундах) прошедшего цикла задачи ПЛК, в которой осуществляется вызов блока. Блок представляет собой обвязку для функции T_PLC_MS; если блок возвращает некорректное значение, то следует проверить, не используется ли данная функция в режиме отладки.

TC_S

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

TC

REAL

Время системного таймера

Используемые модули

T_PLC_US

Функциональный блок TC_S возвращает значение длительности прошедшего цикла задачи ПЛК, в которой осуществляется вызов блока, в виде переменной с плавающей точкой с разрядностью до миллисекунд (например, 0.01 для T=10 мс). Блок представляет собой обвязку для функции T_PLC_US; если блок возвращает некорректное значение, то следует проверить, не используется ли данная функция в режиме отладки. Более подробную информацию (в т.ч. сведения о точности) см. в описании функции T_PLC_US.

TC_US

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

TC

DWORD

Время системного таймера, мкс

Используемые модули

T_PLC_US

Функциональный блок TC_US (в микросекундах) прошедшего цикла задачи ПЛК, в которой осуществляется вызов блока. Блок представляет собой обвязку для функции T_PLC_US; если блок возвращает некорректное значение, то следует проверить, не используется ли данная функция в режиме отладки. Более подробную информацию (в т.ч. сведения о точности) см. в описании функции T_PLC_US.