Skip to main content

Contrôle de position sur le contrôleur avec SM_Drive_PosControl

Voir le PosControl.project exemple de projet dans le répertoire d'installation de CODESYS en dessous de ..\CODESYS SoftMotion\Examples.

Dans la plupart des cas, une servocommande prend en charge le contrôle de position du variateur, ainsi que le contrôle de puissance et le contrôle de vitesse de rotation. Cependant, il existe des cas d'utilisation dans lesquels le contrôleur prend en charge le contrôle de position de l'axe. Cet exemple montre comment un dispositif à vitesse contrôlée (par exemple, un variateur de fréquence avec retour de position) est contrôlé en position par CODESYS SoftMotion.

L'exigence est un appareil qui est contrôlé par la vitesse définie et renvoie sa position actuelle. Dans cet exemple, une borne de sortie analogique 10 V EL4031 est utilisée avec un signal utilisé comme point de consigne de vitesse pour un variateur de fréquence. Une borne d'encodeur EL5101 est utilisée pour le retour de position.

Contrôle de la position de l'axe au moyen de SM_Drive_PosControl

  1. Ajouter un axe contrôlé en position de type SM_Drive_PosControl au dessous de Pool d'axes généraux SoftMotion dans l'arborescence des appareils.

  2. Ajoutez les bornes de la borne analogique (EL4031) et de l'encodeur (EL5101) à l'arborescence des appareils.

    Arborescence des appareils :

    _sm_img_example_poscontrol_1.png

    Astuce

    Les descriptions d'appareils des appareils de bus de terrain doivent être téléchargées et installées auprès du fabricant.

  3. Ouvrez le SM_Drive_PosControl dans l'éditeur et spécifiez le paramètre général Modulo avec la valeur 360.0 sur le Général languette.

  4. Clique le Mise à l'échelle/Mappage languette. Le nombre d'incréments par tour de moteur est tiré de la fiche technique du codeur. Dans cet exemple, 4096 les incréments (1) sont d'un tour de moteur. Comme vous travaillez avec des degrés angulaires dans l'application, vous spécifiez la valeur 360 (2) pour unités en application.

    Paramètres:

    _sm_img_example_poscontrol_2.png
  5. Basculez vers le SoftMotion Drive : boucle de contrôle de position tab et spécifiez les paramètres suivants :

    • D 2.0

      Le temps mort détermine le nombre de cycles pendant lesquels la position réelle reçue (codeur) est déphasée vers la position définie de l'axe. Le temps mort dépend des composants appliqués et doit être déterminé par essais et erreurs.

    • Kp 0.0

      La constante de proportionnalité est le facteur par lequel l'erreur de position (l'écart entre la position définie et la position réelle) est multipliée pour être ajoutée ultérieurement à la vitesse définie. Maintenant, définissez cette valeur sur 0. Vous déterminerez la valeur expérimentalement ultérieurement.

    • Bit width: 16

      La largeur de bit de la valeur réelle est reçue en fonction des composants utilisés et peut être définie sur des valeurs de 16, 24 ou 32 bits. Réglez la valeur sur 16 parce que les composants utilisés donnent la position comme UINT.

    • _cds_icon_option_deactivated.pngmax

      Laissez l'interrupteur de surveillance d'erreur de position désactivé. Vous pouvez le rallumer si nécessaire. Cochez la case et spécifiez un décalage maximum autorisé. Si cette valeur est dépassée pendant le fonctionnement, l'axe passe dans un état d'erreur.

    • δ/δt

      Le paramètre a la valeur 1 et ne doit être modifié que dans des cas très particuliers. Il définit la relation entre la vitesse de consigne et la dérivation de la position. La plage de valeurs est de 0 à 1 :

      0 : Seule la dérivée numérique de fSetPosition est utilisé.

      1: La dérivation numérique de la position définie est utilisée comme source.

    Boucle de contrôle :

    _sm_img_example_poscontrol_3.png
  6. Vous définissez maintenant les valeurs de vitesse qui sont envoyées à l'actionneur. Pour cela, vous devez connaître la vitesse maximale en unités d'application et la valeur brute correspondante des données transférées. Dans cet exemple, la vitesse maximale est atteinte par la sortie de la valeur 16#7FFF, ce qui correspond à une vitesse de 10 tours par seconde. Cela correspond également à 3600 degrés par seconde selon les réglages.

    Paramètres:

    _sm_img_example_poscontrol_5.png

