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

Макросы в Power Mill


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

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

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


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

 

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

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

Ссылка на сообщение
Поделиться на других сайтах
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

...итд

}

 

Изменено пользователем scorpion1007
Ссылка на сообщение
Поделиться на других сайтах
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

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

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

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

Доброго всем времени! Пишу макрос для расчета массы заготовки. В конечном итоге создаю пользовательский параметр и присваиваю ему вычисленную переменную "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

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

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

 

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

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

 

Ссылка на сообщение
Поделиться на других сайтах
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
}

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...
Показать содержимое  
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 модели по диаметрам и исключающий фаски. Подписывает все диаметры и их количество
Ссылка на сообщение
Поделиться на других сайтах
Показать содержимое  
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 + значение диаметра + (количество отв) .

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

Ссылка на сообщение
Поделиться на других сайтах
Показать содержимое  
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 

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

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

2019-10-11_132920.png

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

Добрый день. Очень нужна помощь в написании макроса (только начала разбираться).

При расчете траектории "Выборка 3D модели" необходимо выбирать заготовку (тип заготовки "модель") повысотно с шагом по z 4мм, т.е, например, если высота заготовки 125мм, то выбрать ее в координатах 125-75мм, следующая выборка на высотах 75-0мм (СК от низа заготовки).

Макрос записывается так:

EDIT ZHEIGHTS AUTOMATIC OFF
FORM ZHEIGHTS
EDIT ZHEIGHTS MODE STEPDOWN
EDIT ZHEIGHTS MODEVALUE "4"
PROCESS ZHEIGHTS
EDIT ZHEIGHTS CLEAR EDIT ZHEIGHTS SELECT//как здесь записать координату 125?
EDIT ZHEIGHTS CLEAR EDIT ZHEIGHTS SELECT// а здесь 75? чтобы макрос рассчитывал, выборку только в нужных мне z?? 
DELETE ZHEIGHTS ALL
ZHEIGHTS ACCEPT
 

 

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

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

Вышла из положения вот так:

EDIT PAR 'ZRange.Maximum.Value' "125"
EDIT PAR 'ZRange.Minimum.Value' "75"
 

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

Привет всем. Подскажите, как составить список директорий в траекториях?

dir.png

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

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

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

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

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

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

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

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

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

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

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




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