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

Макросы в Power Mill


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

Добрый день. Подскажите, пожалуйста. Возможно ли получить из данной строки информацию (см.рис), не активировав NC Файл. Создал макрос, для получения информации из данной строки использую вот такую запись STRING nc_direct = entity('ncprogram','').FileName. А хотелось бы просто выделить NC Файл, вызвать макрос и он отработал. Макрос работает, если активировать NC-файл, но иногда забываешь это сделать и приходится активировать его и запускать второй раз макрос. Хочется довести макрос до идеала.

4.png

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


А в макрос нельзя вставить строку ACTIVATE NCPROGRAM "имя nc-файла" перед строкой получения информации?

 

или (если не надо активировать)

 

STRING nc_direct = entity('ncprogram','имя nc-файла').FileName

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

 

22.12.2023 в 15:25, Павел1 сказал:

Добрый день. Подскажите, пожалуйста. Возможно ли получить из данной строки информацию (см.рис), не активировав NC Файл. Создал макрос, для получения информации из данной строки использую вот такую запись STRING nc_direct = entity('ncprogram','').FileName. А хотелось бы просто выделить NC Файл, вызвать макрос и он отработал. Макрос работает, если активировать NC-файл, но иногда забываешь это сделать и приходится активировать его и запускать второй раз макрос. Хочется довести макрос до идеала.

 

 

Записал видео ещё давно, но чет там есть какая-то неточность. Думал перепишу позже. Но время прошло, и я забыл, что в нём не так. Поэтому публикую как есть. В принципе должно работать. У меня много макросов устроено по такому принципу. Но есть и много, которые по другому принципу обрабатываются. 

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

 

 

 

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

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

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

Всем добрый день. Спасибо всем кто откликнулся на мой вопрос.

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

У меня записанные NC файлы могут хранится либо на компьютере на участке с ЧПУ (передаю по сети), либо в каталоге с проектом. Пошел по пути участников scorpion1007 и dd22. Выкладываю свой вариант макроса для открытия папки с хранением NC файлов. Для этого я создал новый пункт для выплывающего списка команд в файле «explorer.ppm». Может кому пригодится. Макрос для PM 2016.

 

