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

Макросы в Power Mill


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

55 минут назад, sssdos сказал:

через проводник не надо копировать, из милла сохранить как, тогда не будет папочки

Спасибо за совет. Но вопрос был в другом. Как из макроса удалить папку?

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


Может кому понадобится. Код удаляет папку ncprogram в теле проекта со всем содержимым

 

STRING Dirbase = project_pathname(0) 
STRING Dirdel = $Dirbase + "/ncprogram"
DELETE DIRECTORY $Dirdel

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

STRING Dirbase = project_pathname(0) 
STRING Dirdel = $Dirbase + "/ncprogram"
DELETE DIRECTORY $Dirdel

где взял?

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

Всем привет.

 

Не могу задать нужную строковую переменную.

Вот пример варианта макроса -

BOOL option2 = FALSE
$option2 = QUERY "Сверлить Отверстия от ВЕРХА Заготовки?"
	IF $option2 {
		STRING Top = "BLOCK"
	}    ELSE    {
		STRING Top = "HOLE"
	}


IMPORT TEMPLATE ENTITY TOOLPATH "Drilling/Drilling.ptf"
EDIT DRILL TYPE DEEP_DRILL
EDIT DRILL TOP $Top
EDIT DRILL DEPTH HOLE
EDIT DRILL DWELLTIME "0"
EDIT PAR 'AxialDepthOfCut.UserDefined' '1' EDIT DRILL PECK_DEPTH "2"
EDIT TOOLPATH ; CALCULATE
EDIT TOOLPATH SAFEAREA RESET
RESET TOOLPATH RAPID

 

Ну в общем - мне нужно чтобы из первой части, получившееся значение переменной вставилось во вторую

Я запустил отладчик - и увидел, что после закрытия IF-ELSE значение переменной Top обнуляется.

Хотелось бы сохранить.

 

Может кто-то помочь ?

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

Всем привет.

 

Не могу задать нужную строковую переменную.

Вот пример варианта макроса -


BOOL option2 = FALSE
$option2 = QUERY "Сверлить Отверстия от ВЕРХА Заготовки?"
	IF $option2 {
		STRING Top = "BLOCK"
	}    ELSE    {
		STRING Top = "HOLE"
	}


IMPORT TEMPLATE ENTITY TOOLPATH "Drilling/Drilling.ptf"
EDIT DRILL TYPE DEEP_DRILL
EDIT DRILL TOP $Top
EDIT DRILL DEPTH HOLE
EDIT DRILL DWELLTIME "0"
EDIT PAR 'AxialDepthOfCut.UserDefined' '1' EDIT DRILL PECK_DEPTH "2"
EDIT TOOLPATH ; CALCULATE
EDIT TOOLPATH SAFEAREA RESET
RESET TOOLPATH RAPID

 

Ну в общем - мне нужно чтобы из первой части, получившееся значение переменной вставилось во вторую

Я запустил отладчик - и увидел, что после закрытия IF-ELSE значение переменной Top обнуляется.

Хотелось бы сохранить.

 

Может кто-то помочь ?

Задай  переменную ТОР как глобальную сначала. Инициализируй ее в самом начале. А в цикле IF ELSE сделай присваивание. Тогда будет работать

В начале string TOP = "xxx"

В цикле $TOP = "BLOCK"

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

В начале string TOP = "xxx"

В цикле $TOP = "BLOCK"

чет не работает так

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

IMPORT TEMPLATE ENTITY TOOLPATH "Drilling/Drilling.ptf"
EDIT DRILL TYPE DEEP_DRILL
BOOL option2 = FALSE
$option2 = QUERY "Сверлить Отверстия от ВЕРХА Заготовки?"
    IF $option2 {
        EDIT DRILL TOP 
    }    ELSE    {
        EDIT DRILL DEPTH HOLE
    }
EDIT DRILL DWELLTIME "0"
EDIT PAR 'AxialDepthOfCut.UserDefined' '1'

