Jump to content
eksodus

Макросы в Power Mill

Recommended Posts

sssdos
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


Павел1

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

 

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

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

Share this post


Link to post
Share on other sites
scorpion1007
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
Kinematik
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
Павел1

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

Share this post


Link to post
Share on other sites
kvint62

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

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

 

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

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

 

Share this post


Link to post
Share on other sites
kvint62
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
kvint62

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

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

Share this post


Link to post
Share on other sites
Konstantin_VP
Показать содержимое  
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

Share this post


Link to post
Share on other sites
Konstantin_VP
Показать содержимое  
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

Share this post


Link to post
Share on other sites
Konstantin_VP
Показать содержимое  
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 

  • Нравится 1

Share this post


Link to post
Share on other sites
scorpion1007

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

2019-10-11_132920.png

Share this post


Link to post
Share on other sites
Konstantin_VP

Добрый день. Хотел бы узнать как удалять элементы без перемещения в корзину?

Share this post


Link to post
Share on other sites
Tatsiana_

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

При расчете траектории "Выборка 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
 

 

Share this post


Link to post
Share on other sites
Tatsiana_

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

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

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

Share this post


Link to post
Share on other sites
scorpion1007

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

dir.png

Share this post


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

@scorpion1007

 

STRING LIST TPFOLDERS = get_folders('TOOLPATH')

Привеликий сенькс)

Edited by scorpion1007

Share this post


Link to post
Share on other sites
syncomp

Всем добрый день. Всегда работал в Windows 7x64 и PowerMill 2018. Вчера пришлось переустановить Windows/ Сейчас стоит Windows 10x64 и PowerMill 2019. В принципе все нормально, но невыполняются некоторые макросы. Милл выдает ошибку, что не может вычислить выражение, синтаксическая ошибка. К примеру, знак деления(/) видит как (%). Создаю, редактирую и читаю макросы в Блокноте. Понимаю, что 10-ка неправильно выдает кодировку символов. Что делать? Может кто сталкивался с такой проблемой. Или все таки лучше вернуться на 7-ку?

Share this post


Link to post
Share on other sites
eksodus
В 26.12.2019 в 11:51, syncomp сказал:

Что делать?

переделывать макросы

Share this post


Link to post
Share on other sites
scorpion1007
В 26.12.2019 в 12:51, syncomp сказал:

Всем добрый день. Всегда работал в Windows 7x64 и PowerMill 2018. Вчера пришлось переустановить Windows/ Сейчас стоит Windows 10x64 и PowerMill 2019. В принципе все нормально, но невыполняются некоторые макросы. Милл выдает ошибку, что не может вычислить выражение, синтаксическая ошибка. К примеру, знак деления(/) видит как (%). Создаю, редактирую и читаю макросы в Блокноте. Понимаю, что 10-ка неправильно выдает кодировку символов. Что делать? Может кто сталкивался с такой проблемой. Или все таки лучше вернуться на 7-ку?

Попробуй изменить кодировку в NOTEPAD++

1234.png.282998a642b4f2db99f728b2e706e1bb.png

 

Если не получится, попробуй позаменивать проценты на деление и прочее

Edited by scorpion1007

Share this post


Link to post
Share on other sites
scorpion1007

Ребят, подскажите как пробежаться на предмет имён траекторий, содержащихся в NC-файле через цикл FOREACH?

 Нужно переименовать NC-файл, если  в нем содержится траектория с определенным именем

Share this post


Link to post
Share on other sites
Konstantin_VP
В 11.01.2020 в 19:18, scorpion1007 сказал:

как пробежаться на предмет имён траекторий, содержащихся в NC-файле

 

Показать содержимое  
STRING LIST $Tl_list = extract(filter(components(entity('ncprogram', '')), "RootType=='nctoolpath'"), 'name')

FOREACH ncTp in Tl_list {

If $ncTp == '' {

}

}

 

Hide  

 

  • Нравится 1

Share this post


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

 

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

STRING LIST $Tl_list = extract(filter(components(entity('ncprogram', '')), "RootType=='nctoolpath'"), 'name')

FOREACH ncTp in Tl_list {

If $ncTp == '' {

}

}

 

Hide

 

Круто!!! Спасибо большое

Share this post


