Hier war ich Anfangs sehr überfordert und habe eine erst mal alles im pncconf Wizzard mit einer anderen Mesakarte (5i25 und der 7i77) ans laufen bringen. Vielleicht wird die 7i92 inzwischen unterstützt. Was wir brauchen sind Encoder, Beschleunigungen usw. dann hat man eine 1. Konfiguration bei der man dann alles der 5i25 durch die 7I92 ersetzt.
Das ist eigentlich nur eine Zeile:
loadrt hm2_pci config=" num_encoders=6 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx"
durch
loadrt hm2_eth board_ip="192.168.1.121" config=" num_encoders=6 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx sserial_port_1=000xxx"
damit sollte sich schon mal was starten lassen. Inzwischen gehe ich eher direkt auf Hal und Ini Dateien los. Hier mal meine aktuelle INI:
[EMC]
VERSION = 1.1
MACHINE = Igor
DEBUG = 0
[DISPLAY]
DISPLAY = probe_basic
CONFIRM_EXIT = False
CONFIG_FILE = custom_config.yml
POSITION = 0x0
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 2.000000
MIN_SPINDLE_OVERRIDE = 0.010000
DEFAULT_SPINDLE_SPEED = 1000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 1
EDITOR = gedit
LOG_FILE = igor.log
PREFERENCE_FILE = igor.pref
PROGRAM_PREFIX = ~/totempole/NC-Files
INCREMENTS = JOG, 10.000, 1.000, 0.100, 0.010, 0.001
DEFAULT_LINEAR_VELOCITY = 50.0000
MAX_LINEAR_VELOCITY = 180
MIN_LINEAR_VELOCITY = 0.02000
MAX_RAPID_OVERRIDE = 2
DEFAULT_ANGULAR_VELOCITY = 12.0000
MAX_ANGULAR_VELOCITY = 180.0000
MIN_ANGULAR_VELOCITY = 1.6667
GEOMETRY = xyz
[VTK]
# VTK_Widget Options
MACHINE_BOUNDRY = True
MACHINE_TICKS = True
MACHINE_LABELS = False
PROGRAM_BOUNDRY = True
PROGRAM_TICKS = True
PROGRAM_LABELS = False
GRID_LINES = True
[PYTHON]
TOPLEVEL = ./python/toplevel.py
PATH_APPEND = ./python/
PATH_APPEND = ./python/python-stdglue/
[FILTER]
PROGRAM_EXTENSION = .nc,.txt,.tap ; .ngc is always accepted
[RS274NGC]
PARAMETER_FILE = igor.var
RS274NGC_STARTUP_CODE = F10 S300 G21 G17 G40 G49 G54 G64 P0.001 G80 G90 G91.1 G92.1 G94 G97 G98
FEATURES = 12
SUBROUTINE_PATH = ~/linuxcnc/configs/IgorProbe/nc_files/sub_progs/
USER_M_PATH = ~/linuxcnc/configs/IgorProbe/nc_files/
REMAP= M6 modalgroup=6 ngc=toolchange2
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
BASE_PERIOD = 100000
SERVO_PERIOD = 1000000
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[HAL]
HALFILE = hallib/core_igor.hal
HALFILE = hallib/xhc-whb04b-6.hal
POSTGUI_HALFILE = hallib/postgui.hal
HALUI = halui
[HALUI]
MDI_COMMAND=(debug,00)
MDI_COMMAND=(debug,macro1)
MDI_COMMAND=(debug,macro2)
MDI_COMMAND=(debug,macro3)
MDI_COMMAND=(debug,macro4)
MDI_COMMAND=o<go_to_home> call
MDI_COMMAND=(debug,macro6)
MDI_COMMAND=o<go_to_workhome> call
MDI_COMMAND=(debug,macro8)
MDI_COMMAND=o<probe_z_half> call
MDI_COMMAND=(debug,macro10)
MDI_COMMAND=(debug,macro11)
MDI_COMMAND=(debug,macro12)
MDI_COMMAND=(debug,macro13)
MDI_COMMAND=(debug,macro14)
MDI_COMMAND=(debug,macro15)
MDI_COMMAND=(debug,macro16)
MDI_COMMAND=o<go_to_zhome> call
MDI_COMMAND=(debug,macro18_Spindle_on_of)
MDI_COMMAND=o<probe_z> call
# MDI_COMMAND=(debug,macro20)
[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_LINEAR_VELOCITY = 30.0000
MAX_LINEAR_VELOCITY = 250
MAX_LINEAR_ACCELERATION = 90
SPINDLES = 1
#FORCE_NO_HOMING = 1 #spaeter auskommentiren
POSITION_FILE = position.txt
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
[KINS]
KINEMATICS = trivkins coordinates=XYZ
JOINTS = 3
#==================
# X Axis
#==================
[AXIS_X]
MAX_VELOCITY = 333.333333
MAX_ACCELERATION = 130
MIN_LIMIT = -535.0
MAX_LIMIT = 9.0
[JOINT_0]
TYPE = LINEAR
MAX_VELOCITY = 333.333333
MAX_ACCELERATION = 130
BACKLASH = 0.000
FERROR = 0.5
MIN_FERROR = 0.1
ENCODER_SCALE = -1000
OUTPUT_SCALE = 333.333333
OUTPUT_OFFSET = 0.0
OUTPUT_MIN_LIMIT = -333.333333
OUTPUT_MAX_LIMIT = 333.333333
MAX_OUTPUT = 333.333333
MIN_LIMIT = -535.0
MAX_LIMIT = 9.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -30.000000
HOME_LATCH_VEL = -0.500000
HOME_FINAL_VEL = -0.000000
HOME_SEQUENCE = 1
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
# PID tuning params
DEADBAND = 0.000015
P = 200
I = 0
D = 0
FF0 = 0
FF1 = 0.9
FF2 = 0
BIAS = 0
#==================
# Y Axis
#==================
[AXIS_Y]
MAX_VELOCITY = 291.666666
MAX_ACCELERATION = 130
MIN_LIMIT = -295.0
MAX_LIMIT = 9.0
[JOINT_1]
TYPE = LINEAR
MAX_VELOCITY = 291.666666
MAX_ACCELERATION = 130
BACKLASH = 0.000
FERROR = 0.50
MIN_FERROR = 0.10
ENCODER_SCALE = -1000
OUTPUT_SCALE = 290
OUTPUT_OFFSET = 0.0
OUTPUT_MIN_LIMIT = -290
OUTPUT_MAX_LIMIT = 290
MAX_OUTPUT = 290
MIN_LIMIT = -295.0
MAX_LIMIT = 9.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -30.000000
HOME_LATCH_VEL = -0.500000
HOME_FINAL_VEL = -0.000000
HOME_SEQUENCE = 1
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
# PID tuning params
DEADBAND = 0.000015
P = 200
I = 0
D = 0
FF0 = 0
FF1 = 0.9
FF2 = 0
BIAS = 0
#==================
# Z Axis
#==================
[AXIS_Z]
MAX_VELOCITY = 333.333333
MAX_ACCELERATION = 130
MIN_LIMIT = -419.0
MAX_LIMIT = 9.0
[JOINT_2]
YPE = LINEAR
MAX_VELOCITY = 333.333333
MAX_ACCELERATION = 130
BACKLASH = 0.000
FERROR = 0.50
MIN_FERROR = 0.10
ENCODER_SCALE = -1000
OUTPUT_SCALE = 333.333333
OUTPUT_OFFSET = 0.0
OUTPUT_MIN_LIMIT = -333.333333
OUTPUT_MAX_LIMIT = 333.333333
MAX_OUTPUT = 333.333333
MIN_LIMIT = -419.0
MAX_LIMIT = 9.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -30.000000
HOME_LATCH_VEL = -0.500000
HOME_FINAL_VEL = -0.000000
HOME_SEQUENCE = 1
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
# PID tuning params
DEADBAND = 0.000015
P = 200
I = 0
D = 0
FF0 = 0
FF1 = 0.9
FF2 = 0
BIAS = 0
HOME = 0.000
#==================
# Spindle
#==================
[SPINDLE_9]
P = 1I = 0
D = 0
FF0 = 0
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 10500
ENCODER_SCALE = 4096
OUTPUT_SCALE = -10500
OUTPUT_MIN_LIMIT = -10500
OUTPUT_MAX_LIMIT = 10500
Ich habe bei mir die Logik das alle Achsen negativ Laufen von der Ursprünglichen Konfiguration der Sinumerik übernommen, daher sind bei mir die Encoder negiert.
Die Hal ist recht umfangreich und wie man hier sieht ist auch inzwischen ein Handrad verbaut. Dazu wird es noch einen eigenen Beitrag geben. Kommen wir jetzt zu den Einzelnen Hal Dateien:
# first load all the RT modules that will be needed
# kinematics
loadrt [KINS]KINEMATICS
# motion controller, get name and thread periods from ini file
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS num_spindles=[TRAJ]SPINDLES
loadrt hostmot2
loadrt hm2_eth board_ip="192.168.1.121" config=" num_encoders=6 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx sserial_port_1=000xxx"
setp hm2_7i92.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
# classic ladder
loadrt classicladder_rt #numBits=40 numWords=30 numArithmExpr=100
addf classicladder.0.refresh servo-thread
# Load the ladder
#loadusr classicladder powerup.clp
loadusr classicladder --nogui powerup.clp
# estop
loadrt estop_latch count=3
addf estop-latch.0 servo-thread
addf estop-latch.1 servo-thread
addf estop-latch.2 servo-thread
#Spindle ramp
loadrt limit2 names=spindle-ramp
loadrt near names=spindle-atspeed
# add the Spindele functions to a thread
addf spindle-ramp servo-thread
addf spindle-atspeed servo-thread
#and2
loadrt or2 count=1
addf or2.0 servo-thread
# set the parameter for max rate-of-change
# (max spindle accel/decel in units per second)
setp spindle-ramp.maxv 1000
# add motion controller functions to servo thread
addf hm2_7i92.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf hm2_7i92.0.write servo-thread
# external output signals
# 7i71
net o-tool-clean hm2_7i92.0.7i71.1.1.output-00
net o-tool-01-down hm2_7i92.0.7i71.1.1.output-01
net o-tool-02-down hm2_7i92.0.7i71.1.1.output-02
net o-tool-03-down hm2_7i92.0.7i71.1.1.output-03
net o-tool-04-down hm2_7i92.0.7i71.1.1.output-04
net o-tool-05-down hm2_7i92.0.7i71.1.1.output-05
net o-tool-06-down hm2_7i92.0.7i71.1.1.output-06
net o-tool-07-down hm2_7i92.0.7i71.1.1.output-07
net o-tool-08-down hm2_7i92.0.7i71.1.1.output-08
net o-tool-09-down hm2_7i92.0.7i71.1.1.output-09
net o-tool-10-down hm2_7i92.0.7i71.1.1.output-10
net o-tool-11-down hm2_7i92.0.7i71.1.1.output-11
net o-tool-12-down hm2_7i92.0.7i71.1.1.output-12
net o-tool-basket-down hm2_7i92.0.7i71.1.1.output-13
net o-tool-basket-up hm2_7i92.0.7i71.1.1.output-14
net o-tool-open hm2_7i92.0.7i71.1.1.output-15
net o-tool-all-up hm2_7i92.0.7i71.1.1.output-16
net o-steuerung-1 hm2_7i92.0.7i71.1.1.output-18
net o-impulsfreigabe hm2_7i92.0.7i71.1.1.output-17
net o-pump-1 hm2_7i92.0.7i71.1.1.output-19
net o-airpressure-1 hm2_7i92.0.7i71.1.1.output-20
net o-chiptransport hm2_7i92.0.7i71.1.1.output-21
net o-pump-2 hm2_7i92.0.7i71.1.1.output-22
net o-power-drives hm2_7i92.0.7i71.1.1.output-23
net o-power-drives-delay hm2_7i92.0.7i71.1.1.output-24
#bei Transport auskommentieren
net o-brake-z hm2_7i92.0.7i71.1.1.output-25
#/bei Transport auskommentieren
net o-pump-3 hm2_7i92.0.7i71.1.1.output-27
# --- SPINDLE-ENABLE ---
#net spindle-enable hm2_7i92.0.7i71.1.1.output-26
net o-impulsfreigabe hm2_7i92.0.7i71.1.1.output-26
net spindle-enable hm2_7i92.0.7i77.0.0.output-01
# --- Table-Out ---
net o-table-up hm2_7i92.0.7i71.1.1.output-28
net o-table-lock hm2_7i92.0.7i71.1.1.output-29
net o-table-2 hm2_7i92.0.7i71.1.1.output-30
net o-table-1 hm2_7i92.0.7i71.1.1.output-31
net error1 hm2_7i92.0.7i71.1.1.output-32
net enable1 hm2_7i92.0.7i71.1.1.output-33
# --- COOLANT-FLOOD ---
net coolant-flood hm2_7i92.0.7i71.1.1.output-34
net o-dummy35 hm2_7i92.0.7i71.1.1.output-35
net o-dummy36 hm2_7i92.0.7i71.1.1.output-36
#---clean-probe
net o-probe-clean hm2_7i92.0.7i71.1.1.output-37
# --- COOLANT-MIST ---
net coolant-mist hm2_7i92.0.7i71.1.1.output-38
#---- NOT CONNECTED ----
net o-dummy39 hm2_7i92.0.7i71.1.1.output-39
net o-dummy40 hm2_7i92.0.7i71.1.1.output-40
net o-dummy41 hm2_7i92.0.7i71.1.1.output-41
net o-dummy42 hm2_7i92.0.7i71.1.1.output-42
net o-dummy43 hm2_7i92.0.7i71.1.1.output-43
#net o-dummy44 hm2_7i92.0.7i71.1.1.output-44
#bei Transport auskommentieren
net z-enable hm2_7i92.0.7i71.1.1.output-45
net y-enable hm2_7i92.0.7i71.1.1.output-46
net x-enable hm2_7i92.0.7i71.1.1.output-47
#/bei Transport auskommentieren
#7i77
# --- SPINDLE-BRAKE ---
#net spindle-brake hm2_7i92.0.7i77.0.0.output-05
net o-power-drives-delay hm2_7i92.0.7i77.0.0.output-00
#---- NOT CONNECTED ----
net o-2dummy02 hm2_7i92.0.7i77.0.0.output-02
net o-2dummy03 hm2_7i92.0.7i77.0.0.output-03
net o-2dummy04 hm2_7i92.0.7i77.0.0.output-04
net o-2dummy05 hm2_7i92.0.7i77.0.0.output-05
net o-2dummy06 hm2_7i92.0.7i77.0.0.output-06
net o-2dummy07 hm2_7i92.0.7i77.0.0.output-07
net o-2dummy08 hm2_7i92.0.7i77.0.0.output-08
net o-2dummy09 hm2_7i92.0.7i77.0.0.output-09
net o-2dummy10 hm2_7i92.0.7i77.0.0.output-10
net o-2dummy11 hm2_7i92.0.7i77.0.0.output-11
net o-2dummy12 hm2_7i92.0.7i77.0.0.output-12
net o-2dummy13 hm2_7i92.0.7i77.0.0.output-13
net o-2dummy14 hm2_7i92.0.7i77.0.0.output-14
net o-2dummy15 hm2_7i92.0.7i77.0.0.output-15
# external input signals
# 7i70
net i-tool-03-is-up hm2_7i92.0.7i70.1.0.input-00
net i-tool-03-is-down hm2_7i92.0.7i70.1.0.input-01
net i-tool-02-is-up hm2_7i92.0.7i70.1.0.input-02
net i-tool-02-is-down hm2_7i92.0.7i70.1.0.input-03
net i-tool-01-is-up hm2_7i92.0.7i70.1.0.input-04
net i-tool-01-is-down hm2_7i92.0.7i70.1.0.input-05
net i-tool-12-is-up hm2_7i92.0.7i70.1.0.input-06
net i-tool-12-is-down hm2_7i92.0.7i70.1.0.input-07
net i-tool-05-is-down hm2_7i92.0.7i70.1.0.input-08
net i-tool-05-is-up hm2_7i92.0.7i70.1.0.input-09
net i-tool-04-is-up hm2_7i92.0.7i70.1.0.input-10
net i-tool-10-is-down hm2_7i92.0.7i70.1.0.input-12
net i-tool-is-open hm2_7i92.0.7i70.1.0.input-11
net i-tool-10-is-up hm2_7i92.0.7i70.1.0.input-13
net i-tool-11-is-down hm2_7i92.0.7i70.1.0.input-14
net i-tool-11-is-up hm2_7i92.0.7i70.1.0.input-15
net i-tool-09-is-down hm2_7i92.0.7i70.1.0.input-16
net i-tool-09-is-up hm2_7i92.0.7i70.1.0.input-17
net i-tool-08-is-down hm2_7i92.0.7i70.1.0.input-18
net i-tool-08-is-up hm2_7i92.0.7i70.1.0.input-19
net i-tool-07-is-down hm2_7i92.0.7i70.1.0.input-20
net i-tool-07-is-up hm2_7i92.0.7i70.1.0.input-21
net i-tool-06-is-down hm2_7i92.0.7i70.1.0.input-22
net i-tool-06-is-up hm2_7i92.0.7i70.1.0.input-23
net i-door-1-open hm2_7i92.0.7i70.1.0.input-24
net i-steuerung-ein hm2_7i92.0.7i70.1.0.input-25
net i-power-io hm2_7i92.0.7i70.1.0.input-26
net i-tool-04-is-down hm2_7i92.0.7i70.1.0.input-27
net i-tool-basket-is-down hm2_7i92.0.7i70.1.0.input-30
net i-tool-basket-is-up hm2_7i92.0.7i70.1.0.input-31
net i-door-1-closed hm2_7i92.0.7i70.1.0.input-32
net i-door-2-open hm2_7i92.0.7i70.1.0.input-33
net i-door-2-closed hm2_7i92.0.7i70.1.0.input-34
net i-door-3 hm2_7i92.0.7i70.1.0.input-35
net i-table-is-lock hm2_7i92.0.7i70.1.0.input-36
net i-table-is-up hm2_7i92.0.7i70.1.0.input-37
net i-table-is-1 hm2_7i92.0.7i70.1.0.input-38
net i-table-is-2 hm2_7i92.0.7i70.1.0.input-39
# --- HOME-Z ---
net home-x hm2_7i92.0.7i70.1.0.input-40
net home-y hm2_7i92.0.7i70.1.0.input-29
net home-z hm2_7i92.0.7i70.1.0.input-28
# --- A Axis ---- NOT CONNECTED ----
net home-a hm2_7i92.0.7i70.1.0.input-41
net i-setup-a hm2_7i92.0.7i70.1.0.input-42
#---- NOT CONNECTED ----
net i-dummy43 hm2_7i92.0.7i70.1.0.input-43
net i-dummy44 hm2_7i92.0.7i70.1.0.input-44
net i-dummy45 hm2_7i92.0.7i70.1.0.input-45
net i-dummy46 hm2_7i92.0.7i70.1.0.input-46
net i-dummy47 hm2_7i92.0.7i70.1.0.input-47
#7i77
net i-brake-z-is-on hm2_7i92.0.7i77.0.0.input-00
net i-machine-ready hm2_7i92.0.7i77.0.0.input-01
# --- MAX-X ---
net max-x <= hm2_7i92.0.7i77.0.0.input-02
net max-x-n <= hm2_7i92.0.7i77.0.0.input-02-not
# --- MAX-Y ---
net max-y <= hm2_7i92.0.7i77.0.0.input-03
net max-y-n <= hm2_7i92.0.7i77.0.0.input-03-not
# --- MAX-Z ---
net max-z <= hm2_7i92.0.7i77.0.0.input-04
net max-z-n-1 <= hm2_7i92.0.7i77.0.0.input-04-not
# --- E-Stop input---
net estop-button hm2_7i92.0.7i77.0.0.input-06-not
net i-pressure-ok hm2_7i92.0.7i77.0.0.input-05-not
net i-temp-bimetall hm2_7i92.0.7i77.0.0.input-07-not
net i-temp hm2_7i92.0.7i77.0.0.input-08-not
# --- E-STOP CHAIN STARTS ---
net latch-ok-in iocontrol.0.user-enable-out
net latch-ok-in => estop-latch.0.ok-in
net latch0-out <= estop-latch.0.ok-out
net latch0-out => estop-latch.1.ok-in
net latch1-out <= estop-latch.1.ok-out
net latch1-out => estop-latch.2.ok-in
net reset => estop-latch.0.reset
net reset => estop-latch.1.reset
net reset => estop-latch.2.reset
net latch-out iocontrol.0.emc-enable-in <= estop-latch.2.ok-out
net estop-out estop-latch.2.fault-out
# --- EXTERNAL ESTOP SWITCH ---
net estop-button => estop-latch.0.fault-in
# --- Airpressure low E-Stop ---
net i-pressure-ok => estop-latch.1.fault-in
# --- Overheating E-STOP ---
net i-temp-bimetall => estop-latch.2.fault-in
# --- ESTOP CHAIN ENDS ---
#Ladder
# --- MACHINE-IS-ENABLED ---
net machine-is-enabled classicladder.0.in-00
net i-steuerung-ein classicladder.0.in-01
# --- ladder-out
net o-impulsfreigabe <= classicladder.0.out-02
net o-steuerung-1 <= classicladder.0.out-01
net o-power-drives <= classicladder.0.out-04
net o-power-drives-delay <= classicladder.0.out-05
net o-brake-z <= classicladder.0.out-06
net i-unknown1 hm2_7i92.0.7i77.0.0.input-09
net i-unkown2 hm2_7i92.0.7i77.0.0.input-10
net i-servo hm2_7i92.0.7i77.0.0.input-11
net i-spindle hm2_7i92.0.7i77.0.0.input-12
net i-2dummy13 hm2_7i92.0.7i77.0.0.input-13
net i-2dummy14 hm2_7i92.0.7i77.0.0.input-14
net i-2dummy15 hm2_7i92.0.7i77.0.0.input-15
#********************
#Iputs in Ganty START
#********************
net i-toolsensor-1 hm2_7i92.0.7i77.0.0.input-16
net i-toolsensor-2 hm2_7i92.0.7i77.0.0.input-17
net max-z-n-2 hm2_7i92.0.7i77.0.0.input-17-not
net i-toolsensor hm2_7i92.0.7i77.0.0.input-16-not
net i-toolsensor motion.probe-input
net i-2dummy18 hm2_7i92.0.7i77.0.0.input-18
net i-2dummy19 hm2_7i92.0.7i77.0.0.input-19
net i-2dummy20 hm2_7i92.0.7i77.0.0.input-20
net i-2dummy21 hm2_7i92.0.7i77.0.0.input-21
net i-2dummy22 hm2_7i92.0.7i77.0.0.input-22
net i-ganty-powergood hm2_7i92.0.7i77.0.0.input-23
#********************
#Iputs in Ganty END
#********************
net i-2dummy24 hm2_7i92.0.7i77.0.0.input-24
net i-2dummy25 hm2_7i92.0.7i77.0.0.input-25
net i-2dummy26 hm2_7i92.0.7i77.0.0.input-26
net i-2dummy27 hm2_7i92.0.7i77.0.0.input-27
net i-2dummy28 hm2_7i92.0.7i77.0.0.input-28
net i-2dummy29 hm2_7i92.0.7i77.0.0.input-29
net i-2dummy30 hm2_7i92.0.7i77.0.0.input-30
net i-2dummy31 hm2_7i92.0.7i77.0.0.input-31
#********************
#Z-Limit logic
#********************
net max-y-n-1 or2.0.in0
net max-z-n-2 or2.0.in1
net max-z-n or2.0.out
#*******************
# JOINT X
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
#net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output
# ---PWM Generator signals/setup---
setp hm2_7i92.0.7i77.0.1.analogout0-scalemax [JOINT_0]OUTPUT_SCALE
setp hm2_7i92.0.7i77.0.1.analogout0-minlim [JOINT_0]OUTPUT_MIN_LIMIT
setp hm2_7i92.0.7i77.0.1.analogout0-maxlim [JOINT_0]OUTPUT_MAX_LIMIT
net x-output => hm2_7i92.0.7i77.0.1.analogout0
net x-pos-cmd joint.0.motor-pos-cmd
net x-enable joint.0.amp-enable-out
# enable _all_ sserial pwmgens
net x-enable hm2_7i92.0.7i77.0.1.analogena
# ---Encoder feedback signals/setup---
setp hm2_7i92.0.encoder.00.counter-mode 0
setp hm2_7i92.0.encoder.00.filter 1
setp hm2_7i92.0.encoder.00.index-invert 0
setp hm2_7i92.0.encoder.00.index-mask 0
setp hm2_7i92.0.encoder.00.index-mask-invert 0
setp hm2_7i92.0.encoder.00.scale [JOINT_0]ENCODER_SCALE
net x-pos-fb <= hm2_7i92.0.encoder.00.position
net x-vel-fb <= hm2_7i92.0.encoder.00.velocity
net x-pos-fb => joint.0.motor-pos-fb
net x-index-enable joint.0.index-enable <=> hm2_7i92.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_7i92.0.encoder.00.rawcounts
# ---setup home / limit switch signals---
net home-x => joint.0.home-sw-in
net max-x-n => joint.0.neg-lim-sw-in
net max-x-n => joint.0.pos-lim-sw-in
#*******************
# JOINT Y
#*******************
setp pid.y.Pgain [JOINT_1]P
setp pid.y.Igain [JOINT_1]I
setp pid.y.Dgain [JOINT_1]D
setp pid.y.bias [JOINT_1]BIAS
setp pid.y.FF0 [JOINT_1]FF0
setp pid.y.FF1 [JOINT_1]FF1
setp pid.y.FF2 [JOINT_1]FF2
setp pid.y.deadband [JOINT_1]DEADBAND
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.y.error-previous-target true
net y-index-enable <=> pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
#net y-vel-cmd => pid.y.command-deriv
net y-pos-fb => pid.y.feedback
net y-output => pid.y.output
# ---PWM Generator signals/setup---
setp hm2_7i92.0.7i77.0.1.analogout1-scalemax [JOINT_1]OUTPUT_SCALE
setp hm2_7i92.0.7i77.0.1.analogout1-minlim [JOINT_1]OUTPUT_MIN_LIMIT
setp hm2_7i92.0.7i77.0.1.analogout1-maxlim [JOINT_1]OUTPUT_MAX_LIMIT
net y-output => hm2_7i92.0.7i77.0.1.analogout1
net y-pos-cmd joint.1.motor-pos-cmd
net y-enable joint.1.amp-enable-out
# ---Encoder feedback signals/setup---
setp hm2_7i92.0.encoder.01.counter-mode 0
setp hm2_7i92.0.encoder.01.filter 1
setp hm2_7i92.0.encoder.01.index-invert 0
setp hm2_7i92.0.encoder.01.index-mask 0
setp hm2_7i92.0.encoder.01.index-mask-invert 0
setp hm2_7i92.0.encoder.01.scale [JOINT_1]ENCODER_SCALE
net y-pos-fb <= hm2_7i92.0.encoder.01.position
net y-vel-fb <= hm2_7i92.0.encoder.01.velocity
net y-pos-fb => joint.1.motor-pos-fb
net y-index-enable joint.1.index-enable <=> hm2_7i92.0.encoder.01.index-enable
net y-pos-rawcounts <= hm2_7i92.0.encoder.01.rawcounts
# ---setup home / limit switch signals---
net home-y => joint.1.home-sw-in
net max-y-n => joint.1.neg-lim-sw-in
net max-y-n => joint.1.pos-lim-sw-in
#*******************
# JOINT Z
#*******************
setp pid.z.Pgain [JOINT_2]P
setp pid.z.Igain [JOINT_2]I
setp pid.z.Dgain [JOINT_2]D
setp pid.z.bias [JOINT_2]BIAS
setp pid.z.FF0 [JOINT_2]FF0
setp pid.z.FF1 [JOINT_2]FF1
setp pid.z.FF2 [JOINT_2]FF2
setp pid.z.deadband [JOINT_2]DEADBAND
setp pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.z.error-previous-target true
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
#net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output
# ---PWM Generator signals/setup---
setp hm2_7i92.0.7i77.0.1.analogout2-scalemax [JOINT_2]OUTPUT_SCALE
setp hm2_7i92.0.7i77.0.1.analogout2-minlim [JOINT_2]OUTPUT_MIN_LIMIT
setp hm2_7i92.0.7i77.0.1.analogout2-maxlim [JOINT_2]OUTPUT_MAX_LIMIT
net z-output => hm2_7i92.0.7i77.0.1.analogout2
net z-pos-cmd joint.2.motor-pos-cmd
net z-enable joint.2.amp-enable-out
# ---Encoder feedback signals/setup---
setp hm2_7i92.0.encoder.02.counter-mode 0
setp hm2_7i92.0.encoder.02.filter 1
setp hm2_7i92.0.encoder.02.index-invert 0
setp hm2_7i92.0.encoder.02.index-mask 0
setp hm2_7i92.0.encoder.02.index-mask-invert 0
setp hm2_7i92.0.encoder.02.scale [JOINT_2]ENCODER_SCALE
net z-pos-fb <= hm2_7i92.0.encoder.02.position
net z-vel-fb <= hm2_7i92.0.encoder.02.velocity
net z-pos-fb => joint.2.motor-pos-fb
net z-index-enable joint.2.index-enable <=> hm2_7i92.0.encoder.02.index-enable
net z-pos-rawcounts <= hm2_7i92.0.encoder.02.rawcounts
# ---setup home / limit switch signals---
net home-z => joint.2.home-sw-in
net max-z-n => joint.2.neg-lim-sw-in
net max-z-n => joint.2.pos-lim-sw-in
#*******************
# SPINDLE S
#*******************
setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
setp pid.s.error-previous-target true
net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
#net spindle-vel-cmd-rpm => pid.s.command
# the output of spindle ramp is sent to the scale in
net spindle-ramped <= spindle-ramp.out => => pid.s.command
net spindle-vel-fb-rpm => pid.s.feedback
net spindle-output <= pid.s.output
# ---PWM Generator signals/setup---
setp hm2_7i92.0.7i77.0.1.analogout4-scalemax [SPINDLE_9]OUTPUT_SCALE
setp hm2_7i92.0.7i77.0.1.analogout4-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT
setp hm2_7i92.0.7i77.0.1.analogout4-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT
net spindle-output => hm2_7i92.0.7i77.0.1.analogout4
# ---Encoder feedback signals/setup---
setp hm2_7i92.0.encoder.05.counter-mode 0
setp hm2_7i92.0.encoder.05.filter 1
setp hm2_7i92.0.encoder.05.index-invert 0
setp hm2_7i92.0.encoder.05.index-mask 0
setp hm2_7i92.0.encoder.05.index-mask-invert 0
setp hm2_7i92.0.encoder.05.scale [SPINDLE_9]ENCODER_SCALE
net spindle-revs <= hm2_7i92.0.encoder.05.position
net spindle-vel-fb-rps <= hm2_7i92.0.encoder.05.velocity
net spindle-index-enable <=> hm2_7i92.0.encoder.05.index-enable
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs => spindle.0.revs
#net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rps => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable
# hijack the spindle speed out and send it to spindle ramp in
net spindle-vel-cmd-rpm => spindle-ramp.in
# to know when to start the motion we send the near component
# (named spindle-at-speed) to the spindle commanded speed from
# the signal spindle-cmd and the actual spindle speed
# provided your spindle can accelerate at the maxv setting.
net spindle-vel-cmd-rpm => spindle-atspeed.in1
net spindle-ramped => spindle-atspeed.in2
#net spindle-vel-fb-rpm => spindle-atspeed.in2
# ---Setup spindle at speed signals---
# the output from spindle-at-speed is sent to motion.spindle-at-speed
# and when this is true motion will start
net spindle-at-speed <= spindle-atspeed.out => spindle.0.at-speed
#sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-y halui.axis.y.select
net jog-y-pos halui.axis.y.plus
net jog-y-neg halui.axis.y.minus
net jog-y-analog halui.axis.y.analog
net y-is-homed halui.joint.1.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
#aenderungen
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
#net machine-is-on halui.machine.is-on
#Probe
#net spindle-fwd spindle.0.forward
#net spindle-rev spindle.0.reverse
#net spindle-speed spindle.0.speed-out
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---coolant signals---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
#probe
#net lube iocontrol.0.lube
#net flood iocontrol.0.coolant-flood
#net mist iocontrol.0.coolant-mist
# ---motion control signals---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---tool change signals---
net tool-change-confirmed iocontrol.0.tool-changed <= iocontrol.0.tool-change
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
Postgui Hal:
#E-stop
net reset <= qtpyvcp.hb1.out
net reset => qtpyvcp.led4.on
net estop-button => qtpyvcp.led1.on
net i-pressure-ok => qtpyvcp.led2.on
net i-temp-bimetall => qtpyvcp.led3.on
net latch-out => qtpyvcp.led5.on
Was noch Fehlt ist die Startsequenz der Servotreiber und der Spindel das habe ich über eine Ladder gelöst:
Damit ist alles umgesetzt, das benötigt wird die Maschine in Bewegung zu setzten. Es Fehlen noch diverse Programme zum Steuern der einzelnen Komponenten. Doch dazu kommen wir später.