ГОСТ Р МЭК 61131-3—2016
CLASS LIGHT2ROOMEXTENDS UGHTROOM
VAR LIGHT2: BOOL: END_VAR// Вторая переменная light
METHOD PUBLIC OVERRIDE SET_DAYTIME
VARJNPUT: DAYTIME: BOOL: END_VAR
SUPERSETJDAYTIME(DAYTIME); И Вызов LIGHTROOMSET_DAYTIMELIGHT2:= NOT(DAYTIME):
END_METHOD
END_CLASS
FUNCTION_BLOCKROOM_CTRL
VARJNjOUTRM: UGHTROOM: ENDJVAR
VAR_EXTERNALActual_TOD: TOD: END_VAR // Определение глобального времени
ИВ этом случае функциональный блокдля вызова динамически связан
И RMможет ссылаться на порожденный класс!
RMSET DAYTIME(DAYTIME:=(Actual_TOD <= TODK20.15)AND
(Actual_TOD >= TODK6:00)):
END_FUNCTION_BLOCK
И Использование полиморфизма и динамического связывания со ссылкой
PROGRAMD
VAR
MyRooml: UGHTROOM;
MyRoom2: LIGHT2ROOM;
My_Room_Ctrl: ROOM CTRL;
END_VAR
My_Room_Ctrl(RM:=MyRooml);
My_Room_Ctrl(RM:=MyRoom2);
END_PROGRAM:
6.6.8.4 Полиморфизм со ссылкой
Пример производного типа может быть назначен для ссылки на базовый класс.
Переменная, имеющая тип. может быть назначена как ссылка на производный тип функциональ
ного блока, если производный тип функционального блока не имеет дополнительных входных-выход-
ных переменных. Разработчик определяет, будет ли назначаться ссылка на производный тип функцио
нального блока с дополнительными входными-выходными переменными.
Таким образом, вызов функционального блока и вызов методов функционального блока посред
ством разыменования ссылки представляют собой случаи динамического связывания.
Пример 1— Альтернативная реализация примера lightroom
FUNCTION_BLOCKLIGHTROOM
VARUGHT: BOOL; END VAR
VARJNPUT: DAYTIME: BOOL; ENDJVAR
LIGHT- NOT(DAYTIME);
END_FUNCTION_BLOCK
FUNCTION_BLOCKLIGHT2ROOMEXTENDSLIGHTROOM
VARUGHT2: BOOL; END_VAR
//Дополнительное освещение
SUPERQ:
//Вызов LIGHTROOM
LIGHT2.- NOT(DAYTIME):
END_FUNCTION_BLOCK
143