| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
Autor
|
Thema: VB in ProEngineer starten (6359 mal gelesen)
|
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011 Windows 7 UG NX 12 (auch Daimler) Visual Basic 2017 Express Programmierung in NX, ProE/Creo, PRO.FILE
|
erstellt am: 28. Jan. 2014 09:18 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hoffe, ich bin hier überhaupt richtig! Ich habe bereits viel Programmiererfahrung mit VB.Net im Zusammenhang mit Siemens NX, nun möchte ich gerne das ein oder andere Programm in Pro/E erstellen (vom Prinzip hier wahrscheinlich ähnlich der Programme von NX). Ich habe auch schon den benötigten Verweis für die Pro/E-Bibliothek hinzugefügt und auch das Ansprechen der Sitzung sollte kein Problem darstellen. Mein Problem ist aber: Wie bekomme ich mein VB in Pro/E? In NX ist das ganz einfach, Werkzeuge -> Journal -> ausführen, dann kann man eine .vb-Datei auswählen, die dann abläuft. Wie mache ich das in Pro/E? (Bitte entschuldigt den Vergleich zu NX, ich wollte das nur anführen, da ich da weiß, wie es geht und es in Pro/E vllt ähnlich ist!) Es wäre schön, wenn ihr mir da helfen könntet! Viele Grüße, pleudel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 28. Jan. 2014 10:18 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011 Windows 7 UG NX 12 (auch Daimler) Visual Basic 2017 Express Programmierung in NX, ProE/Creo, PRO.FILE
|
erstellt am: 28. Jan. 2014 10:57 <-- editieren / zitieren --> Unities abgeben:
Das hatte ich mir schon fast gedacht. Also kann ich ganz normal in Visual Basic Express mein Programm erstellen und dann eine offene Pro/E-Sitzung ansprechen? Oder muss ich die Sitzung zwangsläufig mit dem Programm auch erst öffnen? Was ist, wenn ich in der ProE-Sitzung bin und eine Zeichnung geöffnet habe und die als PDF exportieren will (nur mal ein Beispiel, meinetwegen auch IGES Export oder ähnlich) muss ich dann auch ein externes Programm starten um diese Sitzung mit der Zeichnung anzusprechen? Ich frage deshalb so "blöd" nach, weil ich es anders gewohnt bin, das von außen ansprechen ist mir neu! Viele Grüße pleudel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 28. Jan. 2014 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Zitat: Original erstellt von pleudel: Das hatte ich mir schon fast gedacht. Also kann ich ganz normal in Visual Basic Express mein Programm erstellen und dann eine offene Pro/E-Sitzung ansprechen? Oder muss ich die Sitzung zwangsläufig mit dem Programm auch erst öffnen?
Es geht beides. Zitat: Original erstellt von pleudel: Was ist, wenn ich in der ProE-Sitzung bin und eine Zeichnung geöffnet habe und die als PDF exportieren will (nur mal ein Beispiel, meinetwegen auch IGES Export oder ähnlich) muss ich dann auch ein externes Programm starten um diese Sitzung mit der Zeichnung anzusprechen?
Ja, wenn ich dich richtig verstehe. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011 Windows 7 UG NX 12 (auch Daimler) Visual Basic 2017 Express Programmierung in NX, ProE/Creo, PRO.FILE
|
erstellt am: 28. Jan. 2014 11:27 <-- editieren / zitieren --> Unities abgeben:
Ok, vielleicht habe ich mich nicht deutlich ausgedrückt ^^ Also ich habe es jetzt so verstanden, dass ich eine Datei mit .vb Endung nicht einfach in ProE durch Knöpfchendrücken "aufrufen" kann und diese dann irgendwas macht, sondern ich muss ein externes Programm ausführen, um Zugriff auf eine bereits offene ProE-Sitzung zu erhalten oder um eine ProE-Sitzung zu öffnen. Ich würde das gerne mal testen, z.B. einfach den aktuellen Dateinamen vom geöffneten Part in einer Messagebox ausgeben lassen. Jetzt ist bei uns in ProE noch nie so programmiert worden, ich habe aber schon gelesen, dass dafür Umgebungsvariablen gesetzt werden müssen. Welche sind das? Muss sonst noch irgendwas konfiguriert werden, um die Sitzung mit VB anzusprechen? Kennt jmd vielleicht noch hilfreiche (wenn möglich kostenlos) Lektüre dazu? Mein Ziel ist es im Moment nur zu zeigen, dass die Sitzung angesprochen wird und Informationen daraus verarbeitet werden können (also zb. den Dateinamen ausgeben!) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 28. Jan. 2014 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
San Benedetto Mitglied
Beiträge: 29 Registriert: 28.05.2013 Win7 Pro/e Wf4/Creo 2.0 VB2010express VB2012express
|
erstellt am: 28. Jan. 2014 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo pleudel hier ein paar code zeilen (verbindet zu Pro/e du must ein Modell offen haben,nur eine Pro/E Sitzung-- msgbox pfad und Datei - öffnet dann eine gleichnamige drw wenn vorhanden) Private Sub Button_drw_open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_drw_open.Click Dim drawings As Cstringseq Dim model As IpfcModel Dim modelDesc As IpfcModelDescriptor Dim Mdlname As String Dim Drwname As String Dim Pfad As String Dim Pos As Integer Proe = New CCpfcAsyncConnection asyncConnection = Proe.Connect("", "", ".", 5) session = CType(asyncConnection.Session, IpfcBaseSession) Try model = session.CurrentModel If model Is Nothing Then Throw New Exception("Kein Model im Hauptfenster: ") End If Mdlname = session.CurrentModel.FullName.ToLower 'ToLower - wandelt in Kleinschrift um Pfad = session.CurrentModel.Origin 'absolute Lage der Datei Pos = Pfad.LastIndexOf(Mdlname) 'Position des letzten vorkommens von Mdlname Pfad = Pfad.Remove(Pos) ' Schneidet den Dateinamen vom absoluten Pfad weg MsgBox("Pfad " & Pfad) Drwname = Mdlname + ".drw" MsgBox("name " & Drwname) drawings = session.ListFiles(Drwname, EpfcFileListOpt.EpfcFILE_LIST_LATEST, Pfad) 'Suche nach datei If drawings.Count = 0 Then Throw New Exception(" Keine Zeichnung vorhanden: ") End If
modelDesc = (New CCpfcModelDescriptor).CreateFromFileName(Drwname) session.OpenFile(modelDesc).Activate() Catch ex As Exception MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString) End Try asyncConnection.Disconnect(2) End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011
|
erstellt am: 28. Jan. 2014 15:50 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für eure Hilfe!!!!! (San Benedetto, deinen Code werde ich morgen mal ausprobieren!) Ich hab es schonmal hinbekommen, den Dateinamen und Parameterwerte in Label zuschreiben, das heißt, die Verbindung steht Wie gesagt, viiiielen Dank schonmal! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012 Creo Parametric 3.0 M120 PDM Essentials 10.1 M040
|
erstellt am: 28. Jan. 2014 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Das ging ja fix. Einige (Ich auch) haben länger dafür gebraucht. Btw. ProE lässt sich über diese API auch mit anderen Programmiersprachen ansprechen, falls deine Kenntnisse in einer anderen Sprache besser sind. Ich arbeite viel mit Python. Aber auch VBS, VBA und fast jede andere Sprache taugt dazu. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011
|
erstellt am: 29. Jan. 2014 10:08 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, Nico, danke für die Info, aber VB.Net ist schon optimal, das passt schon =) klappt auch bisher sehr gut, und ich muss sogar zugeben, dass das von außen ansprechen sogar komfortabler ist als das Starten der Programme in NX, da dort ja nicht debuggt werden kann! Außerdem zerreist es die schöne Formoberfläche in NX immer ein wenig, was hier ja nicht der Fall ist! Eine Frage habe ich aber noch, und zwar zu der Zeile asyncConnection.Disconnect(2) Damit wird ja die Verbindung zu ProE wieder getrennt. Im Code oben wird, bis auf die Verbindung und das anschließende Trennen derselbigen , der restliche Code in die Try-Catch-Anweisung geschrieben, das hatte ich bei mir nicht gemacht. Und nach ein paar mal starten ging auf einmal nichts mehr, dann habe ich den Prozess pfclscom.exe aus dem Task-Manager gelöscht, und siehe da, es ging wieder. Kommt das daher, dass das Programm bei einem Fehler die Zeile mit dem Verbindung trennen einfach nicht erreicht und die Verbindung deshalb auch (logischerweise) nicht getrennt wird? Folglich muss ich jeden Code nach dem Verbinden und vor dem Trennen in eine Try-Catch-Anweisung setzen? ich glaube ich habe mir die Frage jetzt selbst schon beantwortet, trotzdem wäre es schön, zu dem Thema nochmal eine Rückmeldung zu bekommen! Danke PS: Ach, und noch eine Frage: Kann man in ProE auch irgendwie Befehle aufzeichnen? also wenn ich einen Button drücke, welcher Code dahinter steht? [Diese Nachricht wurde von pleudel am 29. Jan. 2014 editiert.]
[Diese Nachricht wurde von pleudel am 29. Jan. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012 Creo Parametric 3.0 M120 PDM Essentials 10.1 M040
|
erstellt am: 29. Jan. 2014 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Zitat: Original erstellt von pleudel: ich glaube ich habe mir die Frage jetzt selbst schon beantwortet, trotzdem wäre es schön, zu dem Thema nochmal eine Rückmeldung zu bekommen!
Genau :) Die VB-API ist in dem Bereich manchmal ein wenig zickig. die pfclscom.exe killen reicht da leider auch nicht immer. Zitat: Original erstellt von pleudel: PS: Ach, und noch eine Frage: Kann man in ProE auch irgendwie Befehle aufzeichnen? also wenn ich einen Button drücke, welcher Code dahinter steht?
Jein. Entweder nen Mapkey basteln oder die Trail-Datei auslesen und per .RunMacro() einfügen in VB. Allerdings umgeht man damit ein wenig die VB-API. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen [Diese Nachricht wurde von NicoFTB am 29. Jan. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011
|
erstellt am: 29. Jan. 2014 11:20 <-- editieren / zitieren --> Unities abgeben:
Was ist denn genau ein Mapkey? Ich bin ja, was ProE angeht, absoluter Neuling, aber dieses Wort läuft mir andauernd über wen Weg! Und die Trail-Datei auslesen, was ist das und wie geht das? Gibt es eigentlich noch andere, speziell für Programmierung ausgelegte Foren für ProE? Das NX Forum auf CAD.de ist untergliedert in allgemein und Programmierung, da findet man schneller was man sucht, hier bekommt man immer Tips zum allg. Arbeiten und nicht zum Programmieren wenn man die Suchfunktion anschmeißt... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012 Creo Parametric 3.0 M120 PDM Essentials 10.1 M040
|
erstellt am: 29. Jan. 2014 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 06. Mrz. 2014 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo! Zwar liegt der letzte Beitrag etwas zurück, aber die Thematik passt eigentlich genau. Die Grundkonfiguration von VB und Pro/E hab ich, wie bei Hier vorgeschlagen, erledigt. Umgebungsvariable ist gesetzt, Verweis in VB hinzugefügt und pfclscom.exe erscheint. Nun zum Problem: Wenn ich zum Testen lediglich Dim connection As IpfcAsyncConnection Dim classAsyncConnection As New CCpfcAsyncConnection connection = classAsyncConnection.Connect("", "", ".", 5) oder auch connection = classAsyncConnection.Connect(DBNull.Value, DBNull.Value, DBNull.Value,DBNull.Value) aufrufe, wie in der vbapi Dokumentation von PTC vorgeschlagen, erhalte ich immer folgende Fehlermeldung: COMException -> pfcExceptions::XToolkitNeedsUnlock Anbei zwei Lösungsansätze, die zu keinem Erfolg führten. Pro/Toolkit ist am Arbeitsplatz vorhanden. CADInterface Blogspot Zitat:
Dim drawings As Cstringseq Dim model As IpfcModel Dim modelDesc As IpfcModelDescriptor Dim Mdlname As String Dim Drwname As String Dim Pfad As String Dim Pos As Integer Proe = New CCpfcAsyncConnection asyncConnection = Proe.Connect("", "", ".", 5) session = CType(asyncConnection.Session, IpfcBaseSession)
Hier bekomme ich direkt die Meldung, dass "Proe" nicht deklariert ist. Liebe Grüße Christoph [Diese Nachricht wurde von PongoCAD am 06. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 06. Mrz. 2014 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Die Toolkit-Lizenz brauchst du für die VB-API nicht. Dafür ist diese ja da. Sind Option Strict und Explicit gesetzt? Im zweiten Fall ist Proe auch nicht deklariert. Ggf. könnte es helfen die Objekte von der VB-API direkter anzusprechen. Zudem fehlt in dem zweiten Fall auch die Hälfte vom Code. (Bitte verzeiht mein leihenhaftes Beschreiben, ich bin Maschinenbauer und kein Informatiker) Ich meine: Option Strict On Option Explicit On Dim connection As pfcls.IpfcAsyncConnection Dim cAC As pfcls.CCpfcAsyncConnection connection = New cAC.connect("","",".",5) connection.Disconnect(2) Ansonsten kannst du auch mal kurz mein Script testen. Einfach im CMD mit "cscript cadde.vbs" aufrufen. Edit: Disconnect hinzugefügt. Sonst meckert die API rum. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen [Diese Nachricht wurde von NicoFTB am 06. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 06. Mrz. 2014 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Danke Nico. Strict und Explicit sind gesetzt. Auch wenn ich es nun direkt anspreche, erhalte ich die selbe Fehlermeldung. Hier mal der Code des minimalistischen Testprogramms. Option Strict On Option Explicit On 'Imports pfcls Public Class Form1 Private Sub Button_drw_open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_drw_open.Click Dim connection As pfcls.IpfcAsyncConnection Dim cAC As New pfcls.CCpfcAsyncConnection connection = cAC.Connect("", "", ".", 5) connection.Disconnect(2) End Sub End Class Zitat: Ansonsten kannst du auch mal kurz mein Script testen. Einfach im CMD mit "cscript cadde.vbs" aufrufen.
Jetzt steh ich irgendwie auf der Leitung. Du meinst im CMD von Windows? Und Welches Programm? [Diese Nachricht wurde von PongoCAD am 06. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 06. Mrz. 2014 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 06. Mrz. 2014 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Ach herje. Habs ausgeführt, in ProE ist ein Modell geöffnet und aktiv. Die Ausgabe: C:\cadde>CScript cadde.vbs Microsoft (R) Windows Script Host, Version 5.8 Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten. Modelle in der Sitzung: 0 424 Laufzeitfehler in Microsoft VBScript Objekt erforderlich C:\cadde\cadde.vbs(45, 1) Laufzeitfehler in Microsoft VBScript: Objekt erforderlich: '' Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 06. Mrz. 2014 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Ok. Es gibt jetzt eigentlich nur zwei Möglichkeiten. 1.) ProE neustarten und hoffen dass es dann geht. 2.) Du hast nen Fehler bei der Installation gemacht. Hast du die vbstart.bat zB als Admin ausgeführt? ggf. schon nen Neustart gemacht? Die VB-API kann bissl zickig sein. Bei mir funktioniert diese leider meist nur mit einer frischen Sitzung. Sobald ich schon ne Weile damit gearbeitet habe muss ich Creo erst schließen um eine Verbindung zu bekommen. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 06. Mrz. 2014 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Neustart hab ich nun durchgeführt, leider immer noch das selbe Problem. Werde mich nun nochmals wegen einer Neuinstallation an die IT wenden. Aber so viel ich weiß, wurde die vb_api_register.bat als Administrator ausgeführt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
San Benedetto Mitglied
Beiträge: 29 Registriert: 28.05.2013 Win7 Pro/e Wf4/Creo 2.0 VB2010express VB2012express
|
erstellt am: 06. Mrz. 2014 19:59 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo PongoCad wenns nicht läuft. 1.- im Pro/E Bin Verzeichnis vb_api_unregister.bat ausführen 2.- im Pro/E Bin Verzeichnis ptcsetup.bat ausführen 3.- im Pro/E Bin Verzeichnis vb_api_register.bat ausführen alles als Admin Systemvariable Pfad auf Pro_comm_msg_exe dann sollte es von Pro/E Seite funktionieren. In VB Verweis zu Pro/E API hinzufügen. Windows Form erstellen mit einem Schalter "Button_drw_open"
ich hoffe es hilft. testprg von obigen post erweitert. (beim ersten verbinden kann es durchaus einmal 10 sec dauern bis die Msgbox aufpoppt. Option Strict On Option Explicit On Imports pfcls '<-- bitte nicht auskommentieren wie oben in deinem Post Public Class Form1 Private Sub Button_drw_open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_drw_open.Click Dim connection As pfcls.IpfcAsyncConnection Dim cAC As New pfcls.CCpfcAsyncConnection connection = cAC.Connect("", "", ".", 5) MsgBox("Hello World: " ) connection.Disconnect(2) End Sub End Class Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 06. Mrz. 2014 22:51 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo San Benedetto! Danke für deine Unterstützung! Werde ich morgen gleich so durchführen! Auf meinem Testsystem hab ich das ganze nun zum Laufen bekommen, also wenigstens ein kleiner erster Erfolg. Eigentlich sollte es ja wirklich kein Problem sein, aber hab eben wenig Ahnung was am anderen System schief gegangen sein kann.. also nochmal von Null starten, dann wird’s wohl hoffentlich klappen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 07. Mrz. 2014 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
So, ProE wurde komplett neu installiert, Umgebungsvariable überprüft, vb_api_register.bat nochmals ausgeführt und der Verweis in VB Express gemacht. Leider endet es immer noch mit dem selben Ergebnis: pfcExceptions::XToolkitNeedsUnlock Einzige Spur die ich jetzt noch habe ist diese
Zitat: This issue is corrected in M220 date code which will be available for download on 31-Jan-2014. You may switch to M200 date code OR contact PTC Technical Support to have the pfclscom.exe unlocked.
Zwar handelt es sich hier um W5, aber die Fehlermeldung und der Ansatz ist der Gleiche. Wenn's nicht hinhaut, muss ich es wohl über J-Link probieren, dieses Problem zu lösen, da es nicht ausreicht, wenn's nur Zuhause richtig funktioniert Noch eine Frage die aufgetaucht ist: Auf meinem Testsystem verwende ich ein 32 bit ProE auf einem 64 bit Rechner (dort funktioniert es problemlos). Hier ist beides 64 bit. Kann ProE in 64 bit über die VB API angesprochen werden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 07. Mrz. 2014 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
San Benedetto Mitglied
Beiträge: 29 Registriert: 28.05.2013 Win7 Pro/e Wf4/Creo 2.0 VB2010express VB2012express
|
erstellt am: 07. Mrz. 2014 13:55 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo PongoCAD Hast du dein Programm mit der Creo API oder WF4 API erstellt? (verweis in VB) ( Systemvariable auf WF4 Pro_comm_msg_exe oder die von Creo) bei mir geht's nicht Überkreuz von Creo zu WF 4 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 10. Mrz. 2014 08:21 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo! Danke für eure Tipps. Habs mit der WF4 API erstellt und auch den Verweis und die Systemvariable dementsprechend gesetzt. Aber war ein guter Tipp, leider trifft's nicht zu.. [Diese Nachricht wurde von PongoCAD am 10. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 24. Mrz. 2014 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Mein System wurde letzten Freitag vollständig neu aufgesetzt, nun funktionierts überraschender Weise. Danke für eure Hinweise, Gründe kann ich aber leider keiner liefern. [Diese Nachricht wurde von PongoCAD am 24. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 15. Apr. 2014 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo! Nun wo ich mich wieder aktiv damit ausseinandersetze, bin ich leider auf ein Problem gestoßen, wofür ich keine Lösung finde. Ich schaffs nicht den Modellbaum anzusprechen bzw. mir diesen als Array von Strings auszugeben. Zwar kann ich den Baugruppennamen auslesen, und auch für Testzwecke den Namen einer zweiter geöffneten Baugruppe, aber für den Modellbaum hab ich noch nicht den richtigen Befehl gefunden, auch wenn im API Wizard und in der Schnittstellen Doku nur von Befehlen so wimmelt.. Hat zufällig jemand eine Idee, wie ich den ansprechen kann? Mein Ziel ists, über Excel Listen zu exportieren, mit denen die Namen im Baum abgeglichen werden. Mein Testprogramm: Option Strict On Option Explicit On Imports pfcls Imports System.IO Imports System Imports System.Xml Imports Microsoft.Office.Core Imports Microsoft.Office.Interop '*** Main Skript ***' Public Class ExportSTLFiles '*** Globale Deklaration der Variablen, damit sie in allen Funktionen bekannt sind Dim model As IpfcModel Dim Proe As CCpfcAsyncConnection Dim asyncConnection As IpfcAsyncConnection Dim session As IpfcBaseSession '*** Button zum Erstellen der Verbindung ***' Private Sub btnConnectProE_Click(sender As System.Object, e As System.EventArgs) Handles ConnectProE.Click 'SystemDiagnostic() ' Sub zur Überprüfung der Einstellungen des Systems ' Verbindung zu ProE erstellen Proe = New CCpfcAsyncConnection asyncConnection = Proe.Connect("", "", ".", 5) session = CType(asyncConnection.Session, IpfcBaseSession) End Sub Private Sub btnTestprogramm_Click(sender As System.Object, e As System.EventArgs) Handles btnTestprogramm.Click Dim Baugruppe As Cstringseq Dim modelDesc As IpfcModelDescriptor Dim Mdlname As String Dim ASMName As String Dim Pfad As String Dim Pos As Integer Dim ActModel As IpfcModel Dim ActModels As IpfcModels Dim selections As CpfcSelections Dim selectionOptions As IpfcSelectionOptions Dim max As Integer Try model = session.CurrentModel() ' Geöffnetes Modell ansprechen If model Is Nothing Then ' Falls kein Modell geöffnet ist, gib Fehler aus Throw New Exception("Kein Model im Hauptfenster: ") End If Mdlname = session.CurrentModel.FullName.ToLower ' Modellnamen auslesen / ToLower - wandelt in Kleinschrift um Pfad = session.CurrentModel.Origin ' Absolute Lage der Datei Pos = Pfad.LastIndexOf(Mdlname) ' Position des letzten vorkommens von Mdlname Pfad = Pfad.Remove(Pos) ' Schneidet den Dateinamen vom absoluten Pfad weg MsgBox("Pfad " & Pfad) ' Ausgabe des Pfades ASMName = Mdlname + ".asm" ' Modellnamen erweitern MsgBox("name " & ASMName) ' Ausgabe der Oberbaugruppe Baugruppe = session.ListFiles(ASMName, EpfcFileListOpt.EpfcFILE_LIST_LATEST, Pfad) ' Suche nach Datei If Baugruppe.Count = 0 Then Throw New Exception("Keine Baugruppe vorhanden: ") End If
ActModels = session.ListModels() ActModel = CType(ActModels(1), IpfcModel) MsgBox("ActModel " & ActModel.CommonName) selectionOptions = (New CCpfcSelectionOptions).Create("prt_or_asm") ' Auswahl von Parts oder Assembles selectionOptions.MaxNumSels = 2 MsgBox("Select") selections = session.Select(selectionOptions, Nothing) MsgBox("Selection done") MsgBox("Selection Count: " & selections.Count.ToString) Catch ex As Exception MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString) End Try asyncConnection.Disconnect(2) End Sub End Class
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
San Benedetto Mitglied
Beiträge: 29 Registriert: 28.05.2013 Win7 Pro/e Wf4/Creo 2.0 VB2010express VB2012express
|
erstellt am: 15. Apr. 2014 10:03 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo PongoCad ich werfe einfach mal ein paar code snippels rein . anhand derer kannst du versuche unternehmen. Private Class AssemblyUtilities Private Shared asm As IpfcAssembly Private Shared pathArray As ArrayList Public Shared Function listEachLeafComponent(ByRef assembly As IpfcAssembly) As IpfcComponentPath() Dim startLevel As New Cintseq Dim Teile As Integer = 0 asm = assembly pathArray = New ArrayList listSubAssemblyComponent(startLevel) Dim compPaths(pathArray.Count) As IpfcComponentPath '******************** Listet nur prt im ASM ohne ASM in der ganzen ASM tiefe For i = 0 To pathArray.Count - 1 compPaths(i) = pathArray.Item(i) ' MsgBox("EBENE - " & compPaths(i).ComponentIds.Count.ToString & "- " & compPaths(i).Leaf.FileName.ToString) Next Return (compPaths) End Function
Private Shared Sub listSubAssemblyComponent(ByRef currentLevel As Cintseq) '*********** Listet alle Componenten im ASM rekursiv Dim currentComponent As IpfcSolid Dim currentPath As IpfcComponentPath = Nothing Dim level As Integer Dim SubComponents As IpfcFeatures Dim componentFeat As IpfcFeature Dim id As Integer Dim modelDesc As IpfcModelDescriptor ' Dim Datei As String
level = currentLevel.Count If (level > 0) Then currentPath = (New CMpfcAssembly).CreateComponentPath(asm, currentLevel) currentComponent = currentPath.Leaf Else currentComponent = asm End If If (currentComponent.Type = EpfcModelType.EpfcMDL_PART) And (level > 0) Then pathArray.Add(currentPath) Else SubComponents = currentComponent.ListFeaturesByType(True, EpfcFeatureType.EpfcFEATTYPE_COMPONENT) For i = 0 To SubComponents.Count - 1 componentFeat = SubComponents.Item(i) id = componentFeat.Id modelDesc = componentFeat.ModelDescr ' If InStr(tree_view.Datei, ".asm") > 1 Then ' MsgBox(".ASM " & tree_view.Datei) ' End If ' If InStr(tree_view.Datei, ".prt") > 1 Then ' MsgBox(".PRT " & tree_view.Datei) ' End If MsgBox("Komponente - " & modelDesc.GetFileName.ToLower & " id: " & id & " Level " & level & " Zähler " & i) End If ' MsgBox(" Pfad -" & tree_view.Pfad & " " & " - Datei - " & tree_view.Datei)
' tree_view.makenode(modelDesc.GetFileName.ToLower, level, i) currentLevel.Set(level, id) listSubAssemblyComponent(currentLevel) '**************************rekursion Next End If If Not level = 0 Then currentLevel.Remove(level - 1, level) End If Return
End Sub End Class Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 15. Apr. 2014 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
NicoFTB Mitglied Ingenieur Entwicklung/Konstuktion
Beiträge: 806 Registriert: 08.05.2012
|
erstellt am: 15. Apr. 2014 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Die einfache Variante. Baugruppe öffnen, speicher von 'Altlasten' leeren, über listModels() alle Teile in der Session auslesen. Den genauen Baum auslesen geht afaik nur über die Komponenten. Und da müsste man den Baum rekursiv auslesen. Über listFeaturesByType bekommt man die Kompenenten IDs. Dann muss man prüfen ob eine ID ein ASM ist und dann in diesem ASM wieder die Komponenten ausgeben. Das alles dann irgendwie zusammensetzen in einer Liste, einem Objekt oder ähnlichem. Edith meint: Man sollte nicht zu lange im Beitrag-Erstellen rumtippen. Aber meine Erklärung ist grob das was das Tool oben macht. ------------------ Grüße Nico \o/ Üs - ProE-Beziehungen [Diese Nachricht wurde von NicoFTB am 15. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 16. Apr. 2014 15:45 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo ! Eure Hilfestellungen haben mir wirklich die Augen geöffnet. Habe bis dato den listModels() Befehl einfach missverstanden (dachte ich kann damit lediglich auf geöffnete Instanzen, nich auf den Inhalt zugreifen). Nun nachdem das klappt, vergleiche ich Einträge aus listModel() mit eingelesenen Bezeichnungen aus Excel (z.B. prt0001.prt), mit dem Ziel, diese als .stl File zu exportieren. Zwar konnte ich zu Testzwecken als vrml exportierem: Dim ActModels As IpfcModels Dim ActModel As IpfcModel Dim outDir As String Dim vrmlInstructions As IpfcVRMLModelExportInstructions ActModels = session.ListModels() outDir = "SomeDirectory" vrmlInstructions = (New CCpfcVRMLModelExportInstructions).Create(outDir) Dim StringArray(3) As String StringArray(1) = "part_neu_1.prt" StringArray(2) = "partneu.prt" StringArray(3) = "unterbaugruppen_teil_1.prt"
For i As Integer = 0 To (ActModels.Count - 1) ActModel = CType(ActModels(i), IpfcModel) MsgBox("ListModel: " & i & " " & ActModel.CommonName) If StringArray.Contains(ActModel.CommonName) Then ActModel.Export(Nothing, CType(vrmlInstructions, IpfcExportInstructions)) MsgBox("Bin Teil von: " & ActModel.CommonName) End If Next Dies funktioniert soweit so gut, aber beim Stl Export bekomme ich es so nicht hin. Kann ich auch hier, wie beim manuellen Export, nur die Gesamtbaugruppe exportieren (Unterdrücken vernachlässigt). ? Mein Ansatz:
Dim ModelExportSTL As IpfcSTLBinaryExportInstructions Dim csysName, FileName As String Dim model As IpfcModel csysName = "CS0" FileName = "C:\Output.stl" model = session.CurrentModel() ModelExportSTL = (New CCpfcSTLBinaryExportInstructions).Create(csysName) model.Export(FileName, CType(ModelExportSTL, IpfcExportInstructions))[/b]
So kann ich zwar die Gesamtbaugruppe exportieren, aber eigentlich will ich auch jedes Bauteil abgleichen und einzeln exportieren über ActModels = session.ListModels() und ActModel = CType(ActModels(i) IpfcModel). Da bekomm ich aber die Exception ToolkitNotFound.. Habt ihr zufällig eine Idee? Oder muss ich den Umweg gehen, und alle anderen Baugruppen und Parts unterdrücken, und dann exportieren. Diejenigen, die exportiert werden müssen, sollen nämlich zu einem "globalen" Koordinatensystem referenziert werden, welches in der Baugruppe vorhanden sind. Liebe Grüße Christoph [Diese Nachricht wurde von PongoCAD am 16. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
San Benedetto Mitglied
Beiträge: 29 Registriert: 28.05.2013 Win7 Pro/e Wf4/Creo 2.0 VB2010express VB2012express
|
erstellt am: 16. Apr. 2014 18:01 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Servus PongoCad schön das du weiterkommst mit session.ListModels() bekommst du alle Modelle die im Creo Speicher sind also wenn du den Speicher ausleerst , und dann eine Baugruppe öffnest, hast du damit Zugriff auf alle Modelle der Baugruppe beim Export der Modelle als Step kennen die Einzelteile nicht die Referenz wie sie verbaut wurden. Die Info Steckt nur in der BG. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SpacemanSpiff Mitglied
Beiträge: 57 Registriert: 02.05.2011 Creo 2
|
erstellt am: 28. Apr. 2014 22:00 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo! Hier wird ja auch von der Zickigkeit der VBApi-Schnittstelle geschrieben. Ich habe ein Skript, das sich mit Creo 2 verbindet, eine URL im internen Browser aufruft und sich danach wieder trennt. Das funktionierte vor dem Wochenende ziemlich gut. Heute hat es mich Wahnsinnig gemacht, ich bekomme immer mal wieder den XToolkitNotFound-Fehler, aber nie beim ersten mal. Mir ist aufgefallen, dass beim Ausführen eines VBS-Scriptes die pfclscom.exe gestartet und nach kurzer Zeit wieder beendet wird. Bei Excel bleibt sie anscheinend die ganze Zeit geöffnet, sobald eine Mappe mit dem Creo-Verweis geöffnet ist, auch wenn die Verbindung getrennt wurde. Irgendwie scheint das Disconnect nicht so 100%ig zu funktionieren. Ist es besser, eine Verbindung in Excel aufzubauen und erst zu trennen, wenn man die Mappe schließt? Momentan mache ich für jeden Aufruf eine neue Verbindung und trenne sie gleich wieder. Ich mache das über die Methode, die hier als Beispiel beschrieben wurde: http://ww3.cad.de/foren/ubb/uploads/San+Benedetto/Pro_e-VB-API-VB-2010-Express.pdf Viele Grüße Spiff Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
San Benedetto Mitglied
Beiträge: 29 Registriert: 28.05.2013 Win7 Pro/e Wf4/Creo 2.0 VB2010express VB2012express
|
erstellt am: 29. Apr. 2014 11:51 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Hallo Spaceman Spiff nur eine Verbindung kann mit Pro/e in einer Session verbunden sein wenn dein Excel die Verbindung offen lässt und du dann nochmal zu verbinden versuchst -> toolkit bla bla bla aus dem User guide Only one active Connection can be made to a single Pro/Engineer sesssion at one time hoffe das hilft Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PongoCAD Mitglied
Beiträge: 16 Registriert: 03.03.2014 Pro/E Wildfire 4.0 VB 2010 Express
|
erstellt am: 05. Mai. 2014 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
Guten Morgen ! Dank eurer Unterstützung habe ich es nun zumindest auf meiner Testbaugruppe den separierten stl File Export aus Baugruppen umsetzen können. Teilweise drückt der Schuh aber noch. So hab ich Probleme mit der Qualität (Sehnenhöhe) der exportierten Parts, aber da hab ich auch schon Ansätze gefunden, mit denen es klappen könnte. Kurz zu meiner Vorgangsweise, falls jemand mal vor demselben Problem steht: Mit dem Code von San Benedetto („AssemblyUtilities“ -> Beispiel aus VB API Doku) lässt sich der Strukturbaum hervorragend auslesen. Ich hab es etwas modifiziert, und unterdrücke gleich beim auslesen sämtliche Parts (KEINE Baugruppen). Beispiel: In Private Class AssemblyUtilities: FeatureSuppressOperations = New CpfcFeatureOperations FeatureSuppressOperations.Append(feature.CreateSuppressOp()) ' Füge zu suppressenden Part dem Array hinzu. ParentSolid.ExecuteFeatureOps(CType(FeatureSuppressOperations, CpfcFeatureOperations), Nothing) ' Unterdrücken. „ParentSolid“ muss heirbei die Überbaugruppe des jeweiligen Parts sein (aber IpfcSolid). Lässt sich beispielsweise mit „ParentSolid = feature.DBParent“ ermitteln. Zustäzliche zum IpfcComponentpath Array „ComPaths“ übergebe ich auch einen Array aus allen Part-Namen beim Aufruf der Funktion aus AssemblyUtilities. Im Hauptprogramm Vergleiche ich dann lediglich den Part-Namen Array mit den Namen der gewünschten Exports (z.B. aus Excel einlesen), und hole dann entsprechende Parts zurück (FeatureRemoveOperations.Append(feature.CreateResumeOp())). Hinweis: IpfcComponentPath hat teilweise Probleme bei unterdrückten Parts, daher der Umweg mit dem eigenen Part-Namen Array. Das lässt sich schön verschachteln, um gleichzeitig mehrere Parts zurückholen, zu exportieren und abermals zu unterdrücken. (s.o. für Hinweise zum stl File Export) Liebe Grüße Christoph
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |