• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Быстродействие Компас Макро

Автор Vitalij Lysanov, 18.04.15, 10:47:31

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vitalij Lysanov

Быстродействие при выполнении Компас 14 Макро

Быстрее в пять раз при изменении параметров существующих компонентов.
Быстрее в два раза при добавлении компонентов.

Методика повышения !
При выполнении Макроса включить снятие окна Компаса, появится окно сохранения и одновременно увеличится скорость работы.

В примере код Python в котором робот шагает ногами.
Макрос работает из режима редактирования.

Вопросы собственно.:
Что происходит ? и
Как включить такой режим программно ?

import time
import timeit


start = time.time()


import sys
import math
import Kompas6API5, LDefin3D, LDefin2D
Kompas, doc3d = start3d()
import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocument3D = iKompasObject.ActiveDocument3D()

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)



iDocument3D = iKompasObject.Document3D()


m=[]
t=[]
f1 = open("C:\Sborka_Koord_TABL1.txt", "r")
for   line in f1.readlines():
      m.append(line)

for masht in range(0,680,40):

    for   line in m:
          if line<>'\n':     
              t=line.split("\t")
              nom=t[0]
              iPart = Kompas6API5.ksPart(doc3d.GetPart(nom))       # первая деталь в сборке
              x=t[3]         
              y=t[6]         
              z=t[9]         
              x=(float(x)+masht)/1.0
              y=float(y)
              z=float(z)
              iplac = Kompas6API5.ksPlacement(iPart.GetPlacement())
              iplac.SetOrigin(x, y, z)
              iPart.SetPlacement(iplac)
              iPart.UpdatePlacement()
              iPart.Update()
             
       
    f1.close()


#  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR  OBR
for masht in range(680,0,-4):

    for   line in m:
          if line<>'\n':     
              t=line.split("\t")
              nom=t[0]
              iPart = Kompas6API5.ksPart(doc3d.GetPart(nom))       # первая деталь в сборке
              x=t[3]         
              y=t[6]         
              z=t[9]         
              x1=(float(x)+masht)/1.0
              y1=float(y)
              z1=float(z)
              iplac.SetOrigin(x1, y1, z1)
              nom1=int(nom)+0.0


#  06   06   06   06   06   06   06   06   06   06   06   
           
              x=y=z=0
              if nom1==0 or nom1==6:
                 
                  x=x1+1
                  y=y1
                  z=z1+math.sin((masht-200.0)/80.0)
                  iplac.SetAxis(x, y, z,0)
                  iPart.SetPlacement(iplac)
                  iPart.UpdatePlacement()
                  iplac.SetOrigin(x1, y1, z1)
                  iPart.Update()


#  24  24  24  24  24  24  24  24  24  24  24  24  24   
           
              x=y=z=0
              if nom1==2 or nom1==4:
                 
                  x=x1+1
                  y=y1-0.0
                  z=z1+math.cos((masht-100.0)/80.0)
                  iplac.SetAxis(x, y, z,0)
                  iPart.SetPlacement(iplac)
                  iPart.UpdatePlacement()

                  iplac.SetOrigin(x1, y1, z1)
                  iPart.Update()

#  8    8    8    8    8    8    8    8    8    8     
              iplac.SetOrigin(x1, y1, z1)
       
              x=y=z=0
              if nom1==8:
                  x=x1+1
                  y=y1
                  z=z1
                  iplac.SetAxis(x, y, z,0)
                  iplac.SetOrigin(x1, y1, z1)
                  iPart.UpdatePlacement()
                  iPart.Update()


#  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1         
           
              x=y=z=0
              if nom1==1:
                  x=x1+1
                  y=y1
                  z=z1
                  iplac.SetAxis(x, y, z,0)
                  iplac.SetOrigin(x1+70, y1, z1)
                  iPart.SetPlacement(iplac)
                  iPart.UpdatePlacement()
                  iPart.Update()
                               
    f1.close()
         

finish = time.time()
print ((finish - start)/60.0)

iKompasDocument3D.Release



В приложении комплект для запуска макроса.
Текстовый файл с координатами берется с диска "C:\"


Vitalij Lysanov

Спасибо за ответ.
"iKompasObject.Quit" пробовал.  И так, и так вертел, существенные результаты отсутствуют.

Есть результаты с кодом который можно включать и в начале программы, и в завершении и в середине.

import Kompas6API5, LDefin3D, LDefin2D
Kompas, doc3d = start3d()

[code

Kompas.Visible=False
Kompas.Visible=True
]

Результаты:
1  Оперативная память под Компас по данным Диспетчера уменьшается на 200 МБ   
2  При завершении Компаса, быстрее освобождает Процессы в Диспетчере.
3  Отсутствует торможение машины, которое определяем по времени вызова программ, например TOTALCMD.
4  Время работы уменьшается в два раза.

Практически.
При большой длительности выполнения, можно команды можно запускать через Макро с выключением визуализации.
Еще вариант с Макросом который через определенное время будет заходить на открытый Компас выполнять "Kompas.Visible=False
Kompas.Visible=True"

Это помогает про формировании новых тел.
При обновлении углов для движения, механизм торможения другой.
Это напоминает стековую память.
Свои данные Компас помещает в вершину. и с ними нормально работает.
Всех остальных погружает все глубже и глубже.   

В приложении  модель на которой проверялось быстродействие.
Плоскость отображения выбрана нормально к ZY
Видно, что при приближении плоскости эскиза к ZY происходит переворачивание.
Трактовка результата может быть такая:
Если отсутствуют оси для эскиза, они берутся ближайшие из доступных 
т.е. из основной системы координат.