Autor Tema: Archivos hal e ini para Emco PCT55  (Leído 1624 veces)

Abu_Reloaded

  • Visitante
Archivos hal e ini para Emco PCT55
« en: 19 Septiembre 2020, 20:25 »
Aparto esto en un hilo nuevo porque de por si es ya un asunto de peso.
Viene de https://foro.metalaficion.com/index.php?topic=35598.0

.......la pega es lo engorroso y farragoso que es para un usuario que no entiende de scripts y cosas de esas,
Si un usuario no entiende de scripts y cosas de esas, yo solo veo tres opciones:
- estudiar
- consultar con alguien que sepa
- olvidarse del tema; linuxcnc no es para ese perfil de usuario.

.........no se podria añadir una macro de serie para el roscado?...........
Poder, se puede. Hacerse, no creo que se haga nunca. Todo lo que se precisa para roscado (cinematica, pines, geometria de herramientas,etc.) ya está
en el/los programa/s. Repetir cosas va en contra de la filosofia de LinuxCNC.

.......la facilidad de uso sigue siendo malisima si no eres un experto.........
Por la misma regla de tres, cuando se va adquiriendo "experiencia", la facilidad de uso es cojonuda........como todo en la vida.

...... emco pcturn 55, he usado su electronica original, y todo con una brekout china de 6 €,......
¿Una breakout por paralelo?. Sera interesante de ver.
El hal y el ini que pongo a continuacion usan placas Mesa, pero las señales y su numero serian parecidas. Corresponden al video de  Robert Schmitt en Youtube.
En cuanto al ATC, se maneja con el PLC ClassicLadder

Código: [Seleccionar]
# INI PARA EMCO PC TURN 55

[EMC]
MACHINE = PCT55
DEBUG = 0

[DISPLAY]
# INI para usar la GUI Gmoccapy
DISPLAY = gmoccapy
EMBED_TAB_NAME = GladeVCP
EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -H gvcp_call_list.hal -x {XID} gvcp-panel.ui
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 2.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
# descomentar PROGRAM_PREFIX añadiendo el path correcto.
# PROGRAM_PREFIX = path_a_linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm .001
LATHE = 1
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 10
MAX_LINEAR_VELOCITY = 25
MIN_LINEAR_VELOCITY = 0.500000
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 180.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = gedit
GEOMETRY = xz

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000
# BASE_PERIOD =

[HOSTMOT2]
# **** Solo para info ****
# DRIVER0=hm2_pci
# BOARD0=5i25

[HAL]
HALUI = halui
HALFILE = PCT55.hal
HALFILE = custom.hal
#POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

POSTGUI_HALFILE = custom_postgui.hal


[HALUI]

[TRAJ]
AXES = 3
COORDINATES = X Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 2.50
MAX_VELOCITY = 25.00
NO_FORCE_HOMING = 1

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
TOOL_CHANGE_WITH_SPINDLE_ON = 1

#********************
# Eje X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 35.0
FERROR = .01
MIN_FERROR = .01
MAX_VELOCITY = 21.0
MAX_ACCELERATION = 500.0
# Los valores siguientes deben ser un 25% mayores que MAX_VELOCITY y MAX_ACCELERATION
# Si se usa compensación BACKLASH, STEPGEN_MAXACCEL debería ser un 100% más grande.
STEPGEN_MAXACCEL = 1500
STEPGEN_MAXVEL = 18
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# ajustar estos valores a los reales de la maquina,en nanosegundos
DIRSETUP   = 200
DIRHOLD    = 200
STEPLEN    = 2500
STEPSPACE  = 2500
STEP_SCALE = 2000.0
BACKLASH = 0.016
MIN_LIMIT = -6.0
MAX_LIMIT = 42.0
HOME_OFFSET = 39.436000
HOME_SEARCH_VEL = 16.666667
HOME_LATCH_VEL = 0.500000
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO

#********************
# Eje Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = .01
MIN_FERROR = 0.01
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
# Los valores siguientes deben ser un 25% mayores que MAX_VELOCITY y MAX_ACCELERATION
# Si se usa compensación BACKLASH, STEPGEN_MAXACCEL debería ser un 100% más grande.
STEPGEN_MAXACCEL = 1500.0
STEPGEN_MAXVEL = 18
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# ajustar estos valores a los reales de la maquina,en nanosegundos
DIRSETUP   = 200
DIRHOLD    = 200
STEPLEN    = 2500
STEPSPACE  = 2500
STEP_SCALE = 2000.0
BACKLASH = 0.03
MIN_LIMIT = -50.0
MAX_LIMIT = 200.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -16.666667
HOME_LATCH_VEL = -0.500000
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO

#********************
# Husillo
# ajustar a los valores reales de la maquina
#********************
[SPINDLE_9]
P = 1.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 4085.71428571
ENCODER_SCALE = -100.0
OUTPUT_SCALE = 4200
#4417
OUTPUT_MIN_LIMIT = 200
OUTPUT_MAX_LIMIT = 4001

Código: [Seleccionar]
# HAL PARA EMCO PC TURN 55
# motores de pasos con retroalimentacion en los ejes X y Z
# cambio automatico de herramientas con PLC por software ClassicLadder

# carga de componentes

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_stepgens=2 sserial_port_0=0xxxxx"
setp    hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle
loadrt scale names=scale.spindle,scale.gear
loadrt near
loadrt classicladder_rt numPhysInputs=5 numPhysOutputs=5 numS32in=5 numS32out=5 numFloatIn=5 numFloatOut=5 numBits=20 numWords=10
loadrt mux16 names=ratio_select

# carga de funciones en el hilo servo

addf hm2_5i25.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.z.do-pid-calcs       servo-thread
addf pid.s.do-pid-calcs       servo-thread
addf classicladder.0.refresh servo-thread
addf ratio_select             servo-thread
addf scale.spindle            servo-thread
addf scale.gear               servo-thread
addf abs.spindle              servo-thread
addf lowpass.spindle          servo-thread
addf near.0                   servo-thread
addf hm2_5i25.0.write         servo-thread

# señales de salida externas

# --- SPINDLE-BRAKE ---
setp hm2_5i25.0.gpio.004.is_output true
net spindle-brake hm2_5i25.0.gpio.004.out


# --- COOLANT-FLOOD ---
net coolant-flood hm2_5i25.0.7i76.0.0.output-00

# --- SPINDLE-BRAKE ---
net spindle-brake hm2_5i25.0.7i76.0.0.output-01

# --- TOOL_CHANGE ---
net Tool_Change hm2_5i25.0.7i76.0.0.output-02

# señales de entrada externas


# --- ESTOP-EXT ---
net estop-ext     <=  hm2_5i25.0.7i76.0.0.input-00

# --- BELT_DOOR ---
net Belt_Door     <=  hm2_5i25.0.7i76.0.0.input-01

# --- HOME-X ---
net home-x     <=  hm2_5i25.0.7i76.0.0.input-02-not

# --- HOME-Z ---
net home-z     <=  hm2_5i25.0.7i76.0.0.input-03

# --- X_ENCODER ---
net X_Encoder     <=  hm2_5i25.0.7i76.0.0.input-04

# --- Z_ENCODER ---
net Z_Encoder     <=  hm2_5i25.0.7i76.0.0.input-05

# --- VFD_SPEED_OUT ---
net VFD_Speed_Out     <=  hm2_5i25.0.7i76.0.0.input-06

# --- TOOL_SYNC ---
net Tool_Sync     <=  hm2_5i25.0.7i76.0.0.input-07

# --- TOOL_STROBE ---
net Tool_Strobe     <=  hm2_5i25.0.7i76.0.0.input-08

#*******************
#  EJE X
#*******************

