Advanced Search

Search Results (Searched for: estop_latch)

  • Murphy
  • Murphy
05 May 2025 17:55 - 05 May 2025 17:57

Remora - ethernet NVEM / EC300 / EC500 cnc board

Category: Computers and Hardware

This is my E-stop in my .hal file.

net nvem-estop <= estop-latch.0.fault-in <= remora.input.14

It's just a switch. Once the input is triggered it should work. 



 
  • H-S-W
  • H-S-W
23 Apr 2025 08:13 - 23 Apr 2025 11:42

Mesa CT 2.1.7 and Mesa 7I97T setup running Gmoccapy

Category: Configuration Tools

Hi! Beginner here doing a linuxcnc conversion on an Maho MH500 using a 7I97T and a Rpi5. Running Linuxcnc 2.10, Gmoccapy 3.4.9 and Mesa CT 2.1.7.

Connecting 7I97T "Output 0" to "E-stop Out" in the Mesa CT seems to connect "hm2_7i97.0.ssr.00.out-00 <== estop-loopback". I also have a external E-stop connected which seems to behave as predicted, when pressed Gmoccapy E-stop responds and is unable to release until the external has been. 

looking at the estop-loopback in halshow i can never get it to change state..? shouldn't it as soon as i've released the E-Stop in Gmoccapy?

INI
[MESA]
VERSION = 2.1.7
BOARD = 7i97
BOARD_NAME = 7i97t
FIRMWARE = 7i97t_d.bin
CARD_0 = None
CARD_1 = None

[EMC]
VERSION = 1.1
MACHINE = FIRST_SETUP
DEBUG = 0x00000000

[HM2]
DRIVER = hm2_eth
ADDRESS = 10.10.10.10

[DISPLAY]
DISPLAY = gmoccapy
EDITOR = geany
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
POSITION_OFFSET = MACHINE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.2
MIN_LINEAR_VELOCITY = 0.0
DEFAULT_LINEAR_VELOCITY = 2.0
MAX_LINEAR_VELOCITY = 5.0
CYCLE_TIME = 0.1
INTRO_GRAPHIC = emc2.gif
INTRO_TIME = 0
OPEN_FILE = ""

[KINS]
KINEMATICS = trivkins coordinates=XYZ
JOINTS = 3

[EMCIO]
EMCIO = iov2
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

[RS274NGC]
PARAMETER_FILE = parameters.var
SUBROUTINE_PATH = /home/cnc/linuxcnc/subroutines

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[TRAJ]
COORDINATES = XYZ
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
MAX_LINEAR_VELOCITY = 33.0
NO_FORCE_HOMING = 1

[HAL]
HALFILE = main.hal
HALFILE = io.hal
HALUI = halui

[HALUI]

[AXIS_X]
MIN_LIMIT = 0
MAX_LIMIT = 490
MAX_VELOCITY = 66
MAX_ACCELERATION = 75

[JOINT_0]
CARD = 0
TAB = 0
AXIS = X
MIN_LIMIT = 0
MAX_LIMIT = 490
MAX_VELOCITY = 66
MAX_ACCELERATION = 75
TYPE = LINEAR
SCALE = -1
ANALOG_SCALE_MAX = 10
ANALOG_MIN_LIMIT = -10
ANALOG_MAX_LIMIT = 10
ENCODER_SCALE = -2000
FERROR = 3
MIN_FERROR = 1
DEADBAND = 0.00025
P = 0.45
I = 0
D = 0
FF0 = 0
FF1 = 0.0134
FF2 = 0.0001
BIAS = 0
MAX_OUTPUT = 10
MAX_ERROR = 25
HOME_SEARCH_VEL = -8
HOME_LATCH_VEL = -1
HOME_FINAL_VEL = 3
HOME_SEQUENCE = 0
HOME_USE_INDEX = True

[AXIS_Y]
MIN_LIMIT = 0
MAX_LIMIT = 335
MAX_VELOCITY = 66
MAX_ACCELERATION = 75