FUNCTION Main (STRING $Selected_NCProgram ) {

ACTIVATE NCPROGRAM $Selected_NCProgram

STRING nc_direct = entity('ncprogram','').FileName

IF position($nc_direct, "Программы от Пупкина ") >= 0 {

$nc_direct = "\\S-PC656\Users\PSP\Desktop\Программы от Пупкина\"

OLE FILEACTION "OPEN" $nc_direct

} ELSE {

$nc_direct = project_pathname(0)+"\ncprograms"

$nc_direct = replace($nc_direct, "/", "\")

OLE FILEACTION "OPEN" $nc_direct

}

DEACTIVATE NCPROGRAM

}

 

По началу хотелось данный макрос закинуть не в выплывающий список, а назначить на горячую клавишу. После некоторых «мучений» решил оставить в таком виде. Работает и ладно.

 

Но осталось пару вопросов. Если кто может прояснить ситуацию по синтаксису при написании макроса. Без FUNCTION Main в данном случае.

 

1. Участник dd22 ответил «А в макрос нельзя вставить строку ACTIVATE NCPROGRAM "имя nc-файла" перед строкой получения информации?»

А как получить параметр "имя nc-файла" перед активацией данного NC файла? Т.е. я выделил какой-то NC файл, вызвал макрос, как мне указать, что нужно активировать выделенный NC файл? Если можно пример кода.

2. По началу создал макрос для проверки, все ли я делаю правильно. Простой макрос:

STRING nc_direct = entity('ncprogram','').FileName

message info $nc_direct

Активировал необходимый NC файл, и при выполнении команды «message info $nc_direct» выводилось пустое сообщение. После некоторых манипуляций с NC файлом выяснилось. Когда я создаю NC файл, запись в «Файл вывода» у меня создается автоматически и тогда команда «message info $nc_direct» дает пустое сообщение. Но если я каким-либо образом вручную изменю запись в «Файл вывода» (например, поставлю пробел и удалю его), то тогда команда «message info $nc_direct» выводит сообщение с указанным значением записи «Файл вывода». Но почему тогда в «рабочем» макросе все вычисляется как положено, даже никак не «воздействуя» на запись в «Файл вывода», и команду «message info $nc_direct» также здесь использовал для проверок.

 

 

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

1. Можно, но там замороченее код будет. Проще через Main

2. У тебя ошибка в макросе:

STRING nc_direct = entity('ncprogram','').FileName

 

Нужно:

STRING nc_direct = entity('ncprogram',$Selected_NCProgram).FileName

 

Активировать, кстати говоря, не обязательно

 

30.12.2023 в 22:24, dd22 сказал:

А в макрос нельзя вставить строку ACTIVATE NCPROGRAM "имя nc-файла" перед строкой получения информации?

 

или (если не надо активировать)

 

STRING nc_direct = entity('ncprogram','имя nc-файла').FileName

Вот же человек правильно написал синтаксис

Чтоб получить сущность(entity,объект) нужно её получить сначала, используя имя nc-файла

entity('ncprogram','имя nc-файла').FileName

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

Поля могут быть разные, строковые, числовые, списочные итд. Поэтому важно понимать, что именно вы хотите получить и заранее инициализировать переменную по нужный тип данных2024-01-06_164818.jpg 

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

Спасибо за дополнение к ответу. Подправил макрос - удалил строки Activate/Deactivate, подправил сущность entity('ncprogram', $Selected_NCProgram).FileName. Макрос работает.

 

C 1-м вопросом понятно, что не так все просто. Думал, может есть какая-то одна "секретная" строчка.

 

По 2-му вопросу... Вот сделал макрос исходя из "рабочего". Все равно при создании нового NC-файла, не может макрос получить информацию из строки "Файл вывода". Выводит пустое сообщение. Хоть активируй его, хоть не активируй. Я из-за этого еще "промучался". 

FUNCTION Main (STRING $Selected_NCProgram ) {
STRING nc_direct = entity('ncprogram', $Selected_NCProgram).FileName
message info $nc_direct

}

Я конечно не супер-пупер специалист в этих макросах. Но хочется разобраться в чем проблема? В одном случае работает система, в другом не работает. Муть какая-то.

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

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

Спасибо за дополнение к ответу. Подправил макрос - удалил строки Activate/Deactivate, подправил сущность entity('ncprogram', $Selected_NCProgram).FileName. Макрос работает.

 

C 1-м вопросом понятно, что не так все просто. Думал, может есть какая-то одна "секретная" строчка.

 

По 2-му вопросу... Вот сделал макрос исходя из "рабочего". Все равно при создании нового NC-файла, не может макрос получить информацию из строки "Файл вывода". Выводит пустое сообщение. Хоть активируй его, хоть не активируй. Я из-за этого еще "промучался". 

FUNCTION Main (STRING $Selected_NCProgram ) {
STRING nc_direct = entity('ncprogram', $Selected_NCProgram).FileName
message info $nc_direct

}

Я конечно не супер-пупер специалист в этих макросах. Но хочется разобраться в чем проблема? В одном случае работает система, в другом не работает. Муть какая-то.

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

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

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

 

 2024-01-06_195025.jpg 

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

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

У меня на скрине пути заданы через параметры. В принципе можно и пути задавать

У меня тоже все эти параметры инициализируются через Предпочтения. Все данные подгружаются при первом загрузке PM через pmstartup.mac. Поэтому строка "Файл вывода" у меня заполнена при создании NC-файла. Может быть это баг PM2016 такой?

1.png

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

 

Спасибо за помощь. Ладно фиг с ним уже с этими строками наверное. Рабочий вариант данного макроса работает и ладно, как говорится цель достигнута.:wallbash: Видео прилагаю что да как у меня происходит.

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

 У меня РМ 2024, попробовал , всё работает. Создал новый файл без траекторий, сразу выдает информацию

Народ на форуме Аутодеск пишет, что Повермилл не у всех сразу обновляет проект

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

C 1-м вопросом понятно, что не так все просто. Думал, может есть какая-то одна "секретная" строчка.

Попробуй так:

2024-01-06_214207.jpg

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

 У меня РМ 2024, попробовал , всё работает. Создал новый файл без траекторий, сразу выдает информацию

Народ на форуме Аутодеск пишет, что Повермилл не у всех сразу обновляет проект

Попробуй так:

 

"explorer_selected_entities()" - не работает в PM2016. Эта команда видимо уже относительно "новая". Тоже искал примеры на Автодесковском форуме. Все используют эту самую команду. Вот один пример из таких, который можно было бы переделать под мои нужды https://forums.autodesk.com/t5/powermill-forum/help-macro-to-open-nc-file-in-external-program/m-p/12476113

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

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

Добрый день!

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

 

FUNCTION Main(){
    STRING LIST patt = INPUT ENTITY MULTIPLE PATTERN "Choose patterns to remove from toolpaths: "
    
    IF size(patt) <= 0 {
        RETURN
    }
    
    FOREACH $tp IN FOLDER("Toolpath") {
        ACTIVATE Toolpath $tp
        IF entity_exists($pattern) {
            FOREACH $pat IN patt {
                IF $pattern.name == $pat {
                    FORM TOOLPATH
                    EDIT TOOLPATH ; RECYCLE
                    YES
                    EDIT PAR 'Pattern' " "
                    EDIT TOOLPATH ; REAPPLYFROMGUI
                    Yes
                    CALL acceptForm()
                    BREAK
                }
            }
        }
    }
}

FUNCTION acceptForm(){
    //add here all forms you use with patterns
    FORM ACCEPT SFCurveProfile
    FORM ACCEPT SFPatternFinishing
}

 

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

Спасибо.

 

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

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

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

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

Спасибо! Мысль ясна, буду думать. Ещё бы я знал эти все команды)) 

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

