TIA SCL Schleife steigt nicht aus

Manfred Stangl

Level-1
Beiträge
944
Reaktionspunkte
174
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Kollegen,

ich such mir seit 2 Tagen nen Wolf, warum das mit TIA mit einer 1200er nicht geht und mit einer 315 auch nicht, und im V5.5 schon.
Die Sinnhaftigkeit sei mal dahingestellt. Ich habe ein Array[1..50, 1..10] of bool. Das 1-50 sind die Anzahl der Warenträger. 1-10 das Register der Fehlversuche. Wenn ein WT einen Fehler verursacht, soll auf die entsprechende WT-Nummer auf Position 1 true geschrieben werden. (zB Warenträger 2, Zelle 1).
Verursacht der selbe WT im nächsten Durchlauf wieder einen Fehler, soll die Zelle 2 HI gesetzt werden.

Register.PNG


Code:
FOR #l := 1 TO #WT_Anz_max BY 1 DO                                                            // Durchlaufe Warenträgernummer
    IF NOT #Fehler_auf_WT[#l] AND NOT #SR_FM THEN                                              // Wenn nicht schon ein aktueller Fehler drauf ist
        IF #WT_Nummer = #l AND #Schreibe_Daten AND #Schreibe_Daten_WT_hat_defekt AND #WT_an_Station THEN
            FOR #j := 1 TO 10 BY 1 DO                                                        // Durchlaufe Anzahl der Fehler (max 10)
[COLOR=#ff0000]                IF NOT #WT_Defekt[#l, #j] THEN                                                 // Ist noch kein Fehler drauf
                    #WT_Defekt[#l, #j] := true;                                               // Setze dieses Bit HI
                    EXIT;                            // Springe raus (sonst würde alles sofort vollgeschrieben)
                END_IF;[/COLOR]
            END_FOR;
            #Fehler_auf_WT[#l] := true;          // Merker, dass nur ein Mal pro Durchlauf geschrieben werden kann
            #Lese_Daten_WT_hat_defekt := true;    // Merker nach aussen, damit Bearbeitungsstation gleich gar nicht anfängt
        END_IF;
    END_IF;
END_FOR;
Nun läuft die Schleife durch, und sucht nach einem noch nicht HI gesetzten Bit. If geht rein, und setzt eben dieses Bit. EXIT verlässt bedingungslos die FOR-Schleife - theoretisch. Im V5.5 geht das so!
Im TIA füllt er mir alle 10 Bits in einem Durchlauf an.

Mit der Anweisung "Schleife sofort verlassen" brechen Sie die Bearbeitung einer FOR-, WHILE- oder REPEAT-Schleife, unabhängig von Bedingungen, an beliebiger Stelle ab. Die Programmbearbeitung wird nach dem Abschluss der Schleife (END_FOR, END_WHILE, END_REPEAT) fortgesetzt.
Die Anweisung hat Auswirkung auf die Programmschleife, die die Anweisung unmittelbar umgibt.
Das steht in der Hilfe.
Kann mir bitte jemand sagen was ich falsch mache?
Danke im Voraus!
 
Hallo,

Die innere Schleife wird mit Exit verlassen.
danach wird immer

#Fehler_auf_WT[#l] := true;

die äußere Schleife erhöht #l um 1

die erneute Abfrage
IF NOT #Fehler_auf_WT[#l]

bezieht sich doch jetzt auf #l (+1)

Also Fehler_auf_WT[#l] nach END_FOR wird doch nie beachtet
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
als Ergänzung: da gibt es den SR_FM Das soll quasi eine Flanke sein, die danach durch
SR_FM := Schreibe_Daten gesetzt wird. SR_FM ist im statischen Bereich, wird aber im InstanzDB nicht HI. bei V5.5 allerdings schon.
 
Ich sehe nirgends das dieses SR_FM gesetzt wird.

Aber mal angenommen:

SR_FM ist gesetzt, so wird niemals etwas in das WT Defekt geschrieben, einen Zyklus später jedoch wird diese Schleife normal durchlaufen und es wird jedes erste bit [i,0] gesetzt.

Beim nächsten nächsten Zyklus wird dann [i,1] gesetzt.

Nach 500Zyklen hast alle Bits gesetzt und es ist wahrscheinlich keine 50ms gegangen.
 
Ich hab´s denke ich gefunden. Es scheitert am Durchlauf. Wenn ich den FB von außen mit einer Flanke versorge geht es. Ich werde mich mal mit so einer internen Flanke beschäftigten.
Danke so weit mal
 
Zurück
Oben