eksodus

Макросы в Power Mill

227 сообщений в этой теме

Сделал пару макросов для Повермилла

Постоянно запускаю их вручную

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

Поделиться сообщением


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


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

C:\Program Files\Delcam\PowerMILLXXX\lib\macro\pmstartup.mac - запускается при старте, можно писать в него, что нужно.

а другой после расчёта каждой траектории ?

Нет, но можно создать на панели кнопку, вызывающую макрос.

Поделиться сообщением


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

C:\Program Files\Delcam\PowerMILLXXX\lib\macro\pmstartup.mac - запускается при старте, можно писать в него, что нужно.

спасибо

можно создать на панели кнопку, вызывающую макрос.

как Вы писали в этой теме - <noindex>http://fsapr2000.ru/index.php?showtopic=42893</noindex>

эта возможность появилась только в версии PM2010

у меня же версия PM10 SP5

Изображение

Поделиться сообщением


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

В любой версии МИЛЛа можно создавать пользовательское контекстно-зависимое меню, которое вызывается в пустом месте дерева проекта.

Изображение

Как сделать меню описано в справочном руководстве.

В последних версиях МИЛЛа можно создавать разные меню, индиидуальные для каждого раздела дерева проекта или для каждого типа компонента дерева (свое для траектории, для границы и т.д.)

Поделиться сообщением


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

Всем привет.
 

А какая команда запрашивает указание объекта на экране?

Что хочу сделать: хочу чтобы макрос создавал шаблон, по шаблону писал обработку. При запуске макроса нужно чтобы он попросил указать кривую для создания шаблона. Это возможно? 

Посмотрел документацию, не увидел таких команд.

 

Или другой пример: макрос для создания обработки боком фрезы. После запуска макроса он просит указать поверхность, по которой будет бегать фреза. Как это сделать?

Поделиться сообщением


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

В итоге, в параметрической модели распихал геометрию по слоям и потом в РМ в макросе выбирал слой, выбирал все кривые (поверхности) на этом слое, писал на них обработку.

Всё заработало. Сейчас понимаю, что это более удобно, чем выбирать геометрию ручками.

 

Но, ежели кто ответит как сделать выбор кривой интерактивным - будет интересно.

Поделиться сообщением


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

Всем привет !

 

Очень нужна помощь при создании макроса, точнее нужно помочь отредактировать уже готовый макрос.

Написал макрос для автоматизации гравировки. Текст гравировки уже имеется на самой модели.

 

Предварительные условия для запуска макроса:

1) создать СК

2) задать заготовку

3) выбрать мышкой поверхности, содержащие текст

 

После этого я запускаю макрос. Он делает следующее:

1) создаёт границу по выбранным поверхностям, и удаляет наружный контур границы (это по сути внешний контур плоскости, но которой имеется текст)

2) создаёт шаблон и вставляет в шаблон созданную границу

3) создаёт инструмент

4) создаёт траекторию "По шаблону" и высчитывает её с созданным шаблоном

5) создаёт и записывает НС файл

6) делает 2 скриншота - вид сверху и изометрический

 

Всё работает, всё хорошо, но !

1) Если создать новый проект и импортировать туда другую модель, у которой СК отличается от той, в которой был написан макрос, то граница не создаётся, потому что при удалении наружного контура PowerMILL считывает из макроса координаты в той СК, в которой писался макрос !

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

 

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

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

Можно как-то сделать, чтобы кнопки Вид сверху и Вид ИЗО 1 применялись к активной СК ? то есть прописать это как-то в макросе ?

 

PS: а я вначале уже обрадовался, сделал модель, написал макрос, пару раз менял размеры модели, чтобы проверить что всё работает хорошо.

Но потом решил сделать другую модель, в которой СК получилась повёрнутой, и вот такие бока вылезли.

А ведь всего-то хотелось - выбрать поверхности и нажать на кнопочку - 90d5ce19bcc7bb538476e712eacf131a.png (вторая слева), и программа на гравировку готова :smile:

 