Link to post
Share on other sites
Tatsiana_

Добрый день.Может кто-то работает в CimcoEdit v5? И подскажет, как отразить зеркально траекторию.

Я задаю такие параметры, и после отражения даже визуально видно, что изменяются В и С.

 

Изменение размера IMG_20200117_151729.jpg

Изменение размера IMG_20200117_144414.jpg

Изменение размера IMG_20200117_144115.jpg

Share this post


Link to post
Share on other sites
arsenev

Прошу помочь с макросом. Если в имени траектории есть G41 или G42, то в примечания (NOTES) к траектории нужно внести запись Dn, где n - номер инструмента траектории.

Share this post


Link to post
Share on other sites
arsenev
В 28.04.2019 в 15:57, Konstantin_VP сказал:
Показать содержимое

//Включение корректора на траекториях с латинской приставкой '_RL или _RR' В названии

string $LEFT = "_rl" //корректор слева
string $RIGHT = "_rr" //корректор справа
int $Item = 0 //счётчик траекторий

STRING NCName  = entity('ncprogram','').Name //Активный NC

FOREACH ncitem IN components(entity('ncprogram', $NCName)) {

// Проверка траекторий в NC-файле
IF lcase(ncitem.RootType) == 'nctoolpath' {

// Получение имени в Нижнем регистре
STRING $lcaseName = lcase(ncitem.Name)

// Проверка, содержит ли имя $LEFT
IF position($lcaseName, $LEFT) > 0 {

EDIT NCPROGRAM ; ITEM $Item COMPONENT ${($Item)*1000}

COMP_CODE LEFT //корректор слева

// Проверка, содержит ли имя $RIGHT
} elseIf position($lcaseName, $RIGHT) > 0 {

EDIT NCPROGRAM ; ITEM $Item COMPONENT ${($Item)*1000}

COMP_CODE RIGHT //корректор справа

}

$Item = Item + 1

}

}

 

Hide
Если в названии траектории есть "_RL" включится корректор слева в активном NC , "_RR" - справа.

Как сделать, чтобы макрос воздействовал сразу на все NC-файлы, а не только на активный?

Share this post


Link to post
Share on other sites
arsenev
В 19.02.2020 в 10:43, arsenev сказал:

Прошу помочь с макросом. Если в имени траектории есть G41 или G42, то в примечания (NOTES) к траектории нужно внести запись Dn, где n - номер инструмента траектории.

С этой задачей справился. Вот текст макроса для фанукообразных систем ЧПУ:
 

Скрытый текст

 

//Вставка Notes с номером корректора на радиус инструмента
//на траекториях с 'G41 или G42' В названии

string $LEFT = "G41" //корректор слева
string $RIGHT = "G42" //корректор справа

FOREACH tp IN folder('Toolpath') {

ACTIVATE TOOLPATH $tp.Name

STRING $CutcomLeft = "D"+$tool.Number.Value+"(G41)"
STRING $CutcomRight = "D"+$tool.Number.Value+"(G42)"

// Проверка, содержит ли имя $LEFT

IF position(tp.Name, $LEFT) > 0 {

EDIT TOOLPATH ; Notes $CutcomLeft

// Проверка, содержит ли имя $RIGHT

} elseIf position(tp.Name, $RIGHT) > 0 {

EDIT TOOLPATH ; Notes $CutcomRight

}

}

 

 

Сделал это для того, чтобы добавлять информацию о номере корректора на радиус инструмента и коде (стороне - G41 или G42) смещения в карту наладки из Notes траектории, т.к. прямого способа не нашёл.

Edited by arsenev
  • Нравится 1

Share this post


Link to post
Share on other sites
Bullet77

Может кому пригодиться. Макрос для вывода времени обработки в формате ЧЧ:ММ:СС . Выводит данные в текстовый файл. По каждому NC-файлу отдельно + в конце суммарное время обработки.

Время.jpg

Время обработки.zip

  • Нравится 1

Share this post


Link to post
Share on other sites
Maik812
14 минут назад, Bullet77 сказал:

Может кому пригодиться. Макрос для вывода времени обработки в формате ЧЧ:ММ:СС . Выводит данные в текстовый файл.

А можно в сам фаил вписывать, я потом тоталлом выведу значение, только добавте например перед значением символ типа # или % или еще как.

