Esta documentación describe el módulo python linuxcnc, que proporciona una API Python para hablar con LinuxCNC.

1. Introducción

Las interfaces de usuario controlan la actividad de LinuxCNC enviando mensajes NML al controlador de tareas LinuxCNC y supervisan los resultados observando la estructura de estado de LinuxCNC, así como el canal de informe de errores.

El acceso programático a NML es a través de una API de C ++; sin embargo, las partes más importantes de la interfaz NML para LinuxCNC también están disponibles para programas de Python a través del módulo linuxcnc.

Más allá de la interfaz NML para los canales de comando, estado y error, el módulo linuxcnc también contiene:

  • soporte para leer valores de archivos INI

2. Patrones de uso de la interfaz NML LinuxCNC

El patrón general para el uso de linuxcnc es, en lineas generales, así:

  • Importar el módulo linuxcnc.

  • Establecer conexiones a los canales NML de comandos, estado y errores según sea necesario.

  • Sondear el canal de estado, ya sea periódicamente o según sea necesario.

  • Antes de enviar un comando, determina desde el estado si esta OK para hacerlo (por ejemplo, no tiene sentido enviar un comando Run si la tarea esta en el estado ESTOP o el intérprete no está inactivo).

  • Envía el comando utilizando uno de los métodos del canal de comandos linuxcnc.

Para recuperar mensajes del canal de errores, sondear el canal de errores periódicamente y procesar los mensajes recuperados.

  • Sondear el canal de estado, ya sea periódicamente o según sea necesario.

  • Imprimir cualquier mensaje de error y explorar el código de excepción.

El módulo linuxcnc también define el tipo de excepción Python error para admitir informes de errores.

3. Leer el estado de LinuxCNC con el módulo Python linuxcnc

Aquí hay un fragmento de Python para explorar el contenido del objeto linuxcnc.stat que contiene más de 80 valores (correr mientras LinuxCNC se está ejecutando para valores típicos):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import linuxcnc
try:
    s = linuxcnc.stat() # crea una conexión al canal de estado
    s.poll() # obtener valores actuales
except linuxcnc.error, detail:
    print "error", detail
    sys.exit(1)
for x in dir(s):
    if not x.startswith("_"):
        print x, getattr(s,x)

El módulo linuxcnc usa la ruta de compilación predeterminada para el archivo de configuración NML a menos que se sobreescriba; ver Lectura de valores de archivo INI para un ejemplo.

3.1. Atributos en linuxcnc.stat

acceleration

(devuelve float) - aceleración predeterminada, refleja la entrada INI [TRAJ]DEFAULT_ACCELERATION.

active_queue

(devuelve entero) - número de mezclas en motion.

actual_position

(devuelve tupla de floats) - posición de trayectoria actual, (x y z a b c u v w), en unidades máquina.

adaptive_feed_enabled

(devuelve boolean) - estado de porcentaje de avance adaptativo (0/1).

ain

(devuelve tupla de floats) - valor actual de los pines de entrada analógica.

angular_units

(devuelve float) - unidades angulares de máquina para grados, refleja el valor INI [TRAJ]ANGULAR_UNITS.

aout

(devuelve tupla de floats) - valor actual de los pines de salida analógica.

axes (Eliminado desde la versión 2.9)

en su lugar, usar axis_mask.bit_count() para obtener el número de ejes configurados.

axis

(devuelve tupla de diccionarios) - reflejando los valores actuales del eje. Ver El diccionario de ejes.

axis_mask

(devuelve entero) - máscara de ejes disponibles según lo definido por [TRAJ]COORDINATES en el archivo INI. Devuelve la suma de los ejes X=1, Y=2, Z=4, A=8, B=16, C=32, U=64, V=128, W=256.

block_delete

(devuelve boolean) - el estado actual de eliminar bloque.

call_level

