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
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.Ajoutez les bornes de la borne analogique (EL4031) et de l'encodeur (EL5101) à l'arborescence des appareils.
Arborescence des appareils :
Astuce
Les descriptions d'appareils des appareils de bus de terrain doivent être téléchargées et installées auprès du fabricant.
Ouvrez le
SM_Drive_PosControl
dans l'éditeur et spécifiez le paramètre général Modulo avec la valeur360.0
sur le Général languette.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 valeur360
(2) pour unités en application.Paramètres:
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 commeUINT
.max
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 defSetPosition
est utilisé.1
: La dérivation numérique de la position définie est utilisée comme source.
Boucle de contrôle :
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:
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.
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 :
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 surin.dwActPosition
. Cartographie :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 deSMC_PosControlOutput
doivent être transmises au variateur (voir description ci-dessous). Si le variateur ne prend pas en charge l'arrêt rapide, par exemple, alorsSM_Drive_PosControl.in.bDriveStartRealState := TRUE
doit être réglé etSM_Drive_PosControl.out.bDriveStart
peut être ignoré. Dans cet exemple,bDriveStartRealState
etbRegulatorRealState
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.
Terminer le mouvement, par exemple avec
MC_MoveRelative
, et démarrez la fonction de trace.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 avecMC_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:
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
.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 defKp
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
Nom | Type de données | Valeur initiale | La description |
---|---|---|---|
|
| 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
| |
|
| Fin de course dans le sens négatif
| |
|
| Position actuelle (position réelle) en tant que valeur 16 bits | |
|
| Position actuelle (position réelle) en tant que valeur 32 bits | |
|
| Erreur externe | |
|
|
| |
|
|
| |
|
|
| |
|
|
Cas d'utilisation : la valeur est maintenue à |
Bloc fonctionnel : SMC_PosControlOutput
Une bibliothèque: SM3_Drive_PosControl
Nom | Type de données | Valeur initiale | La description |
---|---|---|---|
|
|
| |
|
|
| |
|
| Définir la vitesse | |
|
| Définir la vitesse |
Bloc fonction : SMC_SetPosControlParams
Une bibliothèque: SM3_Drive_PosControl
Modifie les paramètres d'un SM3_Drive_PosControl
axe
Nom | Type de données | Valeur initiale | La description |
---|---|---|---|
|
| Référence de l'axe | |
|
|
| |
|
| -1 | Gain proportionnel pour le décalage Une valeur inférieure à 0 est ignorée. |
|
| -1 | Facteur pour le contrôle de la vitesse avec 0 : pas de contrôle pilote de vitesse ; 1 : sortie directe de |
|
| -1 | Décalage temporel en cycles entre Cette valeur ne doit pas être 0. Une valeur inférieure à 0 est ignorée. |
|
| -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. |
Nom | Type de données | Valeur initiale | La description |
---|---|---|---|
|
| L'exécution du bloc fonction est terminée. | |
|
|
| |
|
| Identification des erreurs |
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);