# EMC controller parameters for a simulated machine. # General note: Comments can either be preceded with a # or ; - either is # acceptable, although # is in keeping with most linux config files. # General section ------------------------------------------------------------- [EMC] # make emcsrv not create tool rcs channels if not using iocontrol TOOL_CHANNELS = 0 # Name of NML file to use, default is emc.nml NML_FILE = no-iotask.nml # Version of this INI file VERSION = $Revision$ # Name of machine, for use with display, etc. MACHINE = py.ini # Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others #DEBUG = 0x7FFFFFFF #DEBUG = 0x7FFFDEFF #no interp,oword #DEBUG = 0x00008000 # py only #DEBUG = 0x0000E000 # py + remap + Oword #DEBUG = 0x0000C000 # py + remap #DEBUG = 0x0000C100 # py + remap + Interpreter #DEBUG = 0x0000C140 # py + remap + Interpreter + NML msgs DEBUG = 0x0000C040 # py + remap + NML #DEBUG = 0x0003E100 # py + remap + Interpreter + oword + signals + namedparams #DEBUG = 0x00008000 #DEBUG = 0 # 0x00000100 # 0x00000001 Ausgabe ungültige Meldungen # 0x00000002 Ausgabe Konfigurations-Settings # 0x00000004 Ausgabe Defaults # 0x00000008 Ausgabe Version # 0x00000010 Ausgabe Task Meldungen # 0x00000020 Ausgabe IO-Points # 0x00000040 Ausgabe NML-Messages # 0x00000080 Ausgabe Zeit zur Beendigung einer Motorbewegung # 0x00000100 Ausgabe Intepreter Debugging # 0x00000200 Ausgabe RCS-Debugging # 0x00000400 Ausgabe Roh-Bahn-Daten # 0x00000800 Ausgabe Interpreter List #define EMC_DEBUG_IOCONTROL 0x00001000 #define EMC_DEBUG_OWORD 0x00002000 #define EMC_DEBUG_REMAP 0x00004000 #define EMC_DEBUG_PYTHON 0x00008000 #define EMC_DEBUG_NAMEDPARAM 0x00010000 # EMC_DEBUG_GDBONSIGNAL flag 0x00020000 # 0x7FFFFFFF Ausgabe alle Debugging Messages # Sections for display options ------------------------------------------------ [DISPLAY] GLADEVCP=osubdemo-ns.ui # Name of display program, e.g., xemc DISPLAY = axis #OPEN_FILE=../../nc_files/m66test.ngc #OPEN_FILE=/home/mah/emc2-tc/nc_files/arcspiral.ngc #OPEN_FILE=/home/mah/emc2-tc/nc_files/taskcall.ngc OPEN_FILE=./taskcall.ngc # Cycle time, in seconds, that display will sleep between polls CYCLE_TIME = 0.100 # Path to help file HELP_FILE = doc/help.txt # Initial display setting for position, RELATIVE or MACHINE POSITION_OFFSET = RELATIVE # Initial display setting for position, COMMANDED or ACTUAL POSITION_FEEDBACK = ACTUAL # Highest value that will be allowed for feed override, 1.0 = 100% MAX_FEED_OVERRIDE = 1.2 MAX_SPINDLE_OVERRIDE = 1.0 # Prefix to be used #PROGRAM_PREFIX = /home/mah/emc2-tc/nc_files/ PROGRAM_PREFIX = ../../nc_files # Introductory graphic #INTRO_GRAPHIC = emc2.gif INTRO_TIME = 0 EDITOR = gedit INCREMENTS = 1 mm, .01 in, .1mm, 1 mil, .1 mil, 1/8000 in [FILTER] PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image PROGRAM_EXTENSION = .py Python Script png = image-to-gcode gif = image-to-gcode jpg = image-to-gcode py = python # Task controller section ----------------------------------------------------- [TASK] # Name of task controller program, e.g., milltask TASK = milltask # Cycle time, in seconds, that task controller will sleep between polls CYCLE_TIME = 0.001 # the Python plugins serves the interpreter as well as task [PYTHON] #PLUGIN_DIR=/home/mah/emc2-tc/configs/sim/pysubs PLUGIN_DIR=./pysubs # import the following Python modules MODULE_BASENAME=plugins # if this is set: RELOAD_ON_CHANGE=1 # and the file specified in MODULE_BASENAME was changed, it will be reloaded before # executing any Python calls # This is handy for debugging because you dont need to restart EMC # BUT it incurs a bit of overhead per call so you might want to turn # it off in production mode # the Python reload_on_change variable may be used to toggle this # at runtime #LOG_FILE= py.log LOG_LEVEL = 3 # the python Task() instance variable TASKVAR = pytask # Part program interpreter section -------------------------------------------- [RS274NGC] #PRINT_CODES = 1 SUBROUTINE_PATH = ../../nc_files/remap_lib/common_nc_subs #RS274NGC_STARTUP_CODE = G21 # this bombs - machine not on yet so no 'I/O' possible #RS274NGC_STARTUP_CODE = M61Q3 # handler procedure called on aborts - to cleanup HAL pins etc #ON_ABORT_COMMAND=ocall #LOG_FILE= py.log LOG_LEVEL = 9 # File containing interpreter variables PARAMETER_FILE = sim_mm.var # generalized remapping #------------------------ # currently only unused M- and G-codes may be activated as per below, except for the # T,M6,M61,S and F codes. # G: currently supported modal group: 1 # M:currently supported modal groups: 5,6,7,8,9,10 # for T,S,F remaps the modal group is fixed and any modalgroup= option is ignored # An argument specification (keyword 'argspec') describes required and permitted words, # and precondtions for that code to execute. # # It consists of 0-n characters of the class [@A-KMNP-Za-kmnp-z^>] . # # parameter words: # an uppercase letter for each required parameter 'word' # a lowercase letter for each optional parameter 'word' # # Preconditions: # an '^' means: speed must be > 0 # an '>' means: feed must be > 0 # # if calling an NGC oword function (ngc=), the parameters are passed # as local named parameters which are already set when the function starts # optional words are passed if set in the block, and may be tested for existence # by # EXISTS(#<..>) . # # example: # REMAP=M400 modalgroup=10 argspec=Px ngc=demosub # # executing 'M400 P2 X3' will result in the call # o call # # the demosub.ngc body might look as follows: #------------------------- # o sub # # (debug, P=#) (note: P is required since it's uppercase in the argspec) # # (the x argspec is optional since its lowercase in the argspec. Use as follows:) # # o100 if [EXISTS[#]] # (debug, X param set: #) # o100 endif # # o endsub # M2 #------------------------- # # Calling with traditional positioal parameter lists: # # To do so, add the '@' character to the argspec. # In this case, the arguments (required or optional) will be passed tradional-style # ini example: # REMAP=M400 modalgroup=10 argspec=@XYp ngc=demosub # # executing 'M400 X2 Y3' will result in the call # o call [2] [3] # # executing 'M400 X2 Y3 P4' will result in the call # o call [2] [3] [4] # # NB: you lose the capability to distinguish more than one optional parameter word! # # if calling a Python function, the actual words present in the block as # required or optional are passed in the words dictionary; no positional # parameters are passed in this case. #REMAP=F python=blah deppert -aanix REMAP=G88.1 modalgroup=1 argspec=xyzpqr ngc=g881min REMAP=G88.2 modalgroup=1 argspec=xyzpqr ngc=g882min prolog=addlocals #prolog=fooprolog epilog=fooepilog #REMAP=G88.6 modalgroup=1 argspec=@XYZ ngc=g886 #REMAP=G88.8 modalgroup=1 argspec=XYZ python=m315 # cone cycle # abcdefhijklpqrstuvwxyz REMAP=G88.9 modalgroup=1 argspec=@XZIJKLPQRABC ngc=rcone # ( o call [X1][Z1][X2][Z2][step][feed][EngageZ][ClearAxial][ClearRadial][feedF][outflag]) # O sub # (Startpoint) # # = [#1] X # # = [#2] Z # (Endpoint) # # = [#3] I # # = [#4] J # # = [#5] (Radial stepdown) K # # = [#6] (Roughing feed rate) L # # = [#7] (Clearance to stock) P # # = [#8] (Axial rest material for finishing) Q # # = [#9] (Radial rest material for finishing) R # # = [#10] (Finishing feed rate) A # # = [#11] (Lead out move) B # # = [#3] (Start position in X) C #REMAP=M75 modalgroup=10 python=m250 #REMAP=M250 modalgroup=10 argspec=xyzpqr python=whoami prolog=fooprolog epilog=fooepilog #REMAP=M251 modalgroup=6 argspec=xyzpqr python=whoami #REMAP=M315 modalgroup=10 python=m315 REMAP=M400 modalgroup=10 prolog=introspect ngc=nestremap REMAP=M401 modalgroup=10 prolog=introspect ngc=null_sub REMAP=M402 modalgroup=10 argspec=p python=test_reschedule REMAP=M403 modalgroup=10 argspec=p python=print_tool REMAP=M404 modalgroup=10 argspec=PQ python=set_tool_zoffset #REMAP=S ngc=sdemo prolog=sprolog #REMAP=F ngc=null_sub # python=null_remap #REMAP=S python=null_remap # see pythonsubs.py and nc_files/remap-subroutines #REMAP=T argspec=T prolog=prepare_prolog epilog=prepare_epilog ngc=prepare #REMAP=M61 modalgroup=6 argspec=Q python=set_tool_number #REMAP=M6 modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog # for a REMAP=T argspec=T prolog=prepare_prolog ngc=rtdemo epilog=prepare_epilog REMAP=M6 modalgroup=6 prolog=change_prolog ngc=rm6demo epilog=change_epilog #REMAP=M61 modalgroup=6 prolog=change_prolog ngc=rm6demo.ngc epilog=change_epilog #REMAP=M61 modalgroup=6 argspec=Q python=set_tool_number # this needs work.. #RETAIN_G43=1 REMAP=M900 python=gen_backtrace modalgroup=10 REMAP=M901 python=gdb_window modalgroup=10 REMAP=M950 argspec=p python=symbols modalgroup=10 # a plain .ngc sub call by M42: # #REMAP=M42 modalgroup=9 prolog=setup_m42 ngc=m42.ngc epilog=finish_m42 # # semantics: # if M42 is encountered, execute it in modal group 9. # Fail if other group 9 codes are present in the current block. # the setup_m42 prolog Python function will be called before executing 'o call' # Then the O-word sub m42.ngc is executed. # The finish_m42 epilog Python function will be executed after m42.ngc finishes. # [VARS] # accessible in interp as #<_[section]name> FOO = 47.11 X=3 Y=4 Z=5 TOOL_CHANGE_POSITION_X = 1 TOOL_CHANGE_POSITION_Y = 2 TOOL_CHANGE_POSITION_Z = 3 # Motion control section ------------------------------------------------------ [EMCMOT] EMCMOT = motmod # Timeout for comm to emcmot, in seconds COMM_TIMEOUT = 1.0 # Interval between tries to emcmot, in seconds COMM_WAIT = 0.010 # BASE_PERIOD is unused in this configuration but specified in core_sim.hal BASE_PERIOD = 0 # Servo task period, in nano-seconds SERVO_PERIOD = 1000000 # Hardware Abstraction Layer section -------------------------------------------------- [HAL] # The run script first uses halcmd to execute any HALFILE # files, and then to execute any individual HALCMD commands. # # list of hal config files to run through halcmd # files are executed in the order in which they appear #HALFILE = core_sim_noio.hal #HALFILE = core_sim.hal POSTTASK_HALFILE = core_sim_test.hal #HALFILE = axis_owordsub_manualtoolchange.hal #HALFILE = simulated_home.hal POSTTASK_HALFILE = simulated_home.hal #HALFILE = gamepad.hal # list of halcmd commands to execute # commands are executed in the order in which they appear #HALCMD = save neta # Single file that is executed after the GUI has started. Only supported by # AXIS at this time (only AXIS creates a HAL component of its own) #POSTGUI_HALFILE = test_postgui.hal POSTGUI_HALFILE = v2_oword_gladevcp_postgui_noio.hal HALUI = halui # Trajectory planner section -------------------------------------------------- [TRAJ] AXES = 3 COORDINATES = X Y Z HOME = 0 0 0 LINEAR_UNITS = mm ANGULAR_UNITS = degree CYCLE_TIME = 0.010 DEFAULT_VELOCITY = 30.48 MAX_VELOCITY = 53.34 DEFAULT_ACCELERATION = 508 MAX_ACCELERATION = 508 POSITION_FILE = position_mm.txt NO_FORCE_HOMING = 1 # Axes sections --------------------------------------------------------------- # First axis [AXIS_0] TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 30.48 MAX_ACCELERATION = 508 BACKLASH = 0.000 INPUT_SCALE = 157.48 OUTPUT_SCALE = 1.000 MIN_LIMIT = -254 MAX_LIMIT = 254 FERROR = 1.27 MIN_FERROR = .254 HOME_OFFSET = 0.0 HOME_SEARCH_VEL = 127 HOME_LATCH_VEL = 25.4 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS = NO HOME_SEQUENCE = 1 HOME_IS_SHARED = 1 # Second axis [AXIS_1] TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 30.48 MAX_ACCELERATION = 508 BACKLASH = 0.000 INPUT_SCALE = 157.48 OUTPUT_SCALE = 1.000 MIN_LIMIT = -254 MAX_LIMIT = 254 FERROR = 1.27 MIN_FERROR = .254 HOME_OFFSET = 0.0 HOME_SEARCH_VEL = 127 HOME_LATCH_VEL = 25.4 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS = NO HOME_SEQUENCE = 1 # Third axis [AXIS_2] TYPE = LINEAR HOME = 0.0 MAX_VELOCITY = 30.48 MAX_ACCELERATION = 508 BACKLASH = 0.000 INPUT_SCALE = 157.48 OUTPUT_SCALE = 1.000 MIN_LIMIT = -50.8 MAX_LIMIT = 101.6 FERROR = 1.27 MIN_FERROR = .254 HOME_OFFSET = 25.4 HOME_SEARCH_VEL = 127 HOME_LATCH_VEL = 25.4 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS = NO HOME_SEQUENCE = 0 HOME_IS_SHARED = 1 # section for main IO controller parameters ----------------------------------- [EMCIO] # Name of IO controller program, e.g., io # explicitly support the start-change protocol. # needs to be explicitly enabled for backwards compatibility. # NB: if the start-change pin isnt used it needs to be looped like below to # start-change-ack or an M6 will hang waiting for start-change-ack: # net start-change iocontrol.0.start-change iocontrol.0.start-change-ack #EMCIO = iov2 -support-start-change # starting iov2 like so will create the start-change and start-change-ack pins # but the start-change protocol remains disabled - start-change remains low and # start-change-ack is ignored: #EMCIO = iov2 # cycle time, in seconds CYCLE_TIME = 0.100 # tool table file #TOOL_TABLE = sim_mm_test.tbl TOOL_TABLE = nstools.tbl TOOL_CHANGE_POSITION = 0 0 50.8 #RANDOM_TOOLCHANGER = 1