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

Макросы в Power Mill


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

Возможно вы воспользовались именно первым вариантом этого макроса. Я использую второй, который также выложил. Он сразу после первого идёт, воспользуйтесь им. Там не зависнет т.к. строка нулевой длины не может привести к зависанию PowerMill. В любом случае как вариант можно воспользоваться этим:

//PowerMill 2016

STRING Dirbase = project_pathname(0)  //полный путь до проекта (включая сам проект)
STRING filebase = project_pathname(1) //название папки проекта
real length = length($Dirbase) - length($filebase) //количество символов в переменной $Dirbase без учёта $filebase

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

If $Dir !='' {

OLE FILEACTION "OPEN" $Dir //открывает папку где лежит проект

} else {

PROJECT OPEN PROJSELECTOR //окно открытия проекта

}

Если проект не открыт, то появляется окно для открытия проекта.

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


А что он должен в этом случае делать?Что открывать?

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

Возможно вы воспользовались именно первым вариантом этого макроса.

ну это понятно что первым - я то цитировал с сообщения с первым макросом

В любом случае как вариант можно воспользоваться этим:

спасибо - это самый правильный вариант )

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

Макрос для добавления траекторий из активной папки без учёта подпапок в NC. После добавления на всех траекториях где в названии есть 'чист' включается корректор слева.

//PowerMill 2016

DIALOGS ERROR OFF
DIALOGS MESSAGE OFF


STRING path = pathname('toolpath',Name)

// Проверка наличия активных траекторий
IF path != '' {

STRING $FolderName = dirname(pathname(entity('Toolpath',''))) //определяет путь по активной траектории

FOREACH t IN folder ($FolderName) {

//исключение подпапок
IF dirname(pathname(t)) == $FolderName {

NCPROGRAM ;
APPEND TOOLPATH $t.Name // Добавить все траектории из папки без учёта подпапок

}

}

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

int $Item = 0

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

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

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

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

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

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

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

$Item = Item + 1

} else {

$Item = Item + 1

}

}

}

//_________________________________________

} ELSE {

NCPROGRAM ;
APPEND TOOLPATH ALL  // Добавить все траектории

}


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

 

Теперь возникает вопрос, как сохранить оформление рабочего  пространства с подписями кнопок, расположением и т. п. Для переноса на другую машину??

Ссылка на сообщение
Поделиться на других сайтах
как сохранить оформление рабочего пространства с подписями кнопок, расположением и т. п.

да там же кнопочка есть сохранить )

сохраняет как xml-файл, внутри которого прописаны названия кнопок, название иконок, названия и расположение макросов

 

а для переноса на другую машину пользовательских панелек  достаточно расположить их по тому же адресу и в меню панелек выбрать - импорт

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

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

Привет всем. Макросами пользуюсь недавно, но их эффективность на лицо. Создаю макросы путем записи действий... Ну если надо корректирую немного. Работал в PowerMill 2012, сейчас перешел на 2016. Так вот. До сих пор никак не могу понять, как использовать "активные элементы".

Например, я создаю СК модели "По Заготовке", затем указываю направление осей. И это практически на всех деталях. Использование макроса в данном случае очень эффективно. Но бывают детали, когда приходится обрабатывать с двух сторон, при этом создаю две СК. В какой-то момент СК 2 нужно перенести в другую точку. Опять пользуюсь макросом. Но тут проблема! Этот макрос создавал через "Запись-СТОП". И в макросе явно указана СК, которая была активна при создании макроса. Мне же нужно изменить СК под другим номером(именем). Вопрос№1, как записать строку макроса, которая бы указывала бы на активный элемент? Вопрос №2, как записать строку макроса, чтобы происходил запрос на указание номера(имени) СК? Подобные запросы мне нужны не только относительно СК, но и границ, инструмента, 2Д моделей...

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

Вопрос№1, как записать строку макроса, которая бы указывала бы на активный элемент?

Вопрос №2, как записать строку макроса, чтобы происходил запрос на указание номера(имени) СК?

то, что Вы хочете сделать - это не "строка макроса", а использование переменных, функций и операторов

 

