我正在使用 Wago PLC - PFC200 - 用于家庭自动化。我已经做了大部分的事情,比如灯光或百叶窗自动化。最近我决定做一些重构,我开始认为这样的 PLC 不是带有垃圾收集器的 PC,它可能是有益的,而不是在表中将 POU 传递给那些 POU 的指针。
我从这样的事情开始:
宣言:
VAR
Lighs: ARRAY [1..siTotalLightsCount] OF Relay;
END_VAR
Relay
我的 POU(程序组织单元 - 就像一个班级)在哪里。
初始化:
Lighs[1] := MainLightRelay;
Lighs[2] := WindowLightRelay;
Lighs[3] := IslandLightRelay;
POU方法中的用法:
FOR siCurrent := 1 TO siTotalLightsCount DO
Lighs[siCurrent].xCentralOff := xCentralOffSignal;
END_FOR
但我可能有益于为变量节省一些内存并采用这种方法:
宣言:
VAR
Lighs: ARRAY [1..siTotalLightsCount] OF POINTER TO Relay;
END_VAR
初始化:
Lighs[1] := ADR(MainLightRelay);
Lighs[2] := ADR(WindowLightRelay);
Lighs[3] := ADR(IslandLightRelay);
POU方法中的用法:
FOR siCurrent := 1 TO siTotalLightsCount DO
Lighs[siCurrent]^.xCentralOff := xCentralOffSignal;
END_FOR
这有意义吗?我家里有 15 个房间,大多数房间都有不止一盏灯(所以有更多的Relay
物体)。不多,但是,PLC不是PC,有一些内存限制。