Перейти к публикации

Гармонический анализ. Макрос работает очень медленно. Оптимизация?


Рекомендованные сообщения

 

Ниже макрос для постпроцессора (Гармонический анализ). Макрос в цикле считывает последовательно кривые для каждой точки по отдельности, для каждой оси (X,Y,Z,RotX,RotY и RotZ) и сохраняет их в файл. Для каждого случая отдельный файл.

file.rts – примерно 60 гигабайт.

Всего 164 точки и 6 результатов (X,Y,Z,RotX,RotY и RotZ).

Частота от 0 до 1000 Гц. Шаг частоты – примерно 0,6 Гц. Получается 1500 точек в диапазоне.

Сам гармонический анализ длиться примерно 4 часа. А макрос работает больше 8 часов.

 

Вопрос. Это нормально или можно переписать/оптимизировать, что значительно уменьшить время работа макроса примерно на порядок? Например, как-то считывать не в одной точке, а сразу во всех? Или сразу по 6 направлениям (X,Y,Z,RotX,RotY и RotZ)?

Может другие команды, что будут работать значительно быстрее?

 

 

/POST26

FILE,'file','rst','.'  

/UI,COLL,1 

NUMVAR,200 

SOLU,191,NCMIT 

STORE,MERGE

PLCPLX,0

PRCPLX,1

FILLDATA,191,,,,1,1

REALVAR,191,191

 

 

KolStr=1500   ! Eto zadaetsa kolitsestvo Strok

NuPo1=15    ! Eto nomera Uzlov. Vsego 164

NuPo2=44

! ______ …..

! ______ …..

! NuPo164=578562

J1=-4

IbZ=0

STORE,MERGE

*CREATE,scratch,gui

*DO,IbZ,1,164,1

NSOL,J1+6,NuPo%IbZ%,ROT,X,ROTX_%IbZ%,  

*DEL,_P26_EXPORT

*DIM,_P26_EXPORT,TABLE,KolStr,2

VGET,_P26_EXPORT(1,0),1

VGET,_P26_EXPORT(1,1),J1+6,,0 

VGET,_P26_EXPORT(1,2),J1+6,,1 

/OUTPUT,'RotX_%IbZ%','prn',

*VWRITE,'FREQ','ROTX_%IbZ%',' '

%C, %C, %C

*VWRITE,' ','REAL','IMAGINARY' 

%C, %C, %C 

*VWRITE,_P26_EXPORT(1,0),_P26_EXPORT(1,1),_P26_EXPORT(1,2) 

%G, %G, %G

/OUTPUT,TERM

! ******************************************************

! ******************************************************

NSOL,J1+7,NuPo%IbZ%,ROT,Y,ROTY_%IbZ%,  

*DEL,_P26_EXPORT

*DIM,_P26_EXPORT,TABLE,KolStr,2

VGET,_P26_EXPORT(1,0),1

VGET,_P26_EXPORT(1,1),J1+7,,0 

VGET,_P26_EXPORT(1,2),J1+7,,1 

/OUTPUT,'RotY_%IbZ%','prn',

*VWRITE,'FREQ','ROTY_%IbZ%',' '

%C, %C, %C

*VWRITE,' ','REAL','IMAGINARY' 

%C, %C, %C 

*VWRITE,_P26_EXPORT(1,0),_P26_EXPORT(1,1),_P26_EXPORT(1,2) 

%G, %G, %G

/OUTPUT,TERM

! ******************************************************

! ******************************************************

NSOL,J1+8,NuPo%IbZ%,ROT,Z,ROTZ_%IbZ%,  

*DEL,_P26_EXPORT

*DIM,_P26_EXPORT,TABLE,KolStr,2

VGET,_P26_EXPORT(1,0),1

VGET,_P26_EXPORT(1,1),J1+8,,0 

VGET,_P26_EXPORT(1,2),J1+8,,1 

/OUTPUT,'RotZ_%IbZ%','prn',