1) для проверки активного элемента используйте функцию active, например в операторе IF:

IF active(….) {
…
}

2) для указания имени (СК, границы, траектории) нужно использовать переменные, например

string prompt = "Введите имя"
$i = input $prompt
$err = ERROR i
}

и потом сделать обращение к этой переменной, или вставить этот блок кода внутри какой-то функции или оператора

Изменено пользователем eksodus
Ссылка на сообщение
Поделиться на других сайтах
для проверки активного элемента используйте функцию active, например в операторе IF:
В строке макроса могут быть несколько функций и операторов, как я понял из листинга самих макросов, разделенные ";" Но это не важно

Получается, что для поиска активного элемента помимо оператора IF, для перебора всех элементов нужен еще и цикл? Не сложно ли? Это я к тому, что возможно в ПоверМилл есть типа глобальные переменные, куда заносятся данные изменяет которые только сам Повер. Ну, типа "workplane_active=3". А я в своем макросе используя переменную workplane_active, совершаю действия над активной СК, т.е над 3-й.

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

В строке макроса могут быть несколько функций и операторов, как я понял из листинга самих макросов, разделенные ";"

 

мало того - сами функции могут быть внутри других функций, как и операторы могут быть внутри других операторов и тд

 

Получается, что для поиска активного элемента помимо оператора IF, для перебора всех элементов нужен еще и цикл? Не сложно ли?

 

для перебора всех элементов  - да, используется цикл

но оператор IF это не оператор цикла,  а раздвоение действий

 

PS: посидел немного над руководством по макросам от 2016 милла, и вот что получилось:

IF entity_exists(workplane) {
   FORM BLOCK
   } else {
      FORM TOOLZHEIGHTS
}

Пояснение: если есть активная СК (с любым именем) - открыть заготовку, если нет активной СК - открыть режимы резания

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

если что - пиши, я поясню

 

и по второму вопросу хотелось бы прояснить - что ты хочешь сделать ?

можно поподробнее, или  часть макроса ?

Ссылка на сообщение
Поделиться на других сайтах
и по второму вопросу хотелось бы прояснить - что ты хочешь сделать ? можно поподробнее, или часть макроса ?

Спасибо большое за участие, ответы. По первому вопросу теперь все ясно.

Второй вопрос по сути как и первый. Просто выбор идет не по активному элементу, а при явном его указании и если он не активный, сделать его активным и тогда работать с ним. Буду пробовать твои варианты.

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

Вопрос еще. Ты спец только по макросам или по всему ПоверМилл? По НЦСтудио? Есть ли здесь подобные ветки?
Я год назад устроился на наше предприятие... Мы изготавливаем деревянные модели для литейного производства. Я ЧПУ-шник с большим стажем, пишу программы, но преимущественно  по токарным работам. Здесь же фрезеровка, да еще 3Д. У нас стоял ПоверМилл 8. Вот с него и начинал. Через три месяца я остался один из программистов, самостоятельно мог уже многое делать. Нашел ПоверМилл 2012 в ноябре, с мая сижу на 2016. Переход с версии на версию прошел успешно. Но понимаю, что знаю его мало, хотя для наших работ полностью мои знания ПоверМилла подходят. Просто хочу самосовершенствоваться...

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

ACTIVATE Workplane "3" - это прямое указание

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

ну типа примера выше - string prompt

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

 

Ты спец только по макросам или по всему ПоверМилл?

да я не спец - я только учусь )

зайди на форум делкама почитай  - один пишет что у него есть  макрос на 2 Мб, с помощью которого он делает почти все детали

2 МБ ! только представь сколько это страниц команд получится !?

вот он спец

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

Вопрос №2, как записать строку макроса, чтобы происходил запрос на указание номера(имени) СК?

получилось вот так -

$workplane = INPUT "Введите имя СК"
ACTIVATE workplane $workplane

если нужно это проделать с другими элементами, то "workplane" заменить три раза на нужный элемент

 

Вопрос№1, как записать строку макроса, которая бы указывала бы на активный элемент?

