Erstelle meinen ersten Downloader
Einführung
Das untenstehende Bild zeigt die vereinfachte Abfolge der Standardfunktionsaufrufe.
Jede Funktion hat Zugriff auf das dedizierte Objekt, zum Beispiel eine Operation, aber auch auf den Controller, die elektrisch angeschlossenen Ressourcen und das vollständige Programm.
Motion: Eine Bewegung besteht aus einem (linearen oder Punkt-zu-Punkt) oder zwei (kreisförmigen) Positionsobjekten (d. h. Werkzeugpfadelementen). Jede Position hat ihre eigenen Koordinaten, Achsenwerte, Konfiguration, Kurve usw. Die Bewegung kann Ereignisse haben, die vor oder nach Erreichen der Position wirken. Das bedeutet, dass die Ereignisse im HandleMotion() entsprechend behandelt werden.
Operation: Eine Operation enthält normalerweise mehrere Bewegungen und kombiniert diese zu einer technologischen Einheit, zum Beispiel einem Bohrpunkt, einer Schweißnaht oder einer Malfläche.
Operation group: Eine Operationsgruppe fasst logische oder technologisch verwandte Operationen in eine Gruppe. Die gruppierten Operationen können zusammen als eine einzige Entität manipuliert werden.
Schritte
1. Anfang
| 1.1 | In Visual Studio Code öffnen Sie die HelloWorld.py aus dem Beispiel-Plugin, das während der Vorbereitung implementiert wurde. Wenn alles richtig eingerichtet ist, sollte das Bild so aussehen. Fehlersuche: Wenn die Titelleiste nicht grün ist, überprüfen Sie bitte, ob Sie den richtigen Ordner ausgewählt haben. Wenn die Importe gelb unterstrichen sind, wählen Sie bitte den Python-Interpreter aus der FASTSUITE Edition 2-Installation aus. Beide Ausgaben sind auf der Vorbereitungsseite beschrieben. |
| 1.2 | Der Name des Übersetzers (Datei) und der Klassennamen können unterschiedlich sein. Der Dateiname wird verwendet und ist in der Benutzeroberfläche sichtbar. Der Klassenname wird intern verwendet. Wichtig ist, dass der Name in DOWNLOAD_CLASS_NAME mit dem verwendeten Klassennamen gleich ist. ![]() |
| 1.3 | Die Klasse, von der sie abgeleitet ist, wird in den Klammern hinter dem Klassennamen angegeben. In diesem Fall ist es der Basis-Downloader. ![]() |
2. Erstellen Sie eine Programmdatei und fügen Sie Inhalte hinzu
| 2.1 | Es gibt einen Bibliotheksbefehl, der: eine Datei erstellt, falls sie nicht existiert. öffnet die Datei. Fügt Inhalte hinzu. schließt die Akte. Um auf diese Bibliothek zuzugreifen, ist der Import von FileUtility aus cenpylib zu Beginn des Downloaders notwendig. |
| 2.2 | Um Zugang zur Bibliothek in der gesamten Klasse zu erhalten, schaffen wir einen kursweiten Zugang mit selbst. FileUtil = FileUtility(). Das bedeutet, dass der Code nur in der ersten Herleitung implementiert werden muss. Der Zugang ist dann auch in den abgeleiteten (Kind-)Klassen verfügbar (mehr dazu später). Vergesst nicht, die Elternimplementierung der init-Funktion mit super().init() aufzurufen, besonders in den Kindklassen. ![]() |
| 2.3 | In sich selbst. OutputFilePath Wir speichern das Ausgabeverzeichnis, einschließlich Dateinamen und Dateiendung. |
| 2.4 | Das String-Array selbst. ProgramContent wird verwendet, um einzelne Zeilen zu diesem Array hinzuzufügen. |
| 2,5 | Am Ende wird das vollständige Array mit der Funktion AppendTextArrayToFile() aus selbst in eine Datei übertragen. FileUtil. ![]() |
3. Hol dir die Controller-Informationen und alle verbundenen Gelenke
| 3.1 | Hier ist ein Beispiel, wie man die notwendigen Informationen vom Controller liest und auf die Achsenabbildung zugreifen kann. Füge die folgenden Zeilen zur Funktion OutputHeader() hinzu. # Hol Log Operator Logger = Operator. GetLogOperator() Logger. LogInfo (“Default OutputHeader called”) selbst. ProgramContent.append(“Controller: %s, Hersteller: %s” % % (Controller. GetName(), Controller. GetManufacturer())) selbst. ProgramContent.append(“Modell: %s, Serie: %s” % (Controller. GetModel(), Controller. GetSeries())) # alle elektrisch verbundenen Gelenke verbindenVerbindungsgelenke = Controller. GetConnectedJoints() # iteriere die Liste der Joints für Joint in connectedJoints: self. ProgramContent.append(“Gemeinsam: %s, DOF-Zahl: %d” % (gemeinsam. GetName(), gemeinsam. GetDofNumber())) selbst. ProgramContent.append(“Gruppenindex: %d, gemeinsamer Index: %d” % (gemeinsam. GetJointGroupIndex(), gemeinsam. GetJointIndex()))![]() |
| 3.2 | Lade das Programm in deinem Szenario mit diesem Update herunter und suche nach den Ergebnissen. Beispiel: ![]() |
4. Geben Sie alle in der Operation definierten Attribute aus
| 4.1 | Um auf ein Attribut im Download zugreifen zu können, muss das Attribut vom Typ PROCESS_ATTRIBUTE sein. Es ist möglich, die Eigenschaften und Sichtbarkeit von Attributen durch technologische Anpassung zu verändern. ![]() |
| 4.2 | Geben Sie alle Operationsattribute mit der Eigenschaft PROCESS_ATTRIBUTE aus. Füge die folgenden Zeilen zur Funktion OperationStart() hinzu. Für AT&T im Betrieb. GetAttributes(): selbst. ProgramContent.append(‘Operationsattribute: ’ + str(att. GetName()) + ’,’ + str(att. GetValue()))![]() |
| 4.3 | Lade das Programm in deinem Szenario mit diesem Update herunter und suche nach den Ergebnissen. Beispiel für die hinzugefügte Ausgabe: |
| 4.4 | In diesem folgenden Beispiel werden nur Attribute betrachtet, die auf der Operation gefunden werden können oder auf der Operation gesetzt wurden, und haben die Eigenschaft PROCESS_ATTRIBUTE. Um ein bestimmtes Prozessattribut für die Operation zu erhalten, sollte folgende Funktion verwendet werden. |
5. Ausgabe der Bewegungen
| 5.1 | Der Eintrag zu den Bewegungen und Ereignissen befindet sich in der Funktion HandleMotion(). Zuerst werden die Ereignisse vor der Bewegung verarbeitet. Dann werden die Sätze selbst übersetzt und schließlich die Ereignisse nach dem Satz. Das folgende Beispiel enthält eine Implementierung für Punkt-zu-Punkt-, lineare und kreisförmige Bewegungen. In diesem Dokument werden wir nur die lineare Ausgabe beschreiben. ![]() |
| 5.2 | Innerhalb der OutputLin()-Funktion wird die Zeichenkette für die Ausgabe generiert und zum Selbst hinzugefügt. ProgramContent. Der Output des Selbst. ProgramContent wurde bereits anfangs behandelt. Füge die folgenden Zeilen zur OutputLin()-Funktion hinzu. # Kartesische Koordinaten erhalten xyz = Position. GetXYZ() Winkel = Position. GetOrientation() # convert them in Meter convert ToMM = 1000 X = xyz[0] * convert ToMM Y = xyz[1] * convert ToMM Z = xyz[2] * convertToMM # fügt die Bewegungsanweisung zum Selbst hinzu. ProgramContent.append(” X:%.3f mm Y:%.3f mm Z:%.3f mm” % (X, Y, Z)) selbst. ProgramContent.append(” Rx:%.3f deg Ry:%.3f deg Rz:%.3f deg” % (Winkel[0], Winkel[1], Winkel[2])) selbst. ProgramContent.append("") ![]() |
| 5.3 | Lade das Programm in deinem Szenario mit diesem Update herunter und suche nach den Ergebnissen. Beispiel: ![]() |