EDIT DRILL PECK_DEPTH "2"
EDIT TOOLPATH ; CALCULATE
EDIT TOOLPATH SAFEAREA RESET
RESET TOOLPATH RAPID

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

Не-не, мне нужно отдельную переменную создать.

Внутри каждой траектории я так сделать и сам могу.

 

А если разных отверстий будет штук 20 ?

Двадцать раз жать кнопку ОК слегка неудобно будет.

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

Не-не, мне нужно отдельную переменную создать.

Внутри каждой траектории я так сделать и сам могу.

 

А если разных отверстий будет штук 20 ?

Двадцать раз жать кнопку ОК слегка неудобно будет.

Тогда еще проще Переменная уже задана $option2, делай просто проверку в каждой следующей стратегии

 

BOOL option2 = FALSE
$option2 = QUERY "Сверлить Отверстия от ВЕРХА Заготовки?"

//------*** Сверление****__________
    
IMPORT TEMPLATE ENTITY TOOLPATH "Drilling/Drilling.ptf"
EDIT DRILL TYPE DEEP_DRILL
IF $option2 {
        EDIT DRILL TOP 
    }    ELSE    {
        EDIT DRILL DEPTH HOLE
    }
EDIT DRILL DWELLTIME "0"
EDIT PAR 'AxialDepthOfCut.UserDefined' '1'

EDIT DRILL PECK_DEPTH "2"
EDIT TOOLPATH ; CALCULATE
EDIT TOOLPATH SAFEAREA RESET
RESET TOOLPATH RAPID

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

Точно, спасиб !

 

ток у тя там ошибка, но суть то понятна )

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

Точно, спасиб !

 

ток у тя там ошибка, но суть то понятна )

Я просто особо не вникал в сам текст макроса, в блокноте быстро накидал)) Типо того:

 

BOOL option2 = FALSE
$option2 = QUERY "Сверлить Отверстия от ВЕРХА Заготовки?"

 

//------*** Сверление****__________
IMPORT TEMPLATE ENTITY TOOLPATH "Drilling/Drilling.ptf"
EDIT DRILL TYPE DEEP_DRILL
IF $option2 {
        EDIT DRILL TOP BLOCK
    }    ELSE    {
        EDIT DRILL TOP HOLE
    }
EDIT DRILL DEPTH HOLE
...... итд

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

Типо того:

 

Да, оно )

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

Тогда еще проще Переменная уже задана $option2, делай просто проверку в каждой следующей стратегии

не работает когда запускается функция

ибо внутри функции нет этой переменной

можно конечно ещё раз ее вызвать...

но два повторяющихся вопроса будут выглядеть как-то неадекватно )

 

есть способ использовать внутри функции уже заданную переменную переменную ?

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

Заметил, что некоторые команды не хотят работать при выключенном TMPLTSELECTORGUI . Не знаю с чем это связано. С включенным вроде отрабатывает. Только заготовка должна быть задана и отверстия активны

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

FUNCTION Main () {
BOOL option2 = FALSE
$option2 = QUERY "Сверлить Отверстия от ВЕРХА Заготовки?"

//------*** Сверление****__________
    
IMPORT TEMPLATE ENTITY TOOLPATH TMPLTSELECTORGUI "Drilling/Drilling.ptf"
EDIT DRILL TYPE DEEP_DRILL
CALL DRILL( option2 )
EDIT DRILL DWELLTIME "0"
EDIT PAR 'AxialDepthOfCut.UserDefined' '1'
EDIT DRILL PECK_DEPTH "2"
EDIT TOOLPATH ; CALCULATE
FORM ACCEPT SFDrilling
EDIT TOOLPATH SAFEAREA RESET //хз что за команды
RESET TOOLPATH RAPID //хз что за команды
}
//---------------функция задания верха отверстий-----------------
FUNCTION DRILL( BOOL option2, ) {
IF $option2 {
        EDIT DRILL TOP BLOCK
    }    ELSE    {
        EDIT DRILL TOP HOLE
    }
}

 

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