*VWRITE,'FREQ','ROTZ_%IbZ%',' '

%C, %C, %C

*VWRITE,' ','REAL','IMAGINARY' 

%C, %C, %C 

*VWRITE,_P26_EXPORT(1,0),_P26_EXPORT(1,1),_P26_EXPORT(1,2) 

%G, %G, %G

/OUTPUT,TERM

! ******************************************************

! ******************************************************

NSOL,J1+9,NuPo%IbZ%,U,X,UX_%IbZ%,  

*DEL,_P26_EXPORT

*DIM,_P26_EXPORT,TABLE,KolStr,2

VGET,_P26_EXPORT(1,0),1

VGET,_P26_EXPORT(1,1),J1+9,,0 

VGET,_P26_EXPORT(1,2),J1+9,,1 

/OUTPUT,'UX_%IbZ%','prn',

*VWRITE,'FREQ','UX_%IbZ%',' '

%C, %C, %C

*VWRITE,' ','REAL','IMAGINARY' 

%C, %C, %C 

*VWRITE,_P26_EXPORT(1,0),_P26_EXPORT(1,1),_P26_EXPORT(1,2) 

%G, %G, %G

/OUTPUT,TERM

! ******************************************************

! ******************************************************

NSOL,J1+10,NuPo%IbZ%,U,Y,UY_%IbZ%,  

*DEL,_P26_EXPORT

*DIM,_P26_EXPORT,TABLE,KolStr,2

VGET,_P26_EXPORT(1,0),1

VGET,_P26_EXPORT(1,1),J1+10,,0 

VGET,_P26_EXPORT(1,2),J1+10,,1 

/OUTPUT,'UY_%IbZ%','prn',

*VWRITE,'FREQ','UY_%IbZ%',' '

%C, %C, %C

*VWRITE,' ','REAL','IMAGINARY' 

%C, %C, %C 

*VWRITE,_P26_EXPORT(1,0),_P26_EXPORT(1,1),_P26_EXPORT(1,2) 

%G, %G, %G

/OUTPUT,TERM

! ******************************************************

! ******************************************************

NSOL,J1+11,NuPo%IbZ%,U,Z,UZ_%IbZ%,  

*DEL,_P26_EXPORT

*DIM,_P26_EXPORT,TABLE,KolStr,2

VGET,_P26_EXPORT(1,0),1

VGET,_P26_EXPORT(1,1),J1+11,,0 

VGET,_P26_EXPORT(1,2),J1+11,,1 

/OUTPUT,'UZ_%IbZ%','prn',

*VWRITE,'FREQ','UZ_%IbZ%',' '

%C, %C, %C

*VWRITE,' ','REAL','IMAGINARY' 

%C, %C, %C 

*VWRITE,_P26_EXPORT(1,0),_P26_EXPORT(1,1),_P26_EXPORT(1,2) 

%G, %G, %G

/OUTPUT,TERM

*ENDDO

*END

/INPUT,scratch,gui 

! End of time history save

 

 

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...


В 11.10.2019 в 17:13, Инжмаш сказал:

Это нормально или можно переписать/оптимизировать, что значительно уменьшить время работа макроса примерно на порядок?

апдл все-таки медленная штука. значительно более медленная, чем, например, обработать данные каким-нибудь питоновским скриптом. поэтому часто скрипты по обработке данных сначала реализуются в апдл(потому что лень и так быстрее), но потом переделываются в более шустрый вариант, когда встает необходимость использовать скрипт часто, а он тормозит.

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

Ссылка на сообщение
Поделиться на других сайтах
В 11.10.2019 в 16:13, Инжмаш сказал:

Сам гармонический анализ длиться примерно 4 часа. А макрос работает больше 8 часов.

 А бывает, что считается пол часа, а анализируешь пол года :)

 

В 11.10.2019 в 16:13, Инжмаш сказал:

Это нормально

