Вы не можете получить доступ к полям массива таким образом.
Есть несколько других способов добиться желаемого в структурированном тексте:
- Поскольку ваше свойство publi c, нет причин не объявлять массив IObserver в качестве поля ввода функционального блока. Если вы это сделаете, вы можете получить к нему доступ так, как вам нужно.
Часть декларации:
FUNCTION_BLOCK CommandHandler
VAR_INPUT
IObservers : ARRAY[0..19] OF IObserver;
END_VAR
Пример вызова:
fbCommandHandler.IObservers[i].update();
Другой способ - получить доступ (и изменить, и т. Д. c ..) к вашим IObservers изнутри метода обновления:
Создайте новый интерфейс IObserverArray с методом обновления:
METHOD update : BOOL
VAR_INPUT
index : INT;
cmd : INT;
END_VAR
Создайте новый функциональный блок, реализующий IObserverArray itf:
FUNCTION_BLOCK ObserverArray IMPLEMENTS IObserverArray
//declaration part of the update method
METHOD update : BOOL
VAR_INPUT
index : INT;
cmd : INT;
END_VAR
VAR
itfObservers : ARRAY [0..19] OF IObserver;
END_VAR
//imlementation part of the update method
itfObservers[index].update(cmd);
Создайте метод getObservers () в функциональном блоке CommandHandler, который возвращает IObserverArray:
METHOD getObservers : IObserverArray
//imlementation part of the getObservers method
getObservers := aObservers;
Теперь вы просто объявляете aObservers : ObserverArray;
в своем CommandHandler как VAR и называете его так: fbCommandHandler.getObservers().update(5,12);