некоторые команды не хотят работать при выключенном TMPLTSELECTORGUI

я специально это убрал, как и строку FORM ACCEPT SFDrilling , которая закрывает граф. оболочку выбора траекторий

и вообще убрал все команды FORM

это позволило макросу работать намного быстрее

 

команды FORM  и TMPLTSELECTORGUI запускают графическую часть, например FORM TOOL -  открывает граф. окно активного инструмента

FORM TOOLPATH - открывает граф. окно активной траектории и тд

и потом везде идет команда FORM ACCEPT  ....  которая закрывает это графические окно

 

но в случае с макросом когда нам не нужно вводить данные вручную - каждый раз прорисовывание граф окна, пусть и не видимиого в макросе,

это лишнее время работы макроса

так что без них макрос просто летает теперь

 

а какие команды не хотят работать ? можно пример ?

мне на оф форуме уже дали ответ с функциями - и теперь все работает без ошибок

 

1 час назад, scorpion1007 сказал:

EDIT TOOLPATH SAFEAREA RESET //хз что за команды
RESET TOOLPATH RAPID //хз что за команды

это ускоренные, в диалоговом окне безопасные высоты

если этого не сделать при активации другой СК в данном макросе, - то ускоренные будут с другой стороны )

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

Ну например в приведенном выше куске кода.

EDIT DRILL TOP BLOCK

EDIT DRILL TOP HOLE

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

1 час назад, eksodus сказал:

 

мне на оф форуме уже дали ответ с функциями - и теперь все работает без ошибок

 

Кстати, и что посоветовали более старшие товарищи?:ok:

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

Ну например в приведенном выше куске кода.

EDIT DRILL TOP BLOCK

EDIT DRILL TOP HOLE

а как ты определяешь что не работают ? какую ошибку выдают ?

 

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

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

какие ? вот эти две что выше ?

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

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

проверил твой макрос - у тебя работает и с TMPLTSELECTORGUI и без него

обе команды

EDIT DRILL TOP BLOCK

EDIT DRILL TOP HOLE

срабатывают

 

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

Макрос для вычисления траекторийПоказать содержимое  

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

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

DIALOGS ERROR OFF
DIALOGS MESSAGE OFF

BOOL $err = ERROR($entity('toolpath',''))

//если траектория не активна
IF $err {

MESSAGE error 'Активируйте траекторию!'

//Прекращение работы макроса
	RETURN

} else {

	OBJECT list $MyBlock1 = Block
	OBJECT list $MyBlock2 = entity('toolpath','').block

	//Если заготовки одинаковые
	If $MyBlock1.type == $MyBlock2.type and $MyBlock1.limits.xmax == $MyBlock2.limits.xmax and $MyBlock1.limits.xmin == $MyBlock2.limits.xmin and $MyBlock1.limits.ymax == $MyBlock2.limits.ymax and $MyBlock1.limits.ymin == $MyBlock2.limits.ymin {
  
    STRING $Qry = "Пересчитать траекторию?"
	BOOL Ret = 0
	$Ret = QUERY $Qry

	IF $Ret {
	
	//Вызов функции
	CALL TolpathCALCULATE()
	} else {
	//Прекращение работы макроса
	RETURN
	}
	
	} else {

	STRING $Qry = "Заготовка изменена." +crlf+ "Пересчитать?"
	BOOL Ret = 0
	$Ret = QUERY $Qry

	IF NOT $Ret {
	//Копирование заготовки
    EDIT BLOCK RECREATE TOOLPATH ;
	//Прекращение работы макроса
	RETURN

	} else {

	//Вызов функции
	CALL TolpathCALCULATE()

	}

	}

	}

	DIALOGS ERROR ON
	DIALOGS MESSAGE ON
	
	} //FUNCTION MAIN
	

	//функция пересчёта траекторий
	FUNCTION TolpathCALCULATE () {
	
	//Если стратегия 'по поверхности' или 'боком фрезы'
    IF strategy == 'surface_machine' or strategy == 'swarf' {
	
	INT SurfaceSelect = 0
    FOREACH m in folder('model') {
      $SurfaceSelect = $SurfaceSelect + number_selected(m.Components)
    }
    //Если поверхности не выбраны
	IF $SurfaceSelect <=0 {
	
	EDIT TOOLPATH ; SELECT_SURFACES //выбирает поверхности
    INVALIDATE TOOLPATH ;
    EDIT TOOLPATH ; CALCULATE
	
	//Если поверхности выбраны
	} else {
	
	INVALIDATE TOOLPATH ;
    EDIT TOOLPATH ; CALCULATE
	
	}
	
	//Если стратегия отличная от 'по поверхности' или 'боком фрезы'
	} else {
	
	INVALIDATE TOOLPATH ;
    EDIT TOOLPATH ; CALCULATE
	
	}
	
	} //FUNCTION TolpathCALCULATE


 

