Допустим у меня куча входов и выходов как на плк так и на модуля. Они обслуживают установки однотипные. Каждая установка занимает 2 входа и 2 выхода. Я хочу создать массив этих установок и обрабатывать их в массиве. Первое я создаю структуру.
Код:
TYPE SR_ZONE :
STRUCT
xStart: POINTER TO BOOL;
xReset: POINTER TO BOOL;
xTempr: POINTER TO WORD;
xPV: POINTER TO WORD;
END_STRUCT
END_TYPE
Теперь я объявляю глобальную переменную
Код:
VAR_GLOBAL
glbZones: ARRAY[1..10] OF SR_ZONE;
END_VAR
Уже в коде я могу просто сделать код в цикле.
Код:
VAR
i: INT;
END_VAR
FOR i := 1 TO 10 DO
IF (glbZones[i].xTempr^ < glbZones[i].xPV^) THEN
glbZones[i].Start := TRUE;
END_IF;
END_FOR
Все написано от руки, это не реальный код, а что бы продемонстрировать идею. Так вот что бы это работало, в начале программы на первом запуске нужно сделать карту или привязать значения к входам и выходам. Это получается хорошо с не булевыми переменными.
Код:
glbZones[1].xTempr:= ADR(wTemperZone1);
glbZones[1].xPV:= ADR(wTemperZone1);
glbZones[2].xTempr:= ADR(wTemperZone1);
glbZones[2].xPV:= ADR(wTemperZone1);
Но как назначить переменную типа BOOL что бы потом можно было сделать glbZones[i].Start := TRUE; и выходу назначалось значение?