TIA Graph: Probleme beim weiterschalten von S_NO mit S_NEXT

PEit

Level-1
Beiträge
20
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe mir einen Baustein geschrieben, der bei mehreren gleichzeitig auftretenden Supervision Fehlern die Schrittnummern in ein Array schreibt.
Dafür ticker ich jeden zweiten Zyklus die Schrittnummer mit S_NEXT weiter. Damit nur Fehler angezeigt werden, ist der DISP_SEF bei einem Supervision Fehler auch true.

Code:
IF #FAULT THEN
    IF NOT #S_NEXT THEN
        IF (#S_NO <> #AktSchrittNr[0])
            AND (#S_NO <> #AktSchrittNr[1])
            AND (#S_NO <> #AktSchrittNr[2])
            AND (#S_NO <> #AktSchrittNr[3])
            AND (#S_NO <> #AktSchrittNr[4])
        THEN
            #AktSchrittNr[#i] := #S_NO;
        END_IF;
        #i += 1;
    END_IF;
    
    #S_NEXT := NOT #S_NEXT;
    
    IF #i >= #GrößeArray THEN
        #i := 0;
        REGION Abgleich Zahlen vorhanden?
            // Dieser Teil überprüft ob ein FAULT gegangen ist
            FOR #j := 0 TO #GrößeArray - 1 DO 
                IF #SchrittNr[#j] <> 0 THEN // Wenn Schrittnr nicht 0 ist,
                    #SVorhanden := False;
                    FOR #k := 0 TO 4 DO // schauen ob die Aktuelle Schrittnr vorhanden ist. 
                        IF #SchrittNr[#j] = #AktSchrittNr[#k] THEN
                            #SVorhanden := True;
                        END_IF;
                    END_FOR;
                    IF NOT #SVorhanden THEN // Wenn nicht vorhanden, dann Schritt := 0
                        #SchrittNr[#j] := 0;
                    END_IF;
                END_IF;
            END_FOR;
        END_REGION
        
        REGION Neue Zahlen schreiben
            // Dieser Teil schreibt jede aktuelle Schritt Nr in den Ausgang, falls diese Nummer noch nicht vorhanden ist.
            FOR #j := 0 TO #GrößeArray - 1 DO
                IF #AktSchrittNr[#j] <> 0 THEN // Wenn aktueller Schritt nicht 0
                    #SVorhanden := False;
                    FOR #k := 0 TO #GrößeArray - 1 DO // Schauen ob der Aktuelle Schritt schon vorhanden ist
                        IF #SchrittNr[#k] = #AktSchrittNr[#j] THEN
                            #SVorhanden := True;
                        END_IF;
                    END_FOR;
                    IF NOT #SVorhanden THEN // Wenn nicht vorhanden, 
                        FOR #k := 0 TO 4 DO
                            IF #SchrittNr[#k] = 0 THEN // Schritt suchen der = 0 ist,
                                #SchrittNr[#k] := #AktSchrittNr[#j]; //diesen Schritt beschreiben
                                EXIT;
                            END_IF;
                        END_FOR;
                    END_IF;
                END_IF;
            END_FOR;
        END_REGION
                
        FOR #j := 0 TO #GrößeArray - 1 DO
            #AktSchrittNr[#j] := 0;
        END_FOR;
    END_IF;
ELSE
    REGION Reset
        FOR #j := 0 TO #GrößeArray - 1 DO
            #SchrittNr[#j] := 0;
        END_FOR;
        #i := 0;
        #S_NEXT := FALSE;
    END_REGION
END_IF;

Nun ist das Problem, dass das scheinbar nur funktioniert, wenn ich weniger als 8 Schritte in meiner Schrittkette habe.
Ich hab mir das mal mit einem Trace angeschaut und dort sieht es so aus, als würde die der Graphbaustein es nicht mehr schaffen den S_NO schnell genug zu aktualisieren.
Mehr als 8 SchritteWeniger als 8 Schritte
Gibt es irgendeine Angabe dazu wie lange der Graphbaustein braucht um den S_NO zu aktualisieren?
 
Zurück
Oben