Руководство по программированию, создание блоков для PCS 7
A5E00122559-01
1-33
1.6.1 Блокировка сообщений во время запуска
Если Вы хотите уменьшить время загрузки в ПЛК при запус ке, которое
увеличивается из-за одновременной генерации нескольких сообщений
(разными блоками), определите параметр ввода RUNUPCYC с типом данных
INT. Этот параметр позволяет определить количество загрузочных циклов, во
время которых не будет происходить генерация сообщений. В алгоритме
блока считается количество вызовов, и генерация сообщений будет
осуществляться только после того, как пройдет ук азанное количество циклов.
В следующем фрагменте блока-примера показано как это делается.
//*************************************************************************************
// Область объявлений: параметры блока
//*************************************************************************************
VAR_INPUT
...
H_ALM {S7_m_c := 'true';
S7_visible:='false';
S7_link := 'false'
} :REAL :=100; // Верхняя аварийная уставка (по умолчанию 100)
L_ALM {S7_m_c := 'true'; // Возможно управление и наблюдение за параметром
S7_visible:='false'; // Параметр невидим
S7_link := 'false' // и не может быть связан
} :REAL := 0; // Нижняя аварийная уставка (по умолчанию 0)
...
RUNUPCYC {S7_visible:='false';
S7_link:='false'} :INT := 3; // Количество циклов исполнения
END_VAR
//************************************************************************************
// Область объявлений: статические переменные
//************************************************************************************
VAR
...
siRUNUPCNT :INT := 0; // Счетчик для исполнения RUNUPCYC
...
END_VAR
//************************************************************************************
// Запуск
//************************************************************************************
// OB100: теплая перезагрузка
100:
...
siRUNUPCNT := RUNUPCYC; // Сохранить значение RUNUPCYC
...
//**********************************************************************************
// Технологическая область
//**********************************************************************************
IF siRUNUPCNT = 0 // Завершен ли цикл RUNUPCYC?
THEN
IF (LMN > H_ALM) THEN // Если знач. регул. переменной превысило верх. авар. уставку
QH_ALM := 1; // Установить выход ошибки
QL_ALM := 0; // Сбросить выход ошибки
ELSIF (LMN < L_ALM) THEN // Если знач. регул. переменной меньше нижн. авар. уставки
QL_ALM := 1; // Установить выход ошибки
QH_ALM := 0; // Сбросить выход ошибки
ELSE
QH_ALM := 0; // Сбросить выходы ошибок
QL_ALM := 0;
END_IF;
ELSE
siRUNUPCNT := siRUNUPCNT - 1;
END_IF;
END_CASE;