REPEAT_UNTIL

Utiliser la boucle REPEAT_UNTIL pour continuer à effectuer une action tant que certaines conditions sont égales à vrai.
Opérandes
REPEAT
<statement>;
Texte structuré
Opérande
Type
Format
Saisir
bool_
expression
BOOL
Expression de balise
Étiquette ou expression BOOL qui est évaluée pour donner une valeur BOOL
(Expression BOOL)
IMPORTANT:
  • N’exécutez pas la boucle un trop grand nombre de fois lors d’une seule scrutation.
  • L’automate n’exécute aucune autre instruction de la routine tant qu’il n’a pas terminé la boucle.
  • Un défaut majeur survient lorsque l’achèvement de la boucle prend plus de temps que le temporisateur du chien de garde pour la tâche.
  • Envisagez d’utiliser une construction différente, telle que IF_THEN.
Description
La syntaxe est :
Repeat_Until syntax
Le diagramme suivant explique comment une boucle REPEAT_UNTIL est exécutée et comment une instruction EXIT peut permettre de sortir de la boucle plus tôt.
Tant que bool_expression est faux, l'automate exécute uniquement les instructions à l'intérieur de la boucle REPEAT_UNTIL.
RSL5K_REPEAT…UNTIL execution
Pour arrêter la boucle avant que les conditions soient fausse, utilisez une instruction EXIT.
RSL5K_RSL5K_REPEAT…UNTIL exit
Affecte les indicateurs d'état mathématique
Non
Conditions de défaut
Un défaut majeur se produira si
Type de défaut
Code de défaut
La construction fait des boucles pendant trop longtemps
6
1
Exemple 1
Si vous exécutez les actions suivantes,
Saisissez ce texte structuré
La boucle REPEAT_UNTIL exécute d'abord les instructions de la construction, et ce n'est qu'ensuite qu'elle détermine si les conditions sont vraies avant d'exécuter à nouveau les instructions. Cela diffère de la boucle WHILE_DO parce que la boucle WHILE_DO The WHILE_DO évalue d'abord ses conditions.
Si les conditions sont vraies, l'automate exécute alors les instructions à l'intérieur de la boucle. Les instructions dans la boucle REPEAT_UNTIL sont toujours exécutées au moins une fois. Les instructions dans une boucle WHILE_DO peuvent ne jamais être exécutées.
pos := -1;
REPEAT
pos := pos + 2;
UNTIL ((pos = 101) OR (structarray[pos].value = targetvalue))
end_repeat;
Exemple 2
Si vous exécutez les actions suivantes,
Saisissez ce texte structuré
Déplacer les caractères ASCII d'un tableau SINT dans une étiquette de la chaîne. (Dans un tableau SINT, chaque élément contient un seul caractère.) Arrêter quand vous atteignez le retour chariot.
Initialiser Element_number à 0.
Compter le nombre d'éléments dans SINT_array (tableau contenant les caractères ASCII) et stocker le résultat dans SINT_array_size (étiquette DINT).
Définir String_tag[element_number] = le caractère stocké dans SINT_array[element_number].
Ajouter 1 à element_number. Cela permet à l'automate de vérifier le prochain caractère dans
SINT_array.
Définir le membre Longueur de String_tag = element_number. (Cela enregistre le nombre de caractères stockés dans String_tag jusqu'à présent.)
If element_number = SINT_array_size, alors arrêter. (Vous êtes à la fin du tableau et il ne contient pas de retour chariot.)
Si le caractère SINT_array[element_number] = 13 (valeur décimale du retour chariot), alors arrête.
element_number := 0;
SIZE(SINT_array, 0, SINT_array_size);
Repeat
String_tag.DATA[element_number] := SINT_array[element_number];
element_number := element_number + 1;
String_tag.LEN := element_number;
If element_number = SINT_array_size then
exit;
end_if;
Until SINT_array[element_number] = 13
end_repeat;
Fournir une réponse
Vous avez des questions ou des commentaires sur cette documentation ? Veuillez envoyer vos commentaires ici.
Normal