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

Вывод торцевого сверления через ZXC(ось вращения) в станке с осью У


vanek77777

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

Здравствуйте! Токарный станок имеет ось У. Поэтому для фрезерной части поста брался шаблон четырёх осевого станка XYZC. Но при настройке  осевого цикла сверления приводным инструментом получается позиционирование только в полярной системе xy(c)z. А хотелось бы чтобы позиционировался как при шаблоне XZC(только с поворотом при У0, без полярки). Как это реализовать в посте? 

На рис 1 как хотелось бы, на рис 2 как реализовано сейчас.

Заранее спасибо!

 

20201222_190836.jpg

20201222_190911.jpg

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


UnPinned posts

@vanek77777 Можно попробовать переопределить шаблон сверления при включении полярки и таким образом убрать ось Y. Не то чтобы это было сложно, но мне кажется должно быть решение проще. Можно посмотреть как MOM_disable_address себя покажет.

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

Спасибо за ответ. Для эксперимента создал стандартный пост XYZC. Прописал в start of pach 

26 минут назад, mr_Voden сказал:

MOM_disable_address

Y

Но пост только исключил У из кода. Но не заставил пост выводить через угол поворота как при XZC.(токарно-фрезерный)

20201222_195542.jpg

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

@vanek77777 Понятно. Полагаю что подмена шаблонов тоже ничего не даст.

Что имеется в виду под подменой шаблонов? Если объясните, попробую, что выйдет.

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

@vanek77777 Например:

Есть стандартная реализация MOM_drill_move

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

#=============================================================
proc MOM_drill_move { } {
#=============================================================
   global cycle_init_flag


   global mom_sys_abort_next_event
   if { [info exists mom_sys_abort_next_event] } {
      if { [llength [info commands PB_CMD_kin_abort_event]] } {
         PB_CMD_kin_abort_event
      }
   }


   PB_CMD_set_cycle_plane
   MOM_do_template cycle_drill
   set cycle_init_flag FALSE
}

 

Чтобы ее подменить можно написать в том же start_of_path

 

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

#***********
uplevel #0 {

#=============================================================
proc MOM_drill_move { } {
#=============================================================

тут будут указаны уже ваши функции и шаблоны вывода
}

} ;# uplevel
#***********

и дальше пост будет выводить сверление используя уже то что указано в uplevel.

Но это не поможет в решении этого вопроса.

Тут скорее дело в PB_CMD_kin_before_motion

Как она реализована в 4хосевом посте:

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

#=============================================================
proc PB_CMD_kin_before_motion { } {
#=============================================================
#  This custom command is used by UG Post to support Set/Lock,
#  rotary axis limit violation retracts and auto clamping.
#
#  --> Do not change this command!  If you want to improve
#      performance, you may comment out any of these commands.
#
   global mom_kin_machine_type

   if { [info exists mom_kin_machine_type] } {
      if { [string match "*3_axis_mill*" $mom_kin_machine_type] ||\
           [string match "*lathe*" $mom_kin_machine_type] } {
return
      }
   }


  # Lock on and not circular move
   global mom_sys_lock_status  ;# Set in MOM_lock_axis
   global mom_current_motion
   if { [info exists mom_sys_lock_status] && ![string compare "ON" $mom_sys_lock_status] } {
      if { [info exists mom_current_motion] && [string compare "circular_move" $mom_current_motion] } {

         LOCK_AXIS_MOTION
      }
   }


  # Handle rotary over travel for linear moves
   global mom_sys_rotary_error mom_motion_event
   if { [info exists mom_sys_rotary_error] } {
      if { $mom_sys_rotary_error != 0 && \
           [info exists mom_motion_event] && ![string compare "linear_move" $mom_motion_event] } {

         ROTARY_AXIS_RETRACT
      }

     # Error state s/b reset every time to avoid residual effect!
      unset mom_sys_rotary_error
   }


  # Auto clamp on
   global mom_sys_auto_clamp
   if { [info exists mom_sys_auto_clamp] && ![string compare "ON" $mom_sys_auto_clamp] } {

      AUTO_CLAMP
   }
}
 

И как в XZC

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

#=============================================================
proc PB_CMD_kin_before_motion { } {
#=============================================================
# This command is called before every motion.  It converts the
# xyz input from UG to xzc for the mill/turn.  It also processes
# the tool axis and verifies its correctness.
#
# --> Do NOT rename this command!
#

   global mom_kin_machine_type

   if { [info exists mom_kin_machine_type] } {
      if { ![string match "*3_axis_mill_turn*" $mom_kin_machine_type] } {
return
      }
   }


   global mom_out_angle_pos mom_sys_coordinate_output_mode mom_sys_output_mode mom_pos
   global mom_mcs_goto mom_tool_axis mom_prev_pos mom_sys_millturn_yaxis
   global mom_kin_arc_output_mode

   if { ![string compare "POLAR" $mom_sys_coordinate_output_mode] } {

      if { [string compare "TRUE" $mom_sys_millturn_yaxis] } { MOM_suppress always Y }
      if { [string compare "POLAR" $mom_sys_output_mode] }  {
        #
        # This section outputs the code needed to change the control to polar
        # output mode.
        #
         PB_CMD_init_polar_mode
         set mom_sys_output_mode "POLAR"
      }

      MILL_TURN

      MOM_reload_variable -a mom_out_angle_pos
      set mom_prev_pos(3) $mom_out_angle_pos(0)
      set mom_pos(3)      $mom_out_angle_pos(0)
      MOM_reload_variable -a mom_pos
      MOM_reload_variable -a mom_prev_pos

   } elseif { ![string compare "CARTESIAN" $mom_sys_coordinate_output_mode] } {

      if { [string compare "TRUE" $mom_sys_millturn_yaxis] } { MOM_suppress off Y }
      if { [string compare "CARTESIAN" $mom_sys_output_mode] } {
        #
        # This section outputs the code needed to change the control to cartesian
        # output mode.
        #
         PB_CMD_init_cartesian_mode
         set mom_sys_output_mode "CARTESIAN"
      }
   }
}
 

Тем более в версии XZC явно намекают на:

# This command is called before every motion.  It converts the
# xyz input from UG to xzc for the mill/turn.
 It also processes
# the tool axis and verifies its correctness.

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

Можно создать и залинковать отдельный пост на сверление, из главного, только придётся через события в начале траектории head постоянно прописывать это включение.

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

@vanek77777 Например:

Есть стандартная реализация MOM_drill_move

  Скрыть содержимое

#=============================================================
proc MOM_drill_move { } {
#=============================================================
   global cycle_init_flag


   global mom_sys_abort_next_event
   if { [info exists mom_sys_abort_next_event] } {
      if { [llength [info commands PB_CMD_kin_abort_event]] } {
         PB_CMD_kin_abort_event
      }
   }


   PB_CMD_set_cycle_plane
   MOM_do_template cycle_drill
   set cycle_init_flag FALSE
}

 

Чтобы ее подменить можно написать в том же start_of_path

 

  Скрыть содержимое

#***********
uplevel #0 {

#=============================================================
proc MOM_drill_move { } {
#=============================================================

тут будут указаны уже ваши функции и шаблоны вывода
}

} ;# uplevel
#***********

и дальше пост будет выводить сверление используя уже то что указано в uplevel.

Но это не поможет в решении этого вопроса.

Тут скорее дело в PB_CMD_kin_before_motion

Как она реализована в 4хосевом посте:

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

#=============================================================
proc PB_CMD_kin_before_motion { } {
#=============================================================
#  This custom command is used by UG Post to support Set/Lock,
#  rotary axis limit violation retracts and auto clamping.
#
#  --> Do not change this command!  If you want to improve
#      performance, you may comment out any of these commands.
#
   global mom_kin_machine_type

   if { [info exists mom_kin_machine_type] } {
      if { [string match "*3_axis_mill*" $mom_kin_machine_type] ||\
           [string match "*lathe*" $mom_kin_machine_type] } {
return
      }
   }


  # Lock on and not circular move
   global mom_sys_lock_status  ;# Set in MOM_lock_axis
   global mom_current_motion
   if { [info exists mom_sys_lock_status] && ![string compare "ON" $mom_sys_lock_status] } {
      if { [info exists mom_current_motion] && [string compare "circular_move" $mom_current_motion] } {

         LOCK_AXIS_MOTION
      }
   }


  # Handle rotary over travel for linear moves
   global mom_sys_rotary_error mom_motion_event
   if { [info exists mom_sys_rotary_error] } {
      if { $mom_sys_rotary_error != 0 && \
           [info exists mom_motion_event] && ![string compare "linear_move" $mom_motion_event] } {

         ROTARY_AXIS_RETRACT
      }

     # Error state s/b reset every time to avoid residual effect!
      unset mom_sys_rotary_error
   }


  # Auto clamp on
   global mom_sys_auto_clamp
   if { [info exists mom_sys_auto_clamp] && ![string compare "ON" $mom_sys_auto_clamp] } {

      AUTO_CLAMP
   }
}
 

И как в XZC

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

#=============================================================
proc PB_CMD_kin_before_motion { } {
#=============================================================
# This command is called before every motion.  It converts the
# xyz input from UG to xzc for the mill/turn.  It also processes
# the tool axis and verifies its correctness.
#
# --> Do NOT rename this command!
#

   global mom_kin_machine_type

   if { [info exists mom_kin_machine_type] } {
      if { ![string match "*3_axis_mill_turn*" $mom_kin_machine_type] } {
return
      }
   }


   global mom_out_angle_pos mom_sys_coordinate_output_mode mom_sys_output_mode mom_pos
   global mom_mcs_goto mom_tool_axis mom_prev_pos mom_sys_millturn_yaxis
   global mom_kin_arc_output_mode

   if { ![string compare "POLAR" $mom_sys_coordinate_output_mode] } {

      if { [string compare "TRUE" $mom_sys_millturn_yaxis] } { MOM_suppress always Y }
      if { [string compare "POLAR" $mom_sys_output_mode] }  {
        #
        # This section outputs the code needed to change the control to polar
        # output mode.
        #
         PB_CMD_init_polar_mode
         set mom_sys_output_mode "POLAR"
      }

      MILL_TURN

      MOM_reload_variable -a mom_out_angle_pos
      set mom_prev_pos(3) $mom_out_angle_pos(0)
      set mom_pos(3)      $mom_out_angle_pos(0)
      MOM_reload_variable -a mom_pos
      MOM_reload_variable -a mom_prev_pos

   } elseif { ![string compare "CARTESIAN" $mom_sys_coordinate_output_mode] } {

      if { [string compare "TRUE" $mom_sys_millturn_yaxis] } { MOM_suppress off Y }
      if { [string compare "CARTESIAN" $mom_sys_output_mode] } {
        #
        # This section outputs the code needed to change the control to cartesian
        # output mode.
        #
         PB_CMD_init_cartesian_mode
         set mom_sys_output_mode "CARTESIAN"
      }
   }
}
 

Тем более в версии XZC явно намекают на:

# This command is called before every motion.  It converts the
# xyz input from UG to xzc for the mill/turn.
 It also processes
# the tool axis and verifies its correctness.

Спасибо за помощь, видимо реализовать в одном посте и полярку и вывод через доворот XZC не получится. Может всем известные здесь гуру nx еще выскажутся здесь) и направят в нужное русло)  

44 минуты назад, sokqq сказал:

Можно создать и залинковать отдельный пост на сверление, из главного, только придётся через события в начале траектории head постоянно прописывать это включение.

Спасибо за ответ! Я рассматривал этот вариант, но не хотелось делать несколько постов. Если совсем прижмет необходимость реализации данного вопроса, наверно так и сделаю. Не буду заморачиваться запихать все в один пост. 

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

Объясню в чем подвох, почему полярка не полностью устраивает) В принципе и полярка позиционирует отлично. Но в полярке не работает подача мм/об) а оператор очкует, что вывод нарезания резьбы метчиком через мм/мин. Думаю сделать принудительный вывод мм/мин в полярке. Но с пересчетом, если в nx, задано мм/об. И не париться по этому поводу. Если в nx оператор забьёт 300об/мин и подачу  шаг 0.8мм/об, пост выдаст подачу 240 мм/мин. В принципе теже вилы, только в профиль) 

 

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

Не буду заморачиваться запихать все в один пост.

Я у себя действовал по такому же принципу. Слишком муторно на токарно-фрезерном (у нас еще Y и противошпиндель) сделать единый пост, в котором учтено всё. Наши операторы тоже работают по "шаблону" и им любое отклонение в программе, которое отличается от их представления в голове = катастрофа.

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

Если в nx оператор забьёт 300об/мин и подачу  шаг 0.8мм/об, пост выдаст подачу 240 мм/мин. В принципе теже вилы, только в профиль) 

 

Так у вас проблема другая. Вам надо подачу правильно выводить. Ставьте проверку в отдельной процедуре, о том какая у вас mom_feed_cut_unit и в зависимости от этого уже выводите. Прямо перед циклом. 

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

 

Так у вас проблема другая. Вам надо подачу правильно выводить. Ставьте проверку в отдельной процедуре, о том какая у вас mom_feed_cut_unit и в зависимости от этого уже выводите. Прямо перед циклом. 

Типа если $mom_feed_cut_unit == "mmpm", то поделить подачу на обороты и вывести новое пересчитанное  значение уже в мм/об, в противном случае ничего не делать?

 

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

Почему не работает если перед циклом прописать custom command???:

 

global mom_sys_cycle_feed_mode

 

set  mom_sys_cycle_feed_mode "MMPR"

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

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

 

Так у вас проблема другая. Вам надо подачу правильно выводить. Ставьте проверку в отдельной процедуре, о том какая у вас mom_feed_cut_unit и в зависимости от этого уже выводите. Прямо перед циклом. 

Спасибо, очень помогло!

Вот текст custom command для постоянного вывода в мм/об (может кому пригодится):

 

global mom_feed_cut_value
global mom_feed_cut_unit
global mom_spindle_speed
global f_mm_ob
global f_raschet


set f_zadannaya $mom_feed_cut_value
set s_ob_min $mom_spindle_speed

if {$mom_feed_cut_unit=="mmpm"} {

set f_raschet [format "%.3f" [expr $f_zadannaya/$s_ob_min]]
set f_mm_ob $f_raschet

} elseif {$mom_feed_cut_unit=="mmpr"} {

set f_mm_ob [format "%.3f" $f_zadannaya]

}

 

Всех с наступающим Новым 2021!!!)

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

Спасибо, очень помогло!

 

Всегда пожалуйста. 

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

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

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

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

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

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

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

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

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

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

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




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