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

Макросы в 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 пользователей

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



  • Сообщения

    • Рамон
      Можно в тексте вставить ссылку- свойство документа - последнее изменение с датой и временем.  
    • Павлуха
      Солиду не нравится несколько сопряжений, которые одинаково позиционируют деталь.
    • al0ner
      Это весьма удивило, когда заходишь в бутлодере в меню просмотра файлов, то файлы на цф видны, возможно при начале чтения или записи по дефолту стоит проверка уровня на wp.
    • advocut
      У нас чертежи версионируются, но бывает так, что внесли мелкое исправление, а версию не завели, потому как придётся натужно бегать и менять всё везде в системах учёта. Конструктору-то всё равно, а вот когда приходит программисту на исполнение один чертёж, оператору дают второй, а потом выясняется, что вообще нужно было по третьему — становится грустно. Решением проблемы вижу поле с датой и временем сохранения (хоть в привычных нам гггг-мм-дд:ч-м-с, хоть одним числом в UNIX ticks), чтобы знать, что эти два чертежа были сохранены в разное время и значит являются разными ревизиями и требуют тщательного изучения всех мелочей. Добавить в общий шаблон чертежа и забыть о проблеме. Есть идеи, как это можно сделать? На зарубежных чертежах поле Revision встречал.
    • Ninja
      зачем? у тебя же только диаметр отв. изменился и добавилась фаска. Вот их отдельно пересчитай. А остальное не трогай, оно же не изменялось! Выше показали как несколько проектов в одном можно сделать. Будет два проекта в одном. А в среднем остатке - то что нужно )))  
    • Madmax70
      раз форматирует карту, то шлейф рабочий, также программы с  cf нормально сбрасываются на стойку. под аналогичным я имею станок с такой же стойкой, такой же фирмы поставленный в одно и тоже время бутлоадер тоже такой же, начинка немного отличается, так как в этом станке сервоусилитель шпинделя и мотор fanuc на других реализовано управления мотор-шпинделем через частотный преобразователь сохранение файлов через system data save я не проверял карточка cf 2 гигабайта
    • lowboard
      Добрый день! Отлично, настроил. Спасибо, удобно  
    • rigrou
      Разобрался сам спустя время. В итоге для того, чтобы отображались исполнения 10 и более: 1. Нам нужно открыть меню настройка спецификаций и в количество исполнений прописать нужное количество исполнений. Нужно учесть, что -00 (нулевое) исполнение также учитывается и если нам необходимо нулевое+34 исполнений, то число исполнений в настройке спецификации нужно указать 35. 2. Даже если мы укажем количество исполнений более 10, то они сразу не будут отображаться. Чтобы они отображались нужно выбрать любой из разделов(документация/сборочные единицы/детали/стандартные...) в которых прописывается значение для "количество на исполнение" и перейти к его редактированию. В зависимости от количества исполнений, которые мы прописали в настройке спецификации, нам будет доступно 2 или более строк, в которые можно вписать значение для "количество на исполнение". Изначально первые 9 исполнений и нулевое исполнение отображаются, а чтобы отобразилось 10 исполнение или выше, нужно в поле (количества на исполнение) вписать любое значение для нужного нам исполнения.  Также нюанс, если исполнений много и мы не заполним значение в целой строке ни в одном из разделов, то это исполнениями не будут отображаться. (К примеру мы прописали значения для исполнений 0-9 и 21-34, а 10-20 оставили пустыми; исполнение с 10 по 20 не отобразятся). Достаточно указать значение лишь в одной из ячеек в строке, тогда будет отображаться весь блок исполнений данной строки. К примеру если исполнений не более 20, будут активны 2 строки; количество исполнение не более 30, то будет активно 3 строки. При этом если количество исполнений будет меньше, чем количество клеток в строке, лишние клетки будут закрыты для редактирования. Если непонятно в ячейки какого исполнения мы находимся, то снизу слева отображается название исполнения при редактировании значения этой ячейки.
    • Artas28
      Что значит ручками пересчитывать? так же  по новой все контура выбирать? опять проект с нуля?
    • sokolikkostya
      Разумеется. Полный ваш пакет макросов. Думаете дело не в шаблоне детали и в заданных для него свойствах? кстати, строку "Материал (сортамент)" уже заменил на просто "Материал", но увы, из за этого материал не стал ровнее работать в ОН.
×
×
  • Создать...