Mappage des variables aux entrées et sorties

Mappez les variables avec les données d'axe sur les modules d'E/S. Les données cycliques disponibles de l'axe se trouvent dans les structures de données in et out. Vous pouvez établir cette connexion dans l'éditeur d'appareils de l'appareil d'entrée et de sortie soit par programmation, soit directement.

  1. Connectez la sortie (vitesse définie) à l'appareil EL4031. Ouvrez l'appareil dans l'éditeur et cliquez sur le bouton Mappage des E/S EtherCAT languette. Attribuer la variable out.iSetVelocity de l'axe à la sortie. Dans le cas d'une sortie 32 bits, out.diSetVelocity est utilisé.

    Cartographie :

    _sm_img_example_poscontrol_7.png
  2. Procédez de la même manière avec la saisie de position. Ouvrez l'appareil EL5101 dans l'éditeur et définissez la valeur d'entrée de position sur in.wActPosition. Pour une entrée 32 bits, définissez la valeur sur in.dwActPosition. Cartographie :

    _sm_img_example_poscontrol_8.png
  3. Pour que l'activation de la commande, l'arrêt rapide et l'interrupteur de fin de course fonctionnent, les entrées correspondantes de SMC_PosControlInput doivent être définis par les valeurs du variateur. Les sorties de SMC_PosControlOutput doivent être transmises au variateur (voir description ci-dessous). Si le variateur ne prend pas en charge l'arrêt rapide, par exemple, alors SM_Drive_PosControl.in.bDriveStartRealState := TRUE doit être réglé et SM_Drive_PosControl.out.bDriveStart peut être ignoré. Dans cet exemple, bDriveStartRealState et bRegulatorRealState doivent être définis dans l'application.

SM_Drive_PosControl.in.bDriveStartRealState := TRUE;
SM_Drive_PosControl.in.bRegulatorRealState := TRUE;

Détermination du temps mort du système

Définissez maintenant le mode en ligne avec l'axe et définissez les paramètres de contrôle.

Important

Notez que l'axe peut devenir incontrôlable. Par conséquent, vous devez prendre les mesures de sécurité correspondantes.

Essayer ensuite de faire fonctionner l'axe sans asservissement de position.fKp est déjà défini sur 0,0 et les paramètres de mise à l'échelle sont vérifiés. Commuter l'axe sur MC_Power et commencer MC_MoveVelocity. L'axe se déplace maintenant à la vitesse programmée de 1 U/s. En cas d'écarts, vous devrez corriger la mise à l'échelle en conséquence.

  1. Terminer le mouvement, par exemple avec MC_MoveRelative, et démarrez la fonction de trace.

  2. Déterminez le temps mort du système en mesurant la différence de temps entre la position réglée et la position réelle.

    Dans MC_MoveRelative, définissez la vitesse maximale et une grande accélération. Démarrez la trace d'échantillonnage avec MC_MoveRelative. Déterminez maintenant la différence de temps entre le mouvement de démarrage de la position définie et la première réaction de la position réelle.

    Trace:

    _sm_img_example_poscontrol_6.png
  3. Pour déterminer le temps mort D, divisez cette différence de temps par la durée du cycle (D = différence de temps/durée du cycle). Sur le SoftMotion Drive : contrôle de position onglet, spécifiez cette valeur dans la boucle de contrôle à D.

  4. Essayez maintenant de déterminer le réglage correct de fKp. Pour ce faire, modifiez la valeur de la variable <drive>.controller.fKp dans une liste de contrôle.

    Set fKp à un petit nombre (par exemple, 0,0001) et augmentez la valeur étape par étape. Vérifiez le comportement pour chaque changement à l'aide de la trace d'échantillonnage. Dès que vous détectez des fluctuations, la limite supérieure est atteinte. Diminuez maintenant la valeur de fKp d'environ 10 % et spécifiez-le sur le SoftMotion Drive : contrôle de position onglet dans la boucle de contrôle à Kp .

    Vous pouvez maintenant utiliser l'axe.

