TIA While Schleife soll im Datenbaustein suchen

AudiQ7

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich hab ein kleines Problem mit einer While schleife.

Ich habe einen Datenbaustein in dem 50 Benutzer abgelegt sind. Jeder Benutzer hat ein eigenen RFID Code.

Jetzt möchte ich natürlich wissen, wenn der Benutzer xy seine Karte Scannt welcher Benutzer das ist. Das Funktioniert auch mit der Schleife soweit ganz gut.

Jedoch sobald ein Code gescannt wird der nicht im Datenbaustein ist springt die CPU auf Stop mit dem Fehler "Temporärer CPU-Fehler: Bereichslängenfehler in FB 2".

Irgendwie fehlt eine Abbruch Bedingung. Könnt Ihr mir da bitte weiterhelfen.

Code:
#Addierung := 1; //Die Variable Temp "Addierung" auf 1 setzen. 
IF #Freigabe THEN
     
WHILE #Addierung  <> #Ausgewählter_Benutzer DO  //Solange die While schleife ungleich ist soll sie Funktionieren
    
   
    
    IF #RFID_CODE <> #Benutzer.Benutzer[#Addierung].RFID_CODE THEN  //Wenn der Wert ungleich ist dann +1 addieren
        #Addierung := #Addierung + 1;

ELSE
    #Ausgewählter_Benutzer := #Addierung; //ansonnsten den Wert von der Variable Addieren in die Variable Ausgewählte_Benutzer schreiben
            
END_IF;
    END_WHILE;
          
END_IF;
 
Eine Möglichkeit wäre eine FOR-Schleife, um das mögliche Benutzer-Array zu begrenzen:
Code:
IF #Freigabe 
THEN

   FOR #i := 1 TO #BenutzerMax BY 1 DO

      IF #RFID_CODE = #Benutzer.Benutzer[#i].RFID_CODE
      THEN  
 
         #Ausgewählter_Benutzer := #i;
         EXIT;

      END_IF;

   END_FOR;

END_IF;

PS:
Ist übrigens auch ein gutes Beispiel für eine Systemkonstante, wenn mit #BenutzerMax (dann aber als Konstante) gleichzeitig auch das Benutzer-Array [1.."BenutzerMax"] deklariert wird.
:cool:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder mit Deinem WHILE:
Code:
#Addierung := 1; //Die Variable Temp "Addierung" auf 1 setzen. 
IF #Freigabe THEN
     
    WHILE #Addierung  <> #Ausgewählter_Benutzer [COLOR=#008000][B]AND #Addierung <= #BenutzerMax[/B][/COLOR] DO  //Solange die While schleife ungleich ist [B][COLOR=#008000]und der Zähler im Benutzerbereich[/COLOR][/B] soll sie Funktionieren
    
        IF #RFID_CODE <> #Benutzer.Benutzer[#Addierung].RFID_CODE THEN             //Wenn der Wert ungleich ist dann +1 addieren
            #Addierung := #Addierung + 1;

        ELSE
            #Ausgewählter_Benutzer := #Addierung;                                  //ansonnsten den Wert von der Variable Addieren in die Variable Ausgewählte_Benutzer schreiben
            
        END_IF;

    END_WHILE;
          
END_IF;
 
Wow, ich danke euch beiden. Beide funktionieren wie gewünscht.

Wenn man erstmal die Lösung hat ist es doch einfach. :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen AudiQ7,

eine elegante Lösung wäre, auch die Anzahl der Elemente im Array mit der Funktion Count_of_Elements zu bestimmen. Somit die #BenutzerMax Konstante wegfallen zu lassen und daraus eine Variable zu machen, welche im StartOB mit der Anzahl der maximalen Benutzer beschrieben wird. Hat den Vorteil, dass falls weitere Benutzer zukommen sollten, nur das Array erweitert werden muss. x
 
Zurück
Oben