setp   pid.x.Pgain     [AXIS_0]P
setp   pid.x.Igain     [AXIS_0]I
setp   pid.x.Dgain     [AXIS_0]D
setp   pid.x.bias      [AXIS_0]BIAS
setp   pid.x.FF0       [AXIS_0]FF0
setp   pid.x.FF1       [AXIS_0]FF1
setp   pid.x.FF2       [AXIS_0]FF2
setp   pid.x.deadband  [AXIS_0]DEADBAND
setp   pid.x.maxoutput [AXIS_0]MAX_OUTPUT
setp   pid.x.error-previous-target true
setp   pid.x.maxerror .0005

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

# Generacion de pasos

setp   hm2_5i25.0.stepgen.00.dirsetup        [AXIS_0]DIRSETUP
setp   hm2_5i25.0.stepgen.00.dirhold         [AXIS_0]DIRHOLD
setp   hm2_5i25.0.stepgen.00.steplen         [AXIS_0]STEPLEN
setp   hm2_5i25.0.stepgen.00.stepspace       [AXIS_0]STEPSPACE
setp   hm2_5i25.0.stepgen.00.position-scale  [AXIS_0]STEP_SCALE
setp   hm2_5i25.0.stepgen.00.step_type        0
setp   hm2_5i25.0.stepgen.00.control-type     1
setp   hm2_5i25.0.stepgen.00.maxaccel         [AXIS_0]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.00.maxvel           [AXIS_0]STEPGEN_MAXVEL

# ---señales stepper en lazo cerrado---

net x-pos-cmd    <= axis.0.motor-pos-cmd
net x-vel-cmd    <= axis.0.joint-vel-cmd
net x-output     <= hm2_5i25.0.stepgen.00.velocity-cmd
net x-pos-fb     <= hm2_5i25.0.stepgen.00.position-fb
net x-pos-fb     => axis.0.motor-pos-fb
net x-enable     <= axis.0.amp-enable-out
net x-enable     => hm2_5i25.0.stepgen.00.enable

# --- home/limites X ---

net home-x     =>  axis.0.home-sw-in
net x-neg-limit     =>  axis.0.neg-lim-sw-in
net x-pos-limit     =>  axis.0.pos-lim-sw-in

#*******************
#  EJE Z
#*******************

setp   pid.z.Pgain     [AXIS_2]P
setp   pid.z.Igain     [AXIS_2]I
setp   pid.z.Dgain     [AXIS_2]D
setp   pid.z.bias      [AXIS_2]BIAS
setp   pid.z.FF0       [AXIS_2]FF0
setp   pid.z.FF1       [AXIS_2]FF1
setp   pid.z.FF2       [AXIS_2]FF2
setp   pid.z.deadband  [AXIS_2]DEADBAND
setp   pid.z.maxoutput [AXIS_2]MAX_OUTPUT
setp   pid.z.error-previous-target true
setp   pid.z.maxerror .0005

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

# Generacion de pasos

setp   hm2_5i25.0.stepgen.01.dirsetup        [AXIS_2]DIRSETUP
setp   hm2_5i25.0.stepgen.01.dirhold         [AXIS_2]DIRHOLD
setp   hm2_5i25.0.stepgen.01.steplen         [AXIS_2]STEPLEN
setp   hm2_5i25.0.stepgen.01.stepspace       [AXIS_2]STEPSPACE
setp   hm2_5i25.0.stepgen.01.position-scale  [AXIS_2]STEP_SCALE
setp   hm2_5i25.0.stepgen.01.step_type        0
setp   hm2_5i25.0.stepgen.01.control-type     1
setp   hm2_5i25.0.stepgen.01.maxaccel         [AXIS_2]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.01.maxvel           [AXIS_2]STEPGEN_MAXVEL

# ---señales stepper en lazo cerrado---

net z-pos-cmd    <= axis.2.motor-pos-cmd
net z-vel-cmd    <= axis.2.joint-vel-cmd
net z-output     <= hm2_5i25.0.stepgen.01.velocity-cmd
net z-pos-fb     <= hm2_5i25.0.stepgen.01.position-fb
net z-pos-fb     => axis.2.motor-pos-fb
net z-enable     <= axis.2.amp-enable-out
net z-enable     => hm2_5i25.0.stepgen.01.enable

# ---home/limites Z ---

net home-z     =>  axis.2.home-sw-in
net z-neg-limit     =>  axis.2.neg-lim-sw-in
net z-pos-limit     =>  axis.2.pos-lim-sw-in

#*******************
#  SEÑALES HUSILLO
#*******************

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
net ratio_select.out   pid.s.maxoutput
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-abs     => pid.s.command
net spindle-vel-fb-rpm-abs      => pid.s.feedback
net spindle-pid-out  pid.s.output    => scale.gear.in
net gear-ratio       ratio_select.out-f => scale.gear.gain
setp ratio_select.in00 0.000245
setp ratio_select.in01 0.000490
net gear-select-a         =>  ratio_select.sel0
net spindle-output        <=  scale.gear.out

# ---señales de salida de pot. digital---

setp   hm2_5i25.0.7i76.0.0.spinout-minlim    [SPINDLE_9]OUTPUT_MIN_LIMIT
setp   hm2_5i25.0.7i76.0.0.spinout-maxlim    [SPINDLE_9]OUTPUT_MAX_LIMIT
setp   hm2_5i25.0.7i76.0.0.spinout-scalemax  [SPINDLE_9]OUTPUT_SCALE

net spindle-vel-cmd-rpm-abs     => hm2_5i25.0.7i76.0.0.spinout
net spindle-enable      => hm2_5i25.0.7i76.0.0.spinena
net spindle-ccw         => hm2_5i25.0.7i76.0.0.spindir

# ---Señales de codificadores de realimentacion---

setp    hm2_5i25.0.encoder.00.counter-mode 1
setp    hm2_5i25.0.encoder.00.filter 1
setp    hm2_5i25.0.encoder.00.index-invert 0
setp    hm2_5i25.0.encoder.00.index-mask 0
setp    hm2_5i25.0.encoder.00.index-mask-invert 0
setp    hm2_5i25.0.encoder.00.scale  [SPINDLE_9]ENCODER_SCALE

net spindle-revs             <=   hm2_5i25.0.encoder.00.position
net spindle-vel-fb-rps       <=   hm2_5i25.0.encoder.00.velocity
net spindle-index-enable     <=>  hm2_5i25.0.encoder.00.index-enable

# ---señales de control del husillo---

net spindle-vel-cmd-rps        <=  motion.spindle-speed-out-rps
net spindle-vel-cmd-rps-abs    <=  motion.spindle-speed-out-rps-abs
net spindle-vel-cmd-rpm        <=  motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs    <=  motion.spindle-speed-out-abs
net spindle-enable             <=  motion.spindle-on
net spindle-cw                 <=  motion.spindle-forward
net spindle-ccw                <=  motion.spindle-reverse
net spindle-brake              <=  motion.spindle-brake
net spindle-revs               =>  motion.spindle-revs
net spindle-at-speed           =>  motion.spindle-at-speed
net spindle-vel-fb-rps         =>  motion.spindle-speed-in
net spindle-index-enable      <=>  motion.spindle-index-enable

# ---Señales "husillo en velocidad"---
# margen entre velocidad comandada y velocidad leida = 1 rps

net spindle-vel-cmd-rps    =>  near.0.in1
net spindle-vel-fb-rps         =>  near.0.in2
net spindle-at-speed       <=  near.0.out
setp near.0.scale 1.000000
setp near.0.difference 1

# Utilizacion de la velocidad REAL de husillo desde codificador del husillo
# la señal spindle-velocity puede rebotar por lo que se filtra con paso bajo (componente lowpass)
# spindle-velocity tiene signo, por lo que se usa el componente abs para eliminar el signo
# La velocidad REAL está en RPS, no en RPM, así que se debe escalar (scale.spindle.gain).

setp     scale.spindle.gain 60
setp     lowpass.spindle.gain 1.000000
net spindle-vel-fb-rps        =>     scale.spindle.in
net spindle-fb-rpm               scale.spindle.out       =>   abs.spindle.in
net spindle-fb-rpm-abs           abs.spindle.out         =>   lowpass.spindle.in
net spindle-fb-rpm-abs-filtered  lowpass.spindle.out 