Прикладываю архив. Внутри сам макрос, модель1 - в которой изначально всё и делалось, и модель2 - в которой другая СК

 

Gravirovka.zip

Поделиться сообщением


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

Всем привет !

 

Привет.

Использовать команду PICK  в макросе - не лучшая идея. Предлагаю свой ритуальный танец.

В приложении макрос, который делает следующее:

1. Создает заготовку в виде блока по детали в ГСК

2. Создает СК по заготовке

3. Создает границу по поверхности.

4. Удаляет из границы ненужный контур

5. Создает шаблон по границе

 

Предварительно необходимо создать слой "Гравировка" с поверхностью, описывающей контур гравировки

 

Есть второй вариант, когда макрос может попросить выбрать поверхности, когда это потребуется. Но думаю, это не совсем то, что требуется тут.

Создать_шаблон_по_выбранным_поверхностям.txt

Поделиться сообщением


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

В итоге, в параметрической модели распихал геометрию по слоям и потом в РМ в макросе выбирал слой, выбирал все кривые (поверхности) на этом слое, писал на них обработку.

Всё заработало. Сейчас понимаю, что это более удобно, чем выбирать геометрию ручками.

 

Но, ежели кто ответит как сделать выбор кривой интерактивным - будет интересно.

Макрос может интерактивно запрашивать информацию, в частности, попросить выбрать какие-то элементы.

Вот пример:

GET EXAMPLES 'cowling.dgk'

ROTATE TRANSFORM TOP

CREATE TOOL ; BALLNOSED

EDIT TOOL ; DIAMETER 10

EDIT BLOCK RESET

CREATE BOUNDARY ; SELECTED

STRING Msg = "Выберите поверхности для создания границы."+crlf+"Затем нажмите ПРОДОЛЖИТЬ"

EDIT BLOCK RESET

MACRO PAUSE $Msg

EDIT BOUNDARY ; CALCULATE

Можно как-то сделать, чтобы кнопки Вид сверху и Вид ИЗО 1 применялись к активной СК ? то есть прописать это как-то в макросе ?

 

Эти кнопки в принципе ориентируют модель в активной СК. Попробуй активировать нужную СК непосредственно перед ориентированием вида.

 

ACTIVATE WORKPLANE "Имя СК"

ROTATE TRANSFORM TOP

Поделиться сообщением


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

ACTIVATE WORKPLANE "Имя СК"

ROTATE TRANSFORM TOP

 

как раз команды ACTIVATE WORKPLANE "Имя СК" у меня и не было, добавил - работает, спасиб

 

Есть второй вариант, когда макрос может попросить выбрать поверхности, когда это потребуется. Но думаю, это не совсем то, что требуется тут.

 

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

подскажешь, как это можно сделать ?

 

Использовать команду PICK в макросе - не лучшая идея

 

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

 

Предлагаю свой ритуальный танец

 

CURVEEDITOR MODE REORDER - ругается милл на такую команду

 

Поделиться сообщением


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

CURVEEDITOR MODE REORDER - ругается милл на такую команду

А в редакторе кривых есть функция Упорядочить сегменты?

post-37939-0-03531100-1440407873_thumb.png

подскажешь, как это можно сделать ?

Выше сообщение с примером

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А в редакторе кривых есть функция Упорядочить сегменты?

нету, в 2012 милле вот такая панелька кривых - 5ebdf8d9311cf1e7250e65535ac94eaa.png

 

 

 

Выше сообщение с примером

я очень внимательно всё читаю, и уже конечно проверил это, прежде чем написать

к сожалению - в 2012 милле не работает - вот такую ошибку выдаёт -

e775153734fb7aec8991a270bd83c259.png

 

Update: нашёл решение как удалить наружный контур границы

1) сначала создаётся инструмент

2) в свойствах границы - Правка-Выбрать область-Больше чем

