Neues Problem:
Wenn ich folgendes ausführe bekomme ich einen "Page Fault" und das Programm steigt aus.
WAS kann das sein?
Funktion ist wie folgt:
Ich habe einen Baustein, welcher, in diesem Fall, eine Lampe steuert.
Darüber hinaus 2 eigentlich identische, welche in Abhängigkeit von externen Bedingungen die Bits in einem mit Scene_Nr bzw. Switch_Nr bezeichneten Element des Array In_Scenes bzw. In_Switches setzen oder Rücksetzen.
Der folgende Code stammt aus dem Baustein, welcher die Lampe steuert. Ziel ist, dass der Baustein seine Daten aus eben jenem Array bezieht, dessen "Steuerungsbaustein" gerade über das Steuerbit 0 eingeschaltet ist.
Ziel ist, für eine Lampe über die Visualisierung im laufenden Betrieb den ansteuernden Schalter sowie die Lichtszene, zu welcher die Lampe gehört, einstellen zu können. Die jeweils aktuelle Befehlsquelle, also z.b. In_Scene[5].Steuerbit[1] oder In_Switch[2].Steuerbit[1] soll dann die Steuerung übernehmen.
Es wäre prinipiell zwar möglich, den kompletten Code im Baustein 2 mal zu schreiben mit unterschiedlichen Parametern, das wäre aber suboptimal.
Der hier abgedruckte Code ist NUR ein Auszug, die ersten 21 Zeilen des Bausteins plus Variablendeklarationen.
Code:
VAR_INPUT
Scene_Nr: INT := 0;
In_Scenes: ARRAY[1..10] OF Scene_Data;
Switch_Nr: INT := 0;
In_Switches: ARRAY[1..10] OF Scene_Data;
END_VAR
VAR
Active_Date: POINTER TO ARRAY[0..10] OF Scene_Data;
Active_Nr: INT;
END_VAR
Code:
IF In_Scenes[Scene_Nr].Statusbits[0] = FALSE AND In_Switches[Switch_Nr].Statusbits[0] = TRUE THEN
Active_Date := ADR(In_Switches);
Active_Nr := Switch_Nr;
ELSIF In_Scenes[Scene_Nr].Statusbits[0] = TRUE AND In_Switches[Switch_Nr].Statusbits[0] = FALSE THEN
Active_Date := ADR(In_Scenes);
Active_Nr := Scene_Nr;
ELSE
Active_Date := ADR(In_Switches);
Active_Nr := Switch_Nr;
END_IF
IF Active_Date^[Active_Nr].Statusbits[0] = FALSE THEN (*Zustand Szene deaktiviert*)
(*Status := 1;*)
RETURN;
...