# Результат | Типовые задачи Предыдущий Следующий

## Общие сведения Наименование: 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. Файл для импорта: 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.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.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.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.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.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.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.help