[JOINT_1]
CARD = 0
TAB = 1
AXIS = Y
MIN_LIMIT = 0
MAX_LIMIT = 335
MAX_VELOCITY = 66
MAX_ACCELERATION = 75
TYPE = LINEAR
SCALE = 1
ANALOG_SCALE_MAX = 10
ANALOG_MIN_LIMIT = -10
ANALOG_MAX_LIMIT = 10
ENCODER_SCALE = 2000
FERROR = 3
MIN_FERROR = 1
DEADBAND = 0.00025
P = 0.45
I = 0
D = 0
FF0 = 0
FF1 = 0.0134
FF2 = 0.0001
BIAS = 0
MAX_OUTPUT = 10
MAX_ERROR = 25
HOME_SEARCH_VEL = -8
HOME_LATCH_VEL = -1
HOME_FINAL_VEL = 3
HOME_SEQUENCE = 1
HOME_USE_INDEX = True

[AXIS_Z]
MIN_LIMIT = -320
MAX_LIMIT = 0
MAX_VELOCITY = 33
MAX_ACCELERATION = 75

[JOINT_2]
CARD = 0
TAB = 2
AXIS = Z
MIN_LIMIT = -320
MAX_LIMIT = 0
MAX_VELOCITY = 33
MAX_ACCELERATION = 75
TYPE = LINEAR
SCALE = 0.5
ANALOG_SCALE_MAX = 10
ANALOG_MIN_LIMIT = -10
ANALOG_MAX_LIMIT = 10
ENCODER_SCALE = 2000
FERROR = 3
MIN_FERROR = 1
DEADBAND = 0.00025
P = 0.45
I = 0
D = 0
FF0 = 0
FF1 = 0.0134
FF2 = 0.0001
BIAS = 0
MAX_OUTPUT = 10
MAX_ERROR = 25
HOME_SEARCH_VEL = 6
HOME_LATCH_VEL = 1
HOME_FINAL_VEL = 3
HOME_SEQUENCE = 2
HOME_USE_INDEX = True

[INPUTS]
# DO NOT change the inputs they are used by the configuration tool
INPUT_0_0 = E Stop 0
INPUT_INVERT_0_0 = False
INPUT_SLOW_0_0 = False

[OUTPUTS]
# DO NOT change the outputs they are used by the configuration tool
OUTPUT_0_1 = Spindle CW
OUTPUT_INVERT_0_1 = False
OUTPUT_0_2 = Spindle CCW
OUTPUT_INVERT_0_2 = False
OUTPUT_0_3 = Coolant Flood
OUTPUT_INVERT_0_3 = False
OUTPUT_0_4 = Tool Change
OUTPUT_INVERT_0_4 = False
OUTPUT_0_0 = E-Stop Out
OUTPUT_INVERT_0_0 = False

[OPTIONS]
# DO NOT change the options they are used by the configuration tool
LOAD_CONFIG = True
INTRO_GRAPHIC = emc2.gif
INTRO_GRAPHIC_TIME = 0
MANUAL_TOOL_CHANGE = True
CUSTOM_HAL = False
POST_GUI_HAL = False
SHUTDOWN_HAL = False



io.hal
# Inputs

# E-Stop Chain
loadrt estop_latch count=1
addf estop-latch.0 servo-thread

# E-Stop Loop
net estop-loopin iocontrol.0.user-enable-out => estop-latch.0.ok-in
net estop-loopout estop-latch.0.ok-out => iocontrol.0.emc-enable-in

# E-Stop Reset
net estop-reset iocontrol.0.user-request-enable
net estop-reset => estop-latch.0.reset
net remote-estop0 estop-latch.0.fault-in <= hm2_7i97.0.inmux.00.input-00

# Outputs
net estop-loopback => hm2_7i97.0.ssr.00.out-00
net spindle-cw spindle.0.forward => hm2_7i97.0.ssr.00.out-01
net spindle-ccw spindle.0.reverse => hm2_7i97.0.ssr.00.out-02
net flood-output iocontrol.0.coolant-flood => hm2_7i97.0.ssr.00.out-03




/Hampus
  • pgf
  • pgf
12 Apr 2025 14:23

Running an external program from a HAL pin

Category: HAL

I spent my career trying to write reasonably efficient and fast code in firmware, device drivers and system level utilities. I'm afraid I just couldn't stomach adding a polling loop on top of the polling loop (every .2 seconds) that I discovered at the core of halui.

So I've done an end-run around the problem, which works nicely.

My mill runs from a Raspberry Pi, connected via a Mesa ethernet card. It occurred to me that if HAL could twiddle an actual gpio pin, then I could easily read that, and hook it up to action.  And of course if there's one thing the RPi has, it's plenty of gpio.