Bloc fonctionnel : SMC_PosControlInput

Une bibliothèque: SM3_Drive_PosControl

Tableau 2. Entrées (VAR_INPUT)

Nom

Type de données

Valeur initiale

La description

bLimitPos

BOOL

Fin de course dans le sens positif (uniquement pour les axes finis)

Depuis SoftMotion version 4.12.0.0, la surveillance des interrupteurs de fin de course est activée par défaut. Pour les anciennes versions, cela doit être activé manuellement en paramétrant bHWLimitEnable à TRUE. Cela se fait généralement en écrivant le numéro de paramètre correspondant 1206 au moyen de MC_WriteBoolParameter.

TRUE: Fin de course non actionné

FALSE: Fin de course actionné

bLimitNeg

BOOL

Fin de course dans le sens négatif

TRUE: Fin de course non actionné

FALSE: Fin de course actionné

wActPosition

WORD

Position actuelle (position réelle) en tant que valeur 16 bits

dwActPosition

DWORD

Position actuelle (position réelle) en tant que valeur 32 bits

bExternalError

BOOL

Erreur externe

bRegulatorRealState

BOOL

TRUE: Axe contrôlé

bDriveStartRealState

BOOL

FALSE: Axe en Quick Stop

dwEncoderCounterModulo

DWORD

0

bDelayActivation

BOOL

TRUE: Tant que bDelayActivation est TRUE, SM3_Drive_PosControl ne passe pas à l'état de communication 100.

Cas d'utilisation : la valeur est maintenue à TRUE jusqu'à ce que le codeur appliqué donne des valeurs de position valides.



Bloc fonctionnel : SMC_PosControlOutput

Une bibliothèque: SM3_Drive_PosControl

Tableau 3. Sorties (VAR_OUTPUT)

Nom

Type de données

Valeur initiale

La description

bRegulatorOnIn

BOOL

TRUE: L'axe doit être contrôlé.

bDriveStart

BOOL

FALSE: L'axe doit exécuter un arrêt rapide.

diSetVelocity

DINT

Définir la vitesse

iSetVelocity

INT

Définir la vitesse



Bloc fonction : SMC_SetPosControlParams

Une bibliothèque: SM3_Drive_PosControl

Modifie les paramètres d'un SM3_Drive_PosControl axe

Tableau 4. Entrées (VAR_INPUT)

Nom

Type de données

Valeur initiale

La description

Axis

AXIS_REF_POSCONTROL

Référence de l'axe

bExecute

BOOL

TRUE: Active l'exécution du bloc fonction

fKp

LREAL

-1

Gain proportionnel pour le décalage

Une valeur inférieure à 0 est ignorée.

fPartVelPilotControl

LREAL

-1

Facteur pour le contrôle de la vitesse avec fSetPosition

0 : pas de contrôle pilote de vitesse ; 1 : sortie directe de fSetVelocity. Une valeur inférieure à 0 est ignorée.

fDeadTime

LREAL

-1

Décalage temporel en cycles entre fSetPosition et fActPositioin

Cette valeur ne doit pas être 0. Une valeur inférieure à 0 est ignorée.

fMaxPositionDiff

LREAL

-1

décalage de position maximum

0 désactive le contrôle du décalage de position maximum. Une valeur inférieure à 0 est ignorée.



Tableau 5. Sorties (VAR_OUTPUT)

Nom

Type de données

Valeur initiale

La description

bDone

BOOL

L'exécution du bloc fonction est terminée.

bError

BOOL

TRUE: Une erreur s'est produite dans le bloc fonction.

ErrorID

SMC_ERROR

Identification des erreurs



Exemple 2. Exemple

Les paramètres du variateur d'axe SM_Drive_PosControl sont fixés.

PROGRAM PLC_PRG
VAR
        fbSetPosControlParams : SMC_SetPosControlParams;
END_VAR

fbSetPosControlParams.fKp := 1;
fbSetPosControlParams.fPartVelPilotControl :=0;
fbSetPosControlParams.fDeadTime :=0.1;
fbSetPosControlParams.fMaxPositionDiff :=1;

fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);