поставил цифру 1 (1 диаметр фрезы), и нажал кнопку Delete

теперь наружный контур удалён, и в макросе вместо команды PICK с кучей цифр в 3 строки, теперь такая аккуратная строчка -

 

EDIT BOUNDARY "Grav1" SELECT AREA GE

"1"

 

Осталось разобраться как заставить макрос, чтобы он просил выбрать поверхности

Надеюсь Кинематик поможет )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Надеюсь Кинематик поможет )

В общем, в 2012 версии из функции по взаимодействию с пользователем доступны только Yes/No окошко и окно ввода числовых значений. Функции PAUSE, увы, нет.

Поэтому остается только вариант с разнесением поверхностей по слоям.

 

Либо, если использовать именно создание границы по выбранным поверхностям, то, поскольку этот метод опирается за предварительно заданную заготовку, можно создать заготовку с толщиной 0,1 мм от верхней Z:

// Создаем заготовку

    FORM BLOCK

    EDIT BLOCK COORDINATE WORLD

    EDIT BLOCK RESET

    EDIT BLOCK ZMIN "block.limits.zmax-0.1"

    BLOCK ACCEPT

 

Ну и потом удалить внешний контур

Поделиться сообщением


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

В общем, в 2012 версии из функции по взаимодействию с пользователем доступны только Yes/No окошко и окно ввода числовых значений.

 

печально

 

ну да ладно, макрос готов

если кому надо  - прикладываю ниже

 

для его работы перед запуском надо создать СК детали, задать заготовку и выбрать поверхности, на которых уже есть текст.

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

 

Что делает макрос:

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

- потом создаёт траекторию, вставляет шаблон, считает её, создаёт и записывает НС файл

- и в конце делает два скриншота на белом фоне, вид сверху и вид ИЗО1, и копирует их на рабочий стол

Gravirovka.zip

3 пользователям понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Что делает макрос: - создаёт инструмент, создаёт границу, удаляет её наружный контур на диаметр инструмента, чуть уменьшает границу, создаёт шаблон и вставляет в него границу - потом создаёт траекторию, вставляет шаблон, считает её, создаёт и записывает НС файл - и в конце делает два скриншота на белом фоне, вид сверху и вид ИЗО1, и копирует их на рабочий стол

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

Поделиться сообщением


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

подскажите, как выбрать все траектории макросом ?

нужно для трансформации


пример ниже трансформирует только одну траекторию среди всех - последнюю

понятно, что перед словом SERIES нужно задать  От и ДО каких траекторий

 

а может - можно задать ему в регулярных выражениях латиницу и киррилицу и цифры ?

повермилл их понимает ? (рег. выражения)

 

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

 

ниже - пример работающего макроса для последней траектории из списка

EDIT OPTIONS TOOLPATH AUTO_APPEND NO

FOREACH tp IN folder("toolpath") {
    EXPLORER SELECT Toolpath $tp.name SERIES
    MODE TOOLPATH_TRANSFORM START
    MODE TRANSFORM TYPE MIRROR
    MODE TRANSFORM COPY NO
    MODE TOOLPATH_TRANSFORM REVERSE_DIRECTION YES
    MODE TRANSFORM MIRROR YZ
    MODE TOOLPATH_TRANSFORM FINISH ACCEPT
}

PS: а для выбора всех моделей, шаблонов, границ, НС файлов и 2D моделей - какая команда ?

Поделиться сообщением


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

Добрый день !

 

может кто знает - как заставить работать этот макрос -

 

For example, a macro to polygonise a boundary to a specified tolerance is:

FUNCTION Main(REAL tol) { 
EDIT BOUNDARY ; SMASH $tol
}

A macro to set the diameter of a named tool is:

FUNCTION Main(
STRING name REAL diam
)
{
EDIT TOOL $name DIAMETER $dia
}

To run these macros with arguments add the arguments in the correct order to the end of the MACRO command:

 

MACRO MyBoundary.mac 0.5

