Używam PFC200 do automatyki mojego domu. Jeszcze się nie przeprowadziłem do nowego miejsca ale mam już cześć rzeczy oprogramowane. Chciałem zrobić mały refactoring kodu ostatnio i zacząłem się zastanawiać czy aby zaoszczędzić trochę pamięci zamiast pakować zmienne do tabeli użyć wskażników do nich.
Zacząłem od czegoś takiego:
Deklaracja:
VAR
Lighs: ARRAY [1..siTotalLightsCount] OF Relay;
END_VAR
Relay to jest moje POU które w środku ma WagoAppBuilding.FbLatchingRelay oraz kilka innych rzeczy
Inicjalizacja:
Lighs[1] := MainLightRelay;
Lighs[2] := WindowLightRelay;
Lighs[3] := IslandLightRelay;
Używam tego w metodzie pod POU w ten sposób:
FOR siCurrent := 1 TO siTotalLightsCount DO
Lighs[siCurrent].xCentralOff := xCentralOffSignal;
END_FOR
No i zacząłem się zastanawiać czy może warto przerobić to na coś takiego
VAR
Lighs: ARRAY [1..siTotalLightsCount] OF POINTER TO Relay;
END_VAR
Lighs[1] := ADR(MainLightRelay);
Lighs[2] := ADR(WindowLightRelay);
Lighs[3] := ADR(IslandLightRelay);
I użycie w metodzie:
FOR siCurrent := 1 TO siTotalLightsCount DO
Lighs[siCurrent]^.xCentralOff := xCentralOffSignal;
END_FOR
Ma to jakiś sens? Wydzielonych pokoi mam 14, poza tymi POU mam też kilka innych. Niby nie dużo ale takie PLC to nie PC gdzie pamięc jest prawie nie ograniczona a i tak działa garbage collector i czyści co potrzeba.