Nicht funktionierender Zähler

T800

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich programmiere an einem Programm im Strukturierten Text und habe ein skurriles Problem.

Ich habe in der grossen Programmschleife:

Code:
anzahl:= 2;
ia:= ia+1;

    IF ia > anzahl THEN
        ia:= 1;
    END_IF;

Wenn ia Drei erreicht, dann soll ia wieder auf Eins gesetzt werden. Nix Besonderes, ich denke das hat jeder von euch schonmal gemacht.

Mein Problem ist, das im zyklischen Regelbetrieb der Wert zwischen 1 und 2 springt. 3 wird nur erreicht wird wenn ich im Debugger manuell von Zeile zu Zeile springe! Mache ich das zu schnell, dann springt der Wert wieder nur zwischen 1 und 2.

Erst dachte ich, das Alles so schnell geschieht, dass man Nichts erkennen kann. Aber selbst der Trend zeigt mir das Gleiche an:

2und3.jpg








Die Drei wird lediglich ganz am Ende erreicht. Dort hatte ich das Programm langsam manuell zeilenweise laufen lassen.

Ich habe absolut keine Ahnung welches "Feature" meiner ABB 800F (Emulator, Control Builder) das herbeiführen kann.:confused:
 
Zuletzt bearbeitet:
Die Frage ist eher, wann der Wert gelesen wird, und inwiefern sich das im Testmodus ändert.

Dein Wert ist ja nur 3 für ~ 2 Programmzeilen, insofern landet der Wert nie beim
Zyklusende und ist somit auch nicht durch normale Kommunikation abfragbar.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
habe ein skurriles Problem.
Mein Problem ist, das im zyklischen Regelbetrieb der Wert zwischen 1 und 2 springt. 3 wird nur erreicht wird wenn ich im Debugger manuell von Zeile zu Zeile springe!

Ich sehe das "skurrile Problem" nicht. Genauso hast Du Dein Programm geschrieben, und das macht es ja auch...:confused:

Gruß.
 
Ok, Danke für eure Antworten. Das Problem ist gelöst. War aber nicht ganz einfach.

Hier eine Beschreibung für die Nachwelt:

1. Bei mir war Alles richtig programmiert.

2. Die Trenddarstellung ist wohl zu langsam um es in Realtime darzustellen.

3. Die Eingangswerte werden nur einmal jede Sekunden aktualisiert (anstatt meiner Zykluszeit). Stand auch in der Doku.
 
Nein ... das hat nicht mit deiner Anzeige/Trenddarstellung zu tun ... Es ist so, wie schon von MSB genannt :

Dein Wert ist ja nur 3 für ~ 2 Programmzeilen, insofern landet der Wert nie beim
Zyklusende und ist somit auch nicht durch normale Kommunikation abfragbar.
... da kommt deine Anzeige niemals dazwischen ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe jetzt nicht richtig. Der Wert ia soll garnicht ausgegeben werden. Es ist eine lokale Variable. Das Problem war das der Wert scheinbar lokal nicht die Drei erreicht. Tut sie aber, sie wird nur nicht schnell genug angezeigt. Wenn ich die Werte in ein Feld speicher, dann wird die Drei wie gewollt erreicht.

Aber selbst wenn ich den Wert hätte ausgeben wollen, so erklärt dies nicht, weshalb in der Trenddarstellung die Drei mit einem langsamen manuellen Durchlauf erreicht wird.

Trotzdem Dank für deinen Hinweis.
 
Ich weiß nicht, wie das bei ABB ist, aber bei Siemens geht die Steuerung beim Debuggen in Stop und geht dann beim Weiterschalten immer zum nächsten Haltepunkt. Also ist der Wert dann durchaus so lange lesbar, wie man an diesem Haltepunkt steht. Wenn du den nun günstig gelegt hast, siehst du die 3 beim Debuggen, im Normalablauf, siehst du die nie, denn die wird nach 2 Programmzeilen sofort wieder durch eine 1 überschrieben, was ja offensichtlich so gewollt ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt verstehe ich. Ihr meint, dass auch der Debugger nicht genügend Zeit hatte meine "Drei" darzustellen.

ok, verstehe. Mein Fehler.

Ursprünglich bin ich darauf gekommen, weil mein Debugger bei der Ausgabe immer zwei gleiche Werte ausgab. Ich dachte nun, dass der Index falsch sein müsste (war aber nur die sekündliche Aktualisierung bei einer Zykluszeit von 0,5 s). Ich schaute also auf die Trenddarstellung und "sah" den Fehler- und kam hierher zum Forum.:rolleyes:

Nochmals Danke für Eure Geduld.
 
Ja genau so ist es...
Wenn du vor deiner If - Abfrage noch mit ia arbeitest, dann hast du die Möglichkeit mit ia = 3 zu Arbeiten. Nach deiner If - Abfrage wird in ia nie 3 stehen.
 
Zurück
Oben