# 1extrajoint demo
# immediate homing -- jog joint4 to make a motor-offset before homing
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS

addf motion-command-handler servo-thread
addf motion-controller servo-thread

net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

net J0:loop <= joint.0.motor-pos-cmd
net J0:loop => joint.0.motor-pos-fb

net J1:loop <= joint.1.motor-pos-cmd
net J1:loop => joint.1.motor-pos-fb

net J2:loop <= joint.2.motor-pos-cmd
net J2:loop => joint.2.motor-pos-fb

net J3:loop <= joint.3.motor-pos-cmd
net J3:loop => joint.3.motor-pos-fb
#--------------------------------------------
# extra joint (joint4)

# For simulation just connect pos-cmd to pos-fb:
net J4:loop <= joint.4.motor-pos-cmd
net J4:loop => joint.4.motor-pos-fb

# NOTE: For a stepgen in position control mode:
#       net J4:loop <= joint.4.motor-pos-cmd
#       net J4:loop => joint.4.motor-pos-fb
#       net J4:loop => stepgen_position_command

# NOTE: A stepgen can be also used in velocity control mode
#       with a PID loop but it is not necessarily required
#       and position mode control is much simpler

# NOTE: For a pid motor controller (motor/amplifier/encoder):
#       net J4:cmd <= joint.4.motor-pos-cmd
#       net J4:cmd => pid_command_input
#       net J4:fb  <= encoder_measurement_output
#       net J4:fb  => joint.4.motor-pos-fb

#-----------------------------------------------------------
# motion planner for extra joint (joint4)
loadrt limit3 names=j4.limit3

# These constraints apply to homing managed by
# LinuxCNC and post-homing managed by the limit3 component:
setp j4.limit3.min    [JOINT_4]MIN_LIMIT
setp j4.limit3.max    [JOINT_4]MAX_LIMIT
setp j4.limit3.maxv   [JOINT_4]MAX_VELOCITY
setp j4.limit3.maxa   [JOINT_4]MAX_ACCELERATION

addf j4.limit3 servo-thread

net  J4:out <= j4.limit3.out
net  J4:out => joint.4.posthome-cmd

net  J4:enable <= joint.4.homed
net  J4:enable => j4.limit3.enable
