Créer mon premier téléchargeur
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.
Motion : Un mouvement se compose d’un objet de position (linéaire ou point à point) ou de deux objets de position (circulaires) (c’est-à-dire des éléments de trajet d’outil). Chaque position a ses propres coordonnées, valeurs d’axes, configuration, virage, etc. Le mouvement peut avoir des événements qui s’appliquent avant ou après avoir atteint la position. Cela signifie que les événements sont gérés en conséquence dans le HandleMotion().
Operation : Une opération comporte normalement plusieurs mouvements et les combine en une unité technologique, par exemple un point de perçage, une soudure ou une surface de peinture.
Operation group : 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, en une seule entité.
Marches
1. Début
| 1.1 | Dans Visual Studio Code, ouvrez la HelloWorld.py du plugin d’exemple qui a été implémenté pendant la préparation. Si tout est bien configuré, l’image devrait ressembler à ceci. Dépannage : Si la barre de titre n’est pas verte, veuillez vérifier si vous avez sélectionné le bon dossier. Si les importations sont soulignées en jaune, veuillez sélectionner l’interpréteur Python depuis l’installation FASTSUITE Edition 2. Les deux problèmes sont décrits dans la page Préparation. |
| 1.2 | Le nom du traducteur (fichier) et des noms de classe 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 classe utilisé. ![]() |
| 1.3 | La classe dont elle est dérivée est spécifiée entre crochets après le nom de la classe. Dans ce cas, c’est le Downloader de la classe de base. |
2. Créez un fichier programme et ajoutez du contenu
| 2.1 | Il existe une commande de bibliothèque qui : crée un fichier s’il n’existe pas. ouvre le dossier. Ajoute du contenu. ferme le dossier. Pour accéder à cette bibliothèque, l’importation de FileUtility depuis cenpylib est nécessaire au début du téléchargement. |
| 2.2 | Pour accéder à la bibliothèque dans toute la classe, nous créons un accès à l’ensemble de la classe avec nous-mêmes. FileUtil = FileUtility(). Cela signifie que le code ne doit être implémenté que lors de la première dérivation. L’accès est alors également disponible dans les classes dérivées (enfants) (plus de détails plus tard). N’oubliez pas d’appeler l’implémentation parent de la fonction init avec super().init(), surtout dans les classes enfants. ![]() |
| 2.3 | En moi-même. OutputFilePath nous stockerons le répertoire de sortie, incluant le nom du fichier et l’extension du fichier. |
| 2.4 | Le soi de la structure de cordes. ProgramContent est utilisé pour ajouter des lignes uniques à ce tableau. |
| 2.5 | À la fin, le tableau complet est transféré dans un fichier à l’aide de la fonction AppendTextArrayToFile() depuis self. FileUtil. ![]() |
3. Obtenez les informations du contrôleur et tous les joints connectés
| 3.1 | Voici un exemple de lecture du nécessaireinformations de l’aire provenant du contrôleur et accéder à la cartographie des axes. Ajoutez les lignes suivantes à la fonction OutputHeader(). # get log operator logger = operator. GetLogOperator() logger. LogInfo (« Default OutputHeader appelé ») lui-même. ProgramContent.append(« Contrôleur : %s, Fabricant : %s » % (contrôleur. GetName(), contrôleur. GetManufacturer())) moi-même. ProgramContent.append(« Model : %s, Series : %s » % (contrôleur. GetModel(), contrôleur. GetSeries())) # faire connecter tous les joints électriquement connectés Joints = contrôleur. GetConnectedJoints() # itère la liste des joints pour joint dans connectedJoints : self. ProgramContent.append(« Joint : %s, nombre DOF : %d » % (joint. GetName(), joint. GetDofNumber())) soi-même. ProgramContent.append(« Index de groupe : %d, index conjoint : %d » % (joint. GetJointGroupIndex(), conjoint. GetJointIndex())) ![]() |
| 3.2 | Téléchargez le programme de votre scénario avec cette mise à jour et cherchez les résultats. Exemple : ![]() |
4. Sortissez tous les attributs définis sur l’opération
| 4.1 | Pour pouvoir accéder à un attribut en téléchargement, l’attribut doit être de type PROCESS_ATTRIBUTE. Il est possible de modifier la propriété et la visibilité des attributs grâce à la personnalisation technologique. ![]() |
| 4.2 | Sortez tous les attributs d’opération avec la propriété PROCESS_ATTRIBUTE. Ajoutez les lignes suivantes à la fonction OperationStart(). pour l’AT&T en fonctionnement. GetAttributes() : soi. ProgramContent.append(‘Attributs d’opération : ’ + str(att. GetName()) + ’,’ + str(att. GetValue())) ![]() |
| 4.3 | Téléchargez le programme de votre scénario avec cette mise à jour et cherchez les résultats. Exemple de sortie ajoutée : |
| 4.4 | Dans cet 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 considérés et possèdent la propriété PROCESS_ATTRIBUTE. Pour obtenir un attribut de processus spécifique sur l’opération, la fonction suivante doit être utilisée. |
5. Sortie des mouvements
| 5.1 | L’entrée des mouvements et événements se trouve dans 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, puis enfin les événements qui suivent 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 la sortie est générée et ajoutée au self. Contenu du programme. La sortie du soi. Le contenu du programme a déjà été traité au début. Ajoutez les lignes suivantes à la fonction OutputLin(). # obtenir les coordonnées cartésiennes xyz = position. Angles GetXYZ() = position. GetOrientation() # les convertir en meter convertToMM = 1000 X = xyz[0] * convertToMM Y = xyz[1] * convertToMM Z = xyz[2] * convertToMM # ajouter l’instruction de mouvement au soi-même. ProgramContent.append( » X :%.3f mm Y :%.3f mm Z :%.3f mm » % (X, Y, Z)) lui-même. ProgramContent.append(« Rx :%.3f deg Ry :%.3f deg Rz :%.3f deg » % (angles[0], angles[1], angles[2])) soi-même. ProgramContent.append(« ») ![]() |
| 5.3 | Téléchargez le programme de votre scénario avec cette mise à jour et cherchez les résultats. Exemple : ![]() |











