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

Макросы в 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 пользователей

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




  • Сообщения

    • gudstartup
      да у вас очень древний чемоданчик думаю из 90-х ну его ломать не жалко но если все уже заменили с рабочего то тут даже не знаю что и посоветовать....
    • stanislavz
      Спасибо за ответ. Так этот и был заказан на запас. В машине живой рабочий. Носителя нету, все в памяти hm628128-10 + ээпром.
    • gudstartup
      @stanislavz вы уж сразу еще один контроллер закажите а потом этот доламывайте. а со старым комбинировать не пробовали? у вас там диск или ssd в качестве носителя? может hdd загибается а вы сразу в мат.плату полезли. дисковые операции тоже ввод вывод тормозят...
    • maxx2000
      Подушную малость. Чё там. Уже в упор научились резьбу резать без выходной канавки?
    • ispite
      Здравствуйте, не могу построить стандартную сетку, что не позволяет дальше провести расчёт. Получается сделать сетку "на основе кривизны", но солид отказывается считать, после нажатия кнопки "запустить исследование" происходит сбой. https://disk.yandex.ru/d/D8wvRbYMW1lWjQ
    • ddm
      изготовить по чертежу с последующим покрытием,цинкование ,по 1000 шт каждой позиции ,предложение отправить на почту qwer463@yandex.ru
    • sklide008
      И еще можно ли задать горчие клавиши на кнопки открыть, скрыть и тд?
    • sklide008
      Подскажите, пожалуйста, в инвенторе есть такой пункт упорядочи по алфавиту дерево. Здесь найти такого не могу, пытался treesorter ставить но он добавляет просто в папку а не сортирует в дереве. Есть ли такой макрос чтобы все детали в дереве по порядку и алфавиту шли?
    • stanislavz
      Есть станок с данным контроллером. Все работает. Недавно была проблема с передачей данных - установил запасной контроллер. А запасной контроллер сказал нет работе. Проблема была в программе компьютера для передачи данных. Грустно, досадно, контроллер был куплен как рабочий. Как бы и не горит, но необходимо поправить. Плата управления с процессором mc68020, память hm628128-10. Память буферным питанием от 3 батареек + 0,5 Фарада на плате как буфер для замены батареек на 1 сутки. Лежало долго, без батареек. Симптомы: После первого включения, в памяти были и программы и параметры (0 странность). Честно, удивило. Но - система жутко тормозит, отклик на нажатие кнопки 3-5 секунд. В таком режиме сумел закачать машинные параметры под свой станок. Но это заняло час.. 4 строки и ждет секунд 10 итд. Есть видео. Перекинул с рабочего контроллера, БП, плату плц, ээпром плц - все то же. Проверил осциллографом кварцы живые , частота есть, амплитуда хорошая. 1 странность - после манипуляций по замене батарейки, старые записи из памяти исчезли. Ничего не коротнул. Возможно 0,5 Ф был не заряжен. Там тоже необходимы сутки для зарядки. Но как оно было запечатоно до этого - мистика. 2 странность. Если плата лежит ночь без питания, только с буфером - потом 2-3 минуты работает хорошо. 3 аналогично работает 2-3 минуты если питание отключить и очистить питание памяти (выпаял 0,5 Ф буфер с платы) Проверка памяти на старте есть. Проходит хорошо. На зависает, на холодную пайку не похоже. Шевелил / двигал все. Да и не виснет, именно тормозит. При том если оставить на час - тоже все стабильно плохо. Если набрать быстро 5 символей- экран сразу пуст, но после задержки символы будут на экране. Заказал второй процессор и память. 10 штук. Подавал прямо 5 вольт на память - все так же. Токи потребления между плохой и хорошей платой смогу проверит.    
    • brigval
×
×
  • Создать...