Step 7 MOD Befehl bei Ablaufsteuerung SCL

Kehrer

Level-2
Beiträge
384
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Habe folgenden Code :
Code:
DATA_BLOCK DB43  FB43
BEGIN

END_DATA_BLOCK

FUNCTION_BLOCK FB43
TITLE='Ablauf Tiefenmessung'

CASE BYTE_TO_INT(a13c_step) OF

    1:  IF (a13m_sync = 0) THEN
            sm_wsb := false;
        END_IF;

    2:  
    
        oMesseinheit(bewegung := 1);
        
    3:
    
        oGegenhalterMesseinheit(bewegung := 1);
    
    4:
    
        sf_wait(wait_time := DINT_TO_TIME(XXD_ALLG_DATEN.iMesszeit));
        
    5:
    
        xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 4 + 6) MOD 6].bGemessen := true;
        
        IF sc_Funktionsprogramm_nr = 1 THEN // Geistermodus
            IF si_ioteile MOD 75 = 0 then          
                xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 4 + 6) MOD 6].bBewertungGO := false;
            ELSE
                xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 4 + 6) MOD 6].bBewertungGO := true;
            END_IF;
        ELSE
            xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 4 + 6) MOD 6].bBewertungGO := oTiefenmessung_eGO;
        END_IF;        
            
    6:
    
        oGegenhalterMesseinheit(bewegung := 0);
        
    7:
    
        oMesseinheit(bewegung := 0);
        
    8:
                  
        a13m_sync := 0;
        sc_nextstep := 1;               // Zurück auf 1  
    
ELSE:
    
    sf_fehler(Fehlernummer := 1431, Fehlerart := sk_Warnung, Diagnosenummer := BYTE_TO_INT(a13c_step));
    sc_nextstep := a13c_step;
 
END_CASE;

END_FUNCTION_BLOCK

ist dies hier:
xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 4 + 6) MOD 6]
die aktuelle Stellung -4 +6 infolge der Case/schritte oder was kann ich damit anfangen?
MOD bezeichnet doch MODULO oder?
 
Es wird halt ein Index berechnet, wieso weshalb warum, keine Ahnung.

MOD = Modulo, und gibt letztlich den Teilungsrest.
Beispiel: xa0_run.iAktuelle Stellung = 36, dann wird also der Index 36-4+6 = 38 MOD 6 beschrieben, also Index 2.
Hier dann: xa0_run.aoTeile[2].bBewertungGO

Wofür das gut ist, sollte sich aus der Art und Weise der Maschine ergeben.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Rechnung macht man z.B., wenn man auf einen Ringpuffer zugreifen will und sicherstellen möchte, dass ein Zugriffsindex nicht negativ wird und dadurch ein Zugriffsfehler passiert.

Kann man aber auch anders machen. Viele Wege führen nach Rom.
 
Den Index "(xa0_run.iAktuelleStellung - 4 + 6) MOD 6" hätte man auch vorher 1x berechnen und auf eine aussagekräftige Variable legen können. Des weiteren wäre Kommentar, welcher die Summanden "-4 +6" rechtfertigt, auch eine nette Geste gewesen.
 
Den Index "(xa0_run.iAktuelleStellung - 4 + 6) MOD 6" hätte man auch vorher 1x berechnen und auf eine aussagekräftige Variable legen können. Des weiteren wäre Kommentar, welcher die Summanden "-4 +6" rechtfertigt, auch eine nette Geste gewesen.
Das hätte mir auch mal weitergeholfen wahrscheinlich

Bisher verstehe ich nur Bahnhof
 
Zurück
Oben