Я использую Wago PFC200 для домашней автоматизации. Я получил базовый функциональный блок:
FUNCTION_BLOCK ABSTRACT Room
и два интерфейса:
INTERFACE IBlinds
- BlindsUp
- BlindsDown
а также
ILights
-TurnOffLights
-TurnOnLights
Экземпляры моей комнаты выглядят так:
FUNCTION_BLOCK Garage EXTENDS Room IMPLEMENTS ILights, IBlinds
В моем PLC_PRG есть все экземпляры моих комнат:
PROGRAM PLC_PRG
VAR
Bedroom: Bedroom;
Garage: Garage;
Hall: Hall;
Boilerroom: Boilerroom;
...
END_VAR
В PLC_PRG у меня есть несколько методов, например: автоматизировать блиды:
METHOD MoveBlindsToMorningPosition
VAR CONSTANT
siCount: SINT := 5;
END_VAR
VAR_INPUT
xMoveSignal: BOOL;
END_VAR
VAR
_siIndex: SINT;
_rooms: ARRAY[0..siCount] OF POINTER TO IBlinds := [ADR(Livingroom), ADR(Diningroom), ADR(Kitchen), ADR(Toilet), ADR(Boilerroom), ADR(Garage)];
END_VAR
FOR _siIndex := 0 TO siCount DO
_rooms[_siIndex]^.MoveBlindsToMorningPosition(xMove := xMoveSignal);
END_FOR
Но я получил следующие ошибки компиляции в массиве _rooms: C0032: Cannot convert type 'POINTER TO Garage' to type 'POINTER TO IBlinds'
Мои функциональные блоки фактически реализуют IBlinds. Есть ли способ приведения функционального блока?