Ce bloc fonction permet de contrôler la position d'un entraînement à vitesse contrôlée avec retour de position via un codeur. En général, le Motion Controller indique la position cible d'un mouvement contrôlé par la position. Les boucles de régulation du servo variateur contrôlent ensuite la position (ainsi que le courant et la vitesse) du mouvement. Ce bloc de fonction vous permet de commander un entraînement à vitesse contrôlée, tel qu'un variateur de vitesse, en utilisant le contrôle de position via le Logic/Motion Controller, et non via l'entraînement lui-même (qui peut ne pas fournir la fonctionnalité de contrôle de position requise).
Présentation
Le bloc fonction utilise un axe virtuel de type MOIN.FB_ControlledAxis comme entrée. Un mouvement contrôlé par la position de cet axe virtuel (par exemple, à l'aide du bloc fonction MC_MoveAbsolute ou MC_MoveRelative) fournit la position réelle (telle que déterminée par le codeur) du mouvement à l'aide de l'entrée i_diActualPosition.
Sur la base de cette entrée de position et des paramètres d'échelle du codeur (entrées i_diIncrementalResolution et i_lrPositionResolution), le bloc fonction FB_Drive_PosControl calcule la vitesse de sortie du variateur en tr/min (sortie q_diSetVelocity) ou en unités définies par l'utilisateur toutes les secondes (sortie q_lrSetVelocity) comme valeurs de référence pour le déplacement vers la position cible.
Le générateur de profil génère les valeurs de position conformément à la norme PLCopen.
Type d'axe
L'axe à l'entrée i_ifAxis doit être de type MOIN.FB_ControlledAxis. Il doit s'agir d'un axe virtuel, c'est-à-dire qu'il ne doit pas être connecté à un variateur. Si l'axe à l'entrée i_ifAxis n'est pas de type MOIN.FB_ControlledAxis, une erreur est détectée (ET_Result est réglé sur OnlyControlledAxisSupported). Si l'axe à l'entrée i_ifAxis est de type MOIN.FB_ControlledAxis, mais qu'il ne s'agit pas d'un axe virtuel (c'est-à-dire qu'il est connecté à un variateur), une erreur est détectée (ET_Result est réglé sur ControlledAxisIsConnectedToDevice).
Boucle de régulation
Représentation de la boucle de régulation :
Les éléments sur fond gris sont des paramètres qui déterminent les performances de régulation.
Les éléments précédés de « i_ » sont des entrées du bloc fonction FB_Drive_PosControl.
Les éléments précédés de « q_ » sont des sorties du bloc fonction FB_Drive_PosControl.
lrPosition est la position cible du mouvement.
lrVelocity est la vitesse d'entrée de l'application.
i_diActualPosition est la position réelle, telle que déterminée par le codeur.
i_lrMaxPositionDiff est l'écart de position. L'écart de position représente la différence entre la position de référence (lrPosition de l'axe virtuel) et la position réelle du variateur au niveau de l'entrée i_diActualPosition, telle que déterminée par le codeur.
i_lrKp est le gain proportionnel. Le gain proportionnel de la boucle de régulation réduit l'écart de position. Il s'agit d'une correction réactive destinée à diminuer un écart de position existant.
i_VelocityFeedForwardControl est le gain d'anticipation de vitesse. Le gain d'anticipation de vitesse est une correction proactive visant à réduire le dépassement prévisible ou à minimiser davantage l'écart de position pendant la séquence à vitesse constante du mouvement.
En général, la boucle de régulation est réglée dans l'ordre suivant :
Écart de position
Gain proportionnel
Anticipation de vitesse
Comme les facteurs qui déterminent les performances de régulation sont interdépendants et que les performances de régulation requises dépendent de l'application, vous devrez peut-être augmenter ou diminuer les valeurs individuelles et en examiner les effets au moyen de tests. Les valeurs appropriées pour les entrées déterminant les performances de régulation dépendent de votre application, et notamment du variateur, du moteur, de la charge, de l'inertie et du frottement. Déterminez de manière expérimentale les valeurs qui permettent d'atteindre les performances de régulation appropriées pour votre application, par exemple, en effectuant des tests avec un oscilloscope et des traces.
Le réglage des paramètres de boucle de régulation consiste en une suite d'approximations permettant de déterminer les valeurs requises. Elle implique des tests complets de l'application, y compris des composants physiques, pendant le développement et/ou la mise en service.
| AVERTISSEMENT | |
|---|---|
Réglage de la boucle de régulation par surveillance de l'écart de position
L'écart de position représente la différence entre la position de référence (lrPosition de l'axe virtuel) et la position du variateur au niveau de l'entrée i_diActualPosition, telle que déterminée par le codeur. Il s'agit d'une mesure de la capacité du variateur à suivre les positions de référence pendant le déplacement vers la position cible. Si le variateur ne peut plus suivre les positions de référence parce que l'écart de position est supérieur à la valeur définie par l'entrée i_lrMaxPositionDiff, une erreur d'écart de position (aussi appelée « erreur de poursuite » par PLCopen par exemple, ou « erreur de suivi ») est détectée. Moins l'écart de position est important, plus le système de régulation est réactif et rigide. Cependant, dans un système en boucle fermée avec retour de position, un écart de position minimal est nécessaire d'un point de vue physique.
La différence maximale entre la position de référence et la position réelle est définie par l'entrée i_lrMaxPositionDiff. Si l'écart de position dépasse cette valeur, une erreur est détectée (PositionDiffOutOfRange) et l'axe virtuel passe à l'état de fonctionnement ErrorStop. Une valeur négative au niveau de cette entrée désactive la surveillance de l'écart de position.
| AVERTISSEMENT | |
|---|---|
La valeur appropriée pour l'écart de position maximal i_lrMaxPositionDiff dépend de votre application, et notamment du variateur, du moteur, de la charge et du frottement. Déterminez de manière expérimentale la valeur qui permet d'atteindre les performances de régulation appropriées pour votre application, par exemple, en effectuant des tests avec un oscilloscope et des traces. La propriété lrActualPositionDifference du bloc fonction vous permet de lire l'écart de position.
Déterminez l'écart de position maximal i_lrMaxPositionDiff avant de régler le gain proportionnel Kp et l'anticipation de vitesse.
Réglage de la boucle de régulation par gain proportionnel
Le gain proportionnel Kp de la boucle de régulation réduit l'écart de position. Il est directement proportionnel à l'ampleur de l'écart de position. Cela signifie que la valeur de l'écart de position est multipliée par le gain proportionnel pour déterminer une valeur de sortie de vitesse qui réduit cet écart. Plus le gain proportionnel est élevé, plus le contrôleur est réactif. Cependant, plus le gain proportionnel est élevé, plus la probabilité d'oscillations (accélération et décélération continues) est élevée.
Des valeurs de gain proportionnel excessivement élevées peuvent entraîner des oscillations de vitesse (alternance d'accélérations et de décélérations en continu) et des mouvements involontaires.
| AVERTISSEMENT | |
|---|---|
Détermination de la valeur appropriée pour le gain proportionnel i_lrKp :
|
Étape |
Action |
|---|---|
|
1 |
Testez les performances de régulation avec la valeur par défaut du gain proportionnel Kp à l'entrée i_lrKp et observez la valeur de vitesse aux sorties correspondantes dans les conditions de fonctionnement prévues. |
|
2 |
Si la valeur de vitesse ne fluctue pas (vous n'observez aucune oscillation avec accélération et décélération continues), augmentez légèrement la valeur du gain proportionnel Kp pour obtenir une réponse indicielle, puis testez à nouveau les performances de régulation. |
|
3 |
Augmentez la valeur du gain proportionnel Kp par petits incréments pour déclencher une réponse indicielle et testez à chaque fois les performances de régulation jusqu'à ce que vous observiez des fluctuations de la valeur de vitesse (oscillations). |
|
4 |
Dès que vous observez des fluctuations de la valeur de vitesse (oscillations) avec une valeur de gain proportionnel Kp donnée, réduisez le gain proportionnel Kp de 10 %. Résultat : Vous avez déterminé la valeur maximale du gain proportionnel Kp. |
Réglage de la boucle de régulation par anticipation de vitesse
Le gain d'anticipation de vitesse est une correction proactive visant à réduire le dépassement prévisible et à minimiser davantage l'écart de position pendant la séquence à vitesse constante du mouvement. Le dépassement est la mesure dans laquelle la valeur de vitesse réelle est « en avance » sur la valeur de référence. La diminution de la valeur réduit le dépassement, en particulier vers la fin du mouvement.
Compensation du temps mort
L'entrée i_uiDeadTime permet la compensation du temps mort. Elle vous permet de spécifier le nombre d'appels de bloc fonction en fonction duquel la valeur de référence de position (lrPosition de l'axe virtuel) est retardée pour le calcul de l'écart de position. Pour déterminer la valeur correcte de cette entrée, déterminez le délai entre la position de référence et la position réelle. Divisez cette valeur par l'intervalle de temps de la tâche dans laquelle le bloc fonction est appelé de façon cyclique. Exemple : Le délai entre la position de référence et la position réelle est de 110 ms. L'intervalle de temps de la tâche dans laquelle FB_Drive_PosControl est appelé est de 10 ms. La valeur appropriée pour i_uiDeadTime est 11 (110/10).
Erreurs détectées et transitions de l'état de fonctionnement du variateur
Les entrées i_xExternalError et i_xDriveEnabled vous permettent de répondre aux erreurs détectées du variateur et de gérer le passage depuis et vers l'état de fonctionnement Operation Enabled du variateur.
|
Entrée |
Type de données |
Description |
|---|---|---|
|
i_ifAxis |
MOIN.IF_Axis |
Référence à l'axe pour lequel le bloc fonction doit être exécuté. |
|
i_xEnable |
BOOL |
Démarre (valeur TRUE) ou arrête (valeur FALSE) l’exécution du bloc fonction. |
|
i_diActualPosition |
DINT |
La valeur de cette entrée correspond à la position réelle du variateur, telle que déterminée par le codeur. |
|
i_lrKp |
LREAL |
Plage de valeurs : valeur LREAL positive et 0 Valeur par défaut : 0 La valeur de cette entrée indique le gain proportionnel Kp de la boucle de régulation. |
|
i_uiDeadTime |
UINT |
Plage de valeurs : 0 à 50 Valeur par défaut : 0 La valeur de cette entrée indique le réglage de la compensation du temps mort par le nombre d'appels de bloc fonction en fonction duquel la valeur de référence de position (lrPosition de l'axe virtuel) est retardée pour le calcul de l'écart de position. |
|
i_lrMaxPositionDiff |
LREAL |
Plage de valeurs : valeur LREAL Valeur par défaut : 0 La valeur de cette entrée détermine l'écart de position maximal pour la surveillance de l'écart de position. L'écart de position représente la différence entre la position de référence (lrPosition de l'axe virtuel à l'entrée i_ifAxis) et la position réelle (au niveau de l'entrée i_diActualPosition) du variateur, telle que déterminée par le codeur. Une valeur positive lance la surveillance de l'écart de position avec la valeur spécifiée. Une valeur négative désactive la surveillance de l'écart de position. Si la valeur de l'écart de position dépasse la valeur de cette entrée, l'erreur PositionDiffOutOfRange est détectée. Tant que la valeur de cette entrée est égale à 0, l'erreur InvalidPositionDiff est détectée. |
|
i_lrMaxVelocity |
LREAL |
Plage de valeurs : valeur LREAL Valeur par défaut : 0 La valeur de cette entrée indique la vitesse maximale du mouvement en unités définies par l'utilisateur. Utilisez une valeur positive pour un mouvement dans le sens positif ou une valeur négative pour un mouvement dans le sens négatif. |
|
i_lrMinVelocity |
LREAL |
Plage de valeurs : valeur LREAL Valeur par défaut : 0 La valeur de cette entrée indique la vitesse minimale du mouvement en unités définies par l'utilisateur. Utilisez une valeur positive pour un mouvement dans le sens positif ou une valeur négative pour un mouvement dans le sens négatif. |
|
i_lrVelocityFeedForwardControl |
LREAL |
Plage de valeurs : 0 à 1 Valeur par défaut : 1 La valeur de cette entrée indique l'anticipation de vitesse. |
|
i_diIncrementalResolution |
DINT |
Plage de valeurs : valeur entière positive supérieure à 1 La valeur de cette entrée indique la résolution du codeur en incréments (nombre d'incréments par tour). |
|
i_lrPositionResolution |
LREAL |
Plage de valeurs : valeur entière positive supérieure à 1 La valeur de cette entrée indique la résolution du codeur en unités définies par l'utilisateur (nombre d'unités définies par l'utilisateur par tour). |
|
i_xInvertDirection |
BOOL |
Plage de valeurs : FALSE, TRUE Valeur par défaut : FALSE La valeur de cette entrée est utilisée pour mettre à l'échelle la lecture du codeur par i_diActualPosition.
|
|
i_xExternalError |
BOOL |
Plage de valeurs : TRUE, FALSE Valeur par défaut : FALSE La valeur de cette entrée indique si une erreur externe, par exemple une erreur de variateur, a été détectée. Cela vous permet de répondre aux erreurs détectées du variateur. Si la valeur est TRUE, l'erreur ExternalError est détectée. Pour réinitialiser l'erreur détectée causée par cette entrée, définissez la valeur de l'entrée i_xEnable sur FALSE puis sur TRUE. |
|
i_xDriveEnabled |
BOOL |
Plage de valeurs : TRUE, FALSE Valeur par défaut : FALSE Si cette entrée est réglée sur FALSE et que l'entrée i_xEnable a pour valeur TRUE, la position de référence est mise à jour en fonction des modifications apportées à la lecture du codeur au niveau de l'entrée i_diActualPosition. Cela signifie que la propriété lrPosition de i_ifAxis a la même valeur que la propriété lrActualPosition et que la valeur lrActualPositionDifference est égale à zéro. Si le variateur est désactivé (c'est-à-dire s'il n'est pas à l'état de fonctionnement Operation Enabled), la sortie q_xError est définie sur FALSE et la sortie q_etResult est réglée sur DriveNotEnabled. Si la valeur de cette entrée est TRUE, le mouvement est contrôlé en fonction des paramètres de boucle de régulation définis. La position de l'axe virtuel n'est pas affectée si la valeur est TRUE. |
|
Sortie |
Type de données |
Description |
|---|---|---|
|
q_lrSetVelocity |
LREAL |
La valeur de cette sortie indique la vitesse de référence du variateur en unités définies par l'utilisateur. |
|
q_diSetVelocity |
DINT |
La valeur de cette sortie indique la vitesse de référence du variateur en tr/min. |
|
q_xActive |
BOOL |
Plage de valeurs : FALSE, TRUE Valeur par défaut : FALSE
|
|
q_xError |
BOOL |
Indique si la dernière exécution du bloc fonction a abouti (valeur FALSE = no error detected) ou non (valeur TRUE = erreur détectée). |
|
q_etResult |
Fournit des informations sur l’exécution du bloc fonction. |
|
Nom |
Type de données |
Accès |
Description |
|---|---|---|---|
|
lrActualPosition |
LREAL |
Lecture |
Renvoie la position réelle du variateur (i_diActualPosition) en unités définies par l'utilisateur. Si MC_SetPosition est exécuté pour l'axe virtuel à l'entrée i_ifAxis, cette propriété fournit la valeur correspondante. |
|
lrActualPositionDifference |
LREAL |
Lecture |
Renvoie l'écart de position entre la position de référence et la position réelle du variateur en unités définies par l'utilisateur. |
|
lrErrorStopDeceleration |
LREAL |
Lecture/écriture |
Renvoie ou écrit la valeur de décélération d'un arrêt après la détection d'une erreur (la valeur de ET_Result est ErrorStopping). |