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

Скриптование в 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 пользователей

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




  • Сообщения

    • gudstartup
      как перевести шпиндель снова первоначальный режим управления скоростью когда ему пофиг число импульсов на оборот? резьбу пока резать не будут а в подпрограмму смены можно что нить добавить или в реализацию m19  чтобы чпу из режима контроля позиционного кодера вышло?
    • gudstartup
    • mactepnew
      Вот я тоже так думал, пока не столкнулся с обратным) Как еще столкнусь, пришлю скриншот. Хаос еще в том, что порядок в дереве построения весьма условный. операция, которая стоит перед групой, имеет бОльший timestamp(пардон, не знаю как это в переводе), чем эта группа, и выполняется позже. При этом все операции в группе имеют timestamp на пару сотен меньше и выполняются раньше, чем две группы, стоящие перед ней. Логика?  Если в эскизе все элементы определены, то можно поставить еще один размер (хочешь переопределить эскиз - да пожалста!), изменить его - и NX самостоятельно выберет, какой размер или ограничение отпустить и весь эскиз летит к чертям. Это ли не хаос?   Назовете хоть один CAD, которым можно пользоваться так? Любой из встреченных мной имеет много неочевидных нюансов, которые конечно не проявляются при выполнении университетского или базового курса. В Creo я на протяжении 5 лет находил всё новые фишки, которые не прописаны в документации. Огромная благодарность Ruslan за пояснения тонкостей. Даже Компас и Solidworks, которые считаются самыми дружественными, оказалось непросто обуздать, когда проходил собеседования и делал тестовые. А ведь университетский курс знал на отлично!   Возвращаясь к NX - вот сегодняшний пример. Утром деталь была оранжевая, единая. Изменил пару уклонов и толщин, стала желтая с элементами оранжевого и частично твердотельной, частично листовой. Я даже не знаю, как сформулировать вопрос в поддержку. 
    • Mikhail_Podgornyj
      Добрый день, кто может поделиться SKF Bearing V1.6 (ANSYS App)? Заранее благодарен!
    • kkk
      Короче, как сделать автоматом не нашел. Раскрасил нужные грани нужными цветами. Затем на вкладке с цветом модели можно выбирать нужный цвет, тогда в модели выбираются грани, покрашенные этим цветом. Можно еще сохранить выбор этих граней, но смысла не вижу, т.к. все легко выбирается по цвету. Затем либо в инструменте Измерить смотрим площадь и как-то ее используем, либо можно макросом (что выкладывал Kir95 ) внести площадь в свойства (на вкладку Конфигурации). Можно еще внести выбранные грани в датчики, но как использовать их в свойствах не нашел.    Макрос прикрепляю.     Площадь выбранных граней в свойства.swp
    • IgnatvKudrin
      Для нашего производства требуются постоянно инструментальные пружины для штампов. Сейчас заказы обрабатываются довольно долго - до 2-х месяцев. А у нас сроки на штампы 1-2 месяца с испытанием, доработкой и т.п. Хотелось бы найти поставщика, у которого уже есть склад с данными пружинами или кто может доставить за 1 месяц.   Пружины стандартные по ISO, но на всякий случай приложил каталог. Вот список пружин, которые нужны очень срочно:   LR 32 x 44 - 1 шт. LR 25 x 51 - 2 шт. LB 63 x 89 - 7 шт. LB 32 x 102 - 10 шт. LB 32 x 89 - 20 шт. LB 32 x 76 - 12 шт. LB 32 x 51 - 6 шт. LB 25 x 127 - 9 шт.   Готов выслушать все предложения. Возможно даже есть те, кто сможет изготовить подобные пружины с такими же параметрами. 20231101.pdf
    • bubblyk
      Знатоки форума, подскажите, как смоделировать простую (на первый взгляд) задачу термомеханики в упругой постановке.   Есть брусок правильный формы ака кирпич, в котором генерируется НЕРАВНОМЕРНОЕ удельное тепловыделение (HGEN). Задняя и передняя поверхности конвективно охлаждаются с известными (но различными) коэффициентами теплоотдачи и температурами жидкости/газа. Свойства кирпича (теплофизика + механика) принимаются зависящими от температуры. Постановка - стационарная Собственно вопрос : как грамотно смоделировать температурное поле в кирпиче с учетом температурного расширения?   Исходный код приложил.     Надеюсь на коллективный разум и опыт! EPTH2D.mac p.s.   Если есть опыт решения этой задачи в Ansys WB, тоже можно сюда приложить командные вставки.
    • OutXL
      Это было давно использовал NC-Link  и данную инструкцию. The Maho.docx
    • Mikhail_Podgornyj
      Добрый день, кто может поделиться SKF Bearing V1.6 (ANSYS App)? Заранее благодарен!
    • alexqwq10
      В данных корпусах ничего лишнего быть не должно. Максимум шпильки заземления, в количестве предусмотренном для конкретного корпуса. Рассматривал очень много подобных корпусов разных производителей и данная проблема актуальна для подавляющего большинства.
×
×
  • Создать...