def setup_extras(): name = 'extras' comp = hal.RemoteComponent(name, timer=100) comp.newpin('gpio.in.0', hal.HAL_BIT, hal.HAL_IN) comp.newpin('gpio.in.1', hal.HAL_BIT, hal.HAL_IN) comp.newpin('gpio.in.2', hal.HAL_BIT, hal.HAL_IN) comp.ready()
def setup_fans(replicape): if NUM_FANS == 0: return en = config.find('FDM','SYSTEM_FAN', 0) fan_out = [None] * NUM_FANS fan_scale = [None] * NUM_FANS fan_in = [None] * NUM_FANS #on-board pwm input is 0.0 to 1.0, M106 sends 0 to 255 for i in xrange(NUM_FANS): fan_out[i] = hal.newsig('fan-output-%d' % i, hal.HAL_FLOAT) replicape.get_fan_pwm_pin(i).link(fan_out[i]) # the system fan is connected to the last fan pwm output if (int(en) > 0) and (i == NUM_FANS-1): fan_out[i].set(1.0) else: fan_in[i] = hal.newsig('fan-input-%d' % i, hal.HAL_FLOAT) fan_in[i].link('motion.analog-out-io-%d' % (FAN_IO_START + i)) fan_scale[i] = rtapi.newinst('div2', 'fan%d.div2.scale-pwm' % i) hal.addf(fan_scale[i].name, SERVO_THREAD) fan_scale[i].pin('in0').link(fan_in[i]) fan_scale[i].pin('in1').set(255.0) fan_scale[i].pin('out').link(fan_out[i]) comp = hal.RemoteComponent('fdm-f%d' % i, timer=100) comp.newpin('set',hal.HAL_FLOAT, hal.HAL_IO) comp.ready() comp.pin('set').link(fan_in[i])
def create_rcomp(): rcomp = hal.RemoteComponent('control', timer=100) rcomp.newpin('vel-cmd', hal.HAL_FLOAT, hal.HAL_OUT) rcomp.newpin('enable', hal.HAL_BIT, hal.HAL_OUT) rcomp.ready() rcomp.pin('vel-cmd').link(hal.Signal('motor-vel')) rcomp.pin('enable').link(hal.Signal('motor-enable'))
def create_gantry_rcomp(jointIndex, timer=100): name = 'gantry-config' comp = hal.RemoteComponent(name, timer=timer) comp.newpin('offset-left', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('offset-right', hal.HAL_FLOAT, hal.HAL_IO) comp.ready() comp.pin('offset-left').link('home-offset-%i-0' % jointIndex) comp.pin('offset-right').link('home-offset-%i-1' % jointIndex)
def _create_control_remote_component(): control = hal.RemoteComponent('control', timer=100) control.newpin('state_cmd', hal.HAL_U32, hal.HAL_IO) control.newpin('state_fb', hal.HAL_S32, hal.HAL_IN) control.newpin('reset', hal.HAL_BIT, hal.HAL_IO) control.ready() control.pin('state_cmd').link('state-cmd') control.pin('state_fb').link('state-fb') control.pin('reset').link('reset-in')
def create_light_rcomp(name, timer=100): comp = hal.RemoteComponent('fdm-%s' % name, timer=timer) comp.newpin('r', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('g', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('b', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('w', hal.HAL_FLOAT, hal.HAL_IO) comp.ready() comp.pin('r').link('%s-r' % name) comp.pin('g').link('%s-g' % name) comp.pin('b').link('%s-b' % name) comp.pin('w').link('%s-w' % name)
def create_pid_rcomp(name, timer=100): comp = hal.RemoteComponent(name, timer=timer) comp.newpin('Pgain', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('Igain', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('Dgain', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('maxerrorI', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('bias', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('max', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('min', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('command', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('feedback', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('output', hal.HAL_FLOAT, hal.HAL_IN) comp.ready()
def create_gantry4_rcomp(axisIndex, timer=100): name = 'gantry4-config' comp = hal.RemoteComponent(name, timer=timer) comp.newpin('offset-left-front', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('offset-right-front', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('offset-left-back', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('offset-right-back', hal.HAL_FLOAT, hal.HAL_IO) comp.ready() comp.pin('offset-left-front').link('home-offset-%i-0' % axisIndex) comp.pin('offset-right-front').link('home-offset-%i-1' % axisIndex) comp.pin('offset-left-back').link('home-offset-%i-2' % axisIndex) comp.pin('offset-right-back').link('home-offset-%i-3' % axisIndex)
def create_ve_params_rcomp(timer=100): name = 'fdm-ve-params' comp = hal.RemoteComponent(name, timer=timer) comp.newpin('filament-dia', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('retract-vel', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('retract-len', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('extrude-scale', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('accel-adj-gain', hal.HAL_FLOAT, hal.HAL_IO) comp.ready() comp.pin('filament-dia').link('ve-filament-dia') comp.pin('retract-vel').link('ve-retract-vel') comp.pin('retract-len').link('ve-retract-len') comp.pin('extrude-scale').link('ve-extrude-scale') comp.pin('accel-adj-gain').link('ve-extrude-accel-adj-gain')
def setup_sim_pins(): rospy.loginfo('Creating io-rcomp HAL remote component') # mirror hal_io to rcomp hal_io = hal.components['hal_io'] rcomp = hal.RemoteComponent('io-rcomp', timer=100) for pin in hal_io.pins(): name = '.'.join(pin.name.split('.')[1:]) dir_map = {hal.HAL_IN: hal.HAL_OUT, hal.HAL_OUT: hal.HAL_IN} rcomp.newpin(name, pin.type, dir_map.get(pin.dir, hal.HAL_IO)) if pin.linked: continue if pin.dir == hal.HAL_IN: rcomp.pin(name).link(hal.pins[pin.name]) else: hal.pins[pin.name].link(rcomp.pin(name)) rcomp.ready()
def create_temperature_rcomp(name, timer=100): comp = hal.RemoteComponent('fdm-%s' % name, timer=timer) comp.newpin('temp.meas', hal.HAL_FLOAT, hal.HAL_IN, eps=1) comp.newpin('temp.set', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('temp.standby', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('temp.limit.min', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('temp.limit.max', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('temp.in-range', hal.HAL_BIT, hal.HAL_IN) comp.newpin('error', hal.HAL_BIT, hal.HAL_IN) comp.newpin('active', hal.HAL_BIT, hal.HAL_IN) comp.ready() comp.pin('temp.meas').link('%s-temp-meas' % name) comp.pin('temp.set').link('%s-temp-set' % name) comp.pin('temp.standby').link('%s-temp-standby' % name) comp.pin('temp.limit.min').link('%s-temp-limit-min' % name) comp.pin('temp.limit.max').link('%s-temp-limit-max' % name) comp.pin('temp.in-range').link('%s-temp-in-range' % name) comp.pin('error').link('%s-error' % name) comp.pin('active').link('%s-active' % name)
def create_ve_jog_rcomp(extruders, timer=100): name = 'fdm-ve-jog' comp = hal.RemoteComponent(name, timer=timer) comp.newpin('distance', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('velocity', hal.HAL_FLOAT, hal.HAL_IO) comp.newpin('direction', hal.HAL_BIT, hal.HAL_IO) comp.newpin('trigger', hal.HAL_BIT, hal.HAL_IO) comp.newpin('continuous', hal.HAL_BIT, hal.HAL_IO) comp.newpin('dtg', hal.HAL_FLOAT, hal.HAL_IN, eps=1) comp.newpin('max-velocity', hal.HAL_FLOAT, hal.HAL_IN) comp.newpin('extruder-count', hal.HAL_U32, hal.HAL_IN) comp.newpin('extruder-sel', hal.HAL_S32, hal.HAL_IN) comp.ready() comp.pin('distance').link('ve-jog-distance') comp.pin('velocity').link('ve-jog-velocity') comp.pin('direction').link('ve-jog-direction') comp.pin('trigger').link('ve-jog-trigger') comp.pin('continuous').link('ve-jog-continuous') comp.pin('dtg').link('ve-jog-dtg') comp.pin('max-velocity').link('ve-max-velocity') comp.pin('extruder-count').set(extruders) comp.pin('extruder-sel').link('extruder-sel')
def create_fan_rcomp(name, timer=100): comp = hal.RemoteComponent('fdm-%s' % name, timer=timer) comp.newpin('set', hal.HAL_FLOAT, hal.HAL_IO) comp.ready() comp.pin('set').link('%s-set' % name)
rt.newthread('main-thread', 1000000, fp=False) # create the signal for connecting the components input0 = hal.newsig('input0', hal.HAL_BIT) input1 = hal.newsig('input1', hal.HAL_BIT) output = hal.newsig('output', hal.HAL_BIT) # and2 component and2 = rt.newinst('and2', 'and2.demo') and2.pin('in0').link(input0) and2.pin('in1').link(input1) and2.pin('out').link(output) hal.addf(and2.name, 'main-thread') # create remote component rcomp = hal.RemoteComponent('anddemo', timer=100) rcomp.newpin('button0', hal.HAL_BIT, hal.HAL_OUT) rcomp.newpin('button1', hal.HAL_BIT, hal.HAL_OUT) rcomp.newpin('led', hal.HAL_BIT, hal.HAL_IN) rcomp.ready() # link remote component pins rcomp.pin('button0').link(input0) rcomp.pin('button1').link(input1) rcomp.pin('led').link(output) # ready to start the threads hal.start_threads() # start haltalk server after everything is initialized # else binding the remote components on the UI might fail
trinamicdbspi.pin('sfilt.set').link(sfilt) trinamicdbspi.pin('sgt.set').link(sgt) trinamicdbspi.pin('cs.set').link(cs) trinamicdbspi.pin('tst.set').link(tst) trinamicdbspi.pin('slph.set').link(slph) trinamicdbspi.pin('slpl.set').link(slpl) trinamicdbspi.pin('diss2g.set').link(diss2g) trinamicdbspi.pin('ts2g.set').link(ts2g) trinamicdbspi.pin('sdoff.set').link(sdoff) trinamicdbspi.pin('vsense.set').link(vsense) trinamicdbspi.pin('rdsel.set').link(rdsel) # create remote component rcomp = hal.RemoteComponent('TrinamicSPI', timer=100) rcomp.newpin('drvctrl.reg', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('chopconf.reg', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('smarten.reg', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('sgcsconf.reg', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('drvconf.reg', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('full.0.val', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('full.1.val', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('full.2.val', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('full.3.val', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('full.4.val', hal.HAL_U32, hal.HAL_IN) rcomp.newpin('sg.readout', hal.HAL_FLOAT, hal.HAL_IN, eps=1) rcomp.newpin('stst.status', hal.HAL_BIT, hal.HAL_IN) rcomp.newpin('olb.status', hal.HAL_BIT, hal.HAL_IN) rcomp.newpin('ola.status', hal.HAL_BIT, hal.HAL_IN) rcomp.newpin('s2gb.status', hal.HAL_BIT, hal.HAL_IN)
output_pins = ','.join(io_map.values()) rt.loadrt('hal_bb_gpio', output_pins=output_pins, input_pins='') #rt.loadrt(c.find('PRUCONF', 'DRIVER'), 'prucode=%s/%s' % (c.Config().EMC2_RTLIB_DIR, c.find('PRUCONF', 'PRUBIN')), # pru=1, num_stepgens=3, num_pwmgens=3, halname='hpg') servo_thread = 'servo_thread' rt.newthread(servo_thread, c.find('TASK', 'CYCLE_TIME') * 1e9, fp=True) #hal.addf('hpg.capture-position', servo_thread) hal.addf('bb_gpio.read', servo_thread) # TODO: HAL comps rcomp = hal.RemoteComponent('io-control', timer=100) for i in range(_NUM_IOS): rcomp.newpin('io-%i.value' % i, hal.HAL_BIT, hal.HAL_IO) rcomp.newpin('io-%i.pin' % i, hal.HAL_U32, hal.HAL_OUT) rcomp.ready() for io in io_map: name = io_map[io] port = name[0] pin = name[1:] pin = hal.pins['bb_gpio.p%s.out-%s' % (port, pin)] rcomp.pin('io-%i.value' % io).link(pin) rcomp.pin('io-%i.pin' % io).set(int(name)) #hal.addf('hpg.update', servo_thread) hal.addf('bb_gpio.write', servo_thread)
def __init__(self, temp_hal, pwm_pin, on_pin, enable_sig, estop_reset_sig, config_name, comp_name, hal_name, motion_pin_number): self.temp_hal = temp_hal comp = hal.RemoteComponent(comp_name, timer=100) comp_limit_min_pin = comp.newpin('temp.limit.min', hal.HAL_FLOAT, hal.HAL_IN) comp_limit_max_pin = comp.newpin('temp.limit.max', hal.HAL_FLOAT, hal.HAL_IN) comp_standby_pin = comp.newpin('temp.standby', hal.HAL_FLOAT, hal.HAL_IN) comp_meas_pin = comp.newpin('temp.meas', hal.HAL_FLOAT, hal.HAL_IN) comp_set_pin = comp.newpin('temp.set', hal.HAL_FLOAT, hal.HAL_IO) comp_in_range_pin = comp.newpin('temp.in-range', hal.HAL_BIT, hal.HAL_IN) comp_active_pin = comp.newpin('active', hal.HAL_BIT, hal.HAL_IN) comp_error_pin = comp.newpin('error', hal.HAL_BIT, hal.HAL_IN) comp.ready() # -- General Signals -- meas_sig = hal.newsig('%s.meas' % hal_name, hal.HAL_FLOAT) meas_sig.link(temp_hal.pin('value')) meas_sig.link(comp_meas_pin) meas_sig.link('motion.analog-in-%02d' % motion_pin_number) set_sig = hal.newsig('%s.set' % hal_name, hal.HAL_FLOAT) set_sig.link(comp_set_pin) set_sig.link('motion.analog-out-io-%02d' % motion_pin_number) limit_min_sig = hal.newsig('%s.limit.min' % hal_name, hal.HAL_FLOAT) limit_min_sig.link(comp_limit_min_pin) limit_min_sig.set(config.find(config_name, 'TEMP_LIMIT_MIN', 0.0)) limit_max_sig = hal.newsig('%s.limit.max' % hal_name, hal.HAL_FLOAT) limit_max_sig.link(comp_limit_max_pin) limit_max_sig.set(config.find(config_name, 'TEMP_LIMIT_MAX', 30.0)) standby_sig = hal.newsig('%s.standby' % hal_name, hal.HAL_FLOAT) standby_sig.link(comp_standby_pin) standby_sig.set(config.find(config_name, 'TEMP_STANDBY', 15.0)) on_sig = hal.newsig('%s.on' % hal_name, hal.HAL_BIT) on_sig.link(on_pin) on_sig.link(comp_active_pin) error_sig = hal.newsig('%s.error' % hal_name, hal.HAL_BIT) self.error_sig = error_sig error_sig.link(comp_error_pin) self.temp_watchdog_sig = hal.newsig('%s.watchdog' % hal_name, hal.HAL_BIT) temp_hal.pin('watchdog').link(self.temp_watchdog_sig) # -- Measurement -- # In-Range Signal in_range_sig = hal.newsig('%s.in-range' % hal_name, hal.HAL_BIT) in_range_sig.link(comp_in_range_pin) in_range_sig.link('motion.digital-in-%02d' % motion_pin_number) range_lb_sum = rtapi.newinst('sum2', '%s.range.lb.sum2' % hal_name) hal.addf(range_lb_sum.name, SERVO_THREAD) range_ub_sum = rtapi.newinst('sum2', '%s.range.ub.sum2' % hal_name) hal.addf(range_ub_sum.name, SERVO_THREAD) range_lb_sig = hal.newsig('%s.range.lb' % hal_name, hal.HAL_FLOAT) range_ub_sig = hal.newsig('%s.range.ub' % hal_name, hal.HAL_FLOAT) range_lb_sum.pin('in0').link(set_sig) range_lb_sum.pin('in1').set(float(config.find(config_name, 'TEMP_RANGE_NEG_ERROR', -1.0))) range_lb_sum.pin('out').link(range_lb_sig) range_ub_sum.pin('in0').link(set_sig) range_ub_sum.pin('in1').set(float(config.find(config_name, 'TEMP_RANGE_POS_ERROR', 1.0))) range_ub_sum.pin('out').link(range_ub_sig) range_wcomp = rtapi.newinst('wcomp', '%s.range.wcomp' % hal_name) hal.addf(range_wcomp.name, SERVO_THREAD) range_wcomp.pin('min').link(range_lb_sig) range_wcomp.pin('max').link(range_ub_sig) range_wcomp.pin('in').link(meas_sig) range_wcomp.pin('out').link(in_range_sig) # -- Output -- pwm_raw_sig = hal.newsig('%s.pwm_raw' % hal_name, hal.HAL_FLOAT) pwm_sig = hal.newsig('%s.pwm' % hal_name, hal.HAL_FLOAT) pwm_max = float(config.find(config_name, 'PWM_MAX', 1.0)) # PID pid = rtapi.newinst('at_pid', '%s.pid' % hal_name) hal.addf(pid.name + '.do-pid-calcs', SERVO_THREAD) pid.pin('enable').link(enable_sig) pid.pin('feedback').link(meas_sig) pid.pin('command').link(set_sig) pid.pin('output').link(pwm_raw_sig) pid.pin('maxoutput').set(pwm_max) pid.pin('Pgain').set(float(config.find(config_name, 'PID_PGAIN', 0))) pid.pin('Igain').set(float(config.find(config_name, 'PID_IGAIN', 0))) pid.pin('Dgain').set(float(config.find(config_name, 'PID_DGAIN', 0))) pid.pin('maxerrorI').set(float(config.find(config_name, 'PID_MAXERRORI', 1.0))) pid.pin('bias').set(float(config.find(config_name, 'PID_BIAS', 0.0))) # PWM Limit (PID can output negative values) pwm_limit = rtapi.newinst('limit1', '%s.limit1.pwm' % hal_name) hal.addf(pwm_limit.name, SERVO_THREAD) pwm_limit.pin('min').set(0.0) pwm_limit.pin('max').set(pwm_max) pwm_limit.pin('in').link(pwm_raw_sig) pwm_limit.pin('out').link(pwm_sig) pwm_pin.link(pwm_sig) # -- Safety Check -- check_limit_ok_sig = hal.newsig('%s.check.limit-ok' % hal_name, hal.HAL_BIT) limit_wcomp = rtapi.newinst('wcomp', '%s.check.limit.wcomp' % hal_name) hal.addf(limit_wcomp.name, SERVO_THREAD) limit_wcomp.pin('min').link(limit_min_sig) limit_wcomp.pin('max').link(limit_max_sig) limit_wcomp.pin('in').link(meas_sig) limit_wcomp.pin('out').link(check_limit_ok_sig) out_range_sig = hal.newsig('%s.out-range' % hal_name, hal.HAL_BIT) out_range_not = rtapi.newinst('not', '%s.out-range.not' % hal_name) hal.addf(out_range_not.name, SERVO_THREAD) out_range_not.pin('in').link(in_range_sig) out_range_not.pin('out').link(out_range_sig) thermistor_check_enable_sig = hal.newsig('%s.check.therm.enable' % hal_name, hal.HAL_BIT) thermistor_check_enable_and = rtapi.newinst('and2', '%s.check.therm.enable.and2' % hal_name) hal.addf(thermistor_check_enable_and.name, SERVO_THREAD) thermistor_check_enable_and.pin('in0').link(enable_sig) thermistor_check_enable_and.pin('in1').link(out_range_sig) thermistor_check_enable_and.pin('out').link(thermistor_check_enable_sig) check_thermistor_ok_sig = hal.newsig('%s.check.therm-ok' % hal_name, hal.HAL_BIT) thermistor_check = rtapi.newinst('thermistor_check', '%s.check.therm-check' % hal_name) hal.addf(thermistor_check.name, SERVO_THREAD) thermistor_check.pin('enable').link(thermistor_check_enable_sig) thermistor_check.pin('pid').link(pwm_sig) thermistor_check.pin('temp').link(meas_sig) thermistor_check.pin('min-pid').set(float(config.find(config_name, 'CHECK_MIN_PID', 0.25))) thermistor_check.pin('min-temp').set(float(config.find(config_name, 'CHECK_MIN_TEMP', 2.0))) thermistor_check.pin('wait').set(float(config.find(config_name, 'CHECK_WAIT', 30.0))) thermistor_check.pin('no-error').link(check_thermistor_ok_sig) check_all_ok_sig = hal.newsig('%s.check.all-ok' % hal_name, hal.HAL_BIT) check_all_ok = rtapi.newinst('and2', '%s.check.all.and2' % hal_name) hal.addf(check_all_ok.name, SERVO_THREAD) check_all_ok.pin('in0').link(check_limit_ok_sig) check_all_ok.pin('in1').link(check_thermistor_ok_sig) check_all_ok.pin('out').link(check_all_ok_sig) check_error_sig = hal.newsig('%s.check.error' % hal_name, hal.HAL_BIT) check_error = rtapi.newinst('not', '%s.check.error.not' % hal_name) hal.addf(check_error.name, SERVO_THREAD) check_error.pin('in').link(check_all_ok_sig) check_error.pin('out').link(check_error_sig) error_latch = rtapi.newinst('flipflop', '%s.check.error.flipflop' % hal_name) hal.addf(error_latch.name, SERVO_THREAD) error_latch.pin('set').link(check_error_sig) error_latch.pin('reset').link(estop_reset_sig) error_latch.pin('out').link(error_sig)
def setup_extruders(replicape, extruder_sel_sig): motion_vel_sig = hal.newsig('ve-motion-vel', hal.HAL_FLOAT) motion_vel_sig.link('motion.current-vel') extruders = [None] * EXTRUDER_TOTAL for i in xrange(EXTRUDER_TOTAL): extruders[i] = Extruder(i, motion_vel_sig, config) setup_extruder(replicape, extruders[i], i) shared_signals = [ # Shared Signal Type Attribute fdm-ve-jog fdm-ve-params analog- or digital-io ('enable', hal.HAL_BIT, 'enable_sig', None, None, 1), ('cross-section', hal.HAL_FLOAT, 'cross_section_sig', None, None, 41), ('jog-vel', hal.HAL_FLOAT, 'jog_vel_sig', 'velocity', None, 45), ('jog-direction', hal.HAL_BIT, 'jog_direction_sig', 'direction', None, 14), ('jog-distance', hal.HAL_FLOAT, 'jog_distance_sig', 'distance', None, 46), ('jog-trigger', hal.HAL_BIT, 'jog_trigger_sig', 'trigger', None, 12), ('jog-continuous',hal.HAL_BIT, 'jog_continuous_sig','continuous', None, 13), ('jog-dtg', hal.HAL_FLOAT, 'jog_dtg_sig', 'dtg', None, None), ('max-jog-vel', hal.HAL_FLOAT, 'max_jog_vel_sig', 'max-velocity',None, None), ('filament-dia', hal.HAL_FLOAT, 'filament_dia_sig', None, 'filament-dia', 44), ('extrude-scale', hal.HAL_FLOAT, 'extrude_scale_sig', None, 'extrude-scale', 49), ('accel-gain', hal.HAL_FLOAT, 'accel_gain_sig', None, 'accel-adj-gain', None), ('retract-vel', hal.HAL_FLOAT, 'retract_vel_sig', None, 'retract-vel', 48), ('retract-len', hal.HAL_FLOAT, 'retract_len_sig', None, 'retract-len', 47), ('extrude-vel', hal.HAL_FLOAT, 'extrude_vel_sig', None, None, None), ('retracting', hal.HAL_BIT , 'retracting_sig', None, None, None), ] comp_jog = hal.RemoteComponent('fdm-ve-jog', timer=100) comp_params = hal.RemoteComponent('fdm-ve-params', timer=100) for (signal_name, signal_type, attr_name, comp_jog_name, comp_params_name, io_pin) in shared_signals: signal = hal.newsig('ve.%s' % signal_name, signal_type) comp_dir_type = hal.HAL_IO if signal_name == 'jog-dtg' or signal_name == 'max-jog-vel' or signal_name == 'extrude-vel': mux_type = 'muxn' comp_dir_type = hal.HAL_IN elif signal_name == 'retracting': mux_type = 'muxn_bit' comp_dir_type = hal.HAL_IN else: mux_type = 'io_muxn' if signal_type == hal.HAL_FLOAT else 'io_muxn_bit' mux = rtapi.newinst( mux_type, 'ex.mux%d.%s' % (EXTRUDER_TOTAL, signal_name), pincount=EXTRUDER_TOTAL) hal.addf(mux.name, SERVO_THREAD) mux.pin('out').link(signal) mux.pin('sel').link(extruder_sel_sig) for j in xrange(EXTRUDER_TOTAL): mux.pin('in%i' % j).link(getattr(extruders[j], attr_name)) if comp_jog_name is not None: pin = comp_jog.newpin(comp_jog_name, signal_type, comp_dir_type) pin.link(signal) if comp_params_name is not None: pin = comp_params.newpin(comp_params_name, signal_type, comp_dir_type) pin.link(signal) if io_pin is not None: if signal_type == hal.HAL_FLOAT: signal.link('motion.analog-out-io-%d' % io_pin) else: signal.link('motion.digital-out-io-%02i' % io_pin) hal.Signal('ve.retracting').link('motion.feed-hold') extruder_sel_sig.link('iocontrol.0.tool-prep-number') comp_jog.newpin('extruder-sel', hal.HAL_S32, hal.HAL_IN).link(extruder_sel_sig) comp_jog.newpin('extruder-count', hal.HAL_U32, hal.HAL_IN).set(EXTRUDER_TOTAL) comp_jog.ready() comp_params.ready()
hal.Pin('hpg.stepgen.00.maxaccel').set(c.find('AXIS_0', 'STEPGEN_MAX_ACC')) hal.Pin('hpg.stepgen.00.minvel').set(c.find('AXIS_0', 'STEPGEN_MIN_VEL')) #sets XStep P8.12 hal.Pin('hpg.stepgen.00.steppin').set(812) #sets XDir P8.11 hal.Pin('hpg.stepgen.00.dirpin').set(811) servo_thread = 'servo_thread' rt.newthread(servo_thread, c.find('TASK', 'CYCLE_TIME') * 1e9, fp=True) hal.addf('hpg.capture-position', servo_thread) hal.addf('bb_gpio.read', servo_thread) # TODO: HAL comps rcomp = hal.RemoteComponent('command-interface', timer=100) for i in range(_MAX_AXES): rcomp.newpin('joint%i.position-cmd' % i, hal.HAL_FLOAT, hal.HAL_OUT) rcomp.newpin('joint%i.position-fb' % i, hal.HAL_FLOAT, hal.HAL_IN) rcomp.newpin('joint%i.enable' % i, hal.HAL_BIT, hal.HAL_IO) rcomp.newpin('joint%i.position-min' % i, hal.HAL_FLOAT, hal.HAL_IO) rcomp.newpin('joint%i.position-max' % i, hal.HAL_FLOAT, hal.HAL_IO) rcomp.ready() for i in range(_MAX_AXES): pin = get_pin('hpg.stepgen.%02i.position-cmd' % i) if pin: rcomp.pin('joint%i.position-cmd' % i).link(pin) pin = get_pin('hpg.stepgen.%02i.position-fb' % i) if pin: pin.link(rcomp.pin('joint%i.position-fb' % i))