Hallo,
ich bin gerade dabei die Scripte für mein Fahrzeug zu scheriben. Beim testen kam mir aber ein Problem auf. Da ich jetzt schon seit ein paar Tagen an dem Problem sitze, wollte ich es mal hier präsentieren, in der Hoffnung, dass mir jemand einen Denkanstoß geben kann, oder mir vielleicht erklären kann, was ich bissher in Pascal falsch verstanden habe.
Also mein Problem ist der Umschalthebel.
Wenn ich im Scriptplotter, den Trigger "ReverserPlus" betätige, wird meine zu Debugg zwecken entfremdete Oberleitungs-Leuchte (LM_A_DB_Oberleitung) eingeschaltet. (Die Funktion wird also korrekt aufgerufen.)
Wenn ich jedoch nach dem Aufruf der Prozedur (Umschalthebel_Plus) die Position des Umschalthebels in eine Variable schreibe, so ist diese nur während der Trigger aktiv ist =1 und springt wieder auf 0 zurück sobald ich den Trigger los lasse. (Dies entspricht einem Springload)
Jedoch soll das ändern der Position des Umschalthebels bestehen bleiben, auch wenn der Trigger losgelassen wird.
- type
- TUmschalthebel = record
- A, B: shortint;
- Pos: single;
- Value: shortint;
- Broken: boolean;
- Sollwert_Pos: single;
- end
- ;
- function Umschalthebel_Plus(var sw: TUmschalthebel; key: boolean): boolean;
- begin
- result := false;
- if (key and (sw.Sollwert_Pos = 0) and (sw.Pos < sw.B)) then
- begin
- LM_A_DB_Oberleitung := 1;
- // Hiweis: Wenn ich anstelle von (sw.Pos := sw.Pos + 1;) (inc(sw.Pos);) verwende, ändert sich g_Test garnicht
- sw.Pos := sw.Pos + 1;
- result := true;
- end
- ;
- if (not sw.Broken) then
- begin
- sw.Value := Trunc(sw.Pos);
- end
- ;
- end
- ;
- function Umschalthebel_Minus(var sw: TUmschalthebel; key: boolean): boolean;
- begin
- result := false;
- if (key and (sw.Sollwert_Pos = 0) and (sw.Pos > sw.A)) then
- begin
- LM_A_DB_Oberleitung := 0;
- sw.Pos := sw.Pos - 1;
- result := true;
- end
- ;
- if (not sw.Broken) then
- begin
- sw.Value := Trunc(sw.Pos);
- end
- ;
- end
- ;
- procedure Umschalthebel_Set(var sw: TUmschalthebel; newvalue: shortint);
- begin
- sw.Pos := newvalue;
- if (not sw.Broken) then
- begin
- sw.Value := Trunc(sw.Pos);
- end
- ;
- end
- ;
Ich hoffe, mir kann jemand behilflich sein.