иначе не удобно, яч вижу фаил и вижу значение все по нему, а не ищу в текстовике.

Share this post


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

А можно в сам фаил вписывать, я потом тоталлом выведу значение, только добавте например перед значением символ типа # или % или еще как.

иначе не удобно, яч вижу фаил и вижу значение все по нему, а не ищу в текстовике.

Данный макрос переименовывает NC-файлы в "Имя_NC-файла %( ЧЧ:ММ:СС )"

Так Вы будете видеть файл и значение по нему

Время обработки_запись в имя NC-файла.zip

  • Нравится 1

Share this post


Link to post
Share on other sites
syncomp

Всем добрый вечер! Как изменить знак переменной? Т.е. если переменная отрицательная, то нужно сделать ее положительной и наоборот...

Share this post


Link to post
Share on other sites
Bullet77
3 часа назад, syncomp сказал:

Всем добрый вечер! Как изменить знак переменной? Т.е. если переменная отрицательная, то нужно сделать ее положительной и наоборот...

//переменная
INT I = 85
// смена знака переменой
$I = -($I) 
//
// вывод в сообщении
MESSAGE INFO $S

Здравствуйте. Вот, хотя бы, так

Edited by Bullet77

Share this post


Link to post
Share on other sites
syncomp

Спасибо. Делал так же, но забыл заключить в скобки, поэтому и выдавались ошибки.

Share this post


Link to post
Share on other sites
syncomp

Расскажите пожалуйста нормальным языком как объявить в макросе Функции и ими пользоваться. По руководству я понял, что должна присутствовать функция Main.

Share this post


Link to post
Share on other sites
Bullet77
7 часов назад, syncomp сказал:

Расскажите пожалуйста нормальным языком как объявить в макросе Функции и ими пользоваться. По руководству я понял, что должна присутствовать функция Main.

Функция "Main", по сути, является основой исполняемого файла. Телом, так сказать. А все остальные функции, которые создаются в этом файле, могут быть использованы или не использованы в функции "Main" и остальных функциях.  Использование функций удобно тем, что Вы можете 1 раз написать код и вызывать его, как функцию, столько раз, сколько нужно, а не дублировать код в исполняемом файле. Это приводит к сокращению объема конечного файла.  Но без функции "Main" остальные функции существовать не могут. Вот пример с описанием действий русским языком:

// в этой функции исполняеться "основной" код
function Main() {

	//формируем путь для перехода	
	string path_project = $project_pathname(0) + "\DATA\" + $project.Name
	
	// путь к модели
  	string ModelPath = folder('Model')[0].Path

  	 //название модели (без формата) 
  	string ModelName = folder('model')[0].Name

    // поиск позиции $ModelName в строке $ModelPath (0-начало) 
    real Pos = position($ModelPath, $ModelName)

    //отображает строчку с позиции 0 до $Pos 	//отнимаем от пути к модели имя модели
    string path = substring($ModelPath, 0, $Pos)

	//формируем путь для перехода
	string path_model = $path + "\DATA\" + $ModelName
	
	// формируем списки которые будут записаны в соответствующие файлы
	string list s_project = {"Данные по проекту"}
	string list s_model = {"Данные по модели"}

	//передаем переменные в функцию WRITING. Где $path_project - путь для перехода, а $s_project - то что будет записано в сам файл
	CALL WRITING($path_project, $s_project)
	CALL WRITING($path_model, $s_model)
}

// в этих двух функциях, описаных ниже, исполняется "вспомогательный" код
// в данном случае функция WRITING вызывается 2 раза, а не
// дважды продублирован "кусок" кода

// принимаем переменные в функции WRITING. Где string P - $path_project - путь для перехода, а string list S - $s_project - то что будет записано в сам файл
// соблюдая при этом типы файлов
function WRITING(string P, string list S)
	
	// используем функцию внутри функции
	CALL CheckDirect($P) 
	
	// формируем название файла
	string file = "Файл для (" + $p + ").txt"

	//открытие файла, а если его нет, то создание
	FILE OPEN $file FOR WRITE AS "F"

	foreach line in S {

	// запись в файл переменной $line
	FILE WRITE $line TO "F"
	}

	FILE CLOSE "F"
}

function CheckDirect(string D) {

	//проверка наличия пути
	if dir_exists($d) {

	//если есть - переходим
	CD $d
	} else {

	//если отсутствует - создаем и переходим
	MKDIR $d
	CD $d
	}
}
	

После функции "Main" обязательно использование () "открыта-закрыта скобка". При передаче переменных, во внутрь функции или из нее, обязательно соблюдение последовательности переменных и их типа. Если требуется передать обратно значение из функции "вспомогательной" в функцию "Main" или другую, то переменную описывают как (OUTPUT "тип переменной" "сама переменная") , но без  кавычек.  "Вспомогательные" функции, так же как "Main", могут быть использованы без передачи данных, но присутствие скобок в описании и вызове такой функции - обязательно.

Edited by Bullet77
  • Нравится 1

Share this post


Link to post
Share on other sites
Павел1

Уважаемые, форумчане. Выкладываю два макроса  для изменения начальной и конечной безопасных точек траекторий в PM2016... 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • Anat2015
      Рисковый парень. Там, вообще то, народ, если чего-то не знает/понимает - приглашает специалиста. Многостаночники и прочие отчаянные электрики, готовые залезть туда, куда их не просят, характерны в основном для России.
    • Борман
      Не знал, однако...  
    • engyuri
      Kelny, огромное спасибо Вам и Leon за те макросы, что вы с ним разрабатываете и выкладываете на форуме. Когда-то (когда работал один) они меня здорово выручали. Но я то вот о чем. Тогда же я делал штатные блоки (кажется это SW2009), которые легко читались при наведении на них мышки. Но потом, как я понял SW ушел от этого формата блока. Согласитесь - было удобнее.  
    • DenMean
      Уважаемые пользователи Proe Creo. Если кто может помочь буду очень благодарен. Вопрос состоит в следующем. Есть порядка 3 тысяч чертежей, карт наладок и прочей документации  разработанных в Proe Wildfire 4.0. С учетом развития Proe нужна помощь в преобразовании шрифта по гост формата fnt используемого в старой документации для CREO. В свое время по указаниям на данном форуме был удачно переведен формат шрифта FNT с Proe 3 на Proe 4 64 bit. C учетом того, что в Creo необходимо имеющиеся SRC разбить на 2 куска (инглиш кирилица), сменить кодовую страницу и скомпилировать, буду очень благодарен тому, кто распишет процедуру как это сделать. Вопрос очень для меня важный, если кто знает как это сделать, но желает за это какую денежку, согласен заплатить, ПОМОГИТЕ пожалуйста. Если нужны SRC шрифта могу отправить, но желательно обьяснить процедуру. В принципе форматки, настройки, карты обработки и т.д. переделал сам, а вот с шрифтом не понимаю. Сразу хочу ответить тем, кто предлагает использовать встроенные шрифты Creo. 3 тысячи чертежей приведенных в посте выше, это только мои с тех. отдела. а в КБ их просто море. При обращении к компетентным представителям мы получили ответ в стиле используйте встроенные в creo. Однако чертежи в данном случае выходят местами не читаемые.
    • Kelny
      Напишите макрос и просматривайте как посчитаете нужным, а текст тогда можно смотреть и вставлять как просто текст, а не в виде блоков.
    • Kelny
      Через контекстное меню СДЕЛАТЬ ВИРТУАЛЬНЫМ. http://help.solidworks.com/2010/russian/solidworks/sldworks/allcontent/solidworks/core/assemblies/t_vc_making_external_components_virtual.htm    
    • GS
    • GS
      Ответ Нила Армстронга стороннику теории "лунного заговора" ======== На свое 70–летие Нил Армстронг получил письмо от некого школьного учителя, ставящего под сомнение высадку астронавта на Луне. Само письмо мне лень переводить, но это типичный троллинг современных любителей идеи "лунного заговора" — я уверен что вы их видели в бессчетных количествах.Нил сначала переправил это письмо НАСА, спросив, собирают ли они информацию для опровержений подобных теорий. А затем ответил лично: Из книги "A Reluctant Icon: Letters to Neil Armstrong". (c)d3.ru
    • AKLion
      Хм поправил, почемуто ютуб его хитро опубликовал както. Сейчас работает.
    • Vitalij
×
×
  • Create New...