So I loaded hal_gpio, and hooked up a couple of output pins:
loadrt hal_gpio outputs=GPIO16,GPIO20
addf hal_gpio.write servo-thread
 
net external-estop-off \
        estop-latch.0.fault-out => hal_gpio.GPIO16-out
 
net coolant-mist => hal_gpio.GPIO20-out

Those pins were chosen because they were eacy immediately adjacent to another unused pin.  Gpio 16 is next to 19, and 20 is next to 26.  I jumpered those two pairs.

Then I wrote a short script using gpiomon to watch pins 19 and 26 for transitions.
#!/bin/bash

estop=19
vacuum=26

switch()
{
    echo Turning $1 $2   # e.g. "Turning vacuum on"
    wget -q -O /dev/null http://service:9901/event:cnc-mill-$1-$2 &
}

while read pinevent
do
    echo got $pinevent   # this will be "19-1", "19-0", "26-1", or "26-0"
    case $pinevent in
    $estop-1)
        switch spindle off
        ;;
    $vacuum-0)
        switch vacuum off
        ;;
    $vacuum-1)
        switch vacuum on
        ;;
    esac
done < <( gpiomon  --line-buffered --format="%o-%e" gpiochip0 19 26)

This works perfectly.

While I'm pleased to have found this solution, it sure seems silly to have had to consume 4 gpio pins in order to do it.

Thanks for all your suggestions!
paul
  • pgf
  • pgf
11 Apr 2025 18:01 - 11 Apr 2025 19:36

Running an external program from a HAL pin

Category: HAL

[ Damn.  I edited the post to clarify some wording, and now the code blocks are broken.  I'm not going to try to fix them.  :-/  ]

I'd like to run an external program after an e-stop event.  I thought it was going to be easy.

I have the program (which goes into the background, so there's no delay) in M101.  M101 works when I invoke it via MDI.

I have a g-code snippet which invokes M101:
(subroutine which just runs my spindle off script)
o<my_spindle_off> sub
(MSG, my_spindle_off)
M101
o<my_spindle_off> endsub


That, in turn, is run via MDI_COMMAND, just like my homing and touch-off routines:

[code][HALUI]
MDI_COMMAND = o<reset_g54> call
MDI_COMMAND = o<auto_x_minus> call
MDI_COMMAND = o<auto_x_plus> call
MDI_COMMAND = o<auto_y_minus> call
MDI_COMMAND = o<auto_y_plus> call
MDI_COMMAND = o<auto_z_minus> call
MDI_COMMAND = o<home_x> call
MDI_COMMAND = o<home_y> call
MDI_COMMAND = o<home_z> call
MDI_COMMAND = o<reset_g54_rot> call
MDI_COMMAND = o<my_spindle_off> call


In custom.hal:

[code]loadrt estop_latch 
addf estop-latch.0 servo-thread 
net estop-loopout \
    iocontrol.0.emc-enable-in <= estop-latch.0.ok-out
net estop-loopin \
    iocontrol.0.user-enable-out => estop-latch.0.ok-in 
net estop-reset \
    iocontrol.0.user-request-enable => estop-latch.0.reset 
net remote-estop \
    estop-latch.0.fault-in <= hm2_7i96.0.gpio.003.in_not


And in custom_postgui.hal:

[code]net external-estop-off \
    estop-latch.0.fault-out => halui.mdi-command-10


With halshow, I can see net external-estop-off and pin estop-latch.0.fault-out change state when I go in and out of e-stop state, but my command never runs.  Ideas?

paul
[/code][/code][/code]
  • tuxcnc
  • tuxcnc
25 Mar 2025 18:52

Remora - ethernet NVEM / EC300 / EC500 cnc board

Category: Computers and Hardware

External e-stop (fault) on EC500 input.
loadrt estop_latch
addf estop-latch.0 servo-thread
net estop-loopout       iocontrol.0.emc-enable-in       <= estop-latch.0.ok-out
net user-enable-out     iocontrol.0.user-enable-out     => remora.enable
net estop-loopin        remora.status                   => estop-latch.0.ok-in => estop-latch.0.reset
net estop-reset         iocontrol.0.user-request-enable => remora.reset
net remote-estp         estop-latch.0.fault-in          <= remora.input.02.not
 
Displaying 31 - 35 out of 35 results.
Time to create page: 1.060 seconds
Powered by Kunena Forum