Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  PMI Daten aus den Referenzflächen auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX
Autor Thema:  PMI Daten aus den Referenzflächen auslesen (2557 mal gelesen)
Lukas1983
Mitglied



Sehen Sie sich das Profil von Lukas1983 an!   Senden Sie eine Private Message an Lukas1983  Schreiben Sie einen Gästebucheintrag für Lukas1983

Beiträge: 30
Registriert: 04.05.2009

erstellt am: 17. Jun. 2009 17:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

folgedes Problem: ich habe eine Baugruppe mit Constraints z.B Einfügen: Fläche Bolzen - Fläche Bohrung. In den entsprechenden Parts sind auf beiden Flächen PMI Daten abgelegt (z.B. Passung).
Ich habe eine .dll geschrieben die die Constraints und die ensprechende Referenzen auslesen kann. also Einfügen Face Tag... - FaceTag.... Damit gehe ich in die Parts und suche nach den vorhandenen PMI Daten (dies funktioniert),

mein Problem ist nun dass die Referenzflächen in der Baugruppe und die Fläche im Part auf der die PMI daten gespeichert sind unterschidliche Tags haben. Ist das normall dass die Tags in der Baugruppe und in dem Part unterschiedlich sind ( ich habe sichergestellt dass es sich um die selben Flächen handelt) und wenn ja... wie kann man es anders identifizieren so dass ich überprüfen kann ob die PMI Daten auf der Referenzfläche "sitzen"?

Und noch: weisst eigentlich die Fläche selbst dass auf ihr PMI sitzt. Wenn ja könnte man dies einfacher Lösen: Ich könnte einfach die Referenzfläche finden und sie fragen ob sie ein PMI besitzt?

Vielen Dank
Lukas

mein Code:

Code:
namespace CADAnalysisAssembly
{
    class AnalysisAssembly
    {
        private Session mySession;
        public struct AssemblyConstraints
        {
            public string constraintType;
            public ConstraintsReferenz constraintReferenz_from;
            public ConstraintsReferenz constraintReferenz_to;
            public struct ConstraintsReferenz
            {
                public string referenzTyp;
                public string referenzParent;

            }

        }

        public AnalysisAssembly(Session theSession)
        {
            Part disp_part = theSession.Parts.Display;
            mySession = theSession;
            int i = 0;
            int k = 0;
            Component rootComp = theSession.Parts.Display.ComponentAssembly.RootComponent;
            Component[] childComps = rootComp.GetChildren();
            IEnumerator eNumParts = theSession.Parts.GetEnumerator();
           
            NXOpen.Positioning.ConstraintCollection constraintCollection = disp_part.ComponentAssembly.Positioner.Constraints;

            AssemblyConstraints[] assemblyConst = new AssemblyConstraints[constraintCollection.ToArray().GetLength(0)];
            IEnumerator iEnum1 = disp_part.ComponentAssembly.Positioner.Constraints.GetEnumerator();
            NXOpen.Positioning.Constraint cons;

            iEnum1.Reset();
            while (iEnum1.MoveNext())
            {
                cons = (NXOpen.Positioning.Constraint)iEnum1.Current;
                assemblyConst[i].constraintType = cons.ConstraintType.ToString();

                ConstraintReference[] consrefs = cons.GetReferences();
                IEnumerator iEnum2 = consrefs.GetEnumerator();
                iEnum2.Reset();
                while (iEnum2.MoveNext())
                {
                    ConstraintReference consref = (ConstraintReference)iEnum2.Current;


                    NXObject test = (NXObject)consref.GetGeometry();
                    if ((k & 1) == 1)
                    {
                        assemblyConst[i].constraintReferenz_from.referenzTyp = test.GetType().FullName.ToString();
                        assemblyConst[i].constraintReferenz_from.referenzParent = test.OwningComponent.Name;
                        eNumParts.Reset();
                        while (eNumParts.MoveNext())
                        {
                            Part currentPart = (Part)eNumParts.Current;
                            if (currentPart.Tag.ToString() == test.Prototype.OwningPart.Tag.ToString())
                            {
                                theSession.Parts.SetWork(currentPart);
                                GetPmiFromReferenz(theSession.Parts.Work, test.Tag);
                            }
                        }
                    }
                    else
                    {
                        assemblyConst[i].constraintReferenz_to.referenzTyp = test.GetType().FullName.ToString();
                        assemblyConst[i].constraintReferenz_to.referenzParent = test.OwningComponent.Name;
                        eNumParts.Reset();
                        while (eNumParts.MoveNext())
                        {
                            Part currentPart = (Part)eNumParts.Current;
                            if (currentPart.Tag.ToString() == test.Prototype.OwningPart.Tag.ToString())
                            {
                                theSession.Parts.SetWork(currentPart);
                                GetPmiFromReferenz(theSession.Parts.Work, test.Tag);
                            }
                        }
                    }
                    k++;
                } i++;
            }

        }
        public void GetPmiFromReferenz(Part p,Tag tag)
        {
            NXOpen.Annotations.PmiManager pmiManager = p.PmiManager;
            foreach (NXOpen.Annotations.Pmi pmiPmis in pmiManager.Pmis.ToArray())
            {
                pmiPmis.GetAssociatedObject();
                foreach (NXOpen.Annotations.Annotation ann in pmiPmis.GetDisplayInstances())
                {
                    if (ann.NumberOfAssociativities != 0)
                    {
                        Type isd = ann.GetAssociativity(1).FirstObject.GetType();
                        if (ann.GetAssociativity(1).FirstObject.Tag == tag)
                        {
                            //NXOpen.Annotations.PmiCylindricalDimension cyl =
                            //    (NXOpen.Annotations.PmiCylindricalDimension)ann;
                            //double durchmesser = cyl.ComputedSize;
                        }
                    }
                }
            }     
            mySession.Parts.SetWork(mySession.Parts.Display);
        }
    }
}


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Siassei
Mitglied
MB - Student


Sehen Sie sich das Profil von Siassei an!   Senden Sie eine Private Message an Siassei  Schreiben Sie einen Gästebucheintrag für Siassei

Beiträge: 490
Registriert: 08.07.2007

SWX
NX 3 und höher ;)
Windows and UNIX<P>C, C++, Java, Phyton,...</P>

erstellt am: 21. Jun. 2009 17:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Lukas1983 10 Unities + Antwort hilfreich

Zitat:
... Damit gehe ich in die Parts und suche nach den vorhandenen PMI Daten (dies funktioniert)

Warum bisst du mit der Lösung nicht zufrieden?

Zitat:
... Ist das normall dass die Tags in der Baugruppe und in dem Part unterschiedlich sind

Ja. Das hat Vor- und Nachteile.
Gründe für dies Umsetzung:
- Flächen in BG können neue Farben, Attribute, ... zugewiesen werden
- Unterschiedliche Layerbelegung zwischen Part und Assembly möglich

Zitat:
... wie kann man es anders identifizieren so dass ich überprüfen kann ob die PMI Daten auf der Referenzfläche "sitzen"?

Wave Attribut Linker? Im Baugruppen-Menü (oben) vorhanden. Mit diesen kannst du PMI's vom Part in die Baugruppe hochlinken. Das müsste sich automatisieren lassen. Vorausgesetzt, dass diese Funktion in die NXOpen-API bereits implementiert ist. Es handelt sich hier um eine, naja sagen wir mal, unbekannte Funktion und diese werden in der NXOpen-API nur spärlich implementiert.

Zitat:
Und noch: weisst eigentlich die Fläche selbst dass auf ihr PMI sitzt. Wenn ja könnte man dies einfacher Lösen: Ich könnte einfach die Referenzfläche finden und sie fragen ob sie ein PMI besitzt?

Leider nein. Eine Erklärung findest du hinter den Kulissen. Die NXOpen-API (VB, C#, Java, (F# ab VS 2010), ...), sowie die C++, sind nur ein Wrapper. Hinter ihm steht das gute C Gerüst. Mit dem guten alten C ist nur FOP möglich, weshalb die Wrapper etwas merkwürdig zu bedienen sind. Ein Beispiel stellen die Tags dar.

Das ganze bringt dir eine Menge an Vorteilen. Wenn du weißt, wie du hinter die Kulissen kommst, kannst du die Informationen nutzen und eine eigene kleine API bauen. Das ist an gewissen Stelle hilfreich.
z.B. - bei einer schlechten Umsetzung von Siemens
- Einstiegspunkte bekannt -> Nutzung von Funktionen die der NXOpen-API unbekannt sind
- du bist dann nicht mehr an die .NET-Version gebunden und kannst dein Prog. auf z.B. C# 4.0 hoch ziehen. Ab der neuen .NET-Plattform kannst du zum Beispiel folgendes machen:
- Eine DLL aus C# 4.0 Projekt in C# 5 nutzen
- Das ganze soll auch umgekehrt gehen

Achja, wie gesagt. Link dir die PMI Daten einfach hoch und lege sie auf eine Layer oder lösche sie nach dem Ausführen wieder. Letzteres würde ich bevorzugen, wenn die DLL nicht alle 10min in der Baugruppe arbeitet. Man muss nicht alles speichern und weiteren Müll in der Datei speichern.

Gruß,
  Thomas

------------------
Hopfen und Mals
Gott erhalts 

Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lukas1983
Mitglied



Sehen Sie sich das Profil von Lukas1983 an!   Senden Sie eine Private Message an Lukas1983  Schreiben Sie einen Gästebucheintrag für Lukas1983

Beiträge: 30
Registriert: 04.05.2009

erstellt am: 22. Jun. 2009 10:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Thomas!

Vielen Dank für die ausführliche Antwort!

Zitat:
Zitat:
--------------------------------------------------------------------------------
... Damit gehe ich in die Parts und suche nach den vorhandenen PMI Daten (dies funktioniert)
--------------------------------------------------------------------------------


Warum bisst du mit der Lösung nicht zufrieden?


Ich versuche in meiner Diplomarbeit die Erstellung von Arbeitsplan zu unterstützen. Dazu gehört auch montageplannung, deswegen brauche ich die Beziehung zwischen den Teilen mit dazugehörigen Informationen und zwar nur die Eigenschaften von betroffenen Flächen. (Einfügen Bohrungsfläche Passung 10H7 - Bolzenfläche Passung 10r6 --> der Bolzen muss eingepresst werden)

noch mal danke für die Hilfe, ich werde es morgen ausprobieren!

Gruß
Lukas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Siassei
Mitglied
MB - Student


Sehen Sie sich das Profil von Siassei an!   Senden Sie eine Private Message an Siassei  Schreiben Sie einen Gästebucheintrag für Siassei

Beiträge: 490
Registriert: 08.07.2007

SWX
NX 3 und höher ;)
Windows and UNIX<P>C, C++, Java, Phyton,...</P>

erstellt am: 22. Jun. 2009 16:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Lukas1983 10 Unities + Antwort hilfreich

Servus Lukas,

eine kleine Frage habe ich. Was hast du da vor?

Arbeitsplannungen lassen sich nicht ohne weiteres Automatisieren. Sonst würden es die großen Firmen so machen. Es gibt ganze Abteilungen die sich mit sowas beschäftigen.

Alleine aus den Passungsangaben kannst du nicht! auf die Montageart schließen! Es muss das große & ganze Betrachtet werden, aber das weißt du ja.

Beipsiel: Eine Übermaßpassung kann druch ... montiert werden
- einpressen
- reibschweißen
- erhizen (Temperaturunterschied)
- ...

Was ich als AV'ler vermissen würde, sind ein paar schöne Buttons in der Nixe.
z.B.
- Das Hervorheben von Modulen
- Das getrennte Hervorheben* von Passungen (Spiel, Übergang, Übermaß) von ein paar Komponenten bzw. der gesamten Baugruppe
* nicht betroffenen Parts werden grau und sind 90% Transparent, Passungsflächen sind farbig
- Ich kann im 3D alle Informationen aus meinen System (z.B. ERP) abrufen, nutzen und verändern

Hast du etwas in dieser Richtung vor?

Gruß
  Thomas

------------------
Hopfen und Mals
Gott erhalts 

Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lukas1983
Mitglied



Sehen Sie sich das Profil von Lukas1983 an!   Senden Sie eine Private Message an Lukas1983  Schreiben Sie einen Gästebucheintrag für Lukas1983

Beiträge: 30
Registriert: 04.05.2009

erstellt am: 23. Jun. 2009 13:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Toleranz_einfügen.jpg


Toleranz_linken.JPG

 
Hallo,

In meiner Diplomarbeit soll ich untersuchen welche Informationen aus den CAx Systemen für die Fertigungsplanung relevant sind z.B. Blechabwicklung --> Biege Tabelle, FEM Berechnung von einem Einpressvorgang --> Einpresskraft usw.
Zusätzlich soll ich versuchen aus dem CAD Modell die Arbeitschritte zu erkennen um den Fertigungsplaner zu unterstützen. Es ist mir bewusst dass die komplett automatische Generierung der Arbeitspläne aufgrund der komplextät nicht möglich ist. Man könnte aber die Auswahlmöglichkeiten mithilfe der Informationen die im CAD stehen stark  reduzieren, so dass der Fertigungsplaner einfacher hat.
Mein Ansatz sind Entscheidungstabellen, in dennen das Wissen abgebildet ist--> je umfangreicher die Tabelle desto genauer das Ergebnis.

Jetzt noch mal eine Frage zu Deinem Vorschlag:
ich habe mit dem WAVE Linker im Baugruppenmodus keine Toleranz zu auswahl(siehe Bilder). Kannst Du mir sagen was ich da falsch mache?

Danke
Lukas 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Ingenieur/in (w/m/d) Bau bzw. Siedlungswasserwirtschaft für die Bauherrenvertretung in der Planung

Die Stadtverwaltung Nürnberg ist eine moderne Dienstleisterin für mehr als eine halbe Million Bürger/innen. Als eine der größten Arbeitgeberinnen der Region vertrauen wir dabei auf die Fähigkeiten und Fertigkeiten unserer rund 12.000 Mitarbeiter/innen, die mit Engagement und Tatkraft die Stadt Nürnberg mitgestalten und besonders machen.

Die Stadtentwässerung und Umweltanalytik ...

Anzeige ansehenBauwesen
Siassei
Mitglied
MB - Student


Sehen Sie sich das Profil von Siassei an!   Senden Sie eine Private Message an Siassei  Schreiben Sie einen Gästebucheintrag für Siassei

Beiträge: 490
Registriert: 08.07.2007

SWX
NX 3 und höher ;)
Windows and UNIX<P>C, C++, Java, Phyton,...</P>

erstellt am: 23. Jun. 2009 18:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Lukas1983 10 Unities + Antwort hilfreich

Zitat:
ich habe mit dem WAVE Linker im Baugruppenmodus keine Toleranz zu auswahl(siehe Bilder). Kannst Du mir sagen was ich da falsch mache?

Nichts  Entschuldige, der Linker ist nur auf der Zeihnungsseite nutzbar.

------------------
Hopfen und Mals
Gott erhalts 

Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz