Autor
|
Thema: Bewusste Wartezeit integrieren (8286 mal gelesen)
|
mitra1602 Mitglied Student
Beiträge: 11 Registriert: 27.07.2005
|
erstellt am: 10. Mai. 2006 15:39 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe in einem sehr komplexen CAD-Modell ein Makro drüberlaufen, welches mir Werte in und aus Konstruktionstabellen speichert bzw. lädt. Aus Synchronisationsgründen benötige ich zwischen den einzelnen Makroschritten eine Wartezeit von mehreren Sekunden. Diese Wartezeit möchte ich bewusst in das Makro reinschreiben. Hat jemand einen Vorschlag, wie hierfür der Code in CATScript ausschaut? (sollte es sowas überhaupt geben...) Viele Grüße aus Oberfranken... mitra1602 ------------------ mitra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bobby_Joe2001 Mitglied Konstrukteur
Beiträge: 81 Registriert: 15.01.2006
|
erstellt am: 10. Mai. 2006 19:34 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Bitteschön, ist mir so spontan eingefallen
Code:
Sub CATMain() '5 Sekunden warten MyWait 5 End Sub
Sub MyWait(SecToWait) 'Jetzige Zeit merken MyStartTime = Timer Do 'Nochmal Zeit merken MyStopTime = Timer 'So lange die Schleife bis die gewünschte Wartezeit erreicht ist Loop Until MyStopTime - MyStartTime > SecToWait End Sub
Viele Grüße aus Oberfranken zurück Bobby ------------------ Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen. Konrad Adenauer [Diese Nachricht wurde von Bobby_Joe2001 am 10. Mai. 2006 editiert.] [Diese Nachricht wurde von Bobby_Joe2001 am 10. Mai. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mitra1602 Mitglied Student
Beiträge: 11 Registriert: 27.07.2005
|
erstellt am: 10. Mai. 2006 19:48 <-- editieren / zitieren --> Unities abgeben:
|
Diana_81 Mitglied
Beiträge: 4 Registriert: 06.04.2005
|
erstellt am: 12. Mai. 2006 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo, ich habe das gleiche Problem. Ich möchte per Buttonklick Werte aus meiner Userform in die V5 übergeben. Einige dieser Werte gehen in eine Konstruktionstabelle und dann sollen die neuen Ergebniswerte aus der Exceltabelle wieder in der Userform erscheinen. Prinzipiell funktioniert das auch. Das Problem ist, dass ich erst warten muss bis die Konstruktionstabelle die Werte in Catia updated, bevor ich die Userform mit den aktuellen Werten befülle. Ich habe den oben stehenden Code ausprobiert, allerdings funktioniert das bei mir nicht. Sieht so aus als, dass der Abgleich zwischen Excel und Catia auch verzögert wird. Nun weiß ich nicht, ob es an meiner Programmierung liegt oder ob es sich um ein generelles Problem handelt. Hat es bei dir funktioniert Mitra? Oder hat jemand ähnliche Erfahrungen gemacht oder sogar noch einen anderen Vorschlag? Gruß ebenfalls aus Oberfranken Diana Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlexE78 Mitglied Ing.
Beiträge: 49 Registriert: 29.08.2005
|
erstellt am: 12. Mai. 2006 18:06 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo allerseits die oben gezeigte Endlosschleife würded ich Euch nicht empfehlen, da in dieser Zeitspanne Rechenzeit für das 'Warten' draufgeht, und ev. das gesamte System während dieser Zeit ausgebremst wird. Besser ist eine Anweisung, die für diese Zeitspanne die Kontrolle ans Bettriebssystem... somit werden andere Prozesse nicht beeinflußt. Da es in catvbs/catscript keinen direkten 'wait'/'sleep' Befehl gibt, ist es am einfachsten, das über ein externes Programm zu machen (auf dessen Beendigung CATIA wartet). Beispielsweise so: sub waitseconds (s) CATIA.SystemService.ExecuteProcessus("sleep " & s) end sub Anmerkung: 'sleep' gibts unter XP und Unix... kann aber sein, daß man 'cmd.exe...' bzw. 'ksh...' davorsetzen muß, kanns grad nicht überprüfen. schönes Wochenende Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 22. Mai. 2006 17:48 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo AlexE78, bist du sicher, daß "sleep" zum Standard-Umfang von Windows (2000 bzw. XP) gehört? Oder ist es eine Zusatzinstallation, die UNIX-Kommandos unter Windows lauffähig zur Verfügung stellt? mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 22. Mai. 2006 18:05 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
|
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 23. Mai. 2006 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo wir haben folgende Lösung am Start die mit einem nakten Windows XP auskommen sollte: das WScript-Objekt hält ein Sleep bereit. Ich habe bisher keinen Weg gefunden das WScript-Objekt aus einer catvbs-Datei heraus anzusprechen. Deshalb muß man einen Umweg über cscript.exe nehmen. Das hat zur Folge, daß man einen absoluten Pfad im Script hat. Aber wenn der für alle erreichbar gewählt wird, ist das ja nicht so dramatisch...: Code: Language="VBSCRIPT"sub sleep(delay) os = Ucase(Left(CATIA.SystemConfiguration.OperatingSystem, 3)) if ( os = "WIN" ) or ( os = "INT" ) then CATIA.SystemService.ExecuteProcessus("cscript.exe d:\V5Tools\bin\sleep.vbs " & delay) else CATIA.SystemService.ExecuteProcessus("sleep " & delay) end if end sub Sub CATMain() sleep 4 end sub
und als sleep.vbs:
Code: WScript.Sleep WScript.Arguments.Unnamed(0) * 1000
Alternativ kann man auch das Sleep von cygwin nehmen. Dafür muß man aber zumindest eine Minimal-Installation von cygwin am Start haben... CU tapani
------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bad Boy Mitglied
Beiträge: 6 Registriert: 22.05.2006
|
erstellt am: 23. Mai. 2006 17:09 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
|
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 23. Mai. 2006 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
|
Bobby_Joe2001 Mitglied Konstrukteur
Beiträge: 81 Registriert: 15.01.2006
|
erstellt am: 23. Mai. 2006 19:25 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Zitat: Original erstellt von Tapani.: Hallowir haben folgende Lösung am Start die mit einem nakten Windows XP auskommen sollte: das WScript-Objekt hält ein Sleep bereit. Ich habe bisher keinen Weg gefunden das WScript-Objekt aus einer catvbs-Datei heraus anzusprechen. Deshalb muß man einen Umweg über cscript.exe nehmen. Das hat zur Folge, daß man einen absoluten Pfad im Script hat. Aber wenn der für alle erreichbar gewählt wird, ist das ja nicht so dramatisch...:
Das mit Vbs is schonmal gut. Und das mit dem absolutpfad umgehen wir auch und erstellen uns einfach die .Vbs datei mit Catia . Also hier dein Code mit der Ergänzung: Code:
Sub CATMain() sleep 4 MsgBox "geschafft!!" End Sub Sub sleep(delay)
os = UCase(Left(CATIA.SystemConfiguration.OperatingSystem, 3)) If (os = "WIN") Or (os = "INT") Then MyVbsFilePath = CATIA.FileSystem.TemporaryDirectory.Path & "\MySleep.vbs" Set MyVbsFile = CATIA.FileSystem.CreateFile(CStr(MyVbsFilePath), True) Set MyVbsFileStream = MyVbsFile.OpenAsTextStream("ForWriting") MyVbsFileStream.Write "WScript.Sleep WScript.Arguments.Unnamed(0) * 1000" MyVbsFileStream.Close CATIA.SystemService.ExecuteProcessus "wscript.exe " & MyVbsFilePath & " " & delay Else CATIA.SystemService.ExecuteProcessus "sleep " & delay End If End Sub
Gruß Bobby ------------------ Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen. Konrad Adenauer [Diese Nachricht wurde von Bobby_Joe2001 am 23. Mai. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 24. Mai. 2006 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Moin Bobby, du hast ja sowas von recht! ich hab das gleiche schon mal für texturen gemacht, aber beim sleep bin ich nicht drauf gekommen, grrr CU tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 24. Mai. 2006 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo Bobby_Joe2001, und wie umgehe ich das Problem, das ich "wscript.exe" mit vollständigem Pfad angeben muß, da es sonst nicht läuft? Gibt es da irgendwelche Settings in den Tools oder im Environment? mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 24. Mai. 2006 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo Lusilie, wscript.exe geht bei uns ohne Pfadangabe, wohl deshalb, da der Pfad bei windows in der path variablen drinsteht (bei uns c:\windows\system32) CU Tapani
------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bobby_Joe2001 Mitglied Konstrukteur
Beiträge: 81 Registriert: 15.01.2006
|
erstellt am: 24. Mai. 2006 19:06 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Zitat: Original erstellt von Lusilnie: Hallo Bobby_Joe2001,und wie umgehe ich das Problem, das ich "wscript.exe" mit vollständigem Pfad angeben muß, da es sonst nicht läuft? Gibt es da irgendwelche Settings in den Tools oder im Environment? mfg, Lusilnie
Den Pfad kannst du dier so zusammenbasteln: Code:
Sub CATMain() MyWscriptPath = CATIA.SystemService.Environ("SystemRoot") & "\System32\wscript.exe" CATIA.SystemService.ExecuteProcessus CStr(MyWscriptPath) End Sub
Gruß Bobby
------------------ Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen. Konrad Adenauer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 30. Okt. 2015 14:44 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Okt. 2015 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
|
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 30. Okt. 2015 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für mitra1602
Hallo Peter, nun: bei VBA kann ein Call in die Win-API kann auch helfen: Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) dann kann man einfach Sleep(1000) aufrufen um eine Sekunde Verzögerung hinzubekommen. Klappt allerdings logischer Weise nur unter Windows... Gruß, Tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |