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

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

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



  • Сообщения

    • Snake 60
      Скорее всего исправляли в конкретной сборке, для конкретных тел. Насколько я помню, надо в самом эскизе профиля заполнить свойство Description
    • Snake 60
      Делаете дырку в свае - вставляете в нее трубу и 2 человеко-силы крутят сваю ) Дёшево и сердито и не нужен никакой планетарный редуктор ))
    • gudstartup
      вы всегда ищите свой путь или будете делать то что вам советуют? с самого начала прежде чем приступать к экспериментам вам нужно было вынуть носитель и сделать образ. diskcopy делает копию гибкого диска на другой а вам надо сделать образ жесткого диска или карты памяти. делайте как советует @Viktor2004 иначе еще чего нибудь сломаете или вам станок не нужен и вы его приобрели для экспериментов ? вот а печатной машинке из прошлого нельзя а вот на синумерике можно - удивительные вещи в настоящем происходят!! на 100 % уверен что там не модуль а либо писимиси ай либо жд @mircomax81 хотите работать в дос почитайте помощь по командам 
    • PuKoLLleT
      Доброго дня всем. Поделитесь опытом,раньше такое не доводилось делать. На торце фланца нужно сделать  восемь отверстий ф17H7 на токарно-фрезерном станке с осью Y ,имеется ManualGuide.В моем понимании нужно просверлить,а затем торцевой фрезой расточить нужный диаметр.Получится такой фокус,или надо разверткой доводить нужный размер?  Стойка Fanuc 0i-Tf.
    • Snake 60
      Всё верно, я даже русификатор делал для него (ушло на это где-то около года). Хороший софт был, я всех знакомых на него подсадил в свое время :) У меня даже где-то образ на виртуалке лежит с SW2014+MechSoft, Жаль, что автодеск его поглотил, а не DS :( А по сути вопроса, проектировал двухступенчатый планетарный редуктор в свое время. Что было нужно: Справочник по планетаркам (автора не помню, если надо поищу), из софта MathCAD + GearTeq (софтина идет вместе с GearTrax, только рассчитывает и моделирует несколько зацеплений согласно выбранной схеме, в том числе планетарки) Ой и ошибаетесь. Звездочки - не равно зубчатые колеса в планетарке) Мы намучились с малой точностью изготовления на эл.эрозии, а Вы лазером ))) Был собран опытный образец редуктора с незакаленными деталями, чисто проверить геометрию, отладить сборку. Так потом начальство этот редуктор сказало испытать в бою, как я не противился)) Помер за пару дней интенсивных нагрузок ))) Материал, термообработка и точности изготовления решают )
    • Snake 60
      @Тихоход  Ещё один вариант - изучать программирование и писать свою программу/макрос. Вот пример конфигуратора двери: https://www.youtube.com/watch?v=wv4HryWQBSk
    • mircomax81
      Посредством Diskcopy можно сделать адекватную копию на флоппи диск?
    • Andrey_kzn
      Да, ведь советовали автору вытащить жёсткий диск и сделать образ. Неужели самому не интересно, как устроен этот старый промкомпьютер? Там может стоять как жёсткий диск, так и CF-карта, или же Disc-on-chip или Disc-on-module.  Как-то очень давно, на подобном промышленном оборудовании (большая печатная машина) я не смог перенести  ПО с родной CF - карты на другую, такого же размера но другой фирмы. Была также станочная оболочка под досом.  Образ я делал Нортон гостом, развернул его на другую CF-карту без проблем. Машина загрузилась нормально и работала ровно 2 дня, на неродной CF-карте,  потом зависла, и отказалась загружаться. Пришлось вызывать сервисника. От него мы узнали, что нельзя просто так взять и заменить карту  - носитель системного ПО, на другую. А полезли мы туда, так как руководство захотело печатать отчёты по работе машины. В станочном ПО такая функция была. Вот только принтер надо было купить у фирмы - производителя этой самой машины. В попытках заставить работать другой принтер мы редактировали файл  AUTOEXEС.BAT, на предмет загрузки драйвера принтера, ничего не получилось, зато перестали открываться некоторые страницы станочного ПО.  Образ у нас был давно снят, и мы развернули его на другую карту памяти. Родную карту я трогать не стал (как чувствовал, что нельзя ). Сервисник восстановил ПО с архивной дискеты на родную карту памяти, и всё заработало. Дискеты с архивами ПО шли вместе с документацией к машине.  Там были дискеты с Досом, станочной оболочкой, параметрами приводов, программой ПЛК. Он же и предупредил нас о предельно аккуратном обращении с родной картой памяти, и посоветовал немедленно сделать образы с архивных дискет, что мы сразу и проделали.. Вот такой сюрприз от машины эпохи Дос.
    • Борман
    • gudstartup
      а ведь все работало...
×
×
  • Создать...