Результат

Типовые задачи  Предыдущий  Следующий

Общие сведения

Наименование: RESULT.

Тип выхода: вещественный или логический.

Количество входов: от 2 до 3.

Примечания по входам

порядок входов: «Выход», «Значение», «Начальное значение»;

«Выход» — аналоговый или дискретный выходной канал (или ссылка на него);

признак инверсии первого входа («Выход») игнорируется;

«Начальное значение» — константа, которая задает значение выходного канала, указанного на первом входе («Выход»), после холодного рестарта модуля ПР;  можно не указывать — по умол­ча­нию равно:

для дискретных выходных каналов — логическому нулю;

для аналоговых выходных каналов — минимальному значе­нию шкалы.

Функционирование

значение выхода равно значению второго входа («Значе­ние»), и это же значение присваивается выходному каналу, указанному в первом входе («Выход»);

значение выхода на первом такте работы контроллера недостоверно, если значение константы на третьем входе («Начальное значение») выходит за пре­делы шкалы выходного канала, указанного на первом входе («Выход»);

выход имеет неинициализированное значение, если второй вход («Значе­ние») имеет неинициализированное значение;

значение выхода недостоверно, если:

второй вход («Значение») имеет значение, которое находится за пре­делами шкалы выходного канала, указанного на первом входе («Выход»);

второй вход («Значение») имеет недосто­вер­ное значение;

выход, указанный в первом входе («Выход»), отключен;

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

Внимание:

1. Недопустимо для одного выходного канала  одновременное использование упрощенной логики/формулы и алгоблока RESULT.

2. Выходной канал будет в неинициализированном состоянии, если:

у него отсутствует формула/упрощенная логика срабатывания;

для него не задан алгоблок RESULT;

он не задан/установлен в циклической программе или в контуре регулирования.

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

BLOCK1 = RESULT(AO1.1; 10)

// Алгоблоку BLOCK1 и каналу AO1.1 присваивается значение 10.

BLOCK2 = RESULT(DO1.1; DI1.1)

BLOCK3 = RESULT(AO2.8; BLOCK12; 0)

// Использование в аргументах значений каналов и алгоблоков.

// =======================================

// Реализация внешней звуковой сигнализации

B1 = ASK_LIM(60; AI1.1) // Определение сработанных уставок канала AI1.1

B2 = ASK_LIM(60; AI1.2) // Определение сработанных уставок канала AI1.2

B3 = OR(B1; B2) // Формула срабатывания

B4 = DELAY(B3; 30; 1) // Задержка включения 3 с

B5 = DELAY(B4; 20; 0) // Задержка отключения 2 с

B6 = FORCE_OFF(B5; 6000) // Принудительное отключение через 10 мин

B7 = RESULT(DO1.1; B6) // Установка логического значения в DO1.1

B8 = FRN(B7; 1) // Старт прерываний в момент срабатывания

B9 = FRQ(100; 100; 1; B8) // Задание прерывания

B10 = CLR_ACK(B1; B2) // Возобновление сигнализации 

B11 = ACK(1; B9; B3; DI1.4; B10) // Задание сигнализации (звуковой)

B12 = PHY_DSC(DO1.1; B11) // Установка физического значения DO1.1.

alarm_fbd

Файл для импорта: ack.help

// =======================================

// Реализация блокировки с памятью

B10 = OR(DI1.1; DI1.2; DI1.3; DI1.4) // Формула блокировки

B20 = OR(DI11.1; DI12.1) // Формула снятия блокировки

B30 = DELAY(B10; 10; 1) // Задержка включения блокировки на 1 с

B40 = MEMORY(B30; 0; B20) // Запись в энергонезависимую ячейку 

// состояния блокировки

B50 = RESULT(DO1.1; B40)

B60 = PHY_DSC(DO1.1) // Установка состояния 

// (логического и физического) дискретного выходного канала.

block_mem_fbd

Файл для импорта: block_mem.help

// =======================================

// Реализация периодической функции "Пила"

// (приращение - 0,001; период - 2пи;

// область значений - от 0 до 2пи)

// и построение от нее функции "синус"

// (область значений - от 20 до 70)

B1 = DIV(AO1.1; 6,2815)

B2 = TRC(B1)

B3 = MUL(B2; 6,283)

B4 = ADD(AO1.1; 0,001)

