Introduction
|
|
L'image ci-dessous montre la séquence simplifiée des appels de fonction standard.
|
|
|
|
Chaque fonction a accès à l'objet dédié, par exemple une opération, mais aussi au contrôleur, aux ressources électriques connectées et au programme complet.
|
|
Mouvement : Un mouvement consiste en un (linéaire ou point à point) ou deux (circulaire) objets de position (c'est-à-dire des éléments de parcours). Chaque position possède ses propres coordonnées, valeurs d'axe, configuration, rotation, etc. Le mouvement peut avoir des événements qui se produisent avant ou après avoir atteint la position. Cela signifie que les événements sont traités en conséquence dans la fonction HandleMotion().
Opération : Une opération comprend normalement plusieurs mouvements et les combine en une unité technologique, par exemple un point de perçage, un joint de soudure ou une surface à peindre.
Groupe d'opérations : Un groupe d'opérations regroupe des opérations logiques ou technologiquement liées en un seul groupe. Les opérations regroupées peuvent être manipulées ensemble, comme une seule entité.
|
|
|
Étapes
|
|
|
1.1
|
Dans Visual Studio Code, ouvrez le fichier HelloWorld.py du plugin exemple, qui a été mis en œuvre pendant la préparation. Si tout est configuré correctement, l'image devrait ressembler à ceci.
Résolution des problèmes :
Si la barre n'est pas verte, vérifiez que vous avez sélectionné le bon dossier.
Si les importations sont soulignées en jaune, veuillez sélectionner l'interpréteur Python de l'installation de FASTSUITE Edition 2.
Ces deux questions sont décrites dans la page Préparation .
|
1.2
|
Le nom du traducteur (fichier) et les noms des classes peuvent être différents. Le nom du fichier est utilisé et visible dans l'interface utilisateur. Le nom de la classe est utilisé en interne.
Il est important que le nom dans DOWNLOAD_CLASS_NAME soit égal au nom de la classe utilisée.
|
1.3
|
La classe dont elle est dérivée est spécifiée entre les crochets qui suivent le nom de la classe. Dans ce cas, il s'agit de la classe de base Downloader.
Important : il ne peut être dérivé que des traducteurs se trouvant dans le répertoire d'installation ou dans le plugin actuel. En tenant compte de ces conditions, plusieurs dérivations sont possibles (comme décrit dans l'image d'aperçu de l'infrastructure de la page Introduction).
|
|
|
2
|
Créer un fichier de programme et ajouter du contenu
|
|
2.1
|
Il existe une commande de bibliothèque disponible qui :
crée un fichier s'il n'existe pas.
ouvre le fichier.
ajoute du contenu.
ferme le fichier.
Pour accéder à cette bibliothèque, l'importation de FileUtility de cenpylib est nécessaire au début du traducteur.
|
2.2
|
Pour accéder à la bibliothèque de l'ensemble de la classe, nous créons un accès à l'échelle de la classe avec self.FileUtil = FileUtility().
Cela signifie que le code ne doit être implémenté que dans la première dérivation. L'accès est alors également disponible dans les classes dérivées (enfants) (voir plus loin).
N'oubliez pas d'appeler l'implémentation parent de la fonction __init__ avec super().__init__(), en particulier dans les classes enfants.
|
2.3
|
Dans self.OutputFilePath, nous stockons le répertoire de sortie, y compris le nom et l'extension du fichier.
|
2.4
|
Le tableau de chaînes self.ProgramContent est utilisé pour ajouter des lignes individuelles à ce tableau.
|
2.5
|
À la fin, le tableau complet est transféré dans un fichier à l'aide de la fonction AppendTextArrayToFile() de self.FileUtil.
|
|
|
3
|
Obtenir les informations sur le contrôleur et toutes les liaisons connectées
|
|
3.1
|
Voici un exemple de la manière de lire les informations nécessaires à partir du contrôleur et d'accéder à la cartographie des axes.Ajoutez les lignes suivantes à la fonction OutputHeader().
# get log operator
logger = operator.GetLogOperator()
logger.LogInfo("Default OutputHeader called")
self.ProgramContent.append("Controller: %s, Manufacturer: %s" % (controller.GetName(), controller.GetManufacturer()))
self.ProgramContent.append("Model: %s, Series: %s" % (controller.GetModel(), controller.GetSeries()))
# get all electrically connected joints
connectedJoints = controller.GetConnectedJoints()
# iterate through the list of joints
for joint in connectedJoints:
self.ProgramContent.append("Joint: %s, DOF number: %d" % (joint.GetName(), joint.GetDofNumber()))
self.ProgramContent.append("Group index: %d, joint index: %d" % (joint.GetJointGroupIndex(), joint.GetJointIndex()))
|
3.2
|
Téléchargez le programme dans votre scénario avec cette mise à jour et observez les résultats.
Exemple :
|
|
|
4
|
Retrouver tous les attributs définis pour l'opération dans le programme de sortie
|
|
4.1
|
Pour pouvoir accéder à un attribut lors d'un téléchargement, l'attribut doit être de type PROCESS_ATTRIBUTE. Il est possible de modifier la propriété et la visibilité des attributs par le biais de la personnalisation de la technologie.
|
4.2
|
Éditer tous les attributs de l'opération avec la propriété PROCESS_ATTRIBUTE.
Ajoutez les lignes suivantes à la fonction OperationStart().
for att in operation.GetAttributes():
self.ProgramContent.append('Operation attributes: ' + str(att. GetName()) + ',' + str(att.GetValue()))
|
4.3
|
Téléchargez le programme dans votre scénario avec cette mise à jour et observez les résultats.
Exemple de sortie qui a été ajoutée :
|
4.4
|
Dans l'exemple suivant, seuls les attributs qui peuvent être trouvés sur l'opération ou qui ont été définis sur l'opération sont pris en compte et ont la propriété PROCESS_ATTRIBUTE.
Pour obtenir un attribut de procédé spécifique sur l'opération, il convient d'utiliser la fonction suivante.
|
|
|
5
|
Avoir les mouvements en sortie de programme
|
|
5.1
|
L'accès aux mouvements et aux événements se fait par la fonction HandleMotion(). Tout d'abord, les événements précédant le mouvement sont traités. Ensuite, les mouvements eux-mêmes sont traduits et enfin les événements après le mouvement.
L'exemple ci-dessous contient une implémentation pour les mouvements point à point, linéaires et circulaires. Dans ce document, nous ne décrirons que la sortie linéaire.
|
5.2
|
Dans la fonction OutputLin(), la chaîne de caractères pour la sortie est générée et ajoutée à self.ProgramContent. La sortie du self.ProgramContent a déjà été traitée au début.
Ajoutez les lignes suivantes à la fonction OutputLin().
# get cartesian coordinates
xyz = position.GetXYZ()
angles = position.GetOrientation()
# convert them to meter
convertToMM = 1000
X = xyz[0] * convertToMM
Y = xyz[1] * convertToMM
Z = xyz[2] * convertToMM
# add motion instruction to the
self.ProgramContent.append(" X:%.3f mm Y:%.3f mm Z:%.3f mm" % (X, Y, Z))
self.ProgramContent.append(" Rx:%.3f deg Ry:%.3f deg Rz:%.3f deg" % (angles[0], angles[1], angles[2]))
self.ProgramContent.append("")
|
5.3
|
Téléchargez le programme dans votre scénario avec cette mise à jour et observez les résultats.
Exemple :
|
|
|
|