Нет. Посмотрите какая команда дольше всего выполняется. Сиса может время выдергивать текущее кажется.

Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, Борман сказал:

Посмотрите какая команда дольше всего выполняется.

наверное, существует список основных принципов отладки и оптимизации кода. и расставить таймстампы с комментариями -  один из его пунктов.

Ссылка на сообщение
Поделиться на других сайтах
В 29.10.2019 в 22:46, Борман сказал:

Нет. Посмотрите какая команда дольше всего выполняется. Сиса может время выдергивать текущее кажется.

Тут и смотреть нечего. Даже не запуская скажу, NSOL.

Можно попробовать обмануть систему и самому поиграть в POST26. Запустить цикл по всем временным шагам:

DO,i,1,...

SET,1,i

...

И внутри каждого шага цикла считывать результаты по всем точкам, накапливая всё это в массиве.

Смысл в том, что каждый NSOL суть тот же цикл чтения эрэстеншника с накоплением результата в переменной и надо максимально сократить число "подходов к снаряду".

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • vladimir.songin
    • vad0000
      Вы сначала загружаете файл с изображением, мышью выбираете поле, куда хотите вставить изображение, и мышью нажимаете на изображение.   да
    • vladimir.songin
      схема.jpg видно? Как я понимаю, хотите видеть ручное позиционирование без входа в 19 или 50 меню?   Простите за глупый вопрос, как помещать изображения и фото так как вы поместили?
    • vad0000
      Покажите эту схему Нажмите на ЧПУ - ручное позиционирование осей. Фото
    • A_1
      Здравствуйте. Это можно сделать через команду Изменить параметры.
    • vladimir.songin
      Для оси X, по схеме, активация всегда активна. В шкаф посмотрю попозже. Сегодня поеду на этот завод. Тем не менее, чтобы ось X в подвигать, нужно активировать этот выход. На схеме указано, что 2006 это: proportional valve ON.  схема.jpg 24В, которые активируют привод оси X, появляются после того, как запускаем гидравлику и отрабатывает реле безопасности. Я думаю что с разрешением на движение оси X всё нормально, потому что если: Включить ось X Передвинуть ось X куда-нибудь к середине Перезапустить станок и нажать старт то ось X едет в конец до упора, (значит с разрешением всё ОК) отрабатывает концевик оси X, (Нажать концевик пораньше и проверить останавливается ось X по концевику или по упору не пробовал) позиционируется ось R Балка едет до упора вверх.  Станок дальше не работает.  Если всё то же без оси X, то станок работает, но ось X соответственно не движется.  Что касается оси R, ранее я ввёл в заблуждение. Для того, чтобы подвигать ось R, нужно активировать выход не 2006 а 1102. 
    • Artas28
    • ДОБРЯК
      Интересная методика испытаний. Сначала предложить изменить собственные частоты изделия, которое испытывается. А потом сказать
    • Bot
      В год 35-летия компании вклад АСКОН в развитие российской индустрии информационных технологий отмечен Министерством цифрового развития, связи и массовых коммуникаций Российской Федерации. Сооснователь и председатель совета директоров АСКОН Александр Голиков награжден Почетной грамотой Минцифры России. Государство особо подчеркнуло его заслуги в обеспечении замещения зарубежных отраслевых решений и программного обеспечения. Смотреть полностью
    • vladimir.songin
      Вы ведь тоже понимаете, что решаю не я. Я бы с удовольствием соскочил с этого дела, но только путём решения вороса каким-либо образом.  Никогда не оставляю после себя нерешённых задач.  Я всё передал и предложил в соответствии с нашими с вами договорённостями.  К сожаление решение вышестоящих немного не такое, как я ожидал.  Пытаюсь добить тему до конца. Много уже изучил, знаю и понимаю. Ось Х точно рабочая. Ничего с ней не нужно делать. Это мне уже понятно.  P.S. За любую помощь буду в любом случае благодарен. 
×
×
  • Создать...