Nous on a installé EMC2 sur une lagun mtv2 que nous avons modifié
nous avons quitté mach pas assez constant . nous utilisons les cartes // mais nous allons acheter une messa afin de pouvoir travailler avec une meilleure résolution d'encodeur tout en allant assez vite (actuellement 6 metres/minutes)
J'utilise solidwork2007/solidcam2007 et le preprocessor FANUC c'est le point faible emc2 utilise la norme rs274ngc , pourtant il semble que les utilisateurs emc préférent utiliser FANUC
Nous sommes obligés de faire quelques modifications sur les Gcodes modifiés et je cherche des solutions
http://www.linuxcnc.org/component/optio ... g,english/
J'ai trouvé cela à cette adresse c'est un fanuc GPP pour solidcam 2008 modifié pour emc2 et je vais l'examiner
[spoil]; ; 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 = 'FANUC'
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'
feed_f = '4.3(p)'
tool_diameter_f = '5.3/1'
blknum_f = '5.0(p)'
blknum_gen = false
blknum_exist = true
blknum = 1
blknum_delta = 1
blknum_max = 32000
; trace 'all':5
endp
;-------------------
@start_of_file
; before tools definition
{'%'}
{nl, '(',g_file_name, ')'}
{nl, '( MCV-OP )', ' (',DATE ')'}
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
; {nb, 'M98 P9010'}
{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+50), ' 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
{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, ' A'angle}
endp
;-------------------
@change_tool
if flag2 eq 0
call @home_number
endif
flag2 = 1
local logical save_blknum_gen
; {nb, 'M98 P9011'}
{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, 'M01'}
blknum_gen = true
{nb, 'M6 T'tool_number}
blknum_gen = FALSE
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+30), ' '}
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,'M29 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
;-------------------
@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
;--------------------
@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[/spoil]