Bonjour Monsieur Brenelière,
C'est une fois de plus moi qui vous répond. Connaissant déjà un peu votre application, il ne m'est donc pas trop difficile de la comprendre.
Le comportement que vous décrivez est tout-à-fait attendu. Vous avez en effet placé un Wait Until Next ms Multiple avec une attente définie à 1000ms dans la partie droite de la séquence servant à déterminer la vitesse de rotation. La boucle while ne peut donc en aucun cas s'exécuter plus rapidement qu'une fois par seconde. La fonction Wait (ms) s'exécute en parallèle au code se trouvant dans la boucle et ne génère donc jamais d'attente, du moins avec une plage de 0 à 1000ms pour Période [ms].
Il vous suffit donc de supprimer l'attente de 1000ms si vous désirez lire la vitesse de rotation à la même période que la génération du signal triangulaire. La vitesse d'exécution de la boucle sera alors définie par Période [ms]; la période minimale étant donnée par le temps nécessaire pour exécuter le code à l'intérieur de la boucle.
Vous devez par contre modifier quelque peu votre code si vous désirez conserver une période d'une seconde pour la lecture de la vitesse de rotation tout en ayant la possibilité de modifier la période de la génération du signal de commande triangulaire. Deux méthodes me viennent à l'esprit :
1) Mettre les parties "signal de commande" et "lecture vitesse" dans deux boucles while séparées. La période de la boucle générant le signal triangulaire est alors définie par Période [ms] et celle de la boucle de lecture par la constante du Wait Until Next ms Multiple. Il faut alors utiliser une variable locale du bouton d'arrêt pour arrêter la deuxième boucle. Cette méthode offre la meilleure flexibilité pour les périodes des deux boucles puisqu'elles s'exécutent en parallèle à leurs périodes propres.
2) Conserver une seule boucle mais mettre la partie "lecture vitesse" dans un case True/False afin de pouvoir l'exécuter conditionnelement. Vous pourrez donc soit l'exécuter toutes les X itérations de la boucle (X = Période lecture/Période génération) ou lorsque le temps écoulé depuis la dernière exécution à atteint la période de lecture voulue. L'une et l'autre variante sont très faciles à mettre en oeuvre mais la période de lecture sera moins précise qu'avec deux boucles while parallèle puisqu'elle sera dépendante et forcément plus grande ou égale à la période de la génération du signal triangulaire.
N'hésitez pas à répondre si vous deviez avoir besoin d'aide pour mettre l'une ou l'autre solution en oeuvre.
Avec mes meilleures salutations