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

Макросы в Power Mill


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

если добавить в настройках Панели состояния в пользовательские поля функцию

limits('toolpath','')[4]

то получим минимальное Z активной траектории

если 4 заменить на 5 - максимальное Z

мне удобно, может и ещё кому пригодится...

 

Zmin.png.d8fc6a6de587667393377803bd188f59.png

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах


Привет всем,

 

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

Пример: вы хотите для 10 поверхностей создать границы, для каждой поверхности свою отдельную границу. Тогда макрос вам идеально подходит.

 

Макрос взят отсюда (autodesk форум):

https://clck.ru/BBYoq

INT Pos=0
INT Pos2=0
INT Lgth=0
STRING Cmd=''
STRING ActSurf=''

INT count = 0
FOREACH m in folder('model') {
	$count = $count + number_selected(m.Components)
}
// Ниже идет информационное сообщение   
MESSAGE INFO "Всего выбрано " + $count + " поверхностей."
    
if $count > 0 {
	ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT //Отключаем, чтобы в файл лога не писались ненужные строки
	TRACEFILE OPEN "c:\Temp\sel_surfs.txt"
	PRINT SELSURFACE
	TRACEFILE CLOSE
	STRING LIST surfs = {}
	FILE OPEN "c:\Temp\sel_surfs.txt" FOR READ AS "input"
	FILE READ $surfs FROM "input"
	FILE CLOSE "input"

// Избавляемся от первой строки лога, поскольку там просто выведено количество выбранных поверхностей
	int n = remove_first(surfs)
	FOREACH surf IN surfs {
		$Pos=position($surf, "Process Command") // здесь и на след. строке я не понял, к чему текст в кавычках
		$Pos2=position($surf, "There are")
		$Lgth=length($surf)
		  IF $Pos >= 0 OR $Pos2 >= 0 OR $Lgth==1 {
			PRINT "Error command $surf"
		  } ELSE {
			$ActSurf=RTRIM($surf) // Убрать символ CR (конец строки в Notepad++) в конце строки в $surf взятом из $surfs
			EDIT MODEL ALL DESELECT ALL
			EDIT MODEL ALL SELECT $ActSurf   // выбираем поверхность $surf из $surfs
			// Далее необходимые действия, для проверки макроса я разворачивал перебираемые поверхности
			EDIT MODEL ALL REVERSE
		  }
		}
} ELSE {
	MESSAGE WARN "Нет выбранных поверхностей"
}

 

Ссылка на сообщение
Поделиться на других сайтах
В 18.05.2017 в 14:21, eksodus сказал:

И ещё один макрос - выводит координаты центра отверстия.

Отверстие нужно предварительно выделить.

 

 

А я поступил следующим образом: простой записью действий записал макрос, который вычисляет заготовку цилиндром и назначил на его запуск горячие клавиши. А, как известно, если мы выделим что-либо на модели, то заготовка рассчитается именно там, и покажет координаты)) А ещё и диаметр. Очень удобно смотреть диаметр отверстий таким образом, особенно если их много и все они разного диаметра.  

 

клик

Безымянный.jpg

Hide  
Изменено пользователем k.sema
Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Всем привет !

 

Вот макрос, который разворачивает свёрнутые корневые папки :

- NC Файлы

- Траектории

- Инструменты

- Границы

EXPLORER SELECT NCPROGRAM ROOT
DEBUG EXPLORER KEY RIGHT

EXPLORER SELECT TOOLPATH ROOT
DEBUG EXPLORER KEY RIGHT

EXPLORER SELECT TOOL ROOT
DEBUG EXPLORER KEY RIGHT

EXPLORER SELECT BOUNDARY ROOT
DEBUG EXPLORER KEY RIGHT

Чтобы свернуть - меняем KEY RIGHT на KEY LEFT.

По аналогии, можно сделать и для других элементов в Проводнике милла.

 

Для вложенных папок попозже сделаю.

 

В 07.06.2017 в 00:45, k.sema сказал:

А я поступил следующим образом: простой записью действий записал макрос, который вычисляет заготовку цилиндром и назначил на его запуск горячие клавиши. А, как известно, если мы выделим что-либо на модели, то заготовка рассчитается именно там, и покажет координаты)) А ещё и диаметр. Очень удобно смотреть диаметр отверстий таким образом, особенно если их много и все они разного диаметра.  

удобно сделано )

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах

Вот полный макрос, который разворачивает как свёрнутые корневые, так и вложенные папки:

- NC Файлы

- Траектории

- Инструменты

- Границы

EXPLORER SELECT NCPROGRAM ROOT
DEBUG EXPLORER KEY RIGHT
STRING LIST lnc = get_folders('NCPROGRAM')
FOREACH nc IN lnc {
   EXPLORER SELECT FOLDER $nc NEW
   DEBUG EXPLORER KEY RIGHT
}

EXPLORER SELECT TOOLPATH ROOT
DEBUG EXPLORER KEY RIGHT
STRING LIST ltp = get_folders('TOOLPATH')
FOREACH tp IN ltp {
   EXPLORER SELECT FOLDER $tp NEW
   DEBUG EXPLORER KEY RIGHT
}

EXPLORER SELECT TOOL ROOT
DEBUG EXPLORER KEY RIGHT
STRING LIST ltl = get_folders('TOOL')
FOREACH tl IN ltl {
   EXPLORER SELECT FOLDER $tl NEW
   DEBUG EXPLORER KEY RIGHT
}


EXPLORER SELECT BOUNDARY ROOT
DEBUG EXPLORER KEY RIGHT
STRING LIST lbd = get_folders('BOUNDARY')
FOREACH bd IN lbd {
   EXPLORER SELECT FOLDER $bd NEW
   DEBUG EXPLORER KEY RIGHT
}

ну и по аналогии, для других папок также делается

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах
  • 4 недели спустя...

Нашёл интересный макрос, для удаления фасок на 2D Моделях отверстий.

Например, есть отверстие с фаской:

FS1.png.51646c742fc9c05c5ed1fbd95fd5ba83.png

 

Для PM2016 нужно поставить галочку "Использовать только активную СК", для PM2017-2018 галочку ставить не нужно.

Создастся 2D Модель составного отверстия с фаской:

FS.png.57a1f4d356703873a0351fa14854d02e.png

 

Запускаем макрос, и 2D  модель становится такой:

 

FS2.png.3751dd38b48b675a9baa3f306de8e499.png

 

Макрос срабатывает как положено, только вот не пойму его нужности:

чтобы зацентроваться или посверлить отверстия - не имеет значения, есть фаска на 2D модели или нет.

 

Ну, может кому и пригодится.

 

Сам макрос:

INT subNum = 0
INT comp = 0
DEACTIVATE FEATURESET

FOREACH fsets IN folder ('FeatureSet') {
	FOREACH feat IN components(fsets) {
		IF feat.type == 'hole' {
			IF feat.num_items > 1 {
				FOREACH sub IN components(feat) {
					IF ((sub.Draft < 89) AND (sub.Draft > 1)) OR ((sub.Draft > -89) AND (sub.Draft < -1)) {
						INT subNum2 = $subNum + 1
						REAL depthPrevComp = 0
						ACTIVATE FEATURESET $fsets.name
						EDIT FEATURESET $fsets SELECT $feat.name
						IF subNum > 0 {
							$depthPrevComp = abs(components(components(entity('Featureset', '$fsets.name'))[$comp])[$subNum-1].Depth)
						}
						IF subNum2 < feat.num_items {
							REAL depth = abs(components(components(entity('Featureset', '$fsets.name'))[$comp])[$subNum2].Depth) - $depthPrevComp
							EDIT FEATURESET ; FEATURE SELECTION $subNum2
							EDIT FEATURESET ; FEATURE SELECTED COMPONENT SELECTED DEPTH $depth
						} 
						IF subNum2 == feat.num_items {
							$subNum2 = $subNum2 - $subNum
							REAL depth = 0
							IF feat.num_items > 2 {
								$depth = abs(components(components(entity('Featureset', '$fsets.name'))[$comp])[$subNum].Depth) - abs(components(components(entity('Featureset', '$fsets.name'))[$comp])[0].Depth)
							} ELSE {
								$subNum2 = $subNum2 - 1
								$depth = abs(components(components(entity('Featureset', '$fsets.name'))[$comp])[$subNum].Depth)
							}
							EDIT FEATURESET ; FEATURE SELECTION $subNum2
							EDIT FEATURESET ; FEATURE SELECTED COMPONENT SELECTED DEPTH $depth
						}
						EDIT FEATURESET ; FEATURE SELECTION $subNum
						EDIT FEATURESET ; FEATURE DELETE
						EDIT FEATURESET $fsets.name DESELECT $feat.name
						$subNum = $subNum - 1
					}
					$subNum = $subNum + 1
				}
				$subNum = 0
			}
		}
		$comp = $comp + 1
	}
	$comp = 0
}

 

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах

И ещё несколько макросов, вместе с проектом, для создания контрольных точек для измерения с помощью измерительного устройства (probe) .

Как я понял  - необходимость в программах типа PowerInspect отпадает.

 

Сам макрос и проект были сделаны для станка Roders RXP600DSH и измерительного устройства M&H Probe.

Сам автор макроса пишет - что и для Renishaw тоже должно подойти.

 

Руководство от автора в оригинале:

Цитата

 

In Powermill you only Need to set Points and give a distance to the touchpoint.
Dont forget the Diameter of your measuring tool!
It Outputs a .tap file you must replace ' to " powermill can't do that.
Try carefully! 

 

Все пояснения в макросах - на немецком, так как автор из Германии, как я понял.
Сами макросы я не тестировал - так что применять на свой страх и риск, как говорится.
 

Measure Macros.zip

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах

Всем добрый день!

Хочу написать макрос, который бы сохранял проект под именем импортированной модели и в то место откуда она взята. Не пойму как работать с командой SaveProject. Планирую сделать так, что если проект не был сохранен ранее, то сохранить по имени модели. А если сохранен, то просто сохранить...

 

STRING $my_model = (FOLDER('model')[0]).name
STRING $path_model = (FOLDER('model')[0]).path
 IF project_pathname(0) == '' {
 Save Project  "path_model"+"my_model"
      RETURN
}
PROJECT SAVE

 

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

Хочу написать макрос, который бы сохранял проект под именем импортированной модели и в то место откуда она взята.

PowerMILL и так предлагает сохранить проект в папку с моделью.

Для этого нужно всего лишь поставить ассоциацию файлов с PowerMILL и открывать модель двойным щелчком мыши. И если перед этим скопировать имя модели, то после открытия файла в милле жмём Ctrl+S, Ctrl+V и Enter. Очень быстро получается.

 

Хотя требуемый макрос, несомненно, был бы крайне удобным.

Ссылка на сообщение
Поделиться на других сайтах
В 31.07.2017 в 12:38, eksodus сказал:

Для этого нужно всего лишь поставить ассоциацию файлов с PowerMILL и открывать модель двойным щелчком мыши. И если перед этим скопировать имя модели, то после открытия файла в милле жмём Ctrl+S, Ctrl+V и Enter. Очень быстро получается.

Спасибо за дельный совет. Но все же. Помогите дописать правильно строку "SaveProject". Ведь макрос, как Вы говорите был бы крайне удобным!

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

Но все же. Помогите дописать правильно строку "SaveProject". Ведь макрос, как Вы говорите был бы крайне удобным!

вроде получается

но вопрос есть - Вам нужна проверка на кол-во файлов моделей, если проект не сохранён ?

(после сохранения проекта это будет уже неважно)

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах
37 минут назад, eksodus сказал:

после сохранения проекта это будет уже неважно)

Нет не нужна. У меня как правило одна модель.Если бывает несколько, то расставляю их не через РМ(сильно заморочно), а через сборку Солида, потом импортирую эту сборку как модель. В любом случае получается одна модель.Уже потом обрабатываю...

Спасибо за помощь.

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

В принцем Вы правильно говорите, что по умолчанию проект записывается по месту импортированной модели. Поэтому половина макроса отпадает.Главная его задача сохранить проект под именем модели. Как вытянуть имя модели научился благодаря Вам. В архиве Measure.zip нашел.Хотелось бы узнать какие другие ресурсы  про макросам РМ Вы знаете? Нет ведь ничего!

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

Нет не нужна. У меня как правило одна модель

Тем лучше. А то устал я уже тестировать этот макрос )

 

Сам макрос:

Если проект Не сохранён - проект сохранится в папку модели и с именем самой модели.

Если проект уже сохранён - то проект просто сохранится.

Единственное ограничение - расширение файла не должно быть длиннее чем 9 символов с точкой!

IF project_pathname(0) == '' {
   STRING ModelPath = folder('Model')[0].Path
   INT Pos = Position($ModelPath,".",length(ModelPath)-9)
   IF Pos {
    $ModelPath=Substring($ModelPath,0,$Pos)
    PROJECT SAVE AS $ModelPath
    }
      } ELSE {
        PROJECT SAVE     
 }

Проверил на паре моделей - вроде всё работает.

Добавил на панельку макросов с иконкой сохранения - мне тоже пригодится.

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

Да, макрос работает.Только не понятно зачем расширение файла и 9 символов после точки? Как я понимаю проект РМ создается в отдельной папке. о каком файле Вы говорите? Во всяком случае макрос работает.

Большое спасибо.

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

Только не понятно зачем расширение файла и 9 символов после точки?

я же писал, что не после точки, а вместе с точкой !

это та часть, что отсекается от пути модели

2 минуты назад, syncomp сказал:

о каком файле Вы говорите?

файл модели конечно же

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

добрый день! Уважаемый eksodus, вынужден вновь вернуться к моему макросу расчета заготовки. А именно к тому как передать значение переменной в буфер обмена Windows? Частично эту проблему можно было бы решить выделив и скопировав это значение при выводе в Message info. Но проблема в том, что в Message info текст не выделяется. Другой вариант вместо команды Message info использовать команду Print, что тоже неудобно при постоянно включенном окне "эхо". Третий вариант - записывать значение в файл. Это было бы удобнее. Но не могу разобраться с организацией открытия-закрытия файлов. Оригинальный пдфник по макропрограммированию не помог, не понял.. Ваш перевод для РМ2012, скачанный мной на Рутрекере вообще не содержит раздел по работе с файлами. Пожалуйста, расскажите что называется на пальцах об этом.. Буду благодарен, если напишете для примера макрос, который записывал бы значение переменной в файл " D:/Заготовка.txt"

И вообще спасибо Вам , думаю от всех пользователей РМ за переводы.

Изменено пользователем syncomp
Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, syncomp сказал:

Пожалуйста, расскажите что называется на пальцах об этом.. Буду благодарен, если напишете для примера макрос, который записывал бы значение переменной в файл " D:/Заготовка.txt"

Добрый день !

Попробуйте вот так:

// Открываем текстовый файл (он создаётся, если не существует)
// Файлу присваивается идентификатор Zagotovka (можно любой)
FILE OPEN "D:/Заготовка.txt" FOR WRITE AS Zagotovka 

// Считаем длину заготовки по X,Y и Z
REAL DlinaX=Block.Limits.XMax-Block.Limits.XMin
REAL DlinaY=Block.Limits.YMax-Block.Limits.YMin
REAL DlinaZ=Block.Limits.ZMax-Block.Limits.ZMin

// Добавляем имя оси и знак равенства
STRING RezX=" X=" + $DlinaX
STRING RezY=" Y=" + $DlinaY
STRING RezZ=" Z=" + $DlinaZ

// Записываем значения трёх переменных
FILE WRITE $RezX TO Zagotovka
FILE WRITE $RezY TO Zagotovka
FILE WRITE $RezZ TO Zagotovka

// Закрываем файл с идентификатором Zagotovka 
FILE CLOSE Zagotovka

 

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

Огромное спасибо за оперативность. В руководстве я видел еще "input " "output". Для чего они?

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

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

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

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

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

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

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

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

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

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

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




×
×
  • Создать...