MACRO MyTool.mac "ToolName" 6

 


Это из руководства по макросам.

В общем - пишу команду как указано выше со своим именем макроса - ничего не происходит

допуск границы не меняется, диаметр инструмента не меняется.

 

Как это заставить работать ?

Изменено пользователем eksodus

Поделиться сообщением


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

PS: по инструменту разобрался, вместо $dia надо $diam - там опечатка

теперь работает

 

а по границе - макрос не выдаёт никаких ошибок - но допуск границы не менятся (в её параметрах) и ошибок нет при запуске макроса

значит ли это что допуск поменялся, если в настройках всё равно осталось 0,01 (а по макросу 0,5) ? как это проверить ?

 

PS: перепроверил - всё работает и с границей тоже, сделал круглую границу, задал допуск 0,5 - граница стала стала ромбом, но в настройках всё равно осталось 0,01

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

Изменено пользователем eksodus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
PS: перепроверил - всё работает и с границей тоже, сделал круглую границу, задал допуск 0,5 - граница стала стала ромбом, но в настройках всё равно осталось 0,01
Имхится мне, что для изменения допуска границы должно быть открыто окно ее редактирования. Ну и сама не должна быть заблокирована, кстати. 

Поделиться сообщением


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

проверил, там всё проще - эта команда применяется только к активной границе, и только всего лишь один раз

открывать окно редактирования не обязательно

 

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

если же граница заблокирована траекторией - тогда этот макрос не выполняется

Поделиться сообщением


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

Поделиться сообщением


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

подскажите по макросу - из стандартного хелпа на английском:
 

 

For example, to declare an array of three strings:
STRING ARRAY MyArray[3] = {'First','Second','Third'}
All the items in the initialisation list must be the same BASIC-TYPE
as the array.
You can access the items of the array by subscripting. The first item in the array is subscript 0. For example:
INT Index = 0
WHILE Index < size(MyArray) {

     PRINT MyArray[index]
     $Index = Index + 1
}

Prints:

First

Second

Third

 

 

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

STRING ARRAY MyArray[3] = {'First','Second','Third'}
INT Index = 0
WHILE Index < size(MyArray) { 
     PRINT MyArray[Index]
     $Index = Index + 1
}

но он на 4-й строке выдаёт ошибку

как заставить его заработать ?

Поделиться сообщением


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

подскажите по макросу - из стандартного хелпа на английском:

 

 

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

STRING ARRAY MyArray[3] = {'First','Second','Third'}
INT Index = 0
WHILE Index < size(MyArray) { 
     PRINT MyArray[Index]
     $Index = Index + 1
}

но он на 4-й строке выдаёт ошибку

как заставить его заработать ?

Неверный синтаксис. PRINT = MyArray[index]

1 пользователю понравилось это

Поделиться сообщением


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

Неверный синтаксис. PRINT = MyArray[index]

 

спасибо )

 

и ещё нужна помощь  с макросом -

FUNCTION CleanBoundary(string name) {
REAL offset = 1 mm
REAL diam = entity('boundary';name).Tool.Diameter
// Удалить сегменты меньше чем диаметр инстр. 
EDIT BOUNDARY $name SELECT AREA LT $diam 
DELETE BOUNDARY $name SELECTED
//Смещение наружу и внутрь для сглаживания гран. 
EDIT BOUNDARY $name OFFSET $offset
EDIT BOUNDARY $name OFFSET ${-offset}
}
FUNCTION Main(string bound) { 
FOREACH bou IN folder(bound) {
CALL CleanBoundary(bou.Name)
}
}

если этот макрос запустить  из командной строки, как - macro 111 "20"

то макрос выполняется, но ничего изменяется

а он же должен удалить маленькую границу, которая меньше чем Д инструмента

как заставить работать этот макрос ?

 

и ещё вопрос: тут в цикле FOREACH папка границ пишется как bound

она аналогична имени boundary ? я имею в виду корневую папку границ в проводнике

 

 

и по другому макросу вопрос -

STRING CountToThree = One + ", " + Two + ", " + Three 
PRINT = CountToThree

при запуске пишет - не удаётся понять выражение

как его заставить заработать ?

 

 

PS: и примечание от меня по оператору SWITCH

Пример по изменению типа распределения точек не работает, пока его не вставить например в цикл

FOREACH ent IN folder("toolpath") {
ACTIVATE TOOLPATH $ent.Name

....................................................

EDIT TOOLPATH ; REAPPLY
}

в руководстве даже намёка на это нет, приходится догадываться самому

эх, тяжело для начинающих изучать макросы с такими примерами

Поделиться сообщением


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

и ещё вопрос - по циклу WHILE

STRING Fset = 'Top' 
INT Count = 0

WHILE Count < 2 {
ACTIVATE FEATURESET $Fset
ACTIVATE WORKPLANE FROMENTITY FEATURESET $Fset
IMPORT TEMPLATE ENTITY TOOLPATH "Drilling\Drilling.ptf" 
EDIT TOOLPATH $TpName CALCULATE
$Fset = 'Bottom'
$Count = Count + 1
}

макрос выдаёт ошибку

 

PS: Решено: исправил строку

EDIT TOOLPATH $TpName CALCULATE

на

EDIT TOOLPATH ; CALCULATE

теперь работает

 

PPS: ох и сколько ж тут ошибок/опечаток

Изменено пользователем eksodus

Поделиться сообщением


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

и ещё одна ошибка

макрос:

FUNCTION Calculate(STRING TpName) {

IF NOT active(entity('toolpath',TpName).Tool.TipRadius)
{
// Ошибка, если траектория не использует 
// скруглённый инструмент
PRINT "Траектория не содержит скруглённый инстр." 
RETURN
}

EDIT TOOLPATH ; CALCULATE
}

FUNCTION Main() {

FOREACH tp IN folder('Toolpath') { 
ACTIVATE TOOLPATH $tp.Name)
}
}

говорит что нет функции Main

при исправлении же

ACTIVATE TOOLPATH $tp.Name)

на

ACTIVATE TOOLPATH $tp.Name

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

как  исправить данный макрос ?

Изменено пользователем eksodus

Поделиться сообщением


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

и ещё одна непонятка, вот макрос:

FOREACH item IN components(entity('ncprogram','')) {
// only check nctoolpath items
IF lcase(item.RootType) == 'nctoolpath' {
// If the area clearance parameter is active then use flood
IF active(entity('toolpath',item.Name).AreaClearance) {
$item.Coolant.Value = "flood"
} else {
$item.Coolant.Value = "mist"
}
}
}

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

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

 

как сделать чтобы этот макрос срабатывал сразу ?

может добавить какую-то команду ?

Поделиться сообщением


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

Помогите найти русское руководство по макросам к PowerMill 2012

Поделиться сообщением


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

И ещё один вопрос, вот из руководства по макросам:

In other cases, you may want convert a real number to an integer, or an integer to a real number:

INT a = 2 
INT b = 3 
REAL z = 0
$z = a/b 
PRINT $z

This prints 0.0.

If you want the ratio then you have to convert either a or b to real
within the assignment expression.

INT a = 2 
INT b = 3 
REAL z = 0
$z = real(a)/b 
PRINT $z

This prints 0.666667.

То есть, в первом варианте должен быть выведен 0, а во втором - 0,666667

А в реальности выводится и в первом и во втором варианте  - 0,666667

Где там ошибка в первом варианте ?

 

 

и последнее, этот макрос:

REAL maxz = -100000
REAL minz = abs(maxz)
FOREACH item IN components(entity('ncprogram','')) { 
   IF item.RootType == 'nctoolpath' {
     $maxz = max(maxz,entity('toolpath',item.Name))
     $minz = min(minz,entity('toolpath',item.Name))
  }
}
MESSAGE info "Min = " + string(minz) + ", Max = " + string(maxz)

