Описание функциональных блоков библиотеки ИСР BEREMIZ для ПЛК BRIC ================================================================== .. attention:: Для использования стандартных и дополнительных функциональных блоков в языке ST необходимо перетащить необходимый из библиотеки в зону перечисления переменных и дать наименование. .. important:: Для функциональных блоков и функций имеется несколько вариантов написания кода на языке ST в зависимости от входов/выходов. Вариант 1: .. code-block:: ruby FB( IN := (*BOOL*), OUT => (*BOOL*)); Вариант 2: .. code-block:: ruby FB(IN, OUT); Вариант 3: .. code-block:: ruby FB(IN := (*BOOL*)); Q := FB.OUT BRIC Library ------------ Блок UTON ~~~~~~~~~ Данный ФБ представляет собой таймер с задержкой включения. .. figure:: images/beremiz/uton.png :width: 300 .. only:: html .. figure:: images/beremiz/b-uton.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "BOOL", "Подача импульса" "PT", "ULINT", "Время задержки в формате ULINT" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Если ET = PV и IN = 1, то Q = 1, иначе Q = 0" "ET", "ULINT", "Счетчик времени считает пока ET < PV и IN = 1" "TT", "BOOL", "TRUE, пока ET < PV" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*BOOL*), PT := (*ULINT*)); (*BOOL*) := FB.Q; (*ULINT*) := FB.ET; (*BOOL*) := FB.TT; Блок UTOF ~~~~~~~~~ Данный ФБ представляет таймер, реализующий задержку выключения. Когда вход изменяется с TRUE на FALSE (задний фронт) проходит определенное время, пока выход не станет FALSE. .. figure:: images/beremiz/utof.png :width: 300 .. only:: html .. figure:: images/beremiz/b-utof.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "BOOL", "Подача импульса" "PT", "ULINT", "Время задержки в формате ULINT" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Если IN = TRUE => Q = TRUE. При переходе IN в FALSE, если ET = PV, то Q = 0, иначе Q = 1" "ET", "ULINT", "Счетчик времени считает пока ET < PV и был переход IN из TRUE в FALSE" "TT", "BOOL", "TRUE, пока ET < PV" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*BOOL*), PT := (*ULINT*)); (*BOOL*) := FB.Q; (*ULINT*) := FB.ET; (*BOOL*) := FB.TT; Блок WORD_ON_BOOL ~~~~~~~~~~~~~~~~~ ФБ WORD_ON_BOOL выводит значение входной переменной WORD в битах. .. only:: html .. figure:: images/beremiz/b-word_on_bool.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "WORD_IN", "WORD", "Входная переменная" "**Выход**", "**Тип**", "**Описание**" "B_OUT0", "BOOL", "Вывод значения нулевого бита" "B_OUT1", "BOOL", "Вывод значения первого бита" "B_OUT2", "BOOL", "Вывод значения второго бита" "B_OUT3", "BOOL", "Вывод значения третьего бита" "B_OUT4", "BOOL", "Вывод значения четвертого бита" "B_OUT5", "BOOL", "Вывод значения пятого бита" "B_OUT6", "BOOL", "Вывод значения шестого бита" "B_OUT7", "BOOL", "Вывод значения седьмого бита" "B_OUT8", "BOOL", "Вывод значения восьмого бита" "B_OUT9", "BOOL", "Вывод значения девятого бита" "B_OUT10", "BOOL", "Вывод значения десятого бита" "B_OUT11", "BOOL", "Вывод значения одиннацатого бита" "B_OUT12", "BOOL", "Вывод значения двенадцатого бита" "B_OUT13", "BOOL", "Вывод значения тринадцатого бита" "B_OUT14", "BOOL", "Вывод значения четырнадцатого бита" "B_OUT15", "BOOL", "Вывод значения пятнадцатого бита" Форма записи на языке ST: .. code-block:: ruby FB(WORD_IN := (*WORD*)); (*BOOL*) := FB.B_OUT0; (*BOOL*) := FB.B_OUT1; (*BOOL*) := FB.B_OUT2; (*BOOL*) := FB.B_OUT3; (*BOOL*) := FB.B_OUT4; (*BOOL*) := FB.B_OUT5; (*BOOL*) := FB.B_OUT6; (*BOOL*) := FB.B_OUT7; (*BOOL*) := FB.B_OUT8; (*BOOL*) := FB.B_OUT9; (*BOOL*) := FB.B_OUT10; (*BOOL*) := FB.B_OUT11; (*BOOL*) := FB.B_OUT12; (*BOOL*) := FB.B_OUT13; (*BOOL*) := FB.B_OUT14; (*BOOL*) := FB.B_OUT15; Блок BOOL_ON_WORD ~~~~~~~~~~~~~~~~~ ФБ BOOL_ON_WORD выводит значение в формате WORD входных булевых переменных. .. only:: html .. figure:: images/beremiz/b-bool_on_word.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "B_IN0", "BOOL", "Ввод значения нулевого бита" "B_IN1", "BOOL", "Ввод значения первого бита" "B_IN2", "BOOL", "Ввод значения второго бита" "B_IN3", "BOOL", "Ввод значения третьего бита" "B_IN4", "BOOL", "Ввод значения четвертого бита" "B_IN5", "BOOL", "Ввод значения пятого бита" "B_IN6", "BOOL", "Ввод значения шестого бита" "B_IN7", "BOOL", "Ввод значения седьмого бита" "B_IN8", "BOOL", "Ввод значения восьмого бита" "B_IN9", "BOOL", "Ввод значения девятого бита" "B_IN10", "BOOL", "Ввод значения десятого бита" "B_IN11", "BOOL", "Ввод значения одиннацатого бита" "B_IN12", "BOOL", "Ввод значения двенадцатого бита" "B_IN13", "BOOL", "Ввод значения тринадцатого бита" "B_IN14", "BOOL", "Ввод значения четырнадцатого бита" "B_IN15", "BOOL", "Ввод значения пятнадцатого бита" "**Выход**", "**Тип**", "**Описание**" "WORD_OUT", "WORD", "Выходная переменная" Форма записи на языке ST: .. code-block:: ruby FB(B_IN0 := (*BOOL*), B_IN1 := (*BOOL*), B_IN2 := (*BOOL*), B_IN3 := (*BOOL*), B_IN4 := (*BOOL*),B_IN5 := (*BOOL*), B_IN6 := (*BOOL*), B_IN7 := (*BOOL*), B_IN8 := (*BOOL*), B_IN9 := (*BOOL*),B_IN10 := (*BOOL*), B_IN11 := (*BOOL*), B_IN12 := (*BOOL*), B_IN13 := (*BOOL*), B_IN14 := (*BOOL*), B_IN15 := (*BOOL*)); (*WORD*) := FB.WORD_OUT; Блок SETBIT ~~~~~~~~~~~ Данный ФБ записывает значение BIT_VALUE в любом из битов в входной переменной IN (DWORD). .. only:: html .. figure:: images/beremiz/b-setbit.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "DWORD", "Входная переменная" "BIT_N", "USINT", "Выбор необходимого номера бита" "BIT_VALUE", "BOOL", "Значение бита" "**Выход**", "**Тип**", "**Описание**" "OUT", "DWORD", "Выходная переменная" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*DWORD*), BIT_N := (*USINT*), BIT_VALUE := (*BOOL*)); (*DWORD*) := FB.OUT; Блок GETBIT ~~~~~~~~~~~ Данный ФБ прочитывает значение булевой переменной в определенном из битов IN (DWORD). .. only:: html .. figure:: images/beremiz/b-getbit.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "DWORD", "Входная переменная" "BIT_N", "USINT", "Выбор необходимого номера бита" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выходное значение бита" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*DWORD*), BIT_N := (*USINT*)); (*BOOL*) := FB.OUT; DO Functional blocks -------------------- Блок READ_DO_SC ~~~~~~~~~~~~~~~ ФБ READ_DO_SC предоставляет информацию о состоянии короткого замыкания на дискретных выходах. .. only:: html .. figure:: images/beremiz/b-read_do_sc.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "DO_SC_FLAG", "USINT", "Флаг обнаруживания короткого замыкания по каналу. Если КЗ обнаружено, то управление каналом блокируется" "DO_SC_EN", "USINT", "Флаг выставленной программной защиты от короткого замыкания" Форма записи на языке ST: .. code-block:: ruby FB(); (*USINT*) := FB.DO_SC_FLAG; (*USINT*) := FB.DO_SC_EN; .. note:: Логическое состояние КЗ на дискретных каналах определяется как значение младшего полубайта .. figure:: images/26.png Блок READ_DO ~~~~~~~~~~~~ ФБ READ_DO предоставляет информацию о состоянии дискретных выходов. .. only:: html .. figure:: images/beremiz/b-read_do.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "DO_OUT", "USINT", "Чтение значения состояния дискретных выходов" Форма записи на языке ST: .. code-block:: ruby FB(); (*USINT*) := FB.DO_OUT; .. note:: Логическое состояние каналов определяется как значение младшего полубайта .. figure:: images/26.png Блок WRITE_DO ~~~~~~~~~~~~~ ФБ WRITE_DO согласно маске DO_MASK и подаче напряжений на соответствующие дискретные выхода DO_VALUE (выходы прописываются побитово). .. only:: html .. figure:: images/beremiz/b-write_do.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DO_VALUE", "UINT", "Запись значения состояния дискретных выходов" "DO_MASK", "UINT", "Запись маски, разрешающей изменять состояние дискретных выходов" Форма записи на языке ST: .. code-block:: ruby FB(DO_VALUE := (*UINT*), DO_MASK := (*UINT*)); .. note:: Логическое состояние каналов определяется как значение младшего полубайта .. figure:: images/26.png Блок WRITE_DO_SC ~~~~~~~~~~~~~~~~ ФБ WRITE_DO_SC устанавливает номера дискретных выходов, на которых включить программную защиту от КЗ и дискретные выхода на которых сработала программная защита от КЗ. .. only:: html .. figure:: images/beremiz/b-write_do_sc.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DO_SC_FLAG", "UINT", "Запись перечисления дискретных выходов, на которых сработала аппаратная защита от короткого замыкания (использовать только возможность сброса)" "DO_SC_EN", "UINT", "Запись перечисления дискретных выходов, на которых сработала программная защита от короткого замыкания (использовать только возможность сброса)" Форма записи на языке ST: .. code-block:: ruby FB(DO_SC_FLAG := (*UINT*), DO_SC_EN := (*UINT*)); .. note:: Логическое состояние КЗ на дискретных каналах определяется как значение младшего полубайта .. figure:: images/26.png Блок WRITE_DO_PWM_FREQ ~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_DO_PWM устанавливает ШИМ дискретных выходов в диапазоне от 0 до 10000 Гц. .. only:: html .. figure:: images/beremiz/b-write_do_pwm.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DO_PWM_FREQ", "UINT", "Частота ШИМ подаваемая на каналы дискретных выходов, Гц" Форма записи на языке ST: .. code-block:: ruby FB(DO_PWM_FREQ := (*UINT*)); .. note:: Значение PWM Frequency задается одно для всех каналов Блок WRITE_DO_PWM_CTRL ~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_DO_PWM_CTRL устанавливает для выбранного дискретного выхода скважность сигнала. Указывается диапазон от 10 до 90%. .. only:: html .. figure:: images/beremiz/b-write_do_pwm_ctrl.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DO_NUMBER", "USINT", "Номер канала дискретного выхода ПЛК BRIC" "DO_PWM_DUTY", "UINT", "Указание скважности канала" "DO_PWM_RUN", "BOOL", "Включение ШИМ" Форма записи на языке ST: .. code-block:: ruby FB(DO_NUMBER := (*UINT*), DO_PWM_CTRL := (*UINT*)); SOFI Function blocks -------------------- Блок DWORD_TO_FLOAT ~~~~~~~~~~~~~~~~~~~ Данный ФБ преобразовывает значение типа данных DWORD в тип данных с плавающей точкой (float). .. only:: html .. figure:: images/beremiz/b-dw_to_fl.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN_VAL", "DWORD", "Входная переменная" "**Выход**", "**Тип**", "**Описание**" "OUT_VAL", "REAL", "Выходная переменная" Форма записи на языке ST: .. code-block:: ruby FB(IN_VAL := (*DWORD*)); (*REAL*) := FB.OUT_VAL; Блок WORDS_TO_FLOAT ~~~~~~~~~~~~~~~~~~~ Данный ФБ преобразовывает значение двух типов данных WORD в тип данных с плавающей точкой (float). .. only:: html .. figure:: images/beremiz/b-w_to_fl.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "WORDH", "WORD", "Входная переменная (старший байт)" "WORDL", "WORD", "Входная переменная (младший байт)" "**Выход**", "**Тип**", "**Описание**" "OUT_VAL", "REAL", "Выходная переменная" Форма записи на языке ST: .. code-block:: ruby FB(WORDH := (*WORD*), WORDL := (*WORD*)); (*REAL*) := FB.OUT_VAL; Блок PARSING_UINT ~~~~~~~~~~~~~~~~~ ФБ PARSING_UINT выводит значение входной переменной UINT в битах. .. only:: html .. figure:: images/beremiz/fb10.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN_VAL", "UINT", "Обрабатываемая переменная" "**Выход**", "**Тип**", "**Описание**" "BIT_1", "BOOL", "Вывод значения первого бита" "BIT_2", "BOOL", "Вывод значения второго бита" "BIT_3", "BOOL", "Вывод значения третьего бита" "BIT_4", "BOOL", "Вывод значения четвертого бита" "BIT_5", "BOOL", "Вывод значения пятого бита" "BIT_6", "BOOL", "Вывод значения шестого бита" "BIT_7", "BOOL", "Вывод значения седьмого бита" "BIT_8", "BOOL", "Вывод значения восьмого бита" "BIT_9", "BOOL", "Вывод значения девятого бита" "BIT_10", "BOOL", "Вывод значения десятого бита" "BIT_11", "BOOL", "Вывод значения одиннацатого бита" "BIT_12", "BOOL", "Вывод значения двенадцатого бита" "BIT_13", "BOOL", "Вывод значения тринадцатого бита" "BIT_14", "BOOL", "Вывод значения четырнадцатого бита" "BIT_15", "BOOL", "Вывод значения пятнадцатого бита" "BIT_16", "BOOL", "Вывод значения шестнадцатого бита" Форма записи на языке ST: .. code-block:: ruby FB(IN_VAL := (*UINT*)); (*BOOL*) := FB.BIT_1; (*BOOL*) := FB.BIT_2; (*BOOL*) := FB.BIT_3; (*BOOL*) := FB.BIT_4; (*BOOL*) := FB.BIT_5 (*BOOL*) := FB.BIT_6; (*BOOL*) := FB.BIT_7; (*BOOL*) := FB.BIT_8; (*BOOL*) := FB.BIT_9; (*BOOL*) := FB.BIT_10; (*BOOL*) := FB.BIT_11 (*BOOL*) := FB.BIT_12; (*BOOL*) := FB.BIT_13; (*BOOL*) := FB.BIT_14; (*BOOL*) := FB.BIT_15; (*BOOL*) := FB.BIT_16; Блок PARSING_USINT ~~~~~~~~~~~~~~~~~~ ФБ PARSING_USINT выводит значение входной переменной USINT в битах. .. only:: html .. figure:: images/beremiz/fb11.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN_VAL", "USINT", "Обрабатываемая переменная" "**Выход**", "**Тип**", "**Описание**" "BIT_1", "BOOL", "Вывод значения первого бита" "BIT_2", "BOOL", "Вывод значения второго бита" "BIT_3", "BOOL", "Вывод значения третьего бита" "BIT_4", "BOOL", "Вывод значения четвертого бита" "BIT_5", "BOOL", "Вывод значения пятого бита" "BIT_6", "BOOL", "Вывод значения шестого бита" "BIT_7", "BOOL", "Вывод значения седьмого бита" "BIT_8", "BOOL", "Вывод значения восьмого бита" Форма записи на языке ST: .. code-block:: ruby FB(IN_VAL := (*USINT*)); (*BOOL*) := FB.BIT_1; (*BOOL*) := FB.BIT_2; (*BOOL*) := FB.BIT_3; (*BOOL*) := FB.BIT_4; (*BOOL*) := FB.BIT_5 (*BOOL*) := FB.BIT_6; (*BOOL*) := FB.BIT_7; (*BOOL*) := FB.BIT_8; Блок RES_TEMP_SENSOR ~~~~~~~~~~~~~~~~~~~~ Данный ФБ выдает значение сопротивления и температуры датчиков ТСП. .. only:: html .. figure:: images/beremiz/b-res.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "VLT_V", "REAL", "Входное напряжение, В" "CUR_MA", "REAL", "Входной ток, mA" "SENSOR_TYPE", "UINT", "Тип сенсора, 0 - Pt, alpha = 0.00385; 1 - Pt, alpha = 0.00391; 2 - Cu, alpha = 0.00426" "R_0", "REAL", "Номинальное сопротивление при 0°С, ОМ" "R_WIRE", "REAL", "Cопротивление проводов, Ом" "**Выход**", "**Тип**", "**Описание**" "R_SENSE", "REAL", "Значение сопротивления датчика, Ом" "T_SENSE", "REAL", "Значение сопротивления датчика, °С" Форма записи на языке ST: .. code-block:: ruby FB(VLT_V := (*REAL*), CUR_MA := (*REAL*), SENSOR_TYPE := (*UINT*), R_0 := (*REAL*)); (*REAL*) := FB.R_SENSE; (*REAL*) := FB.T_SENSE; Блок ROUND_REAL ~~~~~~~~~~~~~~~ ФБ ROUND_REAL округляет значения входной переменной IN_REAL до DECIMAL_POINT знаков после запятой. .. only:: html .. figure:: images/beremiz/b-round.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN_REAL", "REAL", "Входное значение" "DECIMAL_POINT", "USINT", "Количество знаков после запятой (0-4). По умолчанию - 0" "**Выход**", "**Тип**", "**Описание**" "OUT_REAL", "REAL", "Выходное значение" Форма записи на языке ST: .. code-block:: ruby FB(IN_REAL := (*REAL*), DECIMAL_POINT := (*USINT*)); (*REAL*) := FB.OUT_REAL; Блок READ_PWR ~~~~~~~~~~~~~ ФБ READ_PWR предоставляет информацию о входном напряжении питания и напряжение батареи ПЛК. .. only:: html .. figure:: images/beremiz/b-read_pwr.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "V_PWR", "REAL", "Входное напряжение ПЛК" "V_BAT", "REAL", "Напряжение батареи ПЛК" Форма записи на языке ST: .. code-block:: ruby FB(); (*REAL*) := FB.V_PWR; (*REAL*) := FB.V_BAT; Блок READ_INTERNAL_TEMP ~~~~~~~~~~~~~~~~~~~~~~~ ФБ READ_INTERNAL_TEMP предоставляет информацию температуре микропроцессора ПЛК BRIC. .. only:: html .. figure:: images/beremiz/b-read_int_temp.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "INTERNAL_TEMP_OUT", "REAL", "Показание температуры микропроцессора в ПЛК" Форма записи на языке ST: .. code-block:: ruby FB(); (*REAL*) := FB.INTERNAL_TEMP_OUT; Блок READ_RESET ~~~~~~~~~~~~~~~ ФБ READ_RESET предоставляет информацию о количестве перезагрузок с момента обновления ОС ПЛК и причине последней перезагрузки. .. only:: html .. figure:: images/beremiz/b-read_reset.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "RESET_NUM", "UINT", "Количество перезагрузок с момента обновления ОС ПЛК" "LAST_RESET", "UINT", "Код причины последней перезагрузки" Форма записи на языке ST: .. code-block:: ruby FB(); (*UINT*) := FB.RESET_NUM; (*UINT*) := FB.LAST_RESET; Блок READ_PARAM_UDINT/UINT/USINT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ФБ READ_PARAM_UDINT/UINT/USINT предоставляет информацию о регистре в зависимости от типа данных. .. only:: html .. figure:: images/beremiz/b-read_param.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "ENABLE", "BOOL", "Включение функционального блока" "ADRESS", "UDINT/UINT/USINT", "Адрес необходимого регистра Guid в формате UDINT/UINT/USINT (U32/U16/U8)" "**Выход**", "**Тип**", "**Описание**" "CHECK", "BOOL", "Статус выхода" "VALUE", "UDINT/UINT/USINT", "Значение регистра" Форма записи на языке ST: .. code-block:: ruby FB(ENABLE := (*BOOL*), ADRESS := (*UDINT/UINT/USNT*)); (*BOOL*) := FB.CHECK; (*UDINT/UINT/USNT*) := FB.VALUE; Блок READ_SYS_TICK_COUNTER ~~~~~~~~~~~~~~~~~~~~~~~~~~ ФБ READ_SYS_TICK_COUNTER предоставляет информацию о времени работы ПЛК с момента последней перезагрузки указанной в мс. .. only:: html .. figure:: images/beremiz/b-read_sys.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "SYS_TICK_COUNTER_VALUE", "ULINT", "Чтение времени выполнения с момента последнего сброса в мс." Форма записи на языке ST: .. code-block:: ruby FB(); (*ULINT*) := FB.SYS_TICK_COUNTER_VALUE; Блок READ_AREA_LOCATION ~~~~~~~~~~~~~~~~~~~~~~~ ФБ READ_AREA_LOCATION предоставляет информацию о регистре, определенным Modbus MemoryArea. .. only:: html .. figure:: images/beremiz/b-read_area.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "LOCATIONO", "UINT", "Номер нулевого элемента выборки MemoryArea" "LOCATION1", "UINT", "Номер первого элемента выборки MemoryArea" "LOCATION2", "UINT", "Номер второго элемента выборки MemoryArea" "**Выход**", "**Тип**", "**Описание**" "VALUE", "WORD", "Вывод регистра" "LOCTION_READED", "BOOL", "Контрольный бит-статус" .. note:: Номер элемента определяется данным образом: .. figure:: images/r-mdb1.png :width: 300 Форма записи на языке ST: .. code-block:: ruby FB(LOCATION0 := (*UINT*), LOCATION1 := (*UINT*), LOCATION2 := (*UINT*)); (*WORD*) := FB.VALUE; (*BOOL*) := FB.LOCATION_READED; Блок READ_REQUEST_LOCATION ~~~~~~~~~~~~~~~~~~~~~~~~~~ ФБ READ_REQUEST_LOCATION предоставляет информацию о регистре, определенным ModbusRequest. .. only:: html .. figure:: images/beremiz/b-read_request.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "LOCATIONO", "UINT", "Номер нулевого элемента выборки ModbusRequest" "LOCATION1", "UINT", "Номер первого элемента выборки ModbusRequest" "LOCATION2", "UINT", "Номер второго элемента выборки ModbusRequest" "LOCATION3", "UINT", "Номер третьего элемента выборки ModbusRequest" "**Выход**", "**Тип**", "**Описание**" "VALUE", "WORD", "Вывод регистра" "LOCTION_READED", "BOOL", "Контрольный бит-статус" .. note:: Номер элемента определяется данным образом: .. figure:: images/r-mdb2.png :width: 300 Форма записи на языке ST: .. code-block:: ruby FB(LOCATION0 := (*UINT*), LOCATION1 := (*UINT*), LOCATION2 := (*UINT*), LOCATION3 := (*UINT*)); (*WORD*) := FB.VALUE; (*BOOL*) := FB.LOCATION_READED; Блок SET_PARAM_UDINT/UINT/USINT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ФБ SET_PARAM_UDINT/UINT/USINT записывает данные в регистр в зависимости от типа данных. .. only:: html .. figure:: images/beremiz/b-set_param.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "ENABLE", "BOOL", "Включение функционального блока" "ADRESS", "UDINT/UINT/USINT", "Адрес необходимого регистра Guid в формате UDINT/UINT/USINT (U32/U16/U8)" "VALUE", "UDINT/UINT/USINT", "Значение регистра" "**Выход**", "**Тип**", "**Описание**" "CHECK", "BOOL", "Статус выхода" Форма записи на языке ST: .. code-block:: ruby FB(ENABLE := (*BOOL*), ADRESS := (*UDINT/UINT/USNT*), VALUE := (*UDINT/UINT/USNT*)); (*BOOL*) := FB.CHECK; Блок STRUCT_REAL_TIME ~~~~~~~~~~~~~~~~~~~~~ ФБ STRUCT_REAL_TIME позволяет считать время с ПЛК. .. only:: html .. figure:: images/beremiz/b-struct_real.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "HOUR_TIME", "USINT", "Текущий час реального времени внутреннего определения" "MINUTE_TIME", "USINT", "Текущая минута" "SEC_TIME", "USINT", "Текущая секунда" "SUB_SEC_TIME", "USINT", "Текущая миллисекунда" "WEEK_DAY_TIME", "USINT", "Текущий день недели" "MONTH_TIME", "USINT", "Текущий месяц" "DATE_TIME", "USINT", "Текущий день месяца" "YEAR_TIME", "USINT", "Текущий год" "YEAR_DAY_TIME", "UINT", "Текущий день года" Форма записи на языке ST: .. code-block:: ruby FB(); (*USINT*) := FB.HOUR_TIME; (*USINT*) := FB.MINUTE_TIME; (*USINT*) := FB.SEC_TIME; (*USINT*) := FB.SUB_SEC_TIME; (*USINT*) := FB.WEEK_DAY_TIME; (*USINT*) := FB.MONTH_TIME; (*USINT*) := FB.DATE_TIME; (*USINT*) := FB.YEAR_TIME; (*UINT*) := FB.YEAR_DAY_TIME; Блок WRITE_MDB_ADRESS ~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_MDB_ADRESS позволяет установить Modbus адрес ПЛК (от 1 до 247). .. only:: html .. figure:: images/beremiz/b-write_mdb.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "MDB_ADDR", "UINT", "Установление адреса по протоколу Modbus в ПЛК" Форма записи на языке ST: .. code-block:: ruby FB(MDB_ADDR := (*UINT*)); Блок WRITE_UART_SETS ~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_UART_SETS предоставляtn возможность изменять параметры UART каналов записанных в формате U16. .. only:: html .. figure:: images/beremiz/b-write_uart.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "MESO_UART", "UINT", "Запись параметров настройки интерфейса на канале Mesonin (доступ к порту только при вскрытии крышки ПЛК)" "SET_RS_485_2", "UINT", "Запись параметров настройки интерфейса на канале RS–485–1" "SET_RS_232", "UINT", "Запись параметров настройки интерфейса на канале RS–232" "SET_RS_485_1", "UINT", "Запись параметров настройки интерфейса на канале RS–485–1" "SET_RS_485_IMMO", "UINT", "Запись параметров настройки интерфейса на межмодульной шине" "SET_HART", "UINT", "Запись параметров HART интерфейса на каналах AI" Форма записи на языке ST: .. code-block:: ruby FB(MESO_UART := (*UINT*), SET_RS_485_2 := (*UINT*), SET_RS_232 := (*UINT*), SET_RS_485_1 := (*UINT*), SET_RS_485_IMMO := (*UINT*), SET_HART := (*UINT*)); .. figure:: images/beremiz/26.png :width: 300 :align: center Структура изменения параметров UART каналов Блок WRITE_CH_TIMEOUT ~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_CH_TIMEOUT изменяет время задержки UART каналов. .. only:: html .. figure:: images/beremiz/b-write_ch_time.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CH_NUMBER", "USINT", "Номер канала" "CHANNEL_TIMEOUT", "UDINT", "Задержка" Форма записи на языке ST: .. code-block:: ruby FB(CH_NUMBER:= (*USINT*), CHANNEL_TIMEOUT:= (*UDINT*)); .. note:: .. csv-table:: :header: "Номер канала","Наименование UART канала" :widths: 20, 30 "0", "MESO_UART_UART" "1", "RS_485_2_UART" "2", "RS_232_UART" "4", "RS_485_1_UART" "5", "RS_485_IMMO_UART" "6", "HART_UART" Блок WRITE_STRUCT_TIME ~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_STRUCT_TIME устанавливает время на ПЛК, выхода функционального блока используются для проверки записанного времени. .. only:: html .. figure:: images/beremiz/b-write_struct_time.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 5, 15 "SEC_IN_MIN", "USINT", "Ввод секунд" "MINUTE_IN_HOUR", "USINT", "Ввод минут" "HOUR_IN_DAY", "USINT", "Ввод часов" "DATE_IN_MONTH", "USINT", "Ввод дня месяца" "MONTH_IN_YEAR", "USINT", "Ввод месяца года" "YEAR_SINCE_2000", "USINT", "Ввод года" "**Выход**", "**Тип**", "**Описание**" "SEC_IN_MIN_WRITED", "USINT", "Вывод присвоенного значения" "MINUTE_IN_HOUR_WRITED", "USINT", "Вывод присвоенного значения" "HOUR_IN_DAY_WRITED", "USINT", "Вывод присвоенного значения" "DATE_IN_MONTH_WRITED", "USINT", "Вывод присвоенного значения" "MONTH_IN_YEAR_WRITED", "USINT", "Вывод присвоенного значения" "YEAR_SINCE_2000_WRITED", "USINT", "Вывод присвоенного значения" Форма записи на языке ST: .. code-block:: ruby FB(SEC_IN_MIN := (*USINT*), MINUTE_IN_HOUR := (*USINT*), HOUR_IN_DAY := (*USINT*), DATE_IN_MONTH := (*USINT*), MONTH_IN_YEAR := (*USINT*), YEAR_SINCE_2000 := (*USINT*)); (*USINT*) := FB.SEC_IN_MIN_WRITED; (*USINT*) := FB.MINUTE_IN_HOUR_WRITED; (*USINT*) := FB.HOUR_IN_DAY_WRITED; (*USINT*) := FB.DATE_IN_MONTH_WRITED; (*USINT*) := FB.MONTH_IN_YEAR_WRITED; (*USINT*) := FB.YEAR_SINCE_2000_WRITED; Блок WRITE_AREA_LOCATION ~~~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_AREA_LOCATION изменяет значения регистров, определенных Modbus MemoryArea. .. only:: html .. figure:: images/beremiz/b-write_area.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "VALUE", "WORD", "Значение регистра" "LOCATIONO", "UINT", "Номер нулевого элемента выборки MemoryArea" "LOCATION1", "UINT", "Номер первого элемента выборки MemoryArea" "LOCATION2", "UINT", "Номер второго элемента выборки MemoryArea" "**Выход**", "**Тип**", "**Описание**" "LOCTION_WRITED", "BOOL", "Контрольный бит-статус" .. note:: Номер элемента определяется данным образом: .. figure:: images/r-mdb1.png :width: 300 Форма записи на языке ST: .. code-block:: ruby FB(VALUE := (*WORD*), LOCATION0 := (*UINT*), LOCATION1 := (*UINT*), LOCATION2 := (*UINT*)); (*BOOL*) := FB.LOCATION_WRITED; Блок WRITE_REQUEST_LOCATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_REQUEST_LOCATION изменяет значения регистров, определенных ModbusRequest. .. only:: html .. figure:: images/beremiz/b-write_request.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "VALUE", "WORD", "Значение регистра" "LOCATIONO", "UINT", "Номер нулевого элемента выборки ModbusRequest" "LOCATION1", "UINT", "Номер первого элемента выборки ModbusRequest" "LOCATION2", "UINT", "Номер второго элемента выборки ModbusRequest" "LOCATION3", "UINT", "Номер третьего элемента выборки ModbusRequest" "**Выход**", "**Тип**", "**Описание**" "LOCTION_WRITED", "BOOL", "Контрольный бит-статус" .. note:: Номер элемента определяется данным образом: .. figure:: images/r-mdb2.png :width: 300 Форма записи на языке ST: .. code-block:: ruby FB(VALUE := (*WORD*), LOCATION0 := (*UINT*), LOCATION1 := (*UINT*), LOCATION2 := (*UINT*), LOCATION3 := (*UINT*)); (*BOOL*) := FB.LOCATION_WRITED; Блок UNIX_TIME ~~~~~~~~~~~~~~ ФБ UNIX_TIME устанавливает время на ПЛК (время указывается в мс.). .. only:: html .. figure:: images/beremiz/b-unix_time.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "UNIX_TIME_WRITE", "UDINT", "Запись Unix time на ПЛК" "**Выход**", "**Тип**", "**Описание**" "UNIX_TIME_READ", "UDINT", "Unix time" "UNIX_TIME_WRITED", "UDINT", "Последние записанное значени UNIX_TIME_WRITE" .. note:: Время задается в контроллер только по изменению UNIX_TIME_WRITE, начальное значение для сравнения 0. ФБ можно использовать для чтения UNIX time в нескольких местах программы, для этого UNIX_TIME_WRITE оставляем нулевым. Форма записи на языке ST: .. code-block:: ruby FB(UNIX_TIME_WRITE := (*UDINT*)); (*UDINT*) := FB.UNIX_TIME_READ; (*UDINT*) := FB.UNIX_TIME_WRITED; DI Functional blocks -------------------- Блок READ_DI ~~~~~~~~~~~~ ФБ READ_DI предоставляет данные с дискретных входных каналов ПЛК записанного в одну переменную типа (UDINT) при этом 0 бит соответствует DI_0, а 15 бит DI_15. .. only:: html .. figure:: images/beremiz/b-read_di.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "DI_OUT", "UDINT", "Состояние дискретных входов ПЛК BRIC" Форма записи на языке ST: .. code-block:: ruby FB(); (*UDINT*) := FB.DI_OUT; Блок READ_DI_CNT ~~~~~~~~~~~~~~~~ ФБ READ_DI_CNT предоставляет значение счетчика дискретного входного канала ПЛК номер, которого прописан на входе блока. .. only:: html .. figure:: images/beremiz/b-read_di_cnt.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DI_NUMBER", "UINT", "Номер исследуемого дискретного входа" "**Выход**", "**Тип**", "**Описание**" "DI_CNT_VALUE", "ULINT", "Значение счетчика дискретного входа" Форма записи на языке ST: .. code-block:: ruby FB(DI_NUMBER := (*UINT*)); (*ULINT*) := FB.DI_CNT_VALUE; Блок READ_DI_FREQ ~~~~~~~~~~~~~~~~~ ФБ READ_DI_FREQ предоставляет значение частоты дискретного входного канала ПЛК, номер которого прописан на входе блока. .. only:: html .. figure:: images/beremiz/b-read_di_freq.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DI_NUMBER", "UINT", "Номер исследуемого дискретного входа" "**Выход**", "**Тип**", "**Описание**" "DI_FREQ_VALUE", "ULINT", "Значение частоты переключения дискретного входа" Форма записи на языке ST: .. code-block:: ruby FB(DI_NUMBER := (*UINT*)); (*ULINT*) := FB.DI_FREQ_VALUE; Блок WRITE_DI_NOISE_FLTR_10US ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_DI_NOISE_FLTR_10US для указанного дискретного входа задается период нечувствительности импульса в диапазоне от 0 до 65512, при этом считается в десятках мс. .. only:: html .. figure:: images/beremiz/b-write_di_noise.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DI_NUMBER", "UINT", "Номер канала дискретного входа ПЛК BRIC" "DI_NOISE_FLTR_VALUE_10US", "UINT", "Период, за который счетчик обнаруживает не более 1 импульса" Форма записи на языке ST: .. code-block:: ruby FB(DI_NUMBER := (*UINT*), DI_NOISE_FLTR_VALUE_10US := (*UINT*)); Блок WRITE_DI_PULSELESS ~~~~~~~~~~~~~~~~~~~~~~~ ФБ WRITE_DI_PULSELESS для указанного дискретного входа задает период, за который ведется подсчет импульсов для расчета частоты .. only:: html .. figure:: images/beremiz/b-write_di_puls.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DI_NUMBER", "UINT", "Номер канала дискретного входа ПЛК BRIC" "DI_PULSELESS_VALUE", "UINT", "Период, относительно которого рассчитывается частота канала" Форма записи на языке ST: .. code-block:: ruby FB(DI_NUMBER := (*UINT*), DI_PULSELESS_VALUE := (*UINT*)); Блок WRITE_DI_MODE ~~~~~~~~~~~~~~~~~~ ФБ WRITE_DI_MODE для указанного дискретного входа обозначает подключенные опции (0– не подключены, 1– подключен счетчик импульсов, 2– подключен расчет частоты дискретного входа, 3– подключен счетчик импульсов и расчет частоты дискретного входа). .. only:: html .. figure:: images/beremiz/b-write_di_mode.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "DI_NUMBER", "UINT", "Номер канала дискретного входа ПЛК BRIC" "DI_MODE_VALUE", "UINT", "Код подключенных функций данного канала" Форма записи на языке ST: .. code-block:: ruby FB(DI_NUMBER := (*UINT*), DI_MODE_VALUE := (*UINT*)); Standart function blocks ------------------------ Блок SR ~~~~~~~ Данный ФБ представляет собой бистабильный SR–триггер, с доминирующим входом S (Set). .. only:: html .. figure:: images/beremiz/b-sr.png :align: left .. figure:: images/beremiz/sr.png :width: 300 .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "S1", "BOOL", "Вход (доминирующий)" "R", "BOOL", "Сброс" "**Выход**", "**Тип**", "**Описание**" "Q1", "BOOL", "Выход становится «1», когда на вход S1 приходит «1». При переходе S1 в «0» сохраняется состояние. Выход Q1 возвращается в «0», когда вход R становится «1»" Форма записи на языке ST: .. code-block:: ruby FB(S1 := (*BOOL*), R := (*BOOL*)); (*BOOL*) := FB.Q1; Блок RS ~~~~~~~ Данный ФБ представляет собой бистабильный RS–триггер, с доминирующим входом R (Reset). .. only:: html .. figure:: images/beremiz/b-rs.png :align: left .. figure:: images/beremiz/rs.png :width: 300 .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "S", "BOOL", "Вход" "R1", "BOOL", "Сброс (доминирующий)" "**Выход**", "**Тип**", "**Описание**" "Q1", "BOOL", "Выход становится «1», когда вход R1 становится «0». При переходе R1 в «0» сохраняется состояние. Выход Q1 возвращается в «1», когда вход S становится «1»" Форма записи на языке ST: .. code-block:: ruby FB(S := (*BOOL*), R1 := (*BOOL*)); (*BOOL*) := FB.Q1; Блок SEMA ~~~~~~~~~ Данный ФБ представляет собой семафор, определяющий механизм, позволяющий элементам программы иметь взаимоисключающий доступ к определенным ресурсам. .. only:: html .. figure:: images/beremiz/b-sema.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CLAIM", "BOOL", "Вход (доминирующий)" "RELEASE", "BOOL", "Сброс" "**Выход**", "**Тип**", "**Описание**" "BUSY", "BOOL", "Выход активируетс при CLAIM = 1 и деактивируется при RELEASE = 1" Форма записи на языке ST: .. code-block:: ruby FB(CLAIM := (*BOOL*), RELEASE := (*BOOL*)); (*BOOL*) := FB.BUSY; Блок R–TRIG ~~~~~~~~~~~ Данный ФБ представляет собой индикатор нарастания фронта, который генерирует на выходе одиночный импульс при нарастании фронта сигнала. .. only:: html .. figure:: images/beremiz/b-rtrig.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CLK", "BOOL", "Вход" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Выход генерирует единичный импульс, если на входе передний фронт" Форма записи на языке ST: .. code-block:: ruby FB(CLK := (*BOOL*)); (*BOOL*) := FB.Q; Блок F–TRIG ~~~~~~~~~~~ Данный ФБ представляет собой индикатор спада фронта, который генерирует на выходе одиночный импульс при спаде фронта сигнала. .. only:: html .. figure:: images/beremiz/b-f-trig.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CLK", "BOOL", "Вход" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Выход генерирует единичный импульс, если на входе задний фронт" Форма записи на языке ST: .. code-block:: ruby FB(CLK := (*BOOL*)); (*BOOL*) := FB.Q; Блок CTU/CTU_DINT… ~~~~~~~~~~~~~~~~~~ Данный ФБ представляет собой инкрементный счётчик. .. only:: html .. figure:: images/beremiz/b-ctu.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CU", "BOOL", "Подача импульса" "R", "BOOL", "Сброс" "PV", "ANY_INT", "Предел счета" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Принимает значение 'TRUE' когда CV >= PV" "CV", "ANY_INT", "Считает количество импульсов (CV = CV + 1) пока Q = 0" .. note:: Счетчик работает только до достижения максимального значения используемого типа данных. Переполнения не происходит. Форма записи на языке ST: .. code-block:: ruby FB(CU := (*BOOL*), R := (*BOOL*), PV := (*ANY_INT*)); (*BOOL*) := FB.Q; (*ANY_INT*) := FB.CV; .. note:: PV не включает тип данных USINT, SINT. Блок CTD/CTD_DINT… ~~~~~~~~~~~~~~~~~~ Данный ФБ представляет собой декрементный счётчик. .. only:: html .. figure:: images/beremiz/b-ctd.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CD", "BOOL", "Подача импульса" "LD", "BOOL", "Сброс" "PV", "ANY_INT", "Предел импульсов" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Принимает значение 'TRUE' когда CV = 0" "CV", "ANY_INT", "Считает количество импульсов (CV = CV – 1) пока Q = 0" .. note:: Счетчик работает только до достижения минимального значения используемого типа данных. Переполнения не происходит. Форма записи на языке ST: .. code-block:: ruby FB(CD := (*BOOL*), LD := (*BOOL*), PV := (*ANY_INT*)); (*BOOL*) := FB.Q; (*ANY_INT*) := FB.CV; Блок CTUD/CTUD_DINT… ~~~~~~~~~~~~~~~~~~~~ Данный ФБ представляет собой реверсивный счётчик. .. only:: html .. figure:: images/beremiz/b-ctud.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "CU", "BOOL", "Подача импульса" "CD", "BOOL", "Подача импульса" "R", "BOOL", "Сброс до 0" "LD", "BOOL", "Сброс до PV" "PV", "ANY_INT", "Верхний предел импульсов" "**Выход**", "**Тип**", "**Описание**" "QU", "BOOL", "Принимает значение 'TRUE' когда CV >= PV" "QD", "BOOL", "Принимает значение 'TRUE' когда CV = 0" "CD_T", "R_TRIG", "(в существующей версии не применяется)" "CU_T", "R_TRIG", "(в существующей версии не применяется)" .. note:: Вычитающий счетчик работает только до достижения минимального значения используемого типа данных, суммирующий счетчик работает только до достижения максимального значения используемого типа данных. Переполнения не происходит. Форма записи на языке ST: .. code-block:: ruby FB (CU := (*BOOL*), CD := (*BOOL*), R := (*BOOL*), LD := (*BOOL*), PV := (*ANY_INT*)); (*BOOL*) := FB.QU; (*BOOL*) := FB.QD; (*ANY_INT*) := FB.CV; Блок TP ~~~~~~~ Данный ФБ представляет собой повторитель импульсов и используется для генерирования импульса с заданной продолжительностью. .. only:: html .. figure:: images/beremiz/b-tp.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "BOOL", "Подача импульса" "PT", "TIME", "Время одного импульса" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Выход (пока ET < PT, Q = 'TRUE')" "ET", "TIME", "Пока IN = 1 и ET < PT идет счет времени ET" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*BOOL*), PT := (*TIME*)); (*BOOL*) := FB.Q; (*TIME*) := FB.ET; Блок TON ~~~~~~~~ Данный ФБ представляет собой таймер с задержкой включения. .. only:: html .. figure:: images/beremiz/b-ton.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "BOOL", "Подача импульса" "PT", "TIME", "Время задержки" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Если ET = PV и IN = 1, то Q = 1, иначе Q = 0" "ET", "TIME", "Счетчик времени считает пока ET < PV и IN = 1" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*BOOL*), PT := (*TIME*)); (*BOOL*) := FB.Q; (*TIME*) := FB.ET; Блок TOF ~~~~~~~~ Данный ФБ представляет собой таймер с задержкой отключения. .. only:: html .. figure:: images/beremiz/b-tof.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "BOOL", "Подача импульса" "PT", "TIME", "Время задержки" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Если ET = PV и IN = 1, то Q = 1, иначе Q = 0" "ET", "TIME", "Счетчик времени считает пока ET < PV и IN = 1" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*BOOL*), PT := (*TIME*)); (*BOOL*) := FB.Q; (*TIME*) := FB.ET; Additional Functional blocks ---------------------------- Блок RTC ~~~~~~~~ Данный ФБ представляет собой часы реального времени и имеет много вариантов использования, включая добавление временных отметок, для установки даты и времени в формируемых отчетах, в аварийных сообщениях и т.д. .. only:: html .. figure:: images/beremiz/b-rtc.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "BOOL", "Переключение режима" "PDT", "TIME", "Время начала работы" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Индикация режима" "CDT", "DT", "Вывод времени" Форма записи на языке ST: .. code-block:: ruby FB(IN := (*BOOL*), PDT := (*DT*)); (*BOOL*) := FB.Q; (*DT*) := FB.CDT; Блок INTEGRAL ~~~~~~~~~~~~~ ФБ интегрирует входное значение XIN по времени. .. only:: html .. figure:: images/beremiz/b-integral.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "RUN", "BOOL", "Включение блока" "R1", "BOOL", "Сброс (XOUT = X0)" "XIN", "REAL", "Интегрируемое значение" "X0", "REAL", "Начальное значение XOUT" "CYCLE", "TIME", "Время интегрирования" "**Выход**", "**Тип**", "**Описание**" "Q", "BOOL", "Q = 1, если R1 = 0" "XOUT", "REAL", "Выход (интегрирует входное значение XIN во времени) (XOUT = X0 * CYCLE (количество тактов при RUN = 1))" Форма записи на языке ST: .. code-block:: ruby FB(RUN := (*BOOL*), R1 := (*BOOL*), XIN := (*REAL*), X0 := (*REAL*), CYCLE := (*TIME*)); (*BOOL*) := FB.Q; (*REAL*) := FB.XOUT; Блок DERIVATIVE ~~~~~~~~~~~~~~~ ФБ выдаёт значение XOUT пропорционально скорости изменения входного параметра XIN. .. only:: html .. figure:: images/beremiz/b-derivative.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "RUN", "BOOL", "Включение блока" "XIN", "REAL", "Вход" "CYCLE", "TIME", "Время дифференцирования" "**Выход**", "**Тип**", "**Описание**" "XOUT", "REAL", "Формирование сигнала пропорционально частоте изменения входа XIN" Форма записи на языке ST: .. code-block:: ruby FB(RUN := (*BOOL*), XIN := (*REAL*),YCLE := (*TIME*)); (*REAL*) := FB.XOUT; Блок PID ~~~~~~~~ Данный ФБ представляет собой устройство в цепи обратной связи, используемое в системах автоматического управления для формирования управляющего сигнала .. only:: html .. figure:: images/beremiz/b-pid.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "AUTO", "BOOL", "Включение режима ПИД-регулятора (0 - ручное регулирование, 1 - автоматическое)" "DIR", "BOOL", "Направление регулирования ( 0 - обратное регулирование, 1 - прямое. По умолчанию стоит прямое регулирование)" "PV", "REAL", "Входной сигнал (автоматический режим)" "SP", "REAL", "Заданное значение (уставка в автоматическом режиме)" "X0", "REAL", "Заданное значение (уставка в ручном режиме)" "KP", "REAL", "Пропорциональный коэффициент" "TR", "REAL", "Интегральный коэффициент" "TD", "REAL", "Дифференциальный коэффициент" "CYCLE", "TIME", "Время цикла" "**Выход**", "**Тип**", "**Описание**" "XOUT", "REAL", "Выход ПИД-регулятора" Форма записи на языке ST: .. code-block:: ruby FB(AUTO := (*BOOL*), DIR := (*BOOL*), PV := (*REAL*), SP := (*REAL*), X0 := (*REAL*), KP := (*REAL*), TR := (*REAL*), TD := (*REAL*), LL := (*REAL*), LH := (*REAL*), CYCLE := (*TIME*)); (*REAL*) := FB.XOUT; Блок RAMP ~~~~~~~~~ .. only:: html .. figure:: images/beremiz/b-ramp.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "RUN", "BOOL", "Включение блока" "X0", "REAL", "Начало отсчета" "X1", "REAL", "Конечное значение" "TR", "TIME", "Время перехода" "CYCLE", "TIME", "Время интегрирования" "**Выход**", "**Тип**", "**Описание**" "BUSY", "BOOL", "BUSY = 1, если значения XOUT меняются" "XOUT", "REAL", "Если RUN = 1, то пока XOUT < X1 XOUT = X1*CYCLE*t/TR + X0 иначе XOUT = X0" Форма записи на языке ST: .. code-block:: ruby FB(RUN := (*BOOL*), X0 := (*REAL*), X1 := (*REAL*), TR := (*TIME*), CYCLE := (*TIME*)); (*BOOL*) := FB.BUSY; (*REAL*) := FB.XOUT; AI Functional blocks -------------------- Блок READ_AI_STATE ~~~~~~~~~~~~~~~~~~ ФБ READ_AI_STATE показывает информацию о состоянии аналогового входа. .. only:: html .. figure:: images/beremiz/b-read_ai_state.png :align: left .. csv-table:: :header: "Выход", "Тип", "Описание" :widths: 10, 10, 20 "AI_STATE_VALUE", "UINT", "Состояние канала. Логическая 1 – измеренное значение тока лежит в диапазоне 4 - 20 мА, логический 0 – измеренное значение ниже 4 мА либо выше 20 мА." Форма записи на языке ST: .. code-block:: ruby FB(AI_STATE_VALUE => (*UINT*)); Блок READ_AI ~~~~~~~~~~~~ ФБ READ_AI выводит значение аналогового входного канала ПЛК, номер которого прописан на входе блока. .. only:: html .. figure:: images/beremiz/b-read_ai.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "AI_NUMBER", "UINT", "Номер канала" "**Выход**", "**Тип**", "**Описание**" "AI_VALUE", "UINT", "Показание аналогового канала по шкале 0 – 16383, которая соответствует шкале принимаемого унифицированного сигнала" Форма записи на языке ST: .. code-block:: ruby FB(AI_NUMBER := (*UINT*)); (*UINT*) := FB.AI_VALUE; Блок READ_AI_REAL ~~~~~~~~~~~~~~~~~ ФБ READ_AI_REAL выводит значение аналогового входного канала ПЛК в мА, номер которого прописан на входе блока. .. only:: html .. figure:: images/beremiz/b-read_ai_real.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "AI_NUMBER", "UINT", "Номер канала" "**Выход**", "**Тип**", "**Описание**" "AI_VALUE", "REAL", "Показание аналогового канала в мА" Форма записи на языке ST: .. code-block:: ruby FB(AI_NUMBER := (*UINT*), AI_VALUE => (*REAL*)); Type conversion --------------- Блок \*_TO_*\ ~~~~~~~~~~~~~ Данный ФБ предназначен для всех возможных и корректных, согласно стандарту IEC 61131–3, преобразований между типами данных. .. only:: html .. figure:: images/beremiz/b-to.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "…", "Преобразуемая информация" "**Выход**", "**Тип**", "**Описание**" "OUT", "…", "Преобразованная информация" Форма записи на языке ST: .. code-block:: ruby (*ANY*) := *_TO_*(*ANY*); .. csv-table:: Перечисление блоков преобразования типов :header: "Тип", "Описание" :widths: 10, 20 "REAL_TO_*\", "Преобразование REAL в остальные типы данных" "SINT_TO_*\", "Преобразование SINT в остальные типы данных" "LINT_TO_*\", "Преобразование LINT в остальные типы данных" "DINT_TO_*\", "Преобразование DINT в остальные типы данных" "DATE_TO_*\", "Преобразование DATE в остальные типы данных" "DWORD_TO_*\", "Преобразование DWORD в остальные типы данных" "DT_TO_*\", "Преобразование DT в остальные типы данных" "TOD_TO_*\", "Преобразование TOD в остальные типы данных" "UDINT_TO_*\", "Преобразование UDINT в остальные типы данных" "WORD_TO_*\", "Преобразование WORD в остальные типы данных" "STRING_TO_*\", "Преобразование STRING в остальные типы данных" "LWORD_TO_*\", "Преобразование LWORD в остальные типы данных" "UINT_TO_*\", "Преобразование UINT в остальные типы данных" "LREAL_TO_*\", "Преобразование LREAL в остальные типы данных" "BYTE_TO_*\", "Преобразование BYTE в остальные типы данных" "USINT_TO_*\", "Преобразование USINT в остальные типы данных" "ULINT_TO_*\", "Преобразование ULINT в остальные типы данных" "BOOL_TO_*\", "Преобразование BOOL в остальные типы данных" "TIME_TO_*\", "Преобразование TIME в остальные типы данных" "INT_TO_*\", "Преобразование INT в остальные типы данных" Numerical --------- Блок ABS ~~~~~~~~ Данный ФБ возвращает в OUT модуль входного числа IN. .. only:: html .. figure:: images/beremiz/b-abs.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_NUM", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_NUM", "Выход (модуль числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_NUM*) := ABS((*ANY_NUM*)); Блок SQRT ~~~~~~~~~ Данный ФБ возвращает в OUT квадратный корень входного числа IN. .. only:: html .. figure:: images/beremiz/b-sqrt.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (корень числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := SQRT((*ANY_REAL*)); Блок LN ~~~~~~~ Данный ФБ возвращает в OUT значение натурального логарифма от IN. .. only:: html .. figure:: images/beremiz/b-ln.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (натуральный логарифм числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := LN((*ANY_REAL*)); Блок LOG ~~~~~~~~ Данный ФБ возвращает в OUT значение логарифма по основанию 10 от IN. .. only:: html .. figure:: images/beremiz/b-log.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (логарифм числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := LOG((*ANY_REAL*)); Блок EXP ~~~~~~~~ Данный ФБ возвращает в OUT значение экспоненты, возведённой в степень IN. .. only:: html .. figure:: images/beremiz/b-exp.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (экспонента числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := EXP((*ANY_REAL*)); Блок SIN ~~~~~~~~ Данный ФБ возвращает в OUT значение синуса IN. .. only:: html .. figure:: images/beremiz/b-sin.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (синус числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := SIN((*ANY_REAL*)); Блок COS ~~~~~~~~ Данный ФБ возвращает в OUT значение косинуса IN. .. only:: html .. figure:: images/beremiz/b-cos.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (косинус числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := COS((*ANY_REAL*)); Блок TAN ~~~~~~~~ Данный ФБ возвращает в OUT значение тангенса IN. .. only:: html .. figure:: images/beremiz/b-tan.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (тангенс числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := TAN((*ANY_REAL*)); Блок ASIN ~~~~~~~~~ Данный ФБ возвращает в OUT значение арксинуса IN. .. only:: html .. figure:: images/beremiz/b-asin.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (арксинус числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := ASIN((*ANY_REAL*)); Блок ACOS ~~~~~~~~~ Данный ФБ возвращает в OUT значение арккосинуса IN. .. only:: html .. figure:: images/beremiz/b-acos.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (арккосинус числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := ACOS((*ANY_REAL*)); Блок ATAN ~~~~~~~~~ Данный ФБ возвращает в OUT значение арктангенса IN. .. only:: html .. figure:: images/beremiz/b-atan.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN", "ANY_REAL", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (арктангенс числа)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := ATAN((*ANY_REAL*)); Arithmetic ---------- Блок ADD ~~~~~~~~ Данный ФБ возвращает в OUT результат сложения IN1 и IN2. .. only:: html .. figure:: images/beremiz/b-add.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN1", "ANY_NUM", "Вход" "IN2", "ANY_NUM", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_NUM", "Выход (сложение)" Форма записи на языке ST: .. code-block:: ruby (*ANY_NUM*) := ADD((*ANY_NUM*), (*ANY_NUM*)); Блок MUL ~~~~~~~~ Данный ФБ возвращает в OUT результат умножения IN1 и IN2. .. only:: html .. figure:: images/beremiz/b-mul.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "IN1", "ANY_NUM", "Вход" "IN2", "ANY_NUM", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_NUM", "Выход (умножение)" Форма записи на языке ST: .. code-block:: ruby (*ANY_NUM*) := MUL((*ANY_NUM*), (*ANY_NUM*)); Блок SUB ~~~~~~~~ Данный ФБ возвращает в OUT результат вычитания из IN1 значения IN2. .. only:: html .. figure:: images/beremiz/b-sub.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_NUM", "Вход" "IN2", "ANY_NUM", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_NUM", "Выход (разность)" Форма записи на языке ST: .. code-block:: ruby (*ANY_NUM*) := SUB((*ANY_NUM*), (*ANY_NUM*)); Блок DIV ~~~~~~~~ Данный ФБ возвращает в OUT результат деления IN1 на IN2. .. only:: html .. figure:: images/beremiz/b-div.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_NUM", "Вход (делитель)" "IN2", "ANY_NUM", "Вход (делитель)" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_NUM", "Выход (деление)" Форма записи на языке ST: .. code-block:: ruby (*ANY_NUM*) := DIV((*ANY_NUM*), (*ANY_NUM*)); Блок MOD ~~~~~~~~ Данный ФБ возвращает в OUT остаток от деления IN1 на IN2. .. only:: html .. figure:: images/beremiz/b-mod.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_INT", "Вход (делимое)" "IN2", "ANY_INT", "Вход (делитель)" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_INT", "Выход (остаток от деления)" Форма записи на языке ST: .. code-block:: ruby (*ANY_INT*) := MOD((*ANY_INT*), (*ANY_INT*)); Блок EXPT ~~~~~~~~~ Данный ФБ возвращает в OUT значение IN1 возведённое в степень IN2. .. only:: html .. figure:: images/beremiz/b-expt.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_REAL", "Вход" "IN2", "ANY_NUM", "Вход (степень)" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_REAL", "Выход (число в степени)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := EXPT((*ANY_REAL*), (*ANY_NUM*)); Блок MOVE ~~~~~~~~~ Данный ФБ возвращает в OUT значение IN. .. only:: html .. figure:: images/beremiz/b-move.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN", "ANY", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY", "Выход (присваивание)" Форма записи на языке ST: .. code-block:: ruby (*ANY_REAL*) := MOVE((*ANY*)); Bit-shift --------- Блок SHL ~~~~~~~~ Данный ФБ возвращает в OUT арифметический сдвиг аргумента IN на N бит влево с заполнением битов справа нулями. .. only:: html .. figure:: images/beremiz/b-shl.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_INT", "Количество сдвигов влево" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := SHL((*ANY_BIT*), (*ANY_INT*)); Блок SHR ~~~~~~~~ Данный ФБ возвращает в OUT арифметический сдвиг аргумента IN на N бит вправо с заполнением битов слева нулями. .. only:: html .. figure:: images/beremiz/b-shr.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_INT", "Количество сдвигов вправо" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := SHR((*ANY_BIT*), (*ANY_INT*)); Блок ROR ~~~~~~~~ Данный ФБ возвращает в OUT циклический сдвиг аргумента IN на N бит влево. .. only:: html .. figure:: images/beremiz/b-ror.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_INT", "Количество сдвигов вправо" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := ROR((*ANY_BIT*), (*ANY_INT*)); Блок ROL ~~~~~~~~ Данный ФБ возвращает в OUT циклический сдвиг аргумента IN на N бит вправо. .. only:: html .. figure:: images/beremiz/b-rol.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_INT", "Количество сдвигов влево" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := ROL((*ANY_BIT*), (*ANY_INT*)); Bitwise ------- Блок AND ~~~~~~~~ Данный ФБ представляет собой организацию «логического И» для всех входных аргументов IN1…INn. .. only:: html .. figure:: images/beremiz/b-and.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_BIT", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := AND((*ANY_BIT*), (*ANY_BIT*)); Блок OR ~~~~~~~ Данный ФБ представляет собой организацию «логического ИЛИ» для всех входных аргументов IN1…INn. .. only:: html .. figure:: images/beremiz/b-or.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_BIT", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := OR((*ANY_BIT*), (*ANY_BIT*)); Блок XOR ~~~~~~~~ Данный ФБ представляет собой организацию «логического исключающего ИЛИ» для всех входных аргументов IN1…INn. .. only:: html .. figure:: images/beremiz/b-xor.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY_BIT", "Вход" "IN2", "ANY_BIT", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := XOR((*ANY_BIT*), (*ANY_BIT*)); Блок NOT ~~~~~~~~ Данный ФБ представляет собой организацию «логической инверсии» для входного аргумента IN. .. only:: html .. figure:: images/beremiz/b-not.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN", "ANY_BIT", "Вход" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY_BIT", "Выход (инверсия)" Форма записи на языке ST: .. code-block:: ruby (*ANY_BIT*) := NOT((*ANY_BIT*), (*ANY_BIT*)); Selection --------- Блок SEL ~~~~~~~~ Данный ФБ возвращает в OUT один из двух аргументов IN1 или IN2 в зависимости от значения аргумента G. .. only:: html .. figure:: images/beremiz/b-sel.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 10, 10, 20 "G", "BOOL", "Номер входа" "IN0", "ANY", "Вход 1" "IN1", "ANY", "Вход 2" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY*) := SEL((*BOOL*), (*ANY*), (*ANY*)); Блок MAX ~~~~~~~~ Данный ФБ возвращает в OUT максимум из входных аргументов IN1 и IN2. .. only:: html .. figure:: images/beremiz/b-max.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "…", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY*) := MAX((*ANY*), (*ANY*)); Блок MIN ~~~~~~~~ Данный ФБ возвращает в OUT минимум из входных аргументов IN1 и IN2. .. only:: html .. figure:: images/beremiz/b-min.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "…", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY*) := MIN((*ANY*), (*ANY*)); Блок LIMIT ~~~~~~~~~~ Данный ФБ возвращает в OUT значение входного аргумента IN, в случае превышения им значения MX – в OUT возвращается MX, в случае если IN меньше MN – в OUT возвращается MN. .. only:: html .. figure:: images/beremiz/b-limit.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "MN", "ANY", "Вход (нижний предел)" "IN", "ANY", "Вход" "MX", "ANY", "Вход (верхний предел)" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY*) := LIMIT((*ANY*), (*ANY*), (*ANY*)); Блок MUX ~~~~~~~~ Данный ФБ возвращает в OUT значение на входе IN(K), в зависимости от входного K. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-mux.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "K", "ANY_INT", "Переключатель" "IN0", "ANY", "Вход 1" "IN1", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "ANY", "Выход" Форма записи на языке ST: .. code-block:: ruby (*ANY*) := MUX((*ANY*), (*ANY*), (*ANY*)); Comparsion ---------- Блок GT ~~~~~~~ Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 > IN2) & (IN2 > IN3) & … (INn–1 > INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-gt.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выход" Форма записи на языке ST: .. code-block:: ruby (*BOOL*) := GT((*ANY*), (*ANY*), (*ANY*)); Блок GE ~~~~~~~ Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 >= IN2) & (IN2 >= IN3) &… (INn–1 >= INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-ge.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выход" Форма записи на языке ST: .. code-block:: ruby (*BOOL*) := GE((*ANY*), (*ANY*), (*ANY*)); Блок EQ ~~~~~~~ Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 = IN2) & (IN2 = IN3) & … (INn–1 = INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-eq.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выход" Форма записи на языке ST: .. code-block:: ruby (*BOOL*) := EQ((*ANY*), (*ANY*), (*ANY*)); Блок LT ~~~~~~~ Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 < IN2) & (IN2 < IN3) & … (INn–1 < INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-lt.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выход" Форма записи на языке ST: .. code-block:: ruby (*BOOL*) := LT((*ANY*), (*ANY*), (*ANY*)); Блок LE ~~~~~~~ Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 <= IN2) & (IN2 <= IN3) & … (INn–1 <= INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-le.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выход" Форма записи на языке ST: .. code-block:: ruby (*BOOL*) := LE((*ANY*), (*ANY*), (*ANY*)); Блок NE ~~~~~~~ Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 <> IN2) & (IN2 <> IN3) &… (INn–1 <> INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2. .. only:: html .. figure:: images/beremiz/b-le.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN1", "ANY", "Вход 1" "IN2", "ANY", "Вход 2" "…", "ANY", "Вход …" "**Выход**", "**Тип**", "**Описание**" "OUT", "BOOL", "Выход" Форма записи на языке ST: .. code-block:: ruby (*BOOL*) := NE((*ANY*), (*ANY*), (*ANY*)); BRIC FB ------- Функция TASK_PERIOD ~~~~~~~~~~~~~~~~~~~ Данная фунцкия выводит информацию о цикле программы в миллисекундах. .. only:: html .. figure:: images/beremiz/b-task.png :align: left .. csv-table:: :header: "Вход", "Тип", "Описание" :widths: 1, 1 , 10 "IN", "STRING", "Выбор цикла из ресурсов" "**Выход**", "**Тип**", "**Описание**" "OUT", "UDINT", "Вывод цикла в мс" .. note:: Наименование для IN должно совпадать с наименованием цикла в ресурсах, а также должен быть объявлен локально. Форма записи на языке ST: .. code-block:: ruby (*UDINT*) := TASK_PERIOD((*STRING*));