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

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


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

Приветствую всех сторожил и  гуру данного форума, заранее прошу не пинать если такое где либо на данном форуме обсуждалось, к сожалению я не нашёл. Относительно недавно начал работать в сфере ЧПУ обработки( 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(), но в итоге не получается сложить эти два числа , выдаёт ошибку, скину скрины как буду дома, прошу сильно не пинать, подскажите как правильно это сделать

 

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


UnPinned posts
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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
Только что, 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 но уже по модулю

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

@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;
}

 

 

Ссылка на сообщение
Поделиться на других сайтах
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, и которые приходится вот таким способом добывать, с одной стороны это хорошо, так как благодаря их отсутствию начинаешь в это всё вникать и изучать.. .

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

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

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

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

Приветствую старожил и гуру, а так же таких же новичков как и я),  потихоньку и постепенно дальше углубляюсь в тему скриптования в 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 нет такой информации, или же есть какой либо вариант создать в скрипте такое условие?

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

 

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

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

 

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

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

 

 

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

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
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"

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

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

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

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

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

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

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

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

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

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

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




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