выдаёт ошибку: Не удаётся понять выражение.

Строка 5.

Как это исправить ?

(в строке 6 - аналогичная ошибка, просто макрос до неё не доходит)

 

Помогите найти русское руководство по макросам к PowerMill 2012

ну я вот почти перевёл, осталось вот эти ошибки исправить и чуток дооформить

подожди немного, выложу как всё сделаю

 

Изменено пользователем eksodus

Поделиться сообщением


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

Буду очень ждать. Хочу создать макрос, который бы устанавливал СК в середину заготовки. Но не могу понять как мне указать нужную мне точку. Получается, что макрос должен быть интерактивным.  Он приостанавливает свое действие в тот момент, когда мне нужно указать точку. После указания мной точки макрос продолжает работу.

Изучение макросов начал совсем недавно. Случайно узнал о такой возможности. Попробовал записать макрос на траекторию черновой обработки - Выборка 3Д модели... Получилось, на другие записал. Все отлично работает. А то раньше каждый раз приходилось настраивать обработку со значений по умолчанию на свои. А это 4-5 программ в день... Сейчас намного быстрее создаются программы.

Поделиться сообщением


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

это появилось только в 2013 милле

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

первая часть выполняет свои команды и запускает процесс создания СК по заготовке

а ты уже вручную досоздаёшь СК, и потом запускаешь вторую часть

 

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

может через переменные min и max, в твоём случае - minx miny maxx maxy

по принципу - вычислить абсолютные и относительные  размеры заготовки,

и поместить СК в точке, равной половине абсолютного значения заготовки по каждой оси?

 

параметр для задания СК - {workplane}.Origin

 

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

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

создать инструменты и границы и тд - и сохранить всё это как шаблон окружения,

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

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

 

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

Изменено пользователем eksodus

Поделиться сообщением


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

Буду отвечать по возможности.

Тут правим:

 

 

