Teil 14 verpasst? Dann erstmal hier weiter!
In Teil 14 habe wir uns eine Dialogbox gebaut über die man verschiedene Bauteilfeature unterdrücken konnte. Heute schauen wir uns den "Makrorekorder" im Inventor an, die sog. Transcript Funktion. Wobei es nicht direkt ein Makrorekoder wie z.B. in Word ist, der VBA-Code ausgibt, sondern was bei der Transcript-Funktion rauskommt ist, ein Code, der nur ähnlich VBA ist. Zudem wird die Funktion, die wir besprechen, seit Inventor 5 offizielle nicht mehr unterstützt.
Script aufzeichnen
Damit überhaupt ein Script über die Transcript-Funktion aufzeichnen können, müssen wir die Funktion in der Registry einschalten. Es geht dabei um den Registrykey
HKEY_CURRENT_USER\SOFTWARE\Autodesk\Inventor\RegistryVersion21.0\System\Preferences\Transcript
wobei sich die rote Zahl je nach Inventorversion unterscheidet. 21 steht für den Inventor 2017, 20 für 2016 usw. In diesem Registryzweig gibt es drei Einträge, die für uns relevant sind:
- TranscriptingOn
- AllowReplay
- C:\Program Files\Autodesk\Inventor 2017\Bin\Inventor.exe:TransDir
Die beiden ersten Einträge aktivieren die Aufzeichnungsfunktion (TranscriptingOn) bzw. erlauben das anschließende abspielen (AllowReplay). Diese beiden Einträge müssen jeweils auf 1 gesetzt werden, nachdem der Inventor beendet wurde.
Der dritte Eintrag gibt an, wo die Scriptdatei gespeichert werden soll. Standardmäßig ist es das Tempverzeichnis das unter der Systemvariable %TEMP% definiert ist.
Also, den Inventor beenden, Registryeditor starten (Start > regedit), zum Zweig HKEY_CURRENT_USER\SOFTWARE\Autodesk\Inventor\RegistryVersion21.0\System\Preferences\Transcript gehen und dort die oben angegebenen Werte auf 1 setzen. Jetzt den Inventor wieder starten verschiedene Aktionen ausführen, wie etwa Datei öffnen usw. Alles, was im Inventor gemacht wird, wird in einer Datei im Verzeichnis das unter ..Inventor.exe:TransDir angegeben ist mit der Endung TF gespeichert.
Die Aufzeichnung wird beendet, in dem man den Inventor schließt.
Script abspielen
Um ein Script abzuspielen, muss die Aufzeichnung in die entsprechende Datei beendet sein, d.h. die aktuelle Inventorsitzung darf nicht mehr in die Datei aufzeichnen. Wir müssen also die Aufzeichnung beenden, indem wir den Inventor schließen. Da wir nicht andauernd alle Aktionen in ein Script aufzeichnen wollen, deaktivieren wir das Transcripting wieder in der Registry, indem wir den Schlüssel TranscriptingOn auf 0 setzen.
Jetzt starten wir den Inventor wieder und müssen dem Inventor nach dem Start sagen, dass wir eine Scriptdatei ausführen wollen. Das ging früher eines Menüeintrags oder indem man die TF-Datei mittels Drag/Drop in das Inventorfenster zieht. Beides klappt bei mir nicht. Was aber geht, ist der Aufruf mittels VBA. Um den Dateidialog zum Öffnen einer TF-Datei zu öffnen nutzen wir folgenden Programm:
Sub Script_laden() ThisApplication.SilentOperation = True Debug.Print "START:" & Format(Now, "dd.mm.yyyy hh:mm:ss") ThisApplication.CommandManager.ControlDefinitions.Item("AppReplayTranscriptCmd").Execute Debug.Print "ENDE:" & Format(Now, "dd.mm.yyyy hh:mm:ss") ThisApplication.SilentOperation = False End Sub
Damit das Programm funktioniert, darf im Inventor keine Datei geöffnet sein! Ist eine Datei geöffnet, passiert schlicht nichts.
Die Zeilen mit der SilentOperation und dem Debug.print sind klar. Die eigentliche Funktion zum Öffnen der TF-Datei ist der Aufruf des Commands AppReplayTranscriptCmd über den CommandManager.
Wird das Programm ausgeführt, kommt ein Dialog zur Auswahl einer TF-Datei die dann ausgeführt, d.h. abgearbeitet wird.
Wie sieht der TF-Code aus?
Hier ein Ausschnitt aus dem Transcript-Code der eine neue Skizze erstellt und einen Kreis erzeugt.
ActiveDocument.Execute("Document1","Create Sketch On Workplane","Part=Document1.PmDCSegment.2;Workplane=Document1.PmDCSegment.11;AllowRetry=0;AllowIgnore=0;") ActiveDocument.Execute("Document1","Begin Sketch Mode","Part=Document1.PmDCSegment.2;Sketch=Ref.2.1;AllowRetry=0;AllowIgnore=0;") ActiveDocument.Execute("Document1","Create Sketch","AllowRetry=0;AllowIgnore=0;") ' -- Transaction End Tue Apr 18 09:47:40 2017 (ReqId=2) ' -- Transaction Begin Tue Apr 18 09:47:45 2017 ActiveDocument.Execute("Document1","CircleByCenter","Sketch=Ref.2.1;LayerStyle=;Pt1=[0,0];Infer1=[0,];Geom1=[Ref.3.1,];Geom1_SketchOccPath0=[];NoOfSilhouettes1=0;Pt2=[0.72485412603651,0.59577051842919];CurveFlag=1;SketchOnlyVisibleFlag=0;AllowRetry=0;AllowIgnore=0;") ' -- Transaction End Tue Apr 18 09:47:45 2017 (ReqId=5)
Und was bringt mir das jetzt?
Über das Transcripting können wiederkehrende Aufgaben ausgeführt werden oder auch standardisierte Tests, wie etwa der Benchmark Test denn ich mal für Inventor 2015 und 2017 gemacht habe.
WICHTIG: Falls noch nicht geschehen, das Transcripting vor dem normalen Arbeiten unbedingt wieder abschalten. Dazu den Inventor beenden und dann in der Registry Schlüssel TranscriptingOn auf 0 setzen.
Link zum Thema
http://adndevblog.typepad.com/manufacturing/2012/06/transcript-feature-in-inventor.html
Sehr schön. Cooles Tut!
AntwortenLöschenDanke
Hallo zusammen, bei mir hört die Aufnahme leider nicht auf, trotz Änderung der Registry Eimträge sowie schließen des INventors. Was könnte hier falsch (gemacht) sein.
AntwortenLöschenDanke
Inventor beenden (keine inventor.exe mehr im Taskmanager) dann die Registryschlüssel zurück setzten.
LöschenHallo,
AntwortenLöschenBei mir kommt leider immer "Fehler beim Kompilieren: Erwartet: = "