Подобные запросы мне нужны не только относительно СК, но и границ, инструмента, 2Д моделей

использование активного элемента указывается точкой с запятой

по крайней мере для траекторий и границ проверил - работает

например - вот прямое указание  -

EDIT TOOLPATH "1" CALCULATE

т.е. - вычислить траекторию 1

а вот указание на активный элемент

EDIT TOOLPATH ; CALCULATE

будет вычислена активная траектория

 

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

STRING activename = Toolpath.name
EDIT TOOLPATH $activename CALCULATE

для границ тоже работает

 

PS: в последнем случае использовалась строковая переменная activename

как я понял - это внутренняя переменная повермилла

в справке её нет, как и нет других внутренних переменных (нашёл на форуме делкама)

может кто знает - где искать эти переменные, если в справке милла их нет ? кто-то ж находит их

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

Есть ли макросы позволяющие автоматически разделить по слоям вертикальные/горизонтальные поверхности, поверхности перпендикулярные плоскости ХУ (отверстия, пазы, окна)?

 

Макрос можно построить на основе следующих команд:

 

EDIT SELECTUNDERCUT MODEL "<Имя модели>" FORM SELECTUNDERCUT

VIEW MODEL ; UCANGLE "0"   // 0 - вертикальные стенки; 90 - горизонтальные

EDIT SELECTIONTOOLS MATCH_DRAFT_ANGLE YES

FORM APPLY SELECTUNDERCUT

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

возможно в ПоверМилл есть типа глобальные переменные, куда заносятся данные изменяет которые только сам Повер. Ну, типа "workplane_active=3". А я в своем макросе используя переменную workplane_active, совершаю действия над активной СК, т.е над 3-й.

в дополнение к моему предыдущему посту, нашёл вот такую строку макроса

STRING ModelName = INPUT ENTITY MODEL "Set Active Model."

здесь имени модели присваивается имя активной модели

думаю, для СК можно будет поступить также

но я пока не проверял

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

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

1.png

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

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

ну это же простейший случай - разве простая запись действий не срабатывает тут ?

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

ну это же простейший случай - разве простая запись действий не срабатывает тут ?

Простая запись срабатывает, но только для той модели для которой производилась запись, после вычисления заготовки "Длина X" имеет некое значение например 100, пишу как выше на скрине +20 к "Длине X", в итоге в макросе "Длина X" всегда вычисляется 120 мм, а нужно чтобы к фактической вычисленной "X" добавлялось 20 мм, (чтоб макрос был универсальным для любой загруженной модели).

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

нужно чтобы к фактической вычисленной "X" добавлялось 20 мм, (чтоб макрос был универсальным для любой загруженной модели).

да, почему-то милл добавляет 20мм к фактическому значению

 

тогда - вот такой вариант:

FORM BLOCK
DELETE BLOCK
EDIT BLOCK ALL UNLOCK
EDIT BLOCK TOLERANCE "0.01"
EDIT BLOCK RESETLIMIT "10"
EDIT BLOCK RESET
EDIT BLOCK XLEN LOCK
EDIT BLOCK XMAX LOCK
EDIT BLOCK RESETLIMIT "0"
EDIT BLOCK RESET
BLOCK ACCEPT

 

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

Всем привет.

Я ничего не смыслю в макросах. Хочу посоветоваться со спецами. Есть проблема, можно ли решить вопрос на уровне макросов. Если в теории такое вообще возможно, то начну копать макросы )

 

Суть проблемы такова, - имеется пятиосеовой голова-голова. Ограничения по поворотной голове +-360гр. Реконфигурацию( раскрутку) сложно реализовать, поэтому в НЦ файле стоит проверка на достижение ограничения и если ограничение достигнуто, постпроцессирование останавливается по ошибке. Штатные методы(упорядочивание зигзагом и автоматическое упорядочивание зигзагом) не делают свою работу, ось в некоторых местах все равно закручивается. Приходится править ручками или резать траекторию на две, вдоль оси вращения.

 

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

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

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

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

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

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

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

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

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

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

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

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




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