(returns integer)` - profundidad de subrutina actual. - 0 si no es una subrutina, depth si de lo contrario no se especifica.

command

(devuelve cadena) - comando actualmente en ejecución.

current_line

(devuelve entero) - línea actualmente en ejecución.

current_vel

(devuelve float) - velocidad actual en unidades de usuario por segundo.

cycle_time

(devuelve float) - período de hilo

debug

(devuelve entero) - bandera de depuración desde el archivo INI.

delay_left

(devuelve float) - tiempo restante en el comando dwell (G4), segundos.

din

(devuelve tupla de enteros) - valor actual de los pines de entrada digital.

distance_to_go

(devuelve float) - distancia restante del movimiento actual, según lo informado por el planificador de trayectoria.

dout

(devuelve tupla de enteros) - valor actual de los pines de salida digital.

dtg

(devuelve tupla de floats) - distancia restante del movimiento actual para cada eje, según lo informado por el planificador de trayectoria.

echo_serial_number

(devuelve entero) - El número de serie del último comando completado enviado por una UI a task. Todos los comandos llevan un número de serie. Una vez que el comando ha sido ejecutado, su número de serie se refleja en echo_serial_number.

enabled

(devuelve boolean) - bandera de habilitación de planificador de trayectoria.

estop

(devuelve entero) - Devuelve STATE_ESTOP o no.

exec_state

(devuelve entero) - estado de ejecución task. Uno de EXEC_ERROR, EXEC_DONE, EXEC_WAITING_FOR_MOTION, EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, EXEC_WAITING_FOR_MOTION_AND_IO, EXEC_WAITING_FOR_DELAY, EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_ORIENTED.

feed_hold_enabled

(devuelve boolean) - habilitar la bandera para retención de alimentación.

feed_override_enabled

(devuelve boolean) - habilitar bandera para ajuste de alimentación.

feedrate

(devuelve float) - porcentaje de velocidad de avance actual, 1.0 = 100%.

file

(devuelve cadena) - nombre de archivo de código G cargado actualmente, con ruta.

flood

(devuelve entero) - Estado de inundación, FLOOD_OFF o FLOOD_ON.

g5x_index

(devuelve entero) - sistema de coordenadas actualmente activo, G54=1, G55=2, etc.

g5x_offset

(devuelve tupla de floats) - offset del sistema de coordenadas actualmente activo.

g92_offset

(devuelve tupla de floats) - pose del offset g92 actual.

gcodes

(devuelve dupla de enteros) - códigos G activos para cada grupo modal
Los valores enteros reflejan los números de código G nominales multiplicados por 10. (Ejemplos: 10 = 'G1
, 430 = G43, 923 = G92.3)

heartbeat

(returns integer) - motion controller heartbeat counter. Increments every servo cycle. Rate is determined by [EMCMOT]SERVO_PERIOD in the INI file.

homed

(devuelve tupla de enteros) - articulaciones actualmente en casa, con 0 = no en casa, 1 = en casa.

id

(devuelve entero) - ID de movimiento actualmente en ejecución.

ini_filename

(devuelve string) - ruta al archivo INI pasado a linuxcnc.

inpos

(devuelve boolean) - bandera machine-in-position.

input_timeout

(devuelve boolean) - bandera de temporizador M66 en progreso.

interp_state

(devuelve entero) - estado actual del intérprete RS274NGC. Uno de INTERP_IDLE, INTERP_READING, INTERP_PAUSED, INTERP_WAITING.

interpreter_errcode

(devuelve entero) - código de retorno actual del intérprete RS274NGC. Uno de INTERP_OK, INTERP_EXIT, INTERP_EXECUTE_FINISH, INTERP_ENDFILE, INTERP_FILE_NOT_OPEN, INTERP_ERROR. ver src/emc/nml_intf/interp_return.hh

joint

(devuelve tupla de diccionarios) - refleja los valores de articulación actuales. Ver El diccionario de articulaciones.

joint_actual_position

(devuelve tupla de floats) - posiciones articulares reales.

joint_position

(devuelve tupla de floats) - Posiciones articulares deseadas.

joints

(devuelve entero) - número de articulaciones. Refleja [KINS]JOINTS del INI.

kinematics_type

(devuelve entero) - El tipo de cinemática. Uno de:

  • KINEMATICS_IDENTITY

  • KINEMATICS_FORWARD_ONLY

  • KINEMATICS_INVERSE_ONLY

  • KINEMATICS_BOTH

limit

(devuelve tupla de enteros) - máscaras de límites de eje. minHardLimit = 1, maxHardLimit = 2, minSoftLimit = 4, maxSoftLimit = 8.

linear_units

(devuelve float) - unidades lineales de máquina por mm, refleja valor INI [TRAJ]LINEAR_UNITS.

max_acceleration

(devuelve float) - aceleración máxima. Refleja [TRAJ]MAX_ACCELERATION.

max_velocity

(devuelve float) - velocidad máxima. Refleja la velocidad máxima actual. Si no es modificada por halui.max-velocity o similar debe reflejar [TRAJ]MAX_VALOCITY.

mcodes

(devuelve tupla de 10 enteros) - códigos M actualmente activos.

mist

(devuelve entero) - Estado de la niebla, ya sea MIST_OFF o MIST_ON

motion_line

(devuelve entero) - número de línea fuente del movimiento que se está ejecutando actualmente. Relación con id no aclarada.

motion_mode

(devuelve entero) - Este es el modo del controlador de movimiento. Uno de TRAJ_MODE_COORD, TRAJ_MODE_FREE, TRAJ_MODE_TELEOP.

motion_type

(devuelve entero) - El tipo de movimiento que se está ejecutando actualmente. Uno de:

  • MOTION_TYPE_TRAVERSE

  • MOTION_TYPE_FEED

  • MOTION_TYPE_ARC

  • MOTION_TYPE_TOOLCHANGE

  • MOTION_TYPE_PROBING

  • MOTION_TYPE_INDEXROTARY

  • 0 si no hay movimiento en este momento.

optional_stop

(devuelve entero) - bandera de paro opcional.

paused

(devuelve boolean) - bandera de movimiento en pausa.

single_stepping

(devuelve boolean) - bandera de movimiento de paso simple.

pocket_prepped

(devuelve entero) - un comando Tx completado, y la ranura está preparada. -1 si la ranura no está preparada.

poll()

-(función incorporada) método para actualizar los atributos del estado actual.

position

(devuelve tupla de floats) - posición en trayectoria.

probe_tripped

(devuelve boolean) - bandera, True si la sonda se ha disparado (enclave).

probe_val

(devuelve entero) - refleja el valor del pin motion.probe-input.

probed_position

(devuelve tupla de floats) - posición donde se disparó la sonda.

probing

(devuelve booleano) - bandera, True si hay una operación de sonda en progreso.

program_units

(devuelve entero) - uno de CANON_UNITS_INCHES=1 , CANON_UNITS_MM=2, CANON_UNITS_CM=3

queue

(devuelve entero) - tamaño actual de la cola del planificador de trayectoria.

queue_full

(devuelve boolean) - la cola del planificador de trayectoria está llena.

rapidrate

(devuelve float) - escala de ajustes de rápidos.

read_line

(devuelve entero) - línea que el intérprete RS274NGC está leyendo actualmente.

rotation_xy

(devuelve float) - ángulo de rotación XY actual alrededor del eje Z.

settings

(devuelve tupla de floats) - configuración actual del intérprete:
settings[0] = número de secuencia,
settings[1] = velocidad de alimentación,
settings[2] = velocidad,
settings[3] = G64 P tolerancia de mezcla,
settings[4] = G64 Q tolerancia CAM simple.

spindle

(devuelve tupla de diccionarios) - devuelve el estado actual del husillo ver <sec:the-spindle-dictionary, El diccionario spindle>>.

spindles

(devuelve entero) - Número de husillos. Refleja el valor INI [TRAJ]SPINDLES.

state

(devuelve entero) - estado actual de ejecución del comando. Uno de RCS_DONE, RCS_EXEC, RCS_ERROR.

task_mode

(devuelve entero) - modo de tarea actual. Uno de MODE_MDI, MODE_AUTO, MODE_MANUAL.

task_paused

(devuelve entero) - bandera de tarea pausada.

task_state

(devuelve entero) - estado actual de la tarea. Uno de STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON, STATE_OFF.

tool_in_spindle

(devuelve entero) - número de herramienta actual.

taskbeat

(returns integer) - task main loop heartbeat counter. Increments every task cycle. Rate is determined by [TASK]CYCLE_TIME in the INI file.

tool_from_pocket

(devuelve entero) - número de cavidad para la herramienta cargada actualmente (0 si no hay herramienta cargada).

tool_offset

(devuelve tupla de floats) - valores de offsets de la herramienta actual.

tool_table

(devuelve tupla de tool_results) - lista de entradas de herramientas. Cada entrada es una secuencia de los siguientes campos: id, xoffset, yoffset, zoffset, aoffset, boffset, coffset, uoffset, voffset, woffset, diameter, frontangle, backangle, orientation. La identificación y orientación son enteros y el resto son floats.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
s = linuxcnc.stat()
s.poll()
# para encontrar la información de la herramienta cargada en el índice 0 de la tabla de herramientas
if s.tool_table[0].id != 0: # se carga una herramienta
    print(s.tool_table[0].zoffset)
else:
    print("No hay herramienta cargada")
toolinfo(toolno)

(devuelve un diccionario de tooldata para toolno) - se requiere un stat.poll() inicial para inicializar. toolno debe ser mayor que cero y menor o igual al número de herramienta más grande en uso. Los elementos del diccionario incluyen todos los datos de herramienta: toolno, pocketno, diameter, frontangle, backangle, orientation, xoffset, yoffset, … woffset, comment.
Como ejemplo, el script siguiente

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
s = linuxcnc.stat()
s.poll()
toolno = 1
print(s.toolinfo(toolno))
produce la salida:
': 0, 'xoffset': 0.0, 'yoffset': 0.0, 'zoffset': 0.18, 'aoffset': 0.0, 'boffset': 0.0, 'coffset': 0.0, 'uoffset': 0.0, 'voffset': 0.0, 'woffset': 0.0, 'comment': 'Tool_18 28Jan23:18.53.25'}
velocity

(devuelve float) - Esta propiedad está definida, pero no tiene una interpretación útil.

3.2. El diccionario axis

La configuración de ejes y los valores de estado están disponibles a través de una lista de diccionarios por eje. Aquí hay un ejemplo de cómo acceder a un atributo de un eje particular: Tenga en cuenta que muchas propiedades que anteriormente estaban en el diccionario axis están ahora en el diccionario joint, porque en máquinas con cinemáticas no triviales estos elementos (como el backlash) no son propiedades de un eje.

max_position_limit

(devuelve float) - límite máximo (límite suave) para el movimiento del eje, en unidades máquina del parámetro units.configuration, refleja [JOINT__n__]MAX_LIMIT.

min_position_limit

(devuelve float) - límite mínimo (límite suave) para el movimiento del eje, en unidades máquina del parámetro units.configuration, refleja [JOINT__n__]MIN_LIMIT.

velocity

(devuelve float) - velocidad actual.

3.3. El diccionario joint

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
s = linuxcnc.stat()
s.poll()
print("Articulación 1 en casa: ", s.joint[1]["homed"])

Para cada articulación, están disponibles las siguientes claves de diccionario:

backlash

(devuelve float) - holgura mecánica en unidades máquina. parámetro de configuración, refleja [JOINT___n__]BACKLASH.

enabled

(devuelve entero) - no cero significa habilitada.

fault

(devuelve entero) - no cero significa fallo del amplificador del eje.

ferror_current

(devuelve float) - error de seguimiento actual.

ferror_highmark

(devuelve float) - magnitud del error de seguimiento máximo.

homed

(devuelve entero) - distinto de cero significa que está en casa.

homing

(devuelve entero) - distinto de cero significa homing en progreso.

inpos

(devuelve entero) - no cero significa en posición.

input

(devuelve float) - posición de entrada actual.

jointType

(devuelve entero) - parámetro de configuración de tipo de eje, refleja [JOINT___n__]TYPE con LINEAR=1, ANGULAR=2. Ver Configuración INI de articulación para más detalles.

max_ferror

(devuelve float) - máximo error de seguimiento. parámetro de configuración, refleja [JOINT___n__]FERROR.

max_hard_limit

(devuelve entero) - distinto de cero significa que se ha excedido el límite duro máximo.

max_position_limit

(devuelve float) - límite máximo (límite suave) para el movimiento articular, en unidades de máquina. parámetro de configuración, refleja [JOINT___n__]MAX_LIMIT.

max_soft_limit

distinto de cero significa que se ha excedido max_position_limit, int

min_ferror

(devuelve float) - parámetro de configuración, refleja [JOINT___n__]MIN_FERROR.

min_hard_limit

(devuelve entero) - distinto de cero significa que se excedió el límite duro mínimo.

min_position_limit

(devuelve float) - límite mínimo (límite suave) para el movimiento articular, en unidades de máquina. parámetro de configuración, refleja [JOINT___n__]MIN_LIMIT.

min_soft_limit

(devuelve entero) - distinto de cero significa que se ha excedido min_position_limit.

output

(devuelve float) - posición de salida ordenada.

override_limits

(devuelve entero) - no cero significa que los límites se han ajustado.

units

(devuelve float) - unidades de articulación por mm, o por grado para articulaciones angulares.
(las unidades de articulación son las mismas que las unidades de máquina, a menos que se establezca lo contrario por el parámetro de configuración [JOINT___n__]UNITS)

velocity

(devuelve float) - velocidad actual.

3.4. El diccionario spindle

brake

(devuelve entero) - valor de la bandera del freno del husillo.

direction

(devuelve entero) - dirección rotacional del huso con adelante=1, atrás=-1.

enabled

(devuelve entero) - valor de la bandera de husillo habilitado.

homed

(no implementado actualmente)

increasing

(devuelve entero) - no es claro.

orient_fault

(devuelve entero)

orient_state

(devuelve entero)

override

(devuelve float) - escala de ajuste de velocidad del husillo.

override_enabled

(devuelve boolean) - valor de la bandera de ajuste del husillo habilitado.

speed

(devuelve float) - valor de velocidad del husillo, rpm, > 0: sentido horario, < 0: sentido anti-horario.
Con G96 activo refleja la velocidad máxima establecida por la palabra D opcional de G96, o si se omite la palabra D, los valores predeterminados +/-1e30.

4. Preparación para enviar comandos

Algunos comandos pueden enviarse siempre, independientemente del modo y el estado; por lo tanto, siempre se puede llamar al método linuxcnc.command.abort().

Otros comandos pueden enviarse solo en el estado apropiado, y probarlos puede ser un poco complicado. Por ejemplo, un comando MDI solo se puede enviar si:

  • ESTOP no se ha activado, y

  • la máquina está encendida y

  • los ejes están en casa y

  • el intérprete no está funcionando y

  • el modo está configurado en modo MDI

Una prueba apropiada antes de enviar un comando MDI a través de linuxcnc.command.mdi() podría ser:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
s = linuxcnc.stat()
c = linuxcnc.command()

def ok_for_mdi():
    s.poll()
    return not s.estop and s.enabled and (s.homed.count(1) == s.joints) and (s.interp_state == linuxcnc.INTERP_IDLE)

if ok_for_mdi():
    c.mode(linuxcnc.MODE_MDI)
    c.wait_complete() # espera hasta que se ejecute el cambio de modo (¡o se agote el tiempo de espera predeterminado de 5s!)
    c.mdi("G0 X10 Y20 Z30")
Aviso
Leer información importante sobre wait_complete() en la sección ‘métodos de linuxcnc.command’ abajo.

5. Enviar comandos a través de linuxcnc.command

Antes de enviar un comando, inicializar un canal de comando así:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
c = linuxcnc.command()

# Ejemplos de uso para algunos de los comandos enlistados a continuación:
c.abort()

c.auto(linuxcnc.AUTO_RUN, program_start_line)
c.auto(linuxcnc.AUTO_STEP)
c.auto(linuxcnc.AUTO_PAUSE)
c.auto(linuxcnc.AUTO_RESUME)

c.brake(linuxcnc.BRAKE_ENGAGE)
c.brake(linuxcnc.BRAKE_RELEASE)

c.flood(linuxcnc.FLOOD_ON)
c.flood(linuxcnc.FLOOD_OFF)

c.home(2)

c.jog(linuxcnc.JOG_STOP,        jjogmode, joint_num_or_axis_index)
c.jog(linuxcnc.JOG_CONTINUOUS,  jjogmode, joint_num_or_axis_index, velocity)
c.jog(linuxcnc.JOG_INCREMENT,   jjogmode, joint_num_or_axis_index, velocity, increment)

c.load_tool_table()

c.maxvel(200.0)

c.mdi("G0 X10 Y20 Z30")

c.mist(linuxcnc.MIST_ON)
c.mist(linuxcnc.MIST_OFF)

c.mode(linuxcnc.MODE_MDI)
c.mode(linuxcnc.MODE_AUTO)
c.mode(linuxcnc.MODE_MANUAL)

c.override_limits()

c.program_open("foo.ngc")
c.reset_interpreter()

c.tool_offset(toolno, z_offset,  x_offset, diameter, frontangle, backangle, orientation)

5.1. Atributos de linuxcnc.command

serial

el número de serie del comando actual

5.2. Métodos de linuxcnc.command:

abort()

enviar mensaje EMC_TASK_ABORT.

auto(int [, int])

ejecutar, dar un paso, pausar o reanudar un programa.

brake(int)

poner o soltar el freno del husillo.

debug(int)

establecer el nivel de depuración a través del mensaje EMC_SET_DEBUG.

display_msg(string)

envía un mensaje de despliegue al operador a la pantalla. (254 caracteres máx.)

error_msg(string)

envía un mensaje de error de operador en la pantalla. (254 caracteres máx.)

feedrate(float)

asigna el ajuste de alimentación, 1.0 = 100%.

flood(int)

encender/apagar inundación.

Sintaxis

flood(command)
flood(linuxcnc.FLOOD_ON)
flood(linuxcnc.FLOOD_OFF)

Constantes

FLOOD_ON
FLOOD_OFF

home(int)

lleva a casa una articulación determinada.

jog(command-constant, bool, int[, float[, float]])
Sintaxis

jog(command, jjogmode, joint_num_or_axis_index, velocity[, distance])
jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index)
jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity)
jog(linuxcnc.JOG_INCREMENT, jjogmode, joint_num_or_axis_index, velocity, distance)

Constantes de comando

linuxcnc.JOG_STOP
linuxcnc.JOG_CONTINUOUS
linuxcnc.JOG_INCREMENT

jjogmode
True

solicita trote de articulación individual (requiere teleop_enable(0))

False

solicita trote de eje de coordenadas cartesianas (requiere teleop_enable(1))

joint_num_or_axis_index
Para trote articular (jjogmode=1)

joint_number

Para trote de eje de coordenadas cartesianas (jjogmode=0)

índice de base cero de la coordenada del eje con respecto a las letras de coordenadas conocidas XYZABCUVW (x=>0,y=>1,z=>2,a=>3,b=>4,c=>5,u=>6,v=>7,w=>8)

load_tool_table()

vuelve a cargar la tabla de herramientas.

maxvel(float)

establece la velocidad máxima

mdi(string)

envía un comando MDI. Máximo 254 caracteres.

mist(int)

activa/desactiva la niebla.

Sintaxis

mist(command)
mist(linuxcnc.MIST_ON)
mist(linuxcnc.MIST_OFF)

Constantes

MIST_ON
MIST_OFF

mode(int)

establece modo (MODE_MDI, MODE_MANUAL, MODE_AUTO).

override_limits()

establece la bandera de ajuste de límites de eje.

program_open(string)

abre un archivo NGC.

rapidrate()

establece factor de ajuste de rápidos

reset_interpreter()

restablece el intérprete RS274NGC

set_adaptive_feed(int)

establece la bandera de alimentación adaptativa

set_analog_output(int, float)

establece el pin de salida analógica al valor

set_block_delete(int)

establece la bandera de eliminado de bloque

set_digital_output(int, int)

establece el pin de salida digital al valor

set_feed_hold(int)

activa/desactiva la retención de alimentación

set_feed_override(int)

activa/desactiva el ajuste de alimentación

set_max_limit(int, float)

establece el límite de posición máxima para un eje dado

set_min_limit()

establece el límite de posición mínima para un eje dado

set_optional_stop(int)

activa/desactiva parada opcional

set_spindle_override(int [, int])

establece ajuste del husillo habilitado. Predeterminado al husillo 0.

spindle(dirección: int, velocidad: float=0, husillo: int=0, esperar_velocidad: int=0)
  • dirección: [SPINDLE_FORWARD, SPINDLE_REVERSE, SPINDLE_OFF, SPINDLE_INCREASE, SPINDLE_DECREASE, o SPINDLE_CONSTANT]

  • velocidad: en RPM, predeterminada a 0.

  • husillo: Número de husillo a ordenar, predeterminado a 0.

  • esperar_velocidad: si es 1 motion esperará la velocidad antes de continuar, predeterminado a no esperar.

Aviso
Los comandos MDI ignorarán esto. "S1000" apagará el husillo después de esto.
text_msg(string)

envía un mensaje de texto al operador en la pantalla (máximo 254 caracteres).

#!/usr/bin/env python3
import linuxcnc
c = linuxcnc.command()

# Aumentar la velocidad del husillo 0 en 100 rpm. El husillo debe estar encendido primero
c.spindle(linuxcnc.INCREASE)

# Aumentar la velocidad del husillo 2 en 100 rpm. El husillo debe estar encendido primero
c.spindle(linuxcnc.SPINDLE_INCREASE, 2)

# Establece la velocidad del husillo de 0 a 1024 rpm
c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024)

# Establece la velocidad del husillo 1 a -666 rpm
c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1)

# Detiene el husillo 0.
c.spindle.(linuxcnc.SPINDLE_OFF)

# Detiene el husillo 0 explícitamente.
c.spindle.(linuxcnc.SPINDLE_OFF, 0)
spindleoverride(float [, int])

Establece el factor de ajuste del husillo. Predeterminado al husillo 0.

state(int)

Establece el estado de la máquina. El estado de la máquina debe ser STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON o STATE_OFF.

task_plan_sync()

Al finalizar esta llamada, el archivo VAR en el disco se actualiza con valores vivos del intérprete.

teleop_enable(int)

Habilita/deshabilita el modo teleop (deshabilitado para trote articular).

tool_offset(int, float, float, float, float, float, int)

Establece el offset de herramienta. Ver ejemplo de uso arriba.

traj_mode(int)

Establece el modo trayectoria. El modo es uno de MODE_FREE, MODE_COORD o MODE_TELEOP.

unhome(int)

Deja sin casa una articulación determinada.

wait_complete([float])

Espera a que se complete el último comando. Recibe un tiempo de espera opcional en segundos.
Si se omite, el tiempo de espera predeterminado es de 5 segundos.
Devuelve -1 si se agota el tiempo de espera.
Devuelve RCS_DONE o RCS_ERROR según el estado de ejecución del comando.
Nótese que la ejecución de Python se bloqueará hasta que esta función regrese.

6. Lectura del canal de error

Para manejar mensajes de error, conectarse al canal de error y ejecutar periódicamente poll().

Ten en cuenta que el canal NML para mensajes de error tiene una cola (distinta a los canales de comando y estado), lo que significa que el primer consumidor de un mensaje de error elimina ese mensaje de la cola; el que tu otro consumidor de mensajes de error (p. ej. AXIS) "vea" el mensaje depende del momento. Se recomienda tener solo una tarea lectora del canal de error en una configuración.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
e = linuxcnc.error_channel()

error = e.poll()

if error:
    kind, text = error
    if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):
        typus = "error"
    else:
        typus = "info"
    print typus, text

7. Lectura de valores de archivo INI

Aquí hay un ejemplo para leer valores de un archivo INI a través del objeto linuxcnc.ini:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# run as:
# python ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini

import sys
import linuxcnc

inifile = linuxcnc.ini(sys.argv[1])

# inifile.find () devuelve None si no se encontró la clave
# la siguiente expresión es útil para establecer un valor predeterminado:

machine_name = inifile.find("EMC", "MACHINE") or "unknown"
print "nombre de máquina: ", machine_name

# inifile.findall () devuelve una lista de coincidencias o una lista vacía
# si no se encontró la clave:

extensions = inifile.findall("FILTER", "PROGRAM_EXTENSION")
print ("extensiones: ", extensions)

# anular el archivo NML predeterminado por parámetro INI si se proporciona
nmlfile = inifile.find("EMC", "NML_FILE")
if nmlfile:
    linuxcnc.nmlfile = os.path.join(os.path.dirname(sys.argv[1]), nmlfile)

O para el mismo archivo INI de LinuxCNC:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ejecutar así:
# python3 ini-example2.py

import linuxcnc

stat = linuxcnc.stat()
stat.poll()

inifile = linuxcnc.ini(stat.ini_filename)

# Ver el ejemplo de arriba para el uso del objeto 'inifile'

8. El tipo linuxcnc.positionlogger

Algunas sugerencias de uso se pueden obtener de src/emc/usr_intf/gremlin/gremlin.py.

8.1. miembros

npts

número de puntos.

8.2. métodos

start(float)

iniciar el registrador de posición y ejecutar cada ARG segundos

clear()

borrar el registrador de posición

stop()

detener el registrador de posición

call()

dibuja el trazo posterior ahora.

last([int])

devuelve el punto más reciente de la trazo o None