FUNCTION CleanBoundary(string name) { REAL offset = 1 mm REAL diam = entity('boundary';name).Tool.Diameter // Удалить сегменты меньше чем диаметр инстр. EDIT BOUNDARY $name SELECT AREA LT $diam DELETE BOUNDARY $name SELECTED //Смещение наружу и внутрь для сглаживания гран. EDIT BOUNDARY $name OFFSET $offset EDIT BOUNDARY $name OFFSET ${-offset} } FUNCTION Main(string bound) { FOREACH bou IN folder(bound) { CALL CleanBoundary(bou.Name) } }

В строке FOREACH изменяем: FOREACH bou IN folder ('Boundary\'+bound)

В противном случа милл просто не знает, в в каком разделе лежит папка bound. А так мы ему говорим, что папка bound лежит в границах



STRING CountToThree = One + ", " + Two + ", " + Three 
PRINT = CountToThree

Это две последние строчки макроса. Сам макрос такой:

STRING One = "One"
STRING Two = "Two"
STRING Three = "Three"
STRING CountToThree = One + ", " + Two + ", " + Three
PRINT = CountToThree

и ещё одна ошибка


как  исправить данный макрос ?

Скобка в строке Activate функции Main точно лишняя. В остальном у меня все работает.


и ещё одна непонятка, вот макрос:

FOREACH item IN components(entity('ncprogram','')) {
// only check nctoolpath items
IF lcase(item.RootType) == 'nctoolpath' {
// If the area clearance parameter is active then use flood
IF active(entity('toolpath',item.Name).AreaClearance) {
$item.Coolant.Value = "flood"
} else {
$item.Coolant.Value = "mist"
}
}
}

 

Макрос рабочий. В макросе проверяется условие, является ли траектория Выборкой. Если да, то режим сож изменяется.


И ещё один вопрос, вот из руководства по макросам:

 

Чушь, конечно, в руководстве. Переменные а и b - целочистенные, z - действительно. Поэтому если a разделить на b, то получится все равно действительное, поэтому z = 0.66667. Если нужно получить целочисленный результат деления, то нужно это указать, т.е. либо задать не REAL z, а INT z при объявлении, либо конвертировать результат деления, т.е. z = int(a/b).

Суммарно

INT a = 2
INT b = 3
REAL z = 0
$z = a/b
PRINT $z 

Ответ: 0,66667

INT a = 2
INT b = 3
REAL z = 0
$z = int(a/b)
PRINT $z

Ответ: 0

 

ИЛИ

INT a = 2
INT b = 3
INT z = 0
$z = a/b
PRINT $z

Ответ: 0

Изменено пользователем Kinematik
1 пользователю понравилось это

Поделиться сообщением


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

да, спасибо

 

 

Скобка в строке Activate функции Main точно лишняя. В остальном у меня все работает.

хорошо, если в данном макросе убрать скобку - то повермилл ошибок не выдаёт

FUNCTION Calculate(STRING TpName) {

IF NOT active(entity('toolpath',TpName).Tool.TipRadius)
{
// Ошибка, если траектория не использует 
// скруглённый инструмент
PRINT "Траектория не содержит скруглённый инстр."
RETURN
}

EDIT TOOLPATH ; CALCULATE
}

FUNCTION Main() {

FOREACH tp IN folder('Toolpath') {
ACTIVATE TOOLPATH $tp.Name
}
}

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

да, ошибок нет, - но вычисления не происходит

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

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

 

PS: оказалось тут в функции Main нет вызова функции Calculate

если изменить её на

FUNCTION Main() {
   FOREACH tp IN folder('Toolpath') {
   ACTIVATE TOOLPATH $tp.Name
   CALL Calculate(tp.Name)
 }
}

то вычисления теперь происходят

и ещё надо было закрывающую скобку в операторе IF  перенести на пред строку

 

хорошо, эти два макроса теперь исправлены

Изменено пользователем eksodus

Поделиться сообщением


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

Если нужно получить целочисленный результат деления, то нужно это указать, т.е. либо задать не REAL z, а INT z при объявлении, либо конвертировать результат деления, т.е. z = int(a/b)

спасибо, это тоже теперь выводит правильно всё

 

 

 

и ещё одна непонятка, вот макрос:

FOREACH item IN components(entity('ncprogram','')) {
// only check nctoolpath items
IF lcase(item.RootType) == 'nctoolpath' {
// If the area clearance parameter is active then use flood
IF active(entity('toolpath',item.Name).AreaClearance) {
$item.Coolant.Value = "flood"
} else {
$item.Coolant.Value = "mist"
}
}
}

 

Макрос рабочий. В макросе проверяется условие, является ли траектория Выборкой. Если да, то режим сож изменяется.

 

 

 

не совсем так - если Выборка, то режим меняется на Полив

для всех остальных - Туман

а по умолчанию везде стоит - Стандартное

так что меняться будет для всех траекторий

 

но тут вопрос в другом - как я уже писал, и сейчас вот ещё раз перепроверил - макрос то рабочий, но срабатывает он не с первого раза (почему так ?)

и самое главное - значения охлаждения НЕ сохраняются

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

 

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

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

 

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

почему так ? и это вопрос наверное к миллу, а не к макросу ?

 

и ещё одно - макрос срабатывает только к активному НС файлу

если все НС файлы неактивны - выдаёт ошибку

 

а если даже вставить в цикл -

FOREACH ent IN folder("ncprogram") {
ACTIVATE ncprogram $ent.Name

...............................................

NCTOOLPATH APPLY
NCTOOLPATH ACCEPT FORM ACCEPT NCTOOLPATHLIST
}

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

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

 

PowerMILL 2012

 

 

 

 

 

 

Поделиться сообщением


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

PowerMILL 2012

Это хорошая оговорка ))) У меня же 2016, так что макросы могут по-разному работать. Установлю себе 2012, отвечу

Поделиться сообщением


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

