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

позиционная обработка haas vf5 5 осей


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

Уважаемые форумчане! Уже долгое время пытаюсь написать свой пост на haas vf5 с наклонно поворотным столом, но желаемого результата так и не добился! Деталь- кубик с косыми отверстиями и циковками по всем сторонам!Написал всю обработку-при визуализации на станке оьрабатывает как хотелось бы а в проге полная ерунда!Выдает координаты относительно вспомогательных СК(pos2.pos3...) спозиционировать оси А и В не проблема,а вот координаты x.y.z через shift_ось выразить не получается!!!Создал процедуру пересчета координат-а когда её вызывать и какие углы использовать пока не разобрался!!!Помогите у кого опыт есть!!!

GPP файл поста:

; ; FANUC

; -----

;

@init_post

global string tool_diameter_f

global numeric flag1 flag2 m_feed_flag

; Non GPPL variables

num_user_procs = 1

line_labels = FALSE ; Jump to N...

; GPPL variables

pre_processor = 'HAAS-5A'

numeric_def_f = '5.3'

integer_def_f = '5.0(p)'

gcode_f = '2.0(p)'

mcode_f = '2.0(p)'

xpos_f = '5.3'

ypos_f = '5.3'

zpos_f = '5.3'

apos_f = '5.3'

feed_f = '4.3'

tool_diameter_f = '5.3/1'

blknum_f = '5.0(p)'

blknum_gen = false

blknum_exist = true

blknum = 1

blknum_delta = 1

blknum_max = 100000

trace 'all':5

endp

;-------------------

@tmatrix

endp

;-------------------

@start_of_file

; before tools definition

{'%'}

{nl, 'O0'program_number, ' (', part_name, ')'}

{nl, '( MCV-OP )', ' (',DATE ')'}

blknum_gen = true

if rotate_used then

gcode = 69

{nb, 'G'gcode}

endif

if mirror_used then

{nb, 'G50.1 X0 Y0'}

endif

{nb, '(SUBROUTINES: O'first_proc_number, ' .. O'last_proc_number, ')'}

flag2 = 0

endp

;-------------------

@start_program

; after tools definition

{nb, 'G80 G49 G40'}

; call @home_number

endp

;-------------------

@end_program

blknum_gen = FALSE

; {nb, 'M98 P9010'}

{nb, 'M9'}

{nb, 'M5'}

{nb, 'G28 G91 Z0'}

{nb, 'G28 G91 Y0'}

{nb, 'M30'}

endp

;-------------------

@end_of_file

{nl, '%'}

endp

;-------------------

@relative_mode

gcode = 91

{nb, 'G'gcode, ' '}

skipline = FALSE

endp

;-------------------

@absolute_mode

gcode = 90

{nb, 'G'gcode, ' '}

skipline = FALSE

endp

;-------------------

@machine_plane

if machine_plane eq XY

gcode = 17

endif

if machine_plane eq YZ

gcode = 18

endif

if machine_plane eq ZX

gcode = 19

endif

{nb, 'G'gcode}

endp

;-------------------

@call_proc

if active(parm1) then

gcode = 65

{nb, 'G'gcode, ' P'label}

{' A'parm1, [' B'parm2], [' C'parm3]}

else

{nb, 'M98 P'label}

endif

if proc_count gt 1 then

{' L'proc_count}

endif

{[' ('message, ')']}

endp

;-------------------

@proc

{nl, 'O'label}

endp

;-------------------

@end_proc

if dely eq 1

{' G64 '}

endif

{nb, 'M99'}

endp

;----------------

@loop

local integer var_num

var_num = loop_level + 20

{nb, '#', var_num, ' = 0'}

{nb, 'WHILE [#', var_num, ' LT ', loop_count, '] DO ', loop_level}

endp

;----------------

@end_loop

local integer var_num

var_num = loop_level + 20

{nb '#', var_num, ' = #', var_num, ' + 1'}

{nb 'G'home_number}

{nb 'END ', loop_level}

endp

;----------------

@def_tool

;;; {nb, '(G10 L12 P', (tool_number), ' R'tool_offset, ')'}

endp

;-------------------

@rapid_move

{nb}

gcode = 0

if change(gcode) then

{'G'gcode}

else

{' '}

endif

{[' X'xpos], [' Y'ypos],[' Z'zpos]}

; if flag1 eq 1

; {' S'spin:'5.0(p)',' M03'}

; {nb, 'M08'}

; endif

; flag1 = 0

endp

;-------------------

@line

call @calc_rotate_x_y

{nb}

gcode = 1

if change(gcode) then

{'G'gcode}

else

{' '}

endif

{[' X'xpos], [' Y'ypos], [' Z'zpos]}

if m_feed_flag eq 1

m_feed_flag = 0

{ ' F'feed}

else

{ [' F'feed]}

endif

endp

;-------------------

@arc

{nb}

if arc_direction eq CCW then

gcode = 3

else ; CW

gcode = 2

endif

if change(gcode) then

{'G'gcode}

else

{' '}

endif

{[' X'xpos] [' Y'ypos] [' Z'zpos]}

if arc_size eq 360 then

if arc_plane eq XY then

{' I'xcenter_rel, ' J'ycenter_rel}

endif

if arc_plane eq YZ then

{' J'xcenter_rel, ' K'ycenter_rel}

endif

if arc_plane eq ZX then

{' K'xcenter_rel, ' I'ycenter_rel}

endif

else

if arc_size >= 180 then

radius = -radius

endif

{' R'radius}

endif

if m_feed_flag eq 1

m_feed_flag = 0

{ ' F'feed}

else

{ [' F'feed]}

endif

endp

;-------------------

@compensation

if side eq COMP_LEFT then

gcode = 41

endif

if side eq COMP_RIGHT then

gcode = 42

endif

if side eq COMP_OFF then

gcode = 40

endif

{nb, 'G'gcode, ' '}

skipline = FALSE

endp

;-------------------

@delay

gcode = 4

{nb 'G'gcode, ' P'delay_period:integer_def_f}

endp

;-------------------

@change_ref_point

; Given in absolute mode

gcode = 10

{nb, 'G'gcode, 'G91 L2 P'home_number ' X'xhome, ' Y'yhome, ' Z'zhome}

{nb,'G90'}

endp

;-------------------

@home_number

gcode = 53 + home_number

{nb, 'G'gcode}

flag2 = 1

endp

;-------------------

@rotate

; Not exist in FANUC 6M

if rotate_cancel then

gcode = 69

{nb, 'G'gcode}

else

gcode = 68

{nb, 'G'gcode, ' X0 Y0 G91 R'angle}

{nb, 'G90'}

endif

endp

;-------------------

@fourth_axis

gcode = 0

{nb, 'G'gcode, ' B'angle}

endp

;-------------------

@offset_change

endp

;-------------------

@job_plane

endp

;-------------------

;-------------------

@tool_path_info

endp

;-------------------

;-------------------

@change_tool

if flag2 eq 0

call @home_number

endif

flag2 = 1

local logical save_blknum_gen

; {nb, 'M98 P9011'}

{nb, 'M9'}

{nb, 'M5'}

{nb, 'G91 G28 Z0'}

{nb, 'G90'}

; if tool_number gt 20 and tool_number lt 40

; tool_number = (tool_number - 20)

; endif

; if tool_number gt 40 and tool_number lt 60

; tool_number = (tool_number - 40)

; endif

; if tool_number gt 60 and tool_number lt 80

; tool_number = (tool_number - 60)

; endif

{nb, 'M6 T'tool_number}

{nb, 'M01'}

if tool_type eq 0 then

{nb, '( TOOL -'tool_number, '- DRILL DIA 'tool_diameter, ' MM )'}

endif

if tool_type eq 1 then

{nb, '( TOOL -'tool_number, '- ROUGH DIA 'tool_diameter, ' MM )'}

endif

if tool_type eq 2 then

{nb, '(TOOL -'tool_number, '- MILL DIA 'tool_diameter, ' R'corner_radius,' MM )'}

endif

{nb, 'G90 G00 G40 G'(53 + home_number)}

label = first_user_proc

save_blknum_gen = blknum_gen

gcode = 43

{nb, 'G'gcode, ' H'tool_number, ' D'(tool_number), ' '}

blknum_gen = save_blknum_gen

xpos = xnext

ypos = ynext

zpos = znext

skipline = FALSE

call @rapid_move

tool_direction = CCW

call @start_tool

if colent eq 0

{nb, 'M8'}

endif

if colent eq 17

{nb, 'M17'}

endif

if colent eq 18

{nb, 'M18'}

endif

endp

;-------------------

@message

{nb, '(', message, ')'}

endp

;-------------------

@drill

call @rapid_move

if drill_type eq drilling then

gcode = 81

endif

if drill_type eq f_drill then

gcode = 82

endif

if drill_type eq peck then

gcode = 83

endif

if drill_type eq tapping then

gcode = 84

endif

if drill_type eq boring then

gcode = 85

endif

if drill_type eq r_boring then

gcode = 86

endif

if drill_type eq f_boring then

gcode = 89

endif

if drill_type eq tapping then

{nb,'M3 S'spin:integer_def_f}

endif

{nb,'G98 G'gcode, ' Z'drill_lower_z, ' R'drill_upper_z}

if drill_type eq peck then

{' Q'down_step}

endif

if drill_type eq f_drill or drill_type eq tapping then

{' P'delay:integer_def_f}

endif

{' F'feed}

endp

;-------------------

@drill_point

if not first_drill then

{nb, ' ', [' X'xpos], [' Y'ypos], [' Z'zpos]}

endif

endp

;-------------------

@calc_rotate_x_y

local numeric x y z s_x s_y s_z x1 y1 y2 z1

local logical save_ch_x save_ch_y

; for @line @rapid_move @arc

; Saving the xops and ypos value to local parameters

;s_x = xpos

;s_y = ypos

;s_z = zpos

;rotating the poit X Y Z to the new position.

;x = shift_x_after_rot*cos(dev_angle_z) - shift_y_after_rot*sin(dev_angle_z)

;y = shift_x_after_rot*sin(dev_angle_z) + shift_y_after_rot*cos(dev_angle_z)

;y = y*cos(dev_angle_x) - z*sin(dev_angle_x)

;z = y*sin(dev_angle_x) + z*cos(dev_angle_x)

x=shift_x_after_rot

y=shift_y_after_rot

z=shift_z_after_rot

x1 = x*cos(dev_angle_z) - y*sin(dev_angle_z)

y1 = x*sin(dev_angle_z) + y*cos(dev_angle_z)

y2 = y1*cos(dev_angle_x) - z*sin(dev_angle_x)

z1 = y1*sin(dev_angle_x) + z*cos(dev_angle_x)

;x = xpos*cos(dev_angle_z) - ypos*sin(dev_angle_z)

;y = xpos*sin(dev_angle_z) + ypos*cos(dev_angle_z)

;y = y*cos(dev_angle_x) - z*sin(dev_angle_x)

;z = y*sin(dev_angle_x) + z*cos(dev_angle_x)

shift_x_after_rot=x1

shift_y_after_rot=y2

shift_z_after_rot=z1

{' x'x1}

{' y'y2}

{' z'z1}

xpos=xpos-shift_x_after_rot

ypos=ypos-shift_y_after_rot

zpos=zpos-shift_z_after_rot

endp

;-------------------

@mirror

if mirror_type eq MIRROR_OFF then

{nb, 'G50.1 X0 Y0'}

else

{nb, 'G51.1 '}

if mirror_type eq MIRROR_X then

{'X1 Y0'}

endif

if mirror_type eq MIRROR_Y then

{'X0 Y1'}

endif

if mirror_type eq MIRROR_XY then

{'X1 Y1'}

endif

endif

endp

;-------------------

@end_drill

gcode = 80

{nb, 'G'gcode}

endp

;-------------------

@halt_program

{' M0'}

endp

;--------------------

@home_data

endp

;--------------------

@round_comp

; NOP

endp

;--------------------

@start_of_job

if dely eq 1

{nb, 'G61'}

endif

; flag1 = 1

endp

;--------------------

@end_of_job

; NOP

endp

;--------------------

@assign_axis

; TBD

endp

; =======================

; USER DEFINED PROCEDURES

; =======================

@call_simple_proc

active(message) = FALSE

active(parm1) = FALSE

active(parm2) = FALSE

active(parm3) = FALSE

proc_count = 1

call @call_proc

endp

;-------------------

@start_tool

if tool_direction eq CW then

mcode = 4

else ; CCW

mcode = 3

endif

{' S'spin:integer_def_f, ' M'mcode}

endp

;-------------------

@m_feed_spin

; if tool_direction eq CW then

; mcode = 4

; else ; CCW

; mcode = 3

; endif

; if change(spin)

; {nb,'S'spin:integer_def_f, ' M'mcode}

; endif

m_feed_flag = 1

endp

;-------------------

@stop_tool

; {' M5'}

endp

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


Можно попробовать здесь:

<noindex>http://www.tpolis.com/products/postprocessor.php</noindex>

И цена вопроса, по крайней мере, ясна ...

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

Насколько я понял у меня просто неправильно направлены оси!!!Как правильно направить оси для визуализации и для @tmatrix???Помогите!!!Мне сказали что 5_я считается наклонной(с меньшим углом поворота) а 4_я повлротная!!!В мануале XZ соответствует осям AC а я поменял на AB есть ли разница??

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

Solidcam 2010 имеет в себе пятиосевое сверление, если вдруг есть такой солидкам - поиграйтесь с ним - там не требуется @tmatrix и прочий "матан" . а если нужно карманы выбирать или еще что фрезеровать - то модулем 5ax simultaneous. А по существу, надо прочесть инструкцию к gpptool внимательно - в разделе посвященном @tmatrix написано какие углы брать в зависимости от кинематики станка. Ну и стойка ЧПУ должна иметь в себе функционал поворота плоскости обработки - у Heidenhain это Plane а у фанука - все время забываю. Так вот, в зависимости от того вокруг каких линейных осей вращаются поворотные оси берутся два угла - напр если ось A крутится вокруг X а ось С - вокруг Z то нужны углы x_angle_const_y, z_angle_const_y и dev_angle_y. Первые используются для наклона плоскости обработки в положение перпендикулярное оси инструмента, а третий - для доворота плоскости обработки вокруг этой самой оси инструмента. Но эта бодяга работает только при наличии функционала в стойке. Если его нет - надо возиться с синусами - косинусами.

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

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

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

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

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

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

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

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

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

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

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




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