B5 = SUB(B4; B3)

B6 = RESULT(AO1.1; B5; 0)

// Реализация рекурентной формулы 

// AO1.1 := AO1.1 + 0,001 - 6,283 * TRC( AO1.1 / 6.2815 )

B7 = SIN(AO1.1)

B8 = MUL(B7; 25)

B9 = ADD(45; B8)

B10 = RESULT(AO1.2; B9)

// Реализация  формулы AO1.2 := 45 + 25 * SIN( AO1.1 ).

saw_sin_fbd

Файл для импорта: saw_sin.help

// =======================================

// Дискретное регулирование от 100 до 900

B1 = DOWN_HYSTER(AI1.1; 100)

B3 = UP_HYSTER(AI1.1; 900)

B5 = TRG(B1; B3)

B6 = RESULT(DO1.1; B5)

B7 = PHY_DSC(DO1.1)

// Дискретное регулирование по значению 

// аналогового входного канала AI1.1 

// от 100 до 900 посредством 

// дискретного выходного канала DO1.1.

do100to900_fbd

Файл для импорта: do100to900.help

// =======================================

B10 = IDIV(AI1.1; AI1.2) // Целая часть от деления AI1.1 на AI1.2

B20 = IREM(AI1.1; AI1.2) // Остаток от деления AI1.1 на AI1.2

B30 = RESULT(AO1.1; B10)

B40 = PHY_ANALOG(AO1.1) // Запись целой части в канал AO1.1

B50 = RESULT(AO1.2; B20)

B60 = PHY_ANALOG(AO1.2) // Запись остатка в канал AO1.2.

// =======================================

// Реализация блокировки, если сработали три параметра из пяти

B10 = ASK_LIM(8; AI1.1)

B20 = ASK_LIM(8; AI1.2)

B30 = ASK_LIM(8; AI1.3)

B40 = ASK_LIM(8; AI1.4)

B50 = ASK_LIM(8; AI1.5)

// Определение срабатывания уставки Н у каналов AI1.1-AI1.5

B60 = NOFM(B10; B20; B30; B40; B50; 3)

B70 = RESULT(DO1.1; B60)

B80 = PHY_DSC(DO1.1)

// Вывод сигнала блокировки на дискретный выходной канал DO1.1.

block3of5_fbd

Файл для импорта: block3of5.help

// =======================================

// Реализация счетчика моточасов

// DI1.1 - равен 1, когда агрегат включен (работает)

// AO1.1 - счетчик моточасов

// TBL1 - таблица из одной ячейки, хранит значение счетчика

B00 = OR(DI1.1; 0)

// Шунтирование недостоверных значений DI1.1 нулём

B10 = DIV(B00; 36000)

// пересчет времени работы агрегата в часы

B20 = TBL_SEL(TBL1; 0)

B30 = MAX(AO1.1; B20)

// восстанавливаем значение, если было отключение питания

B40 = ADD(B30; B10)

// увеличиваем значение счетчика

B50 = TBL_WRITE(TBL1; 0; B40; 1)

// записываем значение в первую ячейку таблицы TBL1

// раз в секунду (9 из 10 тактов записи

// будут игнорироваться)

B60 = RESULT(AO1.1; B40; 0)

// записываем значение в канал AO1.1

motor_fbd

Файл для импорта: motor.help

// =======================================

// Реализация тумблера

// (первое нажатие DI1.1 включает DO1.1,

// второе нажатие DI1.1 отключает DO1.1)

B010 = TRG(B020; ~DI1.1)

B020 = AND(DI1.1; ~B010)

B030 = AND(~B050; B020)

B040 = AND(B050; B020)

B050 = TRG(B030; B040)

B060 = RESULT(DO1.1; B050)

toggle_fbd

Файл для импорта: toggle.help

// =======================================

// Выделение переднего фронта из сигнала DI1.1

// DO1.1 на один такт = 1, когда включается DI1.1

B020 = TRG(B030; ~DI1.1)

B030 = AND(~B020; DI1.1)

B040 = RESULT(DO1.1; B030)

// Выделение заднего фронта из сигнала DI1.1

// DO1.2 на один такт = 1, когда отключается DI1.1

B110 = TRG(DI1.1; B120)

B120 = AND(~DI1.1; B110)

B130 = RESULT(DO1.2; B120)

front_fbd

Файл для импорта: front.help