#******************************
# señales de conexiones
#******************************

#  ---señales HALUI---

net joint-select-a        halui.joint.0.select
net x-is-homed            halui.joint.0.is-homed
net jog-x-pos             halui.jog.0.plus
net jog-x-neg             halui.jog.0.minus
net jog-x-analog          halui.jog.0.analog
net joint-select-c        halui.joint.2.select
net z-is-homed            halui.joint.2.is-homed
net jog-z-pos             halui.jog.2.plus
net jog-z-neg             halui.jog.2.minus
net jog-z-analog          halui.jog.2.analog
net jog-selected-pos      halui.jog.selected.plus
net jog-selected-neg      halui.jog.selected.minus
net spindle-manual-cw     halui.spindle.forward
net spindle-manual-ccw    halui.spindle.reverse
net spindle-manual-stop   halui.spindle.stop
net machine-is-on         halui.machine.is-on
net jog-speed             halui.jog-speed
net MDI-mode              halui.mode.is-mdi

#  ---refrigerante---

net coolant-mist      <=  iocontrol.0.coolant-mist
net coolant-flood     <=  iocontrol.0.coolant-flood

#  ---señal sonda---

net probe-in     =>  motion.probe-input

#  ---señales motion control---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled

#  ---señales estop ---

net estop-out     <=  iocontrol.0.user-enable-out
net estop-ext     =>  iocontrol.0.emc-enable-in

#  ---señales cambio manual herramienta--- (comentado; no se usa)

#loadusr -W hal_manualtoolchange
#net tool-change-request     iocontrol.0.tool-change       =>  hal_manualtoolchange.change
#net tool-change-confirmed   iocontrol.0.tool-changed      <=  hal_manualtoolchange.changed
#net tool-number             iocontrol.0.tool-prep-number  =>  hal_manualtoolchange.number
#net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared


# Carga de Classicladder sin GUI

loadusr classicladder --nogui ATC.clp

#   ---cambio automatico de herramienta
setp iocontrol.0.tool-prepared 1
net tool-prep-pocket iocontrol.0.tool-prep-pocket => classicladder.0.s32in-01
net tool-changed iocontrol.0.tool-changed <= classicladder.0.out-01
net tool-change-request iocontrol.0.tool-change => classicladder.0.in-01
net Tool_Change <= classicladder.0.out-02
net Tool_Sync => classicladder.0.in-02
net Tool_Strobe => classicladder.0.in-03

« última modificación: 19 Septiembre 2020, 20:30 por Abu_Reloaded »

Desconectado jmllosa

  • Oficial 1ª
  • **
  • Join Date: Dic 2011
  • Mensajes: 2751
  • Ubicación: Benetusser, Valencia
Re:Archivos hal e ini para Emco PCT55
« Respuesta #1 en: 19 Septiembre 2020, 22:34 »
si, una brekout por paralelo, la tipica china de 5 axis, funciona todo,  variador original incluido con 0-10v,

el linuxcnc esta muy bien, pero sigo pensando que lo ideal seria facilitar un poco, con simples macros de configuracion de funciones basicas, y que es mas basico que un roscado en el torno, igual que configuras los pasos o el VFD, a ese nivel tan basico cojea mucho, no digo que tenga para manejar el atc, pero coño, puedes decirle el pin del index, del encoder etc etc, no costaria mucho añadirle la funcion de roscado sin tener que saber programar,   index pin tal, rpm o rps pim cual, cuantos pulsos por rpm y arreglao, como en todos los programas, no se, lo veo una cosa de la que cojea mucho.

en fin ,  vere como lo hago funcionar, gracias por la info, tratare de entenderlo.
Fresadora Kondia Powermill K76 CnC, torno pinacho S94 CnC, grabadora Láser 40W CO2 y cacharros variados. Fresadora CNC Made in Yo mismo "R.O.B 2.0" http://foro.metalaficion.com/index.php?topic=21683.0 , Torno HBM 360x1000, Taladro fresador HMB 40-A