Спасибо! Мысль ясна, буду думать. Ещё бы я знал эти все команды)) 

Макрос запрашивает шаблон для изменения, делает его копию и вызывает окно для его редактирования. После редактирования шаблона и нажатия кнопки ПРИНЯТЬ, продолжить выполнение макроса нажатием кнопки ПРОДОЛЖИТЬ. Макрос пробегается по всем траекториям, находит где был использован первоначальный шаблон, заменяет его на отредактированную копию и пересчитывает траекторию заново. После того как все просчиталось старый шаблон удаляется, а изменённый шаблон перезимовывается именем старого шаблона

 

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

FUNCTION Main(){
    STRING old_patt = INPUT ENTITY PATTERN "Выберите шаблон:"
    RENAME Pattern $old_patt "temp"
    COPY PATTERN "temp"
    EDIT PATTERN "temp_1" CURVEEDITOR START
    string message="Внесите изменения в шаблон"+crlf+"и нажмите продолжить"+crlf+"Спасибо автору:"+crlf+"Сбер 2202 2035 0450 6637"
    MACRO PAUSE $message
    FOREACH $tp IN FOLDER("Toolpath") {
    DEACTIVATE PATTERN
    ACTIVATE Toolpath $tp
    if (tp.Strategy=='pattern' or tp.Strategy=='curve_profile' OR Strategy=='curve_area_clear' OR Strategy=='chamfer') {
        string asd=$tp.pattern.name
        IF $asd == "temp" {
            FORM TOOLPATH
            EDIT TOOLPATH ; RECYCLE
            YES
            string mysmd="EDIT PAR 'Pattern' 'temp_1'"
            DoCommand $mysmd
            EDIT TOOLPATH $tp.Name CALCULATE
            FORM ACCEPT SFPatternFinishing
            FORM ACCEPT SFCurveProfile
            }
        }
    }
DELETE PATTERN "temp"
RENAME Pattern "temp_1" $old_patt
}


 

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

Макрос запрашивает шаблон для изменения, делает его копию и вызывает окно для его редактирования. После редактирования шаблона и нажатия кнопки ПРИНЯТЬ, продолжить выполнение макроса нажатием кнопки ПРОДОЛЖИТЬ. Макрос пробегается по всем траекториям, находит где был использован первоначальный шаблон, заменяет его на отредактированную копию и пересчитывает траекторию заново. После того как все просчиталось старый шаблон удаляется, а изменённый шаблон перезимовывается именем старого шаблона

 

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

FUNCTION Main(){
    STRING old_patt = INPUT ENTITY PATTERN "Выберите шаблон:"
    RENAME Pattern $old_patt "temp"
    COPY PATTERN "temp"
    EDIT PATTERN "temp_1" CURVEEDITOR START
    string message="Внесите изменения в шаблон"+crlf+"и нажмите продолжить"+crlf+"Спасибо автору:"+crlf+"Сбер 2202 2035 0450 6637"
    MACRO PAUSE $message
    FOREACH $tp IN FOLDER("Toolpath") {
    DEACTIVATE PATTERN
    ACTIVATE Toolpath $tp
    if (tp.Strategy=='pattern' or tp.Strategy=='curve_profile' OR Strategy=='curve_area_clear' OR Strategy=='chamfer') {
        string asd=$tp.pattern.name
        IF $asd == "temp" {
            FORM TOOLPATH
            EDIT TOOLPATH ; RECYCLE
            YES
            string mysmd="EDIT PAR 'Pattern' 'temp_1'"
            DoCommand $mysmd
            EDIT TOOLPATH $tp.Name CALCULATE
            FORM ACCEPT SFPatternFinishing
            FORM ACCEPT SFCurveProfile
            }
        }
    }
DELETE PATTERN "temp"
RENAME Pattern "temp_1" $old_patt
}


 

Огромное спасибо!

А вообще есть учебник по макросам толковый? Я нашёл только для PowerMill 2012, и на английском и на русском, но он уж больно краток и обобщён.
Но на первоначальное обучение, конечно, поможет.

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

День добрый. Что-то не работает у меня Ваш макрос. 

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

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

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

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

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

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

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

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

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

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

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

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

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



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