| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
 | Erfolgreich unterwegs mit der KISTERS 3DViewStation , ein Whitepaper
|
Autor
|
Thema: array (3486 mal gelesen)
|
makri Mitglied klötzchenbauer

 Beiträge: 24 Registriert: 31.07.2007 C64 Datasette 350 KB Ram
|
erstellt am: 02. Jun. 2009 19:04 <-- editieren / zitieren --> Unities abgeben:         
hi! kleines problem, betrifft aber mehr vba als catia... egal habe ein makro das eine riesen externe txt-file als array in speicher liesst, dann wird in catia etwas gemacht und mit dem array verglichen ect. ... alles oke. mein problem wenn der pc sich bei jedem start des makros die txt-file reinzieht dauerts etwa 15 sek. ladezeit. das ist beim 100stn start etwas nervig. gibts da irgendwie abhilfe, das die daten einfach im speicher bleiben? oder sonst n tip/trick? mfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Ehrenmitglied V.I.P. h.c. Manager
     
 Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 02. Jun. 2009 19:42 <-- editieren / zitieren --> Unities abgeben:          Nur für makri
Hallo, meinst du jetzt zu Testzwecken oder später in der realen Umgebung. Die Daten im Speicher halten geht IMHO nicht. Wenn du aber das auslesen der *.txt in eine eigene Sub schreibst und diese nur aus der MainSub aufrufst, kannst du die Zeile auskommentieren. Zu Testzwecken kann ich dir auch empfehlen das du dir eine "kleiner" Version der *.txt Datei speicherst. Wenn das Einlesen der Datei in der realen Umgebung ca. 15 Sekunden dauert würde ich in meiner UserForm ein ProgressBar machen damit der Anwender sieht das sich noch etwas tut. Die Datei in der Realumgebung im Speicher zu halten würde ich so und so als zu gefährlich ansehen. Was passiert wenn in der Zwischenzeit die Daten aus der *.txt signifikant geändert werden? Konstruierst du dann ein Flugzeug anstatt ein Auto weil du noch Altdaten im Speicher hattest die du nicht validiert hast ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
makri Mitglied klötzchenbauer

 Beiträge: 24 Registriert: 31.07.2007 C64 Datasette 350 KB Ram
|
erstellt am: 02. Jun. 2009 19:57 <-- editieren / zitieren --> Unities abgeben:         
hey! also, das makro ist schon im einsatz... sind alles fimen interne sachen. werden nur von ne hand voll leute genutzt. die txtfile (ca 17MB ; knapp array(100.000,8)) hat nur feste werte. ist daher unveränderlich. im speich zu halten wäre demnach ganz gut! ... ne UserForm mit ProgressBar wäre ne alternative, aber damit verarsch ich quasi mich selbst, weil ich das makro auch selbst nutze  ... es nervt nur wenn ich das prog nutze und bei jedem start die zeit weggeht. ... [Diese Nachricht wurde von makri am 02. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Ehrenmitglied V.I.P. h.c. Manager
     
 Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 03. Jun. 2009 07:41 <-- editieren / zitieren --> Unities abgeben:          Nur für makri
Hallo Makri, also IMHO hast du da überhaupt keine Chance. Wo willst du die Daten hinspeichern das sie immer verfügbar bleiben? Arbeitsspeicher (da wirst du dich aber schwer tun an Windows vorbeizukommen ). Selbst der Arbeitsspeicher wird geleert falls der Prozess (also CATIA) beendet wird. Das einzigste was mir dazu einfällt ist das Script nicht mit VBA zuschreiben sondern mit C++. Das ist um einiges schneller. Dann musst du zusätzlich den Code optimieren (also so klein wie möglich machen). Ev. kannst du dir so ein bisschen Zeit sparen. Wie oft lesst ihr den die Daten ein? Wäre eine Konstruktionstabelle nicht sinnvoller? ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MICHLICK Mitglied CAD Methodik Entwickler (CATIA; NX)
 
 Beiträge: 456 Registriert: 20.06.2001 Der Aufwand bei Änderungen ist groß, wenn die Finger schneller klicken als das Gehirn denkt.
|
erstellt am: 03. Jun. 2009 08:35 <-- editieren / zitieren --> Unities abgeben:          Nur für makri
Hallo makri, wie schon von anderer Seite erwähnt hast Du mit CATIA Makros das Problem, dass nach dem Durchlauf des Makros der Speicher gelöscht wird. Da das Makro wohl nur Informationen prüft bzw. abgleicht sollte es auf einem anderen Weg möglich sein das mehrfache lesen der Datei zu verhindern. Foldender Ansatz könnte da weiter helfen: Das Makro unabhängig von CATIA schreiben. Für das Einlesen der Textdatei ist kein CATIA notwendig. Also nicht als catvba oder CATScript sondern mit vba, java, .net, c++ etc. programmieren. Mit einem kleinen Knopf dran für das Starten der Prüfung in CATIA. Das Ganze funktioniert dann so: Du startest Dein Prüfmakro (die Datei wird gelesen). Du öffnest in CATIA ein Teil. Du startest in Deinem Prüfmakro die Prüfung. Das aktive Teil in CATIA wird geprüft (was auch immer in Deinem Makro da passiert). Nach der Beendigung der Prüfung kannst Du jetzt ein anderes Teil laden. Jetzt kannst Du wieder die Prüfung Deines aktiven Teils starten. Das kannst Du so lange wiederholen, bis Du Dein Makro beendest. Es gibt glaube ich ein paar Makros hier, die auf diese Weise Arbeiten z.B. Excel-Makros (Makro das aus Excel gestartet wird und dann in CATIA irgend was macht z.B. Punkte erzeugt). Da kannst Du ein wenig spicken. ------------------ Gruß Michael B. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bertel Mitglied
 
 Beiträge: 300 Registriert: 03.04.2002 CATIA V5 R26SP3HF21 Win10 Lenovo P52 Intel Xenon 16GB Ram NVIDIA Quadro P2000 EUKLID V14 ViCADo 2015
|
erstellt am: 03. Jun. 2009 09:01 <-- editieren / zitieren --> Unities abgeben:          Nur für makri
|
makri Mitglied klötzchenbauer

 Beiträge: 24 Registriert: 31.07.2007 C64 Datasette 350 KB Ram
|
erstellt am: 03. Jun. 2009 14:37 <-- editieren / zitieren --> Unities abgeben:         
hallo! dank für Antworten. Konstruktionstabelle wird nicht gehen da die daten nicht zum endkunden gehen dürfen. Wie wär es denn wenn ich 1. eine vba starte die meine txt liesst 2. dann mit meinem fertigen makro die werte im catia auslese, 3. und zu der vba übergebe. 4. die vba checkt es und gibt die werte zurück ans catiamakro. ...geht sowas? wenn wie sprech ich ein speicherresitentes makro per makro an? kann man direkt per arguments() oder nur über seperate tmp datei oder sowas? thx Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bertel Mitglied
 
 Beiträge: 300 Registriert: 03.04.2002 CATIA V5 R26SP3HF21 Win10 Lenovo P52 Intel Xenon 16GB Ram NVIDIA Quadro P2000 EUKLID V14 ViCADo 2015
|
erstellt am: 03. Jun. 2009 15:25 <-- editieren / zitieren --> Unities abgeben:          Nur für makri
Hallo makri, ich denke auch nicht an eine Konstruktionstabelle, sondern an eine Excel-Tabelle, die unabhänig von CATIA irgendwo auf der Platte gespeichert ist. Auf diese kann ein Makro zugreifen und die Werte für CATIA auslesen: Code: Dim EA As Object Set EA = GetObject(, "Excel.Application") y = EA.Worksheets("Tabelle1").Cells(Zeile, Spalte).Value ' Zugriff auf Zelle mit Zeile und Spalte x = EA.Worksheets("Tabelle1").Range("Zellenname").Value ' Zugriff auf benannte Zelle
Das Excel-Dokument muß dazu geöffnet sein.Gruß Bertel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MarkusK Mitglied
 
 Beiträge: 131 Registriert: 09.08.2002 Dell Precision T5500 Intel Xenon X5560 4x 2,8 GHz 12 GB Ram NVIDIA Quadro FX 3800 Win XP Catia V5R19 SP3
|
erstellt am: 04. Jun. 2009 21:50 <-- editieren / zitieren --> Unities abgeben:          Nur für makri
Hallo Makri, wenn ich mich recht entsinne, kann man in VBA (zumindest in VB), aus Dateien auch geziehlt Daten auslesen. Kommt natürlich drauf an, wie die Datei aussieht. Wenn eine Textdatei wie eine Tabelle aufgebaut ist, und die Zeilen immer die gleiche Längen haben, kann man bestimmen, von wo gelesen werden soll. Ist schon lange her, wo ich mit Text-Dateien befasst habe, aber müsste man mal in der Hilfe schauen. Edit: Aber eigentlich würde ich sagen, kann man sich einfach ein öffentliches Array machen, und dies dann füllen (initialisieren) Auf diese Array kannst du dann eigentlich immer zugreifen. Bei Fehler, also wenn der Code abgebrochen, gehen die Daten aus dem Array verloren. Aber dafür kann man eine Kontroll-Variable abfragen, und bei bedarf die Initialisierung erneut aufrufen. ' in ein Modul Public x(20) As Long Public Initialisiert As Boolean Private Sub init() Dim i As Long For i = 0 To 20 x(i) = i Next i Initialisiert = True End Sub
Public Sub CATMain() Dim i As Long If Initialisiert = False Then init Randomize Timer wert1 = Int((20 * Rnd) + 1) MsgBox x(wert1) 'wert1 = wert1 / 0 End Sub Wenn du die Zeile Wert1=Wert1/0 nicht auskommentierts, entsteht ein Fehler. Wenn dieser nicht abgefangen wird, und man den Code abbricht ist das Array und die Boolsche Variable wieder leer, und beim nächsten start des Makros Test wird die Initialisierung wieder ausgeführt. ------------------ Gruss Markus [Diese Nachricht wurde von MarkusK am 04. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |