eksodus

Макросы в Power Mill

414 posts in this topic

4 часа назад, Konstantin_VP сказал:

Если речь о траекториях в активной папке, то:

Показать содержимое

FUNCTION MAIN {

ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT //отключение эхо

STRING $nmb = '1' //счётчик

STRING $FolderName = ACTIVE_FOLDER() //определяет путь по активной папке

STRING $T_Folder = substring($FolderName, 0, 8) //отображает строчку с позиции 0 до 8

//Если нет активной папки в "Toolpath"
If $T_Folder !='Toolpath' {
$FolderName = 'Toolpath'
}

FOREACH t IN folder ($FolderName) {
STRING $OneName = $t.Name              //имя активной траектории
//Вызов функции
CALL TolpathCount($OneName, $nmb, $OneName)
}

RESET LOCALVARS // очистить временные переменные


} //FUNCTION MAIN


//счётчик траекторий
FUNCTION TolpathCount (STRING OneName, output STRING nmb, STRING OneName) {

string $newname=$nmb
string $uline = '_'

//Сравнение оригинальной и полученной траектории
IF $newname != $OneName {

//проверка наличия дубликатов
IF entity_exists('Toolpath',$newname) {

While entity_exists('Toolpath',$newname) == 1 {
$newname = $newname+$uline
}

RENAME TOOLPATH $OneName $newname

} else {
RENAME TOOLPATH $OneName $newname
}

} else {
//ничего не делать если названия совпадают
}

$nmb =  int (nmb) + 1 //счётчик траекторий

}

 

Hide

про папки понятно макросы есть и работают, а вот для установов не получается пока сделать макрос

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

Share this post


Link to post
Share on other sites


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

 

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

изменение безопасной точки.rar

Share this post


Link to post
Share on other sites

ID: 403   Posted (edited)

3 часа назад, Павел1 сказал:

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

 

 

Создайте процедуру , которую вызывайте при создании траектории, в качестве аргумента передавайте значение переменной I. В самой процедуре делайте проверку через iF и выполнение команды

Типа 

 CALL bezop_z(I)

EDIT TOOLPATH $nameX CALCULATE

 

FUNCTION bezop_z(string I){

IF I=="текст"{

EDIT TOOLPATH START TYPE POINT_SAFE

}ELSE IF I=="овомалворваолр"{

EDIT TOOLPATH START TYPE BLOCK

...итд

}

 

Edited by scorpion1007

Share this post


Link to post
Share on other sites
9 часов назад, scorpion1007 сказал:

Создайте процедуру , которую вызывайте при создании траектории, в качестве аргумента передавайте значение переменной I. В самой процедуре делайте проверку через iF и выполнение команды

Типа 

 CALL bezop_z(I)

EDIT TOOLPATH $nameX CALCULATE

 

FUNCTION bezop_z(string I){

IF I=="текст"{

EDIT TOOLPATH START TYPE POINT_SAFE

}ELSE IF I=="овомалворваолр"{

EDIT TOOLPATH START TYPE BLOCK

...итд

}

 

Все это делает оператор SWITCH. Он уже прописан с текущем макросе. Не в этом соль. В текущем макросе как минимум неверное обращение к элементу списка в операторе SWITCH.

В приложении мой черновик.

@Павел1

изменение безопасной точки.mac

Share this post


Link to post
Share on other sites

Спасибо большое, scorpion1007 и Kinematik за помощь в данном вопросе. Макрос от Kinematik'а работает, буду его использовать. Чутка его доработаю, если получится, в плане выбора абсолютной точки... чтобы выводилось еще окно для ввода координат. Как предложил вариант scorpion1007 я изначально через операторы if тоже хотел сделать, но потом увидел оператор switch и упор сделал на него.

Share this post


Link to post
Share on other sites

Доброго всем времени! Пишу макрос для расчета массы заготовки. В конечном итоге создаю пользовательский параметр и присваиваю ему вычисленную переменную "massa" в PM. При повторном запуске выдает ошибку что параметр с таким именем "massZag" уже существует, оно и понятно. Думаю нужно через оператор IF записать условие: если "massZag" не существует то создать и вычислить, иначе просто вычислить. Не могу записать данное условие, подскажите пожалуйста.


//Вычисление размеров
REAL dlinaX=Block.Limits.XMax-Block.Limits.XMin
REAL dlinaY=Block.Limits.YMax-Block.Limits.YMin
REAL dlinaZ=Block.Limits.ZMax-Block.Limits.ZMin

 

//Вычисление массы
REAL $massa=((dlinaX*dlinaY*dlinaZ)/1000000000)*2700 //масса в кг

 

//Создание пользовательского параметра
EDIT USERPAR project  TYPE 'Real'
EDIT USERPAR project NAME "massZag"
CREATE USERPAR project
EDIT USERPAR project SELECT 'massZag'
 
//Присвоение массы
$massZag=massa

Share this post


Link to post
Share on other sites
1 час назад, kvint62 сказал:

Не могу записать данное условие, подскажите пожалуйста.

 

Попробуйте что-то такое

IF NOT member($TP.UserParameters._keys,"<имя параметра>" )
  {
  	do smth
  }

 

Share this post


Link to post
Share on other sites
23 часа назад, Kinematik сказал:

Попробуйте что-то такое


IF NOT member($TP.UserParameters._keys,"<имя параметра>" )
  {
  	do smth
  }

 

В моем случае ошибку выдает. Что я мог сделать не так?

 

//Вычисление размеров
REAL dlinaX=Block.Limits.XMax-Block.Limits.XMin
REAL dlinaY=Block.Limits.YMax-Block.Limits.YMin
REAL dlinaZ=Block.Limits.ZMax-Block.Limits.ZMin

 

//Вычисление массы
REAL $massa=((dlinaX*dlinaY*dlinaZ)/1000000000)*2700 //масса в кг

 
IF NOT member($TP.UserParameters._keys,"massZag" )
  {
//Создание пользовательского параметра
EDIT USERPAR project  $TP.Name TYPE 'Real'
EDIT USERPAR project $TP.Name NAME "massZag"
CREATE USERPAR project $TP.Name
EDIT USERPAR project SELECT 'massZag'
 
//Присвоение массы
$massZag=massa
} ELSE {
//Присвоение массы
$massZag=massa
}

Share this post


Link to post
Share on other sites

Подсказали на форуме Autodesk:

IF NOT member($project._keys,"massZag") {
   EDIT PAR CREATE REAL 'massZag'
}

Share this post


Link to post
Share on other sites
Показать содержимое  
ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT

DIALOGS ERROR OFF
GRAPHICS LOCK //отключение обновления экрана


//Проверка на наличие активного Featureset
 BOOL $err = 0
 $err = ERROR $entity("Featureset","").Name

    IF $err {
        MESSAGE WARN "2D модель не акивирована!"
        RETURN
    }

    //Подготовка активного FEATURESET
	EDIT FEATURESET ; DESELECT ALL
	UNDRAW FEATURESET ALL
	DRAW FEATURESET ;

    //ENTITY $sourceFeatureset = $entity("Featureset","")


	//список всех диаметров в активном Featureset
	REAL LIST diameters = extract(components(entity('featureset','')), 'Diameter')
	//Удаление дубликатов из $diameters
    int diameDublicate = remove_duplicates(diameters)

	int i=0
	int j=0

	//список всех Featureset
	STRING LIST $FR = extract(folder('Featureset'), 'name')
	//количество всех Featureset
	int $SizeFR = size($FR)
	
	FOREACH $R IN $FR {
	
	   IF $entity("Featureset","").Name == $R {
	   $j=i+1
       }
			$i=i+1
			}
	$i=j-1

    FOREACH $d IN $diameters {
	
		    EDIT SELECTION DELETE
			EDIT SELECTION FILTER DIAMETER MIN $d
			EDIT SELECTION FILTER DIAMETER MAX $d
			EDIT SELECTION APPLY
			
			COPY FEATURESET $entity("Featureset","").Name SELECTED
			
			$FR = extract(folder('Featureset'), 'name')
			
			
			 string $path = macro_path(0) + "\2DHoles.txt" //путь
			
			// Put the stockmodel info into a tracefile
			//ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT
			TRACEFILE OPEN $path
			//вывод в эхо значения угла и последующая запись его в .txt
			print formvalue EditHole.Shell.Geom.DraftAngle
			TRACEFILE CLOSE
			
			// Put the lines of the textfile into a list
			STRING LIST $States = {}
			FILE OPEN $path FOR READ AS "input"
			FILE READ $States FROM "input"
			FILE CLOSE "input"
			
			
			 BOOL $err = 0
			 $err = ERROR $States[0]
			 IF $err {
			 $States[0] = '0'
			 }
			
            real $DraftAngle = abs(real($States[0]))
			
			
			If $DraftAngle != 0 {
			
			$DraftAngle = $DraftAngle - 0.01
			ACTIVATE Featureset $FR[j]
			EDIT SELECTION DELETE
			EDIT SELECTION FILTER DRAFT_ANGLE MIN $DraftAngle
			EDIT SELECTION APPLY
		    DELETE FEATURESET $FR[j] SELECTED	
			ACTIVATE Featureset $FR[i]
			}
			

			int $HoleDiamCount = size(extract(components(entity('featureset',$FR[j])), 'Diameter'))
			
			//если количество отв. в Featureset = 0 
			If $HoleDiamCount == 0 {
			
			DELETE Featureset $FR[j]
			
			} else {
			
			STRING $featuresetName = "DIAMETER "+$d +'_('+ $HoleDiamCount + ')'
		    RENAME FEATURESET $FR[j] $featuresetName
			
			EDIT SELECTION DELETE
			EDIT FEATURESET ; DESELECT ALL
			
			}
 }
 

UNDRAW FEATURESET ALL
DIALOGS ERROR On
RESET LOCALVARS // очистить временные переменные
GRAPHICS UNLOCK //включение обновления экрана

 

Hide  
Макрос разделяющий отверстия в активной 2D модели по диаметрам и исключающий фаски. Подписывает все диаметры и их количество
1 person likes this

Share this post


Link to post
Share on other sites
Показать содержимое  
ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT

DIALOGS ERROR OFF
GRAPHICS LOCK //отключение обновления экрана


//Проверка на наличие активного Featureset
 BOOL $err = 0
 $err = ERROR $entity("Featureset","").Name

    IF $err {
        MESSAGE WARN "2D модель не акивирована!"
        RETURN
    }

	    //Подготовка активного FEATURESET
		EDIT FEATURESET ; DESELECT ALL
		UNDRAW FEATURESET ALL
		DRAW FEATURESET ;
	
	    //фильтр отв. с углом (фаски, конусы, конические отв.)
		real $DraftAngle = 0.5
	    EDIT SELECTION DELETE
		EDIT SELECTION FILTER DRAFT_ANGLE MIN $DraftAngle
		EDIT SELECTION APPLY
		DELETE FEATURESET ; SELECTED


	//список всех диаметров в активном Featureset
	REAL LIST diameters = extract(components(entity('featureset','')), 'Diameter')
	//Удаление дубликатов из $diameters
    int diameDublicate = remove_duplicates(diameters)	
	
	
	

    FOREACH $d IN $diameters {
	
		    EDIT SELECTION DELETE
			EDIT SELECTION FILTER DIAMETER MIN $d
			EDIT SELECTION FILTER DIAMETER MAX $d
			EDIT SELECTION APPLY
			//копирование 2D модели с выбранными отв.
			COPY FEATURESET $entity("Featureset","").Name SELECTED
			
			RENAME FEATURESET # '2DHole'
			
			int $HoleDiamCount = size(extract(components(entity('featureset','2DHole')), 'Diameter'))

			STRING $featuresetName = "DIAMETER "+$d +'_('+ $HoleDiamCount + ')'
		    RENAME FEATURESET 2DHole $featuresetName

			}
			
	EDIT FEATURESET ; DESELECT ALL
 

UNDRAW FEATURESET ALL
DIALOGS ERROR On
RESET LOCALVARS // очистить временные переменные
GRAPHICS UNLOCK //включение обновления экрана

 

Hide  

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

Что делает макрос:

из активной 2D модели исходя из минимального угла удаляются все угловые отв. (фаски, конусы и конические отв).После чистки 2D модель разбивается по диаметрам отверстий. Полученные 2D модели переименовываются в Diameter + значение диаметра + (количество отв) .

Макрос работает довольно шустро.

2 people like this

Share this post


Link to post
Share on other sites
Показать содержимое  
ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT
GRAPHICS LOCK
DIALOGS ERROR OFF
DIALOGS MESSAGE OFF


//Проверка на наличие активного NC
 BOOL $err = 0
 $err = ERROR $entity("ncprogram","").Name

    IF $err {
        MESSAGE WARN "Активируйте NC-файл!"
        RETURN
    }


STRING $dirpath = project_pathname(0) + "\SetupSheets_files\snapshots"
MKDIR $dirpath //создаёт не существующие папки

//счётчик
int $Count = 1
//имя файла
string $BITMAPname ='_ncp' + '-' + entity('ncprogram','').Name+ '.png'
//путь файла
string $FilePath = $dirpath+'\'+ $Count + $BITMAPname

//наращивать счётчик пока существует под данным номером файл 
While FILE_EXISTS($FilePath) == true {
$Count = $Count + 1
$FilePath = $dirpath+'\'+ $Count + $BITMAPname
}

//фото текущего положения
KEEP BITMAP ${FilePath} Yes

DIALOGS ERROR On
DIALOGS MESSAGE On
GRAPHICS UNLOCK //включение обновление экрана

 

Hide  

Макрос создаёт фото текущего положения детали. Путь сохранения: текущий проект\SetupSheets_files\snapshots. Шаблон названия скриншота: счётчик+_ncp+название активного NC +.png 

Share this post


Link to post
Share on other sites

Добрый день. Макрос после запуска импортирует модель, которую я укажу. Как сделать, что при select открывалась сразу рабочая папка. Текущую рабочую папку меняю примерно раз в месяц, задана под кнопкой 1. Хочу чтоб сделать так, чтоб папка автоматом открывалась

2019-10-11_132920.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • Slavdos
      от партии большая зависимость . и размера полки.  у нас есть электромеханика и гидравлика. первая все же в среднем быстрее. на гидравлике очень зависит от оператора - задал ли он мин. отвод пуансона например
    • Slavdos
      именно)) я и ищу подобные покупные машинки и отзывы владельцев хочется защиту от вибрации получить - какая бы компактная и легкая машинка не была, руки отваливаются через часок работы. 
    • lllppp
      Спасибо, обязательно проверю! Отпишусь)
    • раздватри
      Да, а вот пример лодки полученной в среде Flowision. На сегодня нет в РФ экономичней на ход плавсредства. 1200 км. в одну сторону, а с обратно 2400 км. и с бутером не менее 600 кг. на все и про все требуется 240 литров 92-го, после последнего улучшения днища в корме. А как иначе и зачем третья версия, если 2.5.4 дает такие верные вычисления. Я поверил и я получил результат. Того и Вам желаю, студенты.  ТОЛЬКО В РЕКЛАМНЫЕ ТРЮКИ РАЗРАБОТЧИКОВ И МЕНЕДЖЕРОВ + СОЧУВСТВУЮЩИМ НЕ ВЕРЬТЕ. ДОХОДИТЕ ЛО КОНЦА И ЩУПАЙТЕ САМОСТОЯТЕЛЬНО.
    • maxems
      Помню пытались купить станок Mori Seiki. Когда узнали, что в нем стоит датчик, при помощи которого японцы могут контролировать месторасположение станка в любой точке мира (типа, чтоб он не достался какой нибудь Северной Корее) вопрос отпал сам собой. А вообще, в ОПК мозгов пока хватает не оснащаться одним производителем.
    • раздватри
      А зачем это надо ваще!!! Бесплатным и сыр не бывает. Да и много чего так и осталось, как в старой версии 2.5.4 Кто шарит в этом, тот никогда не подпишется на версии 3, до устранения всех недостатков старой версии, важных или коренных.  Я, вот, летом, между разделкой черной и красной икры, прогнал по основным вопросам Компас Flow, кроме подвижных тел, которых нет пока. Так там все можно, даже то о чем не знает разработчик, а лишнее на куй не нада.  Тесис допускает стратегическую ошибку в распространении популярности своей программы. Так и пусть допускает, но и подаваться на подобную пропаганду не стоит.  Делать надо, как сведующие специалисты в своих отраслях говорят, а не доктора с Доцентами и Профессора с ученными, отставшие от сего года на долго, а молодые купившие изначально все и без ума-знаний в зазоре. Пустое все это Господа, пустое, как и не дистанционное обучение. Кто хочет тот всегда найдет истину или дорожку к ней.
    • Kir95
      Получается вот так. Или неправильно понял, где масштаб установить?   А так, чтобы с основной надписью масштабировалось, можно сделать? В солиде при экспорте такое окно с настройками, где можно выбрать пересчёт масштаба -    Может какие макросы есть для экспорта? Просто дизайнерам и архитекторам часто приходится отправлять чертежи в автокаде, только для того, чтобы они сами могли посмотреть и померять, что им захочется.
    • Alex2020
      Уважаемые операторы и технологи! У нас вышел спор с коллегой, поэтому в этом топике было бы интересно послушать ваше мнение реального производства, которое каждый день работает с деталями. Лазерная система AKAS / LazerSafe при пересечении луча снижает скорость до 10 мм/сек, подход и возврат идут 100 мм/сек. На рынке появляются прессы с подходом и возвратом уже 150 мм/сек и выше. Где-то проскальзывает 20 мм/сек как рабочая скорость. Один из производителей компактных листогибов, который очень неплохо продает в Германии, говорит, что даже AKAS часто не покупает из-за экономии и тупо все скорости устанавливают как 10 мм/сек, при работе делают минимальный отход пуансона (возврат) и тем самым вполне нормально и шустро работают. В связи с этим, сам вопрос - если мы не будем говорить про защиту рук, насколько сами скорости дают прирост производительности и может ли он отличаться в разы? Как по мне - все вспомогательные операции типа позиционирования детали под гиб занимают гораздо больше времени, чем непосредственные движения станка. Спасибо за Ваши мнения. Я понимаю, что по сути также многое зависит от геометрии детали, ее глубины и по сути хода станка. Но интересно Ваше мнение в общем...
    • Alex2020
      Привет! Мы занимаемся поставками гибочного инструмента, но плохо знаем возможности различных ЧПУ систем по обработке библиотек инструмента и импорту новых пуансонов-матриц. Например, было бы здорово, если кто-то работает с листогибами на ЧПУ ESA для комментариев. Дело в том, что прямого импорта из DXF вроде на данных системах нет, например, файл библиотеки идет как XXX.pnz Его структура вообще неясна, как предоставить клиенту файл для работы - непонятно. К сожалению, пока с самой ESA коммуникация не пошла. В общем, очень интересует опыт операторов внесения нового инструмента в библиотеку без покупки постпроцессора. Недавно мы проходили подготовку файлов для CoastOne, там структура файла понятная и логичная, по сути точки XY контура и все. Но вот с ESA как-то затык встал.
    • grOOmi
      Никто и никогда не работает с 5000 компонентов, это безумие. Как было безумием работать в 2001-2003 годах, когда я начинал работать с большими сборками, так и сейчас. Главное - упрощаете, делаете ссылочные наборы. Делаете Representation (facet body) чем грубее тем лучше. Нужны только для понимания общего внешнего вида при отображении всей сборки.    В этой части нужна работа с большими сборками http://media.plm.automation.siemens.com/ru_ru/nx/book/chapter-4.pdf   Также советую вот это почитать https://www.plm.automation.siemens.com/media/global/ru/Solid-Edge-Five-tips-for-large-assembly-performance-63817_tcm52-9087.pdf   Также вот это видео поможет