Jump to content

Скриптование в PM Post 2018


Recommended Posts

Fixedes

Приветствую всех сторожил и  гуру данного форума, заранее прошу не пинать если такое где либо на данном форуме обсуждалось, к сожалению я не нашёл. Относительно недавно начал работать в сфере ЧПУ обработки( 1.5 - 2 года),  на основной работе просто работаю оператором на фрезерных и токарных станках с небольшими обязанностями наладчика, и поэтому там нет возможности учиться работе в CAM системах так  как нет в этом необходимости, есть для этого специальный человек, с CAM системами раньше не был знаком,  пока  в нашем небольшом городке не предложили подработку на хоббийном оборудовании ( фрезерных станках), выбор пал на powermill так как спец который настраивал и отлаживал данное оборудование работал в нём и пост процессор был только для него( 5 осевой), на основной работе у нас только 3 осевые фрезера и токарные продольники, в Милле уже работаю чуть меньше года, так как подработка в плане написания УП не так часто происходит, в общем постепенно в свободное время начал копаться помаленьку  в самом Милле и в частности в постпроцессирования, уж очень меня это заинтересовало, в общем вопрос в следующем:

 

Хочу сделать чтобы пост выводил в шапке программы данные о типе и размере заготовки, но не нашёл в PM POST параметр"длина" заготовки, есть только минимальные и максимальные значения то бишь "Block X min " И "Block X max" ,   хотел решить данную проблему через скрипт(в них я нуб тоже), написал функцию (сейчас на работе, не могу скинуть оригинал скрипта, позже дополню), в ней объявил две переменных через "var"   Получил значения для них через getParam из параметров" block x min  " И тд, затем их сложил и через return вывел ,  в шапке программы создал кадр с привязкой к этой функции, в общем всё работает ( может быть и неправильно сделано, но работает), но проблема вот в чем, так как размеры заготовки а в Милле каждый раз рассчитываются в каждом проекте от разных систем координат и имеет не всегда только положительные  значения, если к примеру заготовка брусок 130*50*30 расчитана относительно системы координат в центре , то тот же минимальный и максимальный размер получается "+15 " И "-15" И при сложении в функции естественно возвращают "0", следовательно мне надо сложить два этих параметра по модулю(без учёта их знака), погуглив на эту тему нашёл Math. Abs() и просто ABS(), но в итоге не получается сложить эти два числа , выдаёт ошибку, скину скрины как буду дома, прошу сильно не пинать, подскажите как правильно это сделать

Есть ещё Вариант, после создания заготовки, создавать новую СК в углу заготовки, и производить повторный расчёт размеров, чтобы значения "мин "и " Мах" Были с положительным знаком, но мне это не подходит и занимает дополнительное время, а я хочу наладить пост чтобы получать готовую информативную УП без дальнейшего радектирования вручную

2 минуты назад, Fixedes сказал:

Приветствую всех сторожил и  гуру данного форума, заранее прошу не пинать если такое где либо на данном форуме обсуждалось, к сожалению я не нашёл. Относительно недавно начал работать в сфере ЧПУ обработки( 1.5 - 2 года),  на основной работе просто работаю оператором на фрезерных и токарных станках с небольшими обязанностями наладчика, и поэтому там нет возможности учиться работе в CAM системах так  как нет в этом необходимости, есть для этого специальный человек, с CAM системами раньше не был знаком,  пока  в нашем небольшом городке не предложили подработку на хоббийном оборудовании ( фрезерных станках), выбор пал на powermill так как спец который настраивал и отлаживал данное оборудование работал в нём и пост процессор был только для него( 5 осевой), на основной работе у нас только 3 осевые фрезера и токарные продольники, в Милле уже работаю чуть меньше года, так как подработка в плане написания УП не так часто происходит, в общем постепенно в свободное время начал копаться помаленьку  в самом Милле и в частности в постпроцессирования, уж очень меня это заинтересовало, в общем вопрос в следующем:

 

Хочу сделать чтобы пост выводил в шапке программы данные о типе и размере заготовки, но не нашёл в PM POST параметр"длина" заготовки, есть только минимальные и максимальные значения то бишь "Block X min " И "Block X max" ,   хотел решить данную проблему через скрипт(в них я нуб тоже), написал функцию (сейчас на работе, не могу скинуть оригинал скрипта, позже дополню), в ней объявил две переменных через "var"   Получил значения для них через getParam из параметров" block x min  " И тд, затем их сложил и через return вывел ,  в шапке программы создал кадр с привязкой к этой функции, в общем всё работает ( может быть и неправильно сделано, но работает), но проблема вот в чем, так как размеры заготовки а в Милле каждый раз рассчитываются в каждом проекте от разных систем координат и имеет не всегда только положительные  значения, если к примеру заготовка брусок 130*50*30 расчитана относительно системы координат в центре , то тот же минимальный и максимальный размер получается "+15 " И "-15" И при сложении в функции естественно возвращают "0", следовательно мне надо сложить два этих параметра по модулю(без учёта их знака), погуглив на эту тему нашёл Math. Abs() и просто ABS(), но в итоге не получается сложить эти два числа , выдаёт ошибку, скину скрины как буду дома, прошу сильно не пинать, подскажите как правильно это сделать

 

Link to post
Share on other sites


UnPinned posts
Fixedes
22 минуты назад, mannul сказал:

@Fixedes Ход ваших мыслей правильный.

Извиняюсь что не отписался, в общем решил проблему следующим образом:

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

Function Workpiece SizeX() {

Xmin  = GetParam("%p(Block Min X%") 

Xmax  = GetParam("%p(Block Maх X%") 

Xmin1 = Math. Abs(Xmin) 

Xmax1 = Math. Abs(Xmax) 

Return Xmin1+Xmax1

}

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

Link to post
Share on other sites
mannul
27 минут назад, Fixedes сказал:

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

Будет работать только если заготовка строго из начала координат по оси X и только в положительном направлении.

Синтаксис неверен.

Edited by mannul
Link to post
Share on other sites
Fixedes

Это только в том случае если бы неиспольозвался класс Math.abs, в этом и был мой вопрос в теме, так как у меня не получалосьего правильно использовать в скрипте, а благодаря последовательности -> объявляю две переменных  значения для них беру из стандартных параметров размера заготовки из PMPost, и они могут быть как с отрицательным знаком так и положительным, и если не использовать класс Math. ,при их сложении с разными знаками получается не тот результат которые нужен, поэтому этот класс даёт возможность сложить эти две переменных по их модулюс т.е без учёта их знака и получить верное значение которое соответствует значению "длина" В параметрах заготовки в проекте повермилла

12 минут назад, mannul сказал:

Будет работать только если заготовка строго из начала координат по оси X и только в положительном направлении.

Синтаксис неверен.

К вечеру скину оригинал скрипта, со скринами что всё работает как мне нужно

Link to post
Share on other sites
mannul

@Fixedes Block Min X = 10, Block Max X = 50. Если сложить, то будет 60, а длина на самом деле 40.

Link to post
Share on other sites
Fixedes
2 минуты назад, mannul сказал:

@Fixedes Block Min X = 10, Block Max X = 50. Если сложить, то будет 60, а длина на самом деле 40.

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

Link to post
Share on other sites
mannul
Только что, Fixedes сказал:

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

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

  • Нравится 1
Link to post
Share on other sites
Fixedes
7 минут назад, mannul сказал:

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

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

1) Когда Xmax+(+15)со знаком плюс ,Xmin-(-5)со знаком минус

2)Когда Xmax-(+15) со знаком плюс, Xmin+(+5) со знаком плюс

3)Когда Xmax-(-15) со знаком минус , Xmin-(-5) со знаком минус

4)Когда Xmax-(-15) со знаком минус, Х min+(+5) со знаком плюс

Следовательно в первом случае по модулю сложить, во втором из просто из Max  вычесть Min,  в третьем, тоже из  Max вычесть Min но уже по модулю

Link to post
Share on other sites
mannul

@Fixedes Практически допетрили.
 

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

 

function blanksize()
{
var out = "";
var blanksizeX = undefined;
var bxmin = GetParam("%p(Block Min X)%");
var bxmax = GetParam("%p(Block Max X)%");

if ((bxmin <= 0) && (bxmax <= 0)){
  blanksizeX = Math.abs(bxmin) - Math.abs(bxmax);
 }
else if ((bxmin <= 0) && (bxmax >= 0)){
  blanksizeX = Math.abs(bxmin) + Math.abs(bxmax);
 }
else if ((bxmin >= 0) && (bxmax >= 0)){
  blanksizeX = bxmax - bxmin;
 }
else
 {}

out = blanksizeX;

return out;
}

 

 

  • Чемпион 1
Link to post
Share on other sites
Fixedes
4 минуты назад, mannul сказал:

@Fixedes Практически допетрили.
 

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

 

function blanksize()
{
var out = "";
var blanksizeX = undefined;
var bxmin = GetParam("%p(Block Min X)%");
var bxmax = GetParam("%p(Block Max X)%");

if ((bxmin <= 0) && (bxmax <= 0)){
  blanksizeX = Math.abs(bxmin) - Math.abs(bxmax);
 }
else if ((bxmin <= 0) && (bxmax >= 0)){
  blanksizeX = Math.abs(bxmin) + Math.abs(bxmax);
 }
else if ((bxmin >= 0) && (bxmax >= 0)){
  blanksizeX = bxmax - bxmin;
 }
else
 {}

out = blanksizeX;

return out;
}

 

 

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

10 минут назад, mannul сказал:

@Fixedes Практически допетрили.
 

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

 

function blanksize()
{
var out = "";
var blanksizeX = undefined;
var bxmin = GetParam("%p(Block Min X)%");
var bxmax = GetParam("%p(Block Max X)%");

if ((bxmin <= 0) && (bxmax <= 0)){
  blanksizeX = Math.abs(bxmin) - Math.abs(bxmax);
 }
else if ((bxmin <= 0) && (bxmax >= 0)){
  blanksizeX = Math.abs(bxmin) + Math.abs(bxmax);
 }
else if ((bxmin >= 0) && (bxmax >= 0)){
  blanksizeX = bxmax - bxmin;
 }
else
 {}

out = blanksizeX;

return out;
}

 

 

Только ещё возник вопрос, а много ещё таких параметров которые есть в Powermill,  но которых нету PMpost, и которые приходится вот таким способом добывать, с одной стороны это хорошо, так как благодаря их отсутствию начинаешь в это всё вникать и изучать.. .

Link to post
Share on other sites
mannul
21 минуту назад, Fixedes сказал:

Только ещё возник вопрос, а много ещё таких параметров которые есть в Powermill,  но которых нету PMpost, и которые приходится вот таким способом добывать, с одной стороны это хорошо, так как благодаря их отсутствию начинаешь в это всё вникать и изучать.

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

Link to post
Share on other sites
Fixedes

Приветствую старожил и гуру, а так же таких же новичков как и я),  потихоньку и постепенно дальше углубляюсь в тему скриптования в PMPost'e, в общем сделал функцию чтобы постпроцессор при записи(выводе) NC файла запрашивал какую рабочую систему координат использовать (G54-G59), реализовал схему следующим образом:

1)Создал групповой пользовательский параметр с 6-ю системами координат G54,G55,G56,G57,G58,G59 соответственно (назвал WorkOffset)

2)Активировал команду (т.к у меня она была не активна) Misc\Workpiece Coordinate System Setup, создал блок в котором указал на параметр WorkOffset, который создал на предыдущем шаге

3)Написал небольшой скрипт, и указал его в значении в своем параметре - value\Function\SelectWorkOffset

function SelectWorkOffset() {
    MessageBox("Выберите рабочую систему координата станка (G54-G59)");
    PromptParam("%p(WorkOffset)%");
 return ;
 }

 

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

    К примеру мне нужно записать несколько NC файлов, речь идет о том когда в проекте PowerMill, нажимаешь на кнопку "Записать все" или "Записать выбранные", в этом случае мой пост при записи каждого из выбранных или всех NC файлов каждый раз запрашивает выбор о G54-G59, у меня возник такой вопрос, может ли постпроцессор отследить когда была нажата кнопка "Записать все" или "Запись" в параметрах отдельно выбранного NC файла, что бы знать запрашивать WorkOffset один раз или несколько, или это уже из грани фантастики?, насколько я предполагаю в CL-Data нет такой информации, или же есть какой либо вариант создать в скрипте такое условие?

Link to post
Share on other sites
mannul
34 минуты назад, Fixedes сказал:

может ли постпроцессор отследить когда была нажата кнопка "Записать все" или "Запись" в параметрах отдельно выбранного NC файла

Нет не может. Постпроцессор никак не связан с интерфейсом PM.

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

Link to post
Share on other sites
Fixedes
9 минут назад, mannul сказал:

Есть много других способов.

Подскажите пару?  И как правильнее это сделать,  кроме данного способа что описал выше, есть ещё способ вывода системы координат указанной в свойствах выводимого NC файла, но она тогда имя этой системы координат в повермиле должно быть G54, G55 и тд, а я в основном вывожу относительно глобальной СК, соответственно в . tap файле прописывается прямым текстом "Глобальная СК"

Link to post
Share on other sites
mannul
17 часов назад, Fixedes сказал:

Подскажите пару?  И как правильнее это сделать,  кроме данного способа что описал выше, есть ещё способ вывода системы координат указанной в свойствах выводимого NC файла, но она тогда имя этой системы координат в повермиле должно быть G54, G55 и тд, а я в основном вывожу относительно глобальной СК, соответственно в . tap файле прописывается прямым текстом "Глобальная СК"

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

Link to post
Share on other sites
  • 5 months later...

Приветствую Гуру ,Powermill 2023,pmpost 2018,21,23, потихоньку копаюсь в постпроцессоре постепенно постигая параметры, команды, скрипты, возникло множество вопросов, и надеюсь что добрые знающие люди возможно дадут ответы на них. Начну с нескольких:

 

1) В чем приимущество "структур"? Исключительно в том чтобы использовать множество команд в одном кадре программы? Или есть ещё что то?

 

2) В моём(слегка доработанном, всякими мелочами) посте,  есть скрипт для безопасной высоты по  Z , написанный не мной,и в логике его работы есть параметры " Output Rotation Matrix 20.21.22 и тд", в справке написано что это элементы матрицы вращения, что это за матрицы и как они работают?

 

 

Link to post
Share on other sites
12 часов назад, Fixedes сказал:

2) В моём(слегка доработанном, всякими мелочами) посте,  есть скрипт для безопасной высоты по  Z , написанный не мной,и в логике его работы есть параметры " Output Rotation Matrix 20.21.22 и тд", в справке написано что это элементы матрицы вращения, что это за матрицы и как они работают?

 

Проштудировав гугОл, появилось только ооочень небольшое представление о них, в данном моём случае параметры с индексами 2*(21.22.23) , отвечают за поворот вокруг оси Y чтобы правильно перенести длина вектора оси  Z из одной системы координат в другую, кто может какую либо статью об этом всём посоветовать?, после работы буду дома, скину сам скрипт для понимания

12 часов назад, Fixedes сказал:

 

 

Link to post
Share on other sites
12 часов назад, Fixedes сказал:

1) В чем приимущество "структур"? Исключительно в том чтобы использовать множество команд в одном кадре программы? Или есть ещё что то?

Да, смысл в том чтобы объединять несколько часто используемых блоков в один.

13 часов назад, Fixedes сказал:

2) В моём(слегка доработанном, всякими мелочами) посте,  есть скрипт для безопасной высоты по  Z

Этот скрипт нигде не используется. Остался от старого поста. Можете удалить.

  • Нравится 1
Link to post
Share on other sites
27.09.2022 в 09:23, mannul сказал:

 

Этот скрипт нигде не используется. Остался от старого поста. Можете удалить.

function GetSafeZScriptlet67()
{
  var tp = GetParam("%p(Toolpath Name)%") != program.ActiveToolpath.Name ?
    program.PreviousToolpath : program.ActiveToolpath;

  var distance = tp.Parameters.Exists("%p(Safe Z of 2020)%") ?
    tp.GetParameter("%p(Safe Z of 2020)%") : 0.0;

  var x = GetParam("%p(Output Rotation Matrix 20)%", false);
  var y = GetParam("%p(Output Rotation Matrix 21)%", false);
  var z = GetParam("%p(Output Rotation Matrix 22)%", false);

  var angle = Math.PI * 2.0;

  if ((x * x + y * y + z * z) >= 1e-14) {
    angle = Math.atan2(Math.sqrt(x * x + y * y), z);
  }

  if (angle > 1.3089969389957472) {
    UserWarning(
      "Parameter 'WP Safe Z' cannot be recalculated if workplane Z deviates " +
      "by more than 75 degree."
    );
    return distance;
  }

  return distance / Math.cos(angle);
}

 

 

Видимо я что-то напутал или не так обьяснил, этот скрипт у меня подключен к команде "First Move after Toolchange"

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.




  • Сообщения

    • brigval
      Есть еще моя программа Брасол. Тоже сохраняет чертежи в PDF. У меня с нею работает коллектив. Нареканий нет. Правда, работаю в SW2018 и в поздних версия не пробовал. Но если будет желание и возможность, попробуйте. Вдруг зафурычит )    
    • brigval
    • vad0000
      Не могли, а уже напортачили    Скидывайте машинные параметры
    • миталник
      Папашка, если это возможно с официальным стажем работы конструктором более полувека, и изобретения которого используются в десятках стран, тады - ой!..
    • Кварк
      Так может быть нужно учить туториал, а не жамкать кнопки наугад?       Ладно, пусть нелинейность в вашем смысле. А откуда она берётся в контакте? Именно в вашем смысле.    В моём смысле нелинейность очень легко объяснима: в зоне контакта может быть зазор, материалы могут быть с разными модулями упругости. Из-за этого напряжения будут испытывать резкие скачки.      А вы что глубоко накопали там? 
    • gudstartup
      Просто есть такой сигнал у PMC G46.3 KEY1 который разрешает или запрещает изменение коррекции и редактирование программ. Нужно вырезать его из программ PMC и все будет всегда разрешено все равно за все действия отвечает оператор а ключ и так все время торчит в пульте и никто его не охраняет!
    • 4arlik
      ну если вы не работаете один - то вам приходится обосновывать свое решение. сынок, у тебя мания величия)))
    • Saad_Winner
      Как нормально?  Создайте чертеж (1 лист сборочный(альбомный) 2 листа спецификации (книжный ) 5 альбомных и 20 книжных ) и попробуйте сохранить как вы предлагаете. И посмотрим понравится вам такое развлечение. Эли да то я удивлюсь вашему упорству. Или посвятите мне дзен как это сделать по человечески удобно, а не через пень колоду.
    • миталник
      Вопросы те же. Что значит "ограничить"? Что за маховик справа? В каком месте желательно фиксировать? На полу будет стойка, на которую устанавливать фиксатор? Жёсткий фиксатор или тормоз? Нам бы схемку аль чертёж, а пока что видна ромашка для гадания..
    • zloyuri
×
×
  • Create New...