Hide  

Последовательность операций в макросе:

1.1 Проверка активна ли траектория. Если нет, то появляется сообщение 'Активируйте траекторию!'. Если активна, то

1.2 Проверка изменений в заготовке. Если заданная вне траектории заготовка не отличается, то появляется запрос "Пересчитать траекторию?". Если заготовка отличается, то появляется запрос "Заготовка изменена. Пересчитать?".

2.1 Подфункция пересчёта определяет стратегию траектории ('по поверхности' или 'боком фрезы'). Если стратегия совпадает, то определяется выбраны ли поверхности пользователем или нет, если нет, то выбираются поверхности с которыми была посчитана траектория. Если траектория отличная от указанных, то

2.2 Сброс и пересчёт траектории.

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • gudstartup
      а вот тут все уже расписано  
    • MagicNight
      Да дело не в бедности, ищу оптимальный ноут, пока не могу найти.
    • Bot
      АСКОН объявляет о старте открытого бета-тестирования новой версии КОМПАС-3D и приложений. Коммерческая версия КОМПАС-3D v23 выйдет летом 2024 года, но уже сейчас испытать новинки может любой желающий. Бета-тестирование — это проверка новой функциональности в «полевых» условиях, когда пользователи знакомятся с нововведениями на собственных проектах и сценариях работы, а также проверяют совместимость со своим программно-аппаратным обеспечением. Новая версия создавалась в соответствии с дорожной картой АСКОН для задач проектирования изделий высокотехнологичных отраслей и стала еще более функциональной и производительной. При разработке учитывались предложения пользователей по темам трехмерного моделирования, подготовки чертежей и спецификаций, приложений для машиностроения, приборостроения и строительства. Бета-версия КОМПАС-3D открыта для всех. Дистрибутив предоставляется бесплатно на время проведения тестирования. *** Период проведения бета-тестирования: с 6 [...] View the full article
    • fenics555
      Уважаемые Дамы и Господа!  Есть библиотечные изделия, которые почему-то очень доооооолго грузятся в сборках. Я хочу попросить Вас потестить их и сказать в чем причина, ибо совсем невозможно работать. gost18829-73.prt.1 pin_split.prt.1 Как это всё можно ускорить?
    • gudstartup
      а вы хоть станок проверяли по программе на изделии на точность прежде чем товарищей этих выгнать? если нет то грешите на самих себя! система в наших краях еще не распространенная поэтому и тем тут нет надо в поднебесную писать
    • AlexArt
      Ну допустим, ты и на другом ресурсе это опубликовал. А не коммуниздил. Но вот продвигать воровство от государства, ворующее из Вики, это верх мерзости.
    • maxx2000
      Ах, да. Фильтры выбора добавили. Теперь можно выбрать только то что видно на первом плане, а не вместе с тем что с обратной стороны детали. В общем надо обновляться. Как раз работёнка на прессформу нарисовалась 
    • maxx2000
      Причина того - Кроилово. Кроилово всегда приводит к попадалову. Месяц простоял сколько мильонов деревянных потеряли? Вопрос риторический. И ещё будет стоять. Как памятник человеческой глупости и жадности.
    • AlexKaz
      "9 июля 1968 года на мышах был проведен самый знаменитый эксперимент американского ученого-этолога Джона Кэлхуна «Вселенная-25». Суть опыта заключалась в создании идеальных условий, где мыши могли бы жить и размножаться, не ведая никаких забот, вдали от хищников и в отсутствие эпидемий и заболеваний. Для этих целей ученый построил специальный загон, куда были помещены четыре пары белых мышей (самцов и самок). В распоряжении мышей всегда была чистая вода и еда в изобилии, специальные гнезда, где можно обустроить себе жилище ― гнезд в загоне хватало для проживания нескольких тысяч мышей. Температура в загоне в среднем составляла около 20 ℃ и была комфортной для мышей. Животные не подвергались никаким влияниям извне и жили в идеальных условиях в свое удовольствие. А дальше началось самое интересное. На первом этапе эксперимента мыши хорошо размножались, вели активный образ жизни, охотно играли. На следующей фазе эксперимента мыши стали есть меньше, перестали наедаться до отвала. На третьей фазе эксперимента, когда в загоне были уже сотни мышей, произошло распределение социальных ролей, стала ярко выраженной иерархия, клановость. Появились так называемые отверженные ― молодые особи, которых другие, взрослые мыши сгоняли в центр загона, не давали им вести нормальный образ жизни, причиняли физический вред. В природе такое, наверное, было бы невозможно, ведь эти мыши-агрессоры просто не дожили бы до старости: их бы съели хищники. Но в загоне Кэлхуна хищников не было, и взрослые мыши начали попросту издеваться над молодняком. Образовались две большие группировки: самцы-одиночки и самки-одиночки. При этом самки-одиночки отказывались спариваться <с менее статусными многочисленными молодыми самцами и с оставшимися старыми статусными> и отвергали ухаживания самцов. У мышей стал проявляться тотальный индивидуализм, мыши не стремились создать семью. На последней, четвертой стадии мышиная популяция стала сокращаться. Появились самцы, которых сам Кэлхун назвал «красивыми» (англ. beautiful ones), из-за отсутствия ран и рубцов. <В оригинале: They never engaged in sexual approaches toward females, and they never engaged in fighting, and so they had no wound or scar tissue. Thus their pelage remained in excellent condition. - Дословный перевод: Они никогда не прибегали к сексуальным подходам к самкам, и они никогда не участвовали в боях, и поэтому у них не было ран или рубцовой ткани. Таким образом, их шерсть сохранилась в отличном состоянии.> Эти мыши не вступали в борьбу за самок и территорию, не проявляли активности к размножению и только питались, спали и чистили шёрстку. У мышей стали проявляться различные формы девиантного поведения, вспышки агрессии. Самки стали проявлять агрессию, защищать себя сами, стали умерщвлять своих детенышей, а затем окончательно отказались размножаться. На пике эксперимента в загоне одновременно проживало чуть более двух тыс. мышей. Еды и гнезд было достаточно для дальнейшего роста популяции, но через четыре года после начала эксперимента Кэлхун остановил свой опыт, потому что в загоне осталось чуть более сотни мышей, и все они уже вышли из репродуктивного возраста. По итогам эксперимента Кэлхун пришел к выводу, что достижение определенной плотности населения и заполнение социальных ролей в популяции приводит к распаду общества" https://physicsoflife.pl/dict/pic/calhoun/calhoun.. https://scientificrussia.ru/articles/utopiya-dlya-mys.. https://ru.wikipedia.org/wiki/Кэлхун,_Джон_(этолог)
    • gudstartup
      @Koels вот в чем дело пока ds609 это предупреждение поэтому F может и не появится если sv601 это значит ошибка. возможно при нагреве радиатора серво определяет это как предупреждение или ваш вентилятор крутиться медленнее чем оригинальный и серва думает что он встал хотяпри этом обычно на экране в строке состояния FAN.мигает больше у меня вариантов нет....  
×
×
  • Создать...