Итак - перевод полностью завершён.

Сконвертировал в пдф-ку. Но перед тем как выложить хочу исправить ещё пару ошибок

 

Это хорошая оговорка ))) У меня же 2016, так что макросы могут по-разному работать. Установлю себе 2012, отвечу

 

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

а вот два макроса есть нерабочие

один, как я уже писал выше - выдаёт ошибку:

REAL maxz = -100000
REAL minz = abs(maxz)
FOREACH item IN components(entity('ncprogram','')) {
IF item.RootType == 'nctoolpath' {
$maxz = max(maxz,entity('toolpath',item.Name))
$minz = min(minz,entity('toolpath',item.Name))
}
}
MESSAGE info "Min = " + string(minz) + ", Max = " + string(maxz)

ошибка в 5 строке - $maxz которая

 

и второй макрос ошибки не выдаёт, но ничего не происходит:

FUNCTION CleanBoundary(string name) {
     REAL offset = 1 mm
     REAL diam = entity('boundary';name).Tool.Diameter
     // Удалить сегменты меньше чем диаметр инстр. 
     EDIT BOUNDARY $name SELECT AREA LT $diam
     DELETE BOUNDARY $name SELECTED
     //Смещение наружу и внутрь для сглаживания гран. 
     EDIT BOUNDARY $name OFFSET $offset
     EDIT BOUNDARY $name OFFSET ${-offset}
   }
FUNCTION Main(string bound) {
     FOREACH bou IN folder(bound) {
     CALL CleanBoundary(bou.Name)
   }
}

Кинематик, если даже заменить строку как ты говорил на FOREACH bou IN folder ('Boundary\'+bound) -

то всё равно ничего не происходит. То есть маленькие участки границ не удаляются, и смещение не выполняется +-  1 мм.

Ну то есть ошибок нет, но и не работает макрос.

Вот птф-ка от 2012 милла и dgk границы - попробуй, у меня этот макрос не работает.

Или может я что-то не так делаю ?

 

PS: конечно можно изменить макрос на типа:

FOREACH ent IN folder("boundary") {
ACTIVATE Boundary $ent.Name      
REAL offset = 1 mm
     REAL diam = 5
     EDIT BOUNDARY $ent.Name  SELECT AREA LT 1
     DELETE BOUNDARY $ent.Name SELECTED
     EDIT BOUNDARY $ent.Name OFFSET $offset
     EDIT BOUNDARY $name OFFSET ${-offset}
   }

тогда всё работает

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

но в руководстве по макросам объясняется функция Main - это будет тогда некорректным примером

Bound.zip

Поделиться сообщением


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

неужели никто больше не пользуется макросами ?

Кинематик занят, а остальные молчат

 

Ну ладно, чтобы не затягивать надолго время  -

вот полная русская версия Руководства по марокпрограммированию для милла 2012

 

Примечание:

Макросы на 50-52 страницах не работают - просто ничего не происходит. (возможно, я их неправильно запускаю)

Макрос на 84 странице - выдаёт ошибку.

 

Все остальные макросы в примерах работают.

PowerMILL 2012 - Макропрограммирование.pdf

7 пользователям понравилось это

Поделиться сообщением


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

Если мануаль на русском то все начнут изучать макросы . спсасибо :smile:

Поделиться сообщением


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

готовлю пакет макросов для всеобщего пользования, те с котрыми работаю сам (около 30шт),+ меню пользователя, значительно ускоряющих работу повер мила.

3 пользователям понравилось это

Поделиться сообщением


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

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

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

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

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

  • реклама

  • Реклама

  • Ближайшие события

    Предстоящих событий не найдено
  • Дни рождения сегодня

    1. Anki
      Anki
      (38 лет)
    2. aqwa
      aqwa
      (46 лет)
    3. biser.73
      biser.73
      (44 года)
    4. C-Cam
      C-Cam
      (32 года)
    5. helicopt
      helicopt
      (41 год)
    Просмотреть все