- Beiträge
- 5.686
- Reaktionspunkte
- 1.615
-> Hier kostenlos registrieren
Ich habe hier mal einen Auszug eines Case Abteils. Alle sehen ähnlich aus.
Die ersten vier Zeilen nehme ich um die Boundaries zu prüfen und für die While schleife den Start neu zu stellen.
Aber irgendwie scheint das nicht zu klappen. die While Schleife zählt bis zur oberen Grenze also 5 danach wird nicht mehr erhöht und darum natürlich die obere Grenze nicht überschritten also kein Indizies.SetSymbol := 0;
durchgeführt.
Und ich habe jetzt das Problem rausgefunden. Aber ich sehe nicht wo ich den Fehler mache.
SendZaehler[Indizies.SetSymbol].SetSymbol habe ich eingefügt um die durchgänge an jderem While index zu zählen. Zählen tut er nur auf eintrag 4. als ob er durch die Zeile mit Indizies.SetSymbol := Indizies.SetSymbol + 1; nie durchkommt.
Hab ich da irgendwo n massiven Denkfehler?
Die ersten vier Zeilen nehme ich um die Boundaries zu prüfen und für die While schleife den Start neu zu stellen.
Aber irgendwie scheint das nicht zu klappen. die While Schleife zählt bis zur oberen Grenze also 5 danach wird nicht mehr erhöht und darum natürlich die obere Grenze nicht überschritten also kein Indizies.SetSymbol := 0;
durchgeführt.
Und ich habe jetzt das Problem rausgefunden. Aber ich sehe nicht wo ich den Fehler mache.
Code:
3:[COLOR=#ff0000] // dies ist der Casezweig[/COLOR]
(* Setsymbol *)
IF NOT ((Indizies.SetSymbol >= 0) AND (Indizies.SetSymbol <= obereGrenze)) THEN
Indizies.SetSymbol := 0;
END_IF;
SendZaehler[Indizies.SetSymbol].SetSymbol := SendZaehler[Indizies.SetSymbol].SetSymbol + 1; [COLOR=#ff0000]// das hab ich eingefügt um zu sehen ob er durch alle Indizies.SetSymbol durchgeht[/COLOR]
IF NOT Fut_Tel_Koppel.Send_Koppel.Req AND Telegramstarten THEN
WHILE Indizies.SetSymbol >= 0 AND Indizies.SetSymbol <= obereGrenze DO
IF Signale[Indizies.SetSymbol].setsymbolbits.Req AND Signale[Indizies.SetSymbol].Act THEN
IF NOT Signale[Indizies.SetSymbol].Dim_driver THEN (* Wenn Dimmen über Treiber eingeschaltet werden soll in ELSE Zweig Bit 32 mitsenden *)
MOVE_BLK(IN := ADR(Signale[Indizies.SetSymbol].Act_Signalstatus.Soll[0]),
COUNT := 7,
OUT := ADR(Signale[Indizies.SetSymbol].setsymbolbits.Telegram[1]));
ELSE
MOVE_BLK(IN := ADR(Signale[Indizies.SetSymbol].Act_Signalstatus.Soll[0]),
COUNT := 3,
OUT := ADR(Signale[Indizies.SetSymbol].setsymbolbits.Telegram[1]));
Signale[Indizies.SetSymbol].setsymbolbits.Telegram[4] := 16#80;
MOVE_BLK(IN := ADR(Signale[Indizies.SetSymbol].Act_Signalstatus.Soll[4]),
COUNT := 4,
OUT := ADR(Signale[Indizies.SetSymbol].setsymbolbits.Telegram[5]));
END_IF;
Data_Len := Len_SetSymbol;
Signale[Indizies.SetSymbol].TagCmd := FC_Fut_TAG_Gen(Signale[Indizies.SetSymbol].TagCmd);
FC_Fut_SendTelCompose(Addr := Signale[Indizies.SetSymbol].sid,
Count := Data_Len,
TagCmd := Signale[Indizies.SetSymbol].TagCmd,
Data := ADR(Signale[Indizies.SetSymbol].setsymbolbits.Telegram),
Command := Cmd_SetSymbol,
SenderTel := ADR(Fut_Tel_Koppel.Send_Koppel.Tel));
Fut_Tel_Koppel.Send_Koppel.LEN := SendTelHeadLen + Chk1 + Data_Len + Chk2;
Signale[Indizies.SetSymbol].setsymbolbits.Req := FALSE;
Fut_Tel_Koppel.Send_Koppel.Req := TRUE;
Indizies.SetSymbol := Indizies.SetSymbol + 1; [COLOR=#ff0000]// wenn Req und Act index eins hochzählen und while verlassen.[/COLOR]
EXIT;
ELSE
Indizies.SetSymbol := Indizies.SetSymbol + 1; [COLOR=#ff0000]// wenn kein Req und Act index eins hochzählen und mit while weitermachen[/COLOR]
END_IF;
END_WHILE;
END_IF;
IF Indizies.SetSymbol >= obereGrenze THEN
ComCase := ComCase + 1; [COLOR=#ff0000]// nächsten Case Zweig auswählen[/COLOR]
END_IF;
SendZaehler[Indizies.SetSymbol].SetSymbol habe ich eingefügt um die durchgänge an jderem While index zu zählen. Zählen tut er nur auf eintrag 4. als ob er durch die Zeile mit Indizies.SetSymbol := Indizies.SetSymbol + 1; nie durchkommt.
Hab ich da irgendwo n massiven Denkfehler?
Zuletzt bearbeitet: