Makro: Odbuduj w pętli (co 5 sekund)

Witam

Szukam makra do automatycznej rekonstrukcji utworu co 5 sekund.

Na razie mam makro, które pozwala mi odbudować część, ale nie mogę dodać pętli identycznej jak w VBA.

Oto kod do odbudowania:

Dim swApp As Object
               Przyciemnij część jako obiekt
               Dim boolstatus As Boolean
               Dim longstatus As Long, longwarnings As Long
Sub main()
               Ustaw swApp = _
               Aplikacja.SldWorks
               Ustaw część = swApp.ActiveDoc
               boolstatus = Part.EditRebuild3()
Koniec subwoofera

 

Oto moja pętla (typu VBA):

Czas podrzędny()

Application.OnTime Now + TimeValue("00:00:0"), "main"

Application.OnTime Now + TimeValue("00:00:05"), "czas"

Koniec subwoofera

 

Jak mogę dostosować tę pętlę do Solidworks, czy jest inny sposób?

 

Dziękuję za pomoc

Witam

Myślę, że nie będę jedynym, który zada sobie to pytanie, ale jaki jest sens odbudowywania co 5 sekund? ponieważ nie pozostawia miejsca / czasu na pracę nad utworem.

Osobiście wolę używać B (domyślnie alt + B) i Ctrl + Q, który jest bardziej kompletny.

3 polubienia

Używam Solidworks jako ekranu sterującego do zdalnego sterowania maszyną, która nie jest "widoczna".

Chcę poznać położenie i ruchy tej maszyny, więc stworzyłem kinematykę opartą na równaniach, która pozwala mi wizualizować wszystkie ruchy. Moja scenka przerywnikowa aktualizuje się co 5 sekund, ale za każdym razem muszę kliknąć odbuduj, aby zobaczyć ruchy i chciałbym, aby było to automatyczne.

Ok, jest to w pewnym sensie odwrócenie oprogramowania, ponieważ oprogramowanie nie jest stworzone jako HMI u podstawy, ale dlaczego nie, o ile uda Ci się odzyskać rzeczywiste pozycje. 

Nawiasem mówiąc , jak to zrobić , na przykład za pomocą rozumu na automacie maszynowym?

Przepraszam za te pytania, ale bardziej chodzi o to, aby zrozumieć dlaczego i jak oraz tych, którzy później pojawią się w Twoim poście.

Czy to normalne, że wiersz "Application.OnTime Now + TimeValue("00:00:05"), "time" znajduje się między "Sub time()" a "End Sub"?

Z małego czasu kiedy ćwiczę VBA mam wrażenie, że funkcja "czas" wywołuje się sama.

FUZ3D, koderzy pozwalają mi odzyskać dane. przepraszam, że nie mogę wchodzić w bardziej szczegółowe informacje, obawy dotyczące prywatności.

Stefbeno, pozwala mi zwiedzać w pętli

Witam @ f.michaud

Mam trochę RO

[HS wł.]

Uważaj, aby nie przepełnić pamięci, ponieważ istnieje ryzyko awarii. W przypadku zbyt długiego korzystania z oprogramowania z kinematyką i częstymi przebudowami, oprogramowanie kończy się awarią i często uszkodzeniem pliku ASM. Lepiej mieć duplikat swojego ASM. ;-)

Od czasu do czasu powiedz nam, czy robi na twoim komputerze to, co opisuję.

[HS /wył.]

Pozdrowienia

Witam 

Aby zrobić pętlę co 5 sekund proponuję ten kod:

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Dim oldTime As Date
Dim newTime As Date

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    
    oldTime = Time
    newTime = Time
    
    Do While 1 = 1:
        If newTime > oldTime + "0:00:05" Then
            boolstatus = Part.EditRebuild3()
            oldTime = Time
            
        Else: newTime = Time
        
        End If
        
    Loop
        
End Sub

 

Nie sądzę jednak, aby możliwa była interakcja z solidworks, gdy makro działa w pętli.

Mam nadzieję, że to ci pomoże.

 

Gauthik powiedział:

1 polubienie

Witam

Myślisz, że dużym pilnikiem może zastąpić ogrzewanie?

Ok, wychodzę :-)

2 polubienia

Witam

Na małym pliku jest to, co musi być w stanie działać:

Dim swApp As Object
Dim Part As ModelDoc2
Dim boolstatus As Boolean
Dim PauseTime, Start

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    If Part Is Nothing Then
        MsgBox "Aucun fichier n'est chargé dans SW."
        Exit Sub
    End If
    Do While Part.GetTitle <> ""
        PauseTime = 5
        Start = Timer
        Do While Timer < Start + PauseTime
            DoEvents
        Loop
        Set Part = swApp.ActiveDoc
        If Part Is Nothing Then
            MsgBox "Traitement terminé."
            Exit Sub
        Else
            boolstatus = Part.EditRebuild3()
        End If
    Loop
End Sub

Ale nie próbowałem dużego pliku, którego odbudowanie zajmuje więcej niż 5 sekund...

Pozdrowienia

2 polubienia

 D.Roger, dziękuję bardzo, działa idealnie!!

Gauthik67, dzięki, ale kiedy uruchamiam makro, solidworks natychmiast się zawiesza.

Zozo_mp, zwracam uwagę na to, dziękuję, jednak moja praca składa się tylko z jednego szkicu, więc jest dość lekka.

Dobra robota d.roger, to "DoEvents", którego brakowało w moim kodzie! Nie wiedziałam, że istnieje, uczymy się każdego dnia! :)

2 polubienia

Witam

Pozostaje więc tylko zweryfikować odpowiedź, która najbardziej pomogła Ci rozwiązać Twój problem.

Pozdrowienia

1 polubienie