Macro: Opnieuw opbouwen in een lus (elke 5 seconden)

Hallo

Ik ben op zoek naar een macro om elke 5 seconden automatisch een stuk te reconstrueren.

Voorlopig heb ik een macro waarmee ik een onderdeel opnieuw kan opbouwen, maar ik kan geen lus toevoegen die identiek is aan VBA.

Hier is de code om opnieuw te bouwen:

Dim swApp als object
               Deel dimmen als object
               Dim boolstatus als Booleaanse
               Dim longstatus As Long, longwarnings As Long
Sub hoofd()
               Stel swApp in = _
               Toepassing.SldWorks
               Deel instellen = swApp.ActiveDoc
               boolstatus = Deel.EditRebuild3()
Einde Sub

 

Hier is mijn lus (VBA-type):

Sub tijd()

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

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

Einde Sub

 

Hoe kan ik deze lus aanpassen aan Solidworks, of is er een andere manier?

 

Bedankt voor je hulp

Hallo

Ik denk niet dat ik de enige zal zijn die mezelf deze vraag stelt, maar wat heeft het voor zin om elke 5 seconden opnieuw op te bouwen?? Omdat er geen ruimte/tijd overblijft om aan het stuk te werken.

Persoonlijk geef ik de voorkeur aan de B-toets (alt+B standaard) en de Ctrl + Q die completer is.

3 likes

Ik gebruik Solidworks als bedieningsscherm om op afstand een machine te bedienen die niet "zichtbaar" is.

Ik wil de positie en bewegingen van deze machine weten , dus heb ik een vergelijkingsgestuurde kinematica gemaakt waarmee ik alle bewegingen kan visualiseren . Mijn filmpje wordt elke 5 seconden bijgewerkt, maar ik moet elke keer op opnieuw bouwen klikken om de bewegingen te zien en ik zou graag willen dat het automatisch gaat.

Oké, het is in zekere zin een afleiding van de software, aangezien SW niet is gemaakt om een HMI aan de basis te zijn, maar waarom niet zolang het je lukt om de echte posities te herstellen. 

Trouwens , hoe doe je dat, via de rede op de machineautomaat bijvoorbeeld?

Sorry voor deze vragen, maar het is meer om het waarom en hoe te begrijpen en degenen die later in je bericht zullen verschijnen.

Is het normaal dat de regel "Application.OnTime Now + TimeValue("00:00:05"), "time" zich tussen "Sub time()" en "End Sub" bevindt?

Van het weinige dat ik VBA beoefen, heb ik de indruk dat de "tijd"-functie zichzelf roept.

FUZ3D, coders stellen me in staat om de gegevens op te halen. sorry dat ik niet meer in detail kan treden , privacykwesties.

Stefbeno, het stelt me in staat om in een lus te toeren

Hallo @ f.michaud

Ik heb een beetje HS

[HS aan]

Pas op dat u het geheugen niet verzadigt, want er bestaat een risico op crashen. Wanneer SW te lang wordt gebruikt met kinematica en frequente rebuilds, crasht SW en corrumpeert het vaak het ASM-bestand in het proces. Je kunt maar beter een duplicaat van je ASM hebben. ;-)

Vertel ons af en toe of het op uw machine doet wat ik beschrijf.

[HS /Uit]

Vriendelijke groeten

Hallo 

Om elke 5 seconden een lus te maken, stel ik deze code voor:

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

 

Ik denk echter niet dat het mogelijk is om met solidworks te communiceren wanneer een macro in een lus wordt uitgevoerd.

In de hoop dat het je kan helpen.

 

Kanton Gauthik

1 like

Hallo

Denk je dat het met een grote vijl de verwarming kan vervangen?

Ok ik ga uit :-)

2 likes

Hallo

Op een klein bestand is er dit dat moet kunnen werken:

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

Maar ik heb nog nooit een groot bestand geprobeerd dat meer dan 5 seconden nodig heeft om opnieuw op te bouwen...

Vriendelijke groeten

2 likes

 D.Roger, heel erg bedankt, het werkt perfect!!

Gauthik67, bedankt, maar als ik de macro start, Solidworks crasht onmiddellijk.

Zozo_mp, ik neem er nota van, dank u, maar mijn stuk bestaat slechts uit een enkele schets, dus vrij licht.

Goed gedaan d.roger, het is de "DoEvents" die ontbrak in mijn code! Ik wist niet dat het bestond, we leren elke dag! :)

2 likes

Hallo

Het enige dat overblijft is dus het valideren van het antwoord dat u het meest heeft geholpen om uw probleem op te lossen.

Vriendelijke groeten

1 like