Step 7 MOD Befehl bei Ablaufsteuerung SCL

Kehrer

Well-known member
Beiträge
225
Punkte Reaktionen
0
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?
 

MSB

Well-known member
Beiträge
7.114
Punkte Reaktionen
1.600
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
 

Michitronik

Well-known member
Beiträge
154
Punkte Reaktionen
48
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.
 

Onkel Dagobert

Well-known member
Beiträge
5.076
Punkte Reaktionen
1.009
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.
 
OP
K

Kehrer

Well-known member
Beiträge
225
Punkte Reaktionen
0
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
 
Oben