| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Vom digitalen 3D-Aufmaß bis hin zur Fertigung – Die komplette Prozesskette |
Autor
|
Thema: Materialdatenbank und Aktualisierung (3369 mal gelesen)
|
Mixie Mitglied
Beiträge: 276 Registriert: 12.10.2007 SolidWorks 2015 SP4 Office Professional Workgroup PDM<P>
|
erstellt am: 11. Jan. 2012 07:51 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich habe schwierigkeiten mit der Materialdatenbank in SWX2011 SP5. Wir brauchen jetzt neuerdings für einige Bauteile das Gewicht. Daher habe ich mal nachgeschaut, wie gepflegt die Materialeigenschaften bei uns wirklich sind. Natürlich hat da bisher keiner drauf geachtet... Wenn ich jetzt die Masse für ein Material ändere, wird die Masse nur für das aktuelle Teil geändert. Öffne ich nun bereits vorhandene Teile, die das gleiche Material haben, findet keine Änderung statt. Auch nicht nach einem Neuaufbau. Erst wenn ich das Material erneut auswähle wird das im Teil aktualisiert. Ist das ein gewolltes Verhalten in SWX? Gibt es eine Möglichkeit z.B. in einer Baugruppe alle Bauteile mit geänderten Materialien neu aufzubauen? Ich muss fast alle Materialien aktualisieren...also muss ich unseren kompletten Datenbestand ändern? Gruß Mixie
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sonti Mitglied dipl. Masch.-Ing.
Beiträge: 1175 Registriert: 26.01.2007 Solid Works 2017 SP5 Inventor 2015 Windows 10 SWX (mein Liebling)
|
erstellt am: 11. Jan. 2012 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
|
Olaf Wolfram Ehrenmitglied V.I.P. h.c. CAD-Mutti und Konstrukteur CSWP CSWI
Beiträge: 2431 Registriert: 30.06.2008 I7-3770 CPU 3,40 Ghz 32 Gb RAM 64 bit WIN 10 SWX 2019 SP5 NVIDIA Quadro K2000<P> Lenovo ThinkStation
|
erstellt am: 11. Jan. 2012 14:14 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
Ich würde als Supporter sagen, dass es sich da um ein normales Verhalten von SWX handelt! Ich habe eine Vermutung. Zitat: Wenn ich jetzt die Masse für ein Material ändere
Kannst du deine Vorgehensweise mal genau erläutern!
------------------ CSWST/CSWI/CSWP/ 3DVia
DPS-Software GmbH...strebe niemals nach den Dingen, die auch dümmeren gelingen..... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 11. Jan. 2012 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
Hallo Mixie, Zitat: Original erstellt von Mixie: Wenn ich jetzt die Masse für ein Material ändere, wird die Masse nur für das aktuelle Teil geändert. Öffne ich nun bereits vorhandene Teile, die das gleiche Material haben, findet keine Änderung statt.[...] Ist das ein gewolltes Verhalten in SWX?
Ich kann zwar nicht für SolidWorks sprechen, aber ich finde dieses Verhalten logisch und richtig und vor allem praktisch genauso, wie sich SolidWorks bei allen anderen Dingen verhält. Die Materialdaten werden eingelagert, genauso wie (normalerweise) Blöcke, Blattformate, Tabelledefinitionen, Blechbiegetabellen usw. Dadurch werden die Dokumente autark, können weitergegeben werden und ändern sich vor allem nicht durch eine derartige externe Referenz. Zitat: Original erstellt von Mixie: Gibt es eine Möglichkeit z.B. in einer Baugruppe alle Bauteile mit geänderten Materialien neu aufzubauen?
Nicht das ich wüsste, vielleicht mit einem Makro nebst Taskplaner, aber das ist vermutlich nicht so einfach. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mixie Mitglied
Beiträge: 276 Registriert: 12.10.2007 SolidWorks 2015 SP4 Office Professional Workgroup PDM<P>
|
erstellt am: 11. Jan. 2012 14:25 <-- editieren / zitieren --> Unities abgeben:
Hallo! Huch...plötzlich so viele... @StefanBerlitz Ja...das erklärt sich mir auch so. Allerdings hätte ich vermutet (und war eigentlich davon ausgegangen) das soblad die Materialdatenbank vorhanden ist, auch die Werte aktualisiert werden. Ich hatte auch schon die die richtung Macro gesucht...aber bisher noch keinen Denkansatz gefunden. Ich werde jetzt aber mein Glück nochmal probieren. @Olaf Wolfram Ich erstelle zwei Bauteile mit einem gleichen Material. Jetzt ändere ich die Materialdatenbank. Das Teil was ich gerade geöffnet habe und das Material bearbeite, aktualisiert sich auch direkt. Wenn ich jetzt wieder das andere Teil öffne kann ich aktualisieren was ich will...die Änderungen aus der Materialdatenbank werden nicht automatisch übernommen. Erst wenn ich das Material neu zuweise werden die Änderungen übernommen. Gruß Mixie [Diese Nachricht wurde von Mixie am 11. Jan. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olaf Wolfram Ehrenmitglied V.I.P. h.c. CAD-Mutti und Konstrukteur CSWP CSWI
Beiträge: 2431 Registriert: 30.06.2008 I7-3770 CPU 3,40 Ghz 32 Gb RAM 64 bit WIN 10 SWX 2019 SP5 NVIDIA Quadro K2000<P> Lenovo ThinkStation
|
erstellt am: 11. Jan. 2012 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
Ja genau wie ich gedacht habe, dass ist ein Denkfehler von dir! Stefan hat ja oben schon beschrieben, warum das so sein soll! Die normale Arbeitsweise mit Materialien sollte sich doch auf auswählen eines Materiales beschränken! Zitat: Jetzt ändere ich die Materialdatenbank....
Warum? ------------------ CSWST/CSWI/CSWP/ 3DVia
DPS-Software GmbH...strebe niemals nach den Dingen, die auch dümmeren gelingen..... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mixie Mitglied
Beiträge: 276 Registriert: 12.10.2007 SolidWorks 2015 SP4 Office Professional Workgroup PDM<P>
|
erstellt am: 11. Jan. 2012 15:21 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ganz einfach... bisher wurde bis auf den Namen nichts an Werten gepflegt. (Wir nutzen unsere eigene Datenbank). D.h. jetzt ist aktuell das Problem, dass die Masse nicht richtig eingetragen wurde und alle Materialien bei 7,9 Kg/dm³ liegen...auch alle Gummi und Kunststoffmaterialien... Gruß Mixie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olaf Wolfram Ehrenmitglied V.I.P. h.c. CAD-Mutti und Konstrukteur CSWP CSWI
Beiträge: 2431 Registriert: 30.06.2008 I7-3770 CPU 3,40 Ghz 32 Gb RAM 64 bit WIN 10 SWX 2019 SP5 NVIDIA Quadro K2000<P> Lenovo ThinkStation
|
erstellt am: 11. Jan. 2012 15:27 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
....alles klar, du weist den Teilen ein Material zu. du hast aber geschrieben, [QUOTE][Jetzt ändere ich die Materialdatenbank..../QUOTE] das ist was anderes, als Material zuweisen! Deswegen habe ich lieber nochmal nachgefragt. ------------------ CSWST/CSWI/CSWP/ 3DVia
DPS-Software GmbH...strebe niemals nach den Dingen, die auch dümmeren gelingen..... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 11. Jan. 2012 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
Hallo Olaf, ich hab das so verstanden: User A: Wir sollten eine eigene Materialdatenbank haben, man sollte mal eine erstellen Alle: Au ja prima! Man sollte das echt mal machen. 3 Tage später: ACA (armer Cad Admin) bekommt den Auftrag eine firmenspezifische Materialddatenbank zu erstellen, bekommt zwar weder Infos noch Materialkennzahlen, allerdings fast 2 Stunden Zeit dafür. ACA sucht im Internet, findet eine Beispieldatenbank (z.B. im CAD.de Brett), kopiert die Materialien, ändert die Namen, aber in Ermangelung an Kenntnis nicht die Materialwerte. ACA stellt Materialdatenbank im Netzwerklaufwerk zur Verfügung. Alle: Super, endlich können wir unsere eigenen Materialien auswählen, wer versteht schon die DIN-EN Normnummern Zeit vergeht, Materialdatenbank wird fleißig genutzt Anruf vom Versand bei User A: Kannst du mir mal eben sagen, wie schwer die ganze Baugruppe XYZ so ungefähr werden wird, dann können wir schon mal in unsere Frachtpläne einarbeiten User A: Kein Problem, Moment. [ruft SolidWorks Baugruppe auf]. Das sind ... [Extras/Eigenschaften Masse] ... 2.473 kg Versandfutzi: #*§$%& Versandfutzi: Bist du sicher? Die letzte Version ohne die Änderung wog nur knapp 170 Kilo ... User A: #*§$%& User A: ACA ist schuld! . . . Nach erfolgreicher Spurensuche wurde festgestellt, dass die Materialien in der Materialdatenbank zwar den richtigen Namen, aber nicht die richtigen Kennwerte enthalten. Jetzt war die Hoffnung, die eine Materialdatenbank zu korrigieren, so dass sich alle Modelle, die diese Materialien benutzt haben, von selbst aktualisieren. Was sie aber nur tun, wenn du die explizit aufrufst und das Material neu aus der jetzt korrigierten zentralen Materialdatenbank übernimmst. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mixie Mitglied
Beiträge: 276 Registriert: 12.10.2007 SolidWorks 2015 SP4 Office Professional Workgroup PDM<P>
|
erstellt am: 11. Jan. 2012 16:04 <-- editieren / zitieren --> Unities abgeben:
Ja...ich ändere, während ich das Material zuweise. Hätten wir die Sachen gleich gepflegt, bräuchten wir jetzt nicht wieder so einen Aufwand treiben. Ich habe jetzt mal ein bisschen in Sachen Macro geforscht. Über GetMaterialPropertyName2 müsste man eigentlich das aktuelle Material auslesen können und über SetMaterialPropertyName2 wieder übernehmen...aber da muss ich mich erst noch weiter einarbeiten... Gruß Mixie [edit] @StefanBerlitz Ja...genau so war es! Oder zumindest fast. Also muss ich doch ein Macro entwerfen, um die Materialeigenschaften zu übernehmen. Was fertiges werde ich wohl nicht finden...und alle 100000 Teile von Hand ändern...so viel Zeit habe ich nicht. [/edit]
[Diese Nachricht wurde von Mixie am 11. Jan. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olaf Wolfram Ehrenmitglied V.I.P. h.c. CAD-Mutti und Konstrukteur CSWP CSWI
Beiträge: 2431 Registriert: 30.06.2008 I7-3770 CPU 3,40 Ghz 32 Gb RAM 64 bit WIN 10 SWX 2019 SP5 NVIDIA Quadro K2000<P> Lenovo ThinkStation
|
erstellt am: 11. Jan. 2012 16:48 <-- editieren / zitieren --> Unities abgeben: Nur für Mixie
|
Mixie Mitglied
Beiträge: 276 Registriert: 12.10.2007 SolidWorks 2015 SP4 Office Professional Workgroup PDM<P>
|
erstellt am: 12. Jan. 2012 09:50 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich habe jetzt so einiges probiert um mit einem Macro das Material zu aktualisieren. Da bin ich dann aber weit über meinen Grenzen... Bisher habe ich in VBA nur ein paar kleine Word/Excel-Macros erstellt und z.B. ein Schriftfeldmacro erfolgreich abgeändert. In VB.net habe ich bereits etwas mehr Erfahrung...aber auch nur in der Windows-Programmierung. Mit SWX habe ich bisher nur sehr sehr wenig gemacht. Mein Ansatz in VBA war es, in einer Baugruppe alle Komponenten zu durchlaufen, das Material auszulesen und neu zu setzen.
Code:
'---------------------------------------' ' Preconditions: Assembly document is open. ' ' Postconditions: Assembly component names are changed by ' appending 123 to the end of the names. ' '--------------------------------------- Option Explicit Public Enum swUserPreferenceToggle_e swExtRefUpdateCompNames = 18 End Enum Sub Main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swModel2 As SldWorks.ModelDoc2 Dim swConfigMgr As SldWorks.ConfigurationManager Dim swConfig As SldWorks.Configuration Dim swRootComp As SldWorks.Component2 Dim Children As Variant Dim swChild As SldWorks.Component2 Dim ChildCount As Integer Dim OldName As String Dim NewName As String Dim bOldSetting As Boolean Dim bRet As Boolean Dim i As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swConfigMgr = swModel.ConfigurationManager Set swConfig = swConfigMgr.ActiveConfiguration Set swRootComp = swConfig.GetRootComponent bOldSetting = swApp.GetUserPreferenceToggle(swExtRefUpdateCompNames) swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, False Children = swRootComp.GetChildren ChildCount = UBound(Children) Dim configname As String Dim databasename As String Dim newpropname As String Dim value As String For i = 0 To ChildCount Set swChild = Children(i) Set swModel2 = Children(i).GetModelDoc2 ' Changing component name requires component to be selected bRet = swChild.Select2(False, 0) On Error Resume Next value = swModel2.GetMaterialPropertyName2("", databasename) Debug.Print configname Debug.Print databasename Debug.Print newpropname Debug.Print value If Not value = "" Then swModel2.SetMaterialPropertyName2 "", "NameDerMaterialDatenbank", value End If Next i swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, bOldSetting End Sub
Soweit könnte das sogar klappen. Das Gewicht wurde mir nach einem Neuaufbau neu berechnet. Ob das dann nur in der aktuellen Konfiguration oder für alle Teile Berechnet wird...keine AhnungEs werden auch irgendwie nicht alle Teile aktualisiert...da sind also noch Fehler drin! Da ich in VB.net etwas fitter bin, habe ich es hier probiert:
Code:
Imports SldWorks Imports SwConstPublic Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim swModelDoc As ModelDoc2 Dim oSwAssembly As SldWorks.AssemblyDoc Dim swModelDocExt As ModelDocExtension Dim openFile As String Dim warnings As Integer Dim errors As Integer Dim swApp As SldWorks.SldWorks
swApp = CreateObject("SldWorks.Application") Dim WarOffen As Boolean = True If swApp.Visible = False Then swApp.Visible = True WarOffen = False End If oSwAssembly = swApp.ActiveDoc Dim liste As New List(Of SldWorks.Component2) liste = GetComponents(oSwAssembly, False) Dim ListeFertig As New List(Of String) For i As Integer = 0 To liste.Count - 1 Try Dim Model As SldWorks.ModelDoc2 Model = liste(i).GetModelDoc2 Dim Material As String = "" Dim Database As String = "" Material = Model.GetMaterialPropertyName2("", Database) Debug.WriteLine(Material) If Not Material = "" Then Model.SetMaterialPropertyName2("", "MaterialDatenbank", Material) ListeFertig.Add(liste(i).Name2 & " - " & Material) End If Catch ex As Exception 'MsgBox(ex.Message) End Try Next TextBox1.Clear() For i As Integer = 0 To ListeFertig.Count - 1 TextBox1.Text += ListeFertig(i) & vbCrLf Next ModelUpdate(oSwAssembly, False) End Sub ''' <summary> ''' Die Function "GetComponents" ermittelt alle in der übergebenen Baugruppe (Parameter oSwAssembly) vorhandenen Komponenten. ''' Also alle in dieser Baugruppe verbauten Bauteile und Unterbaugruppen. ''' Der Parameter bTopLevelOnly legt fest ob nur die Komponenten der ersten Ebene, also direkte Komponenten der Baugruppe, ''' oder alle Komponenten, auch der Unterbaugruppen, ermittelt werden. ''' </summary> ''' <param name="oSwAssembly"></param> ''' <param name="bTopLevelOnly"></param> ''' <returns></returns> ''' <remarks>Quelle www.mysldworks.de/</remarks> Public Function GetComponents( _ ByVal oSwAssembly As SldWorks.AssemblyDoc, _ ByVal bTopLevelOnly As Boolean) As _ List(Of SldWorks.Component2) Try Dim oComponentDummyObjekt As Object Dim oComponentDummyArray() As Object Dim oSwComponents As List(Of SldWorks.Component2) oComponentDummyObjekt = _ oSwAssembly.GetComponents(bTopLevelOnly) oComponentDummyArray = _ CType(oComponentDummyObjekt, [Object]()) oSwComponents = New List(Of SldWorks.Component2) For iComponente As Integer = 0 To _ oComponentDummyArray.GetUpperBound(0) oSwComponents.Add( _ CType(oComponentDummyArray(iComponente), _ SldWorks.Component2)) Next Return oSwComponents Catch ex As Exception Debug.Assert(False) Trace.WriteLine("Fehler: Wo: " & _ ex.StackTrace & " Was: " & ex.Message) Return Nothing End Try End Function
''' <summary> ''' Aktualisiert ein geöffnetes Dokument ''' durch Neuaufbau und Neuzeichnen in SolidWorks ''' </summary> ''' <param name="oSwModel">SolidWorks Dokument</param> ''' <param name="bEditOnly"> ''' True = Nur bearbeitete Elemente neu aufbauen, ''' welche einen Neuaufbau benötigen ''' False = Komplettes Dokument neu aufbauen</param> ''' <remarks>Diese Prozedur stütz sich auf die Beispiele ''' "Rebuild Model Example (VB)" und ''' "Redraw Graphics Example (VB)" ''' der SolidWorks API Hilfe</remarks> Public Sub ModelUpdate( _ ByVal oSwModel As SldWorks.ModelDoc2, _ ByVal bEditOnly As Boolean) Try 'Welche Elemente sollen neu aufgebaut werden If bEditOnly Then 'Nur die Elemente neu aufbauen, 'welche bearbeitet wurden und 'somit einen Neuaufbau benötigen oSwModel.EditRebuild3() Else 'Das komplette Dokument neu aufbauen oSwModel.ForceRebuild3(False) End If 'Darstellung im Dokumentfenster aktualisieren oSwModel.GraphicsRedraw2() Catch ex As Exception Debug.Assert(False) Trace.WriteLine("Fehler: Wo: " & _ ex.StackTrace & " Was: " & ex.Message) End Try End Sub End Class
Das scheint sogar zu funktionieren. Nach einem Neuaufbau wurde die Masse neu berechnet. Auch hier weiß ich noch nicht, wie sich das bei Konfigurationen verhällt.Übrigens habe ich auf der Form nur eine Textbox mit Multiline = true und scrollbars = both. Hier wird dann das Ergebnis angezeigt. Vielleicht habt ihr ja noch ideen dazu? Gruß Mixie [edit] Ich habe das VB.net programm noch ein bisschen verbessert. Ich durchlaufe jetzt jede Konfiguration...und ändere das Material. Ob das wirklich klappt...keine Ahnung. Ich habe den Quelltext oben nicht angepasst, dafür das ganze Projekt mit angehängt [/edit] [Diese Nachricht wurde von Mixie am 12. Jan. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mixie Mitglied
Beiträge: 276 Registriert: 12.10.2007 SolidWorks 2015 SP4 Office Professional Workgroup PDM<P>
|
erstellt am: 12. Jan. 2012 11:46 <-- editieren / zitieren --> Unities abgeben:
Hallo! Damit es nicht zu unübersichtlich wird... Schon wieder eine kleine Verbesserung: Jetzt auch auf Einzelteilebene möglich Gruß Mixie Wichtiger Hinweis: Die Benutzung ist auf eigene gefahr! Ich kann für nichts garantieren! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |