Exemple #1
0
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()
Exemple #2
0
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])
Exemple #3
0
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'))
Exemple #4
0
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)
Exemple #5
0
    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')
Exemple #6
0
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)
Exemple #7
0
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()
Exemple #8
0
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)
Exemple #9
0
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')
Exemple #10
0
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()
Exemple #11
0
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)
Exemple #12
0
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')
Exemple #13
0
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
Exemple #15
0
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)
Exemple #18
0
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()
Exemple #19
0
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))