halcmd -manipula HAL de LinuxCNC desde la linea de comandos
halcmd [OPTIONS] [COMMAND[ARG]]
halcmd se utiliza para manipular HAL (Capa de abstraccion de hardware) desde la linea de comando. halcmd puede leer, opcionalmente, comandos de un archivo, permitiendo que configuraciones complejas de HAL sean establecidas con un solo comando.
Si la biblioteca readline esta disponible cuando se compila LinuxCNC, entonces halcmd ofrece edicion y finalizacion de la linea de comandos cuando se ejecuta interactivamente. Use la flecha hacia arriba para recuperar los comandos anteriores y presione la tecla tab para completar los nombres de elementos, como pines y señales.
-I |
Antes de destruir el entorno en tiempo real, ejecute un halcmd interactivo. halrun solamente. Si se usa -I, debe preceder a todos los demas argumentos de linea de comandos. |
\-f [fichero]
Ignorar los comandos en la linea de comandos; toma la entrada file en su lugar. Si no se especifica file, toma la entrada de stdin.
-i fichero.ini
Usar variables de inifile para las sustituciones. Ver SUSTITUCIONES mas abajo.
\-k |
Continuar despues de comandos fallidos. El valor predeterminado es detener y devolver el fallo si falla cualquier comando. | ||
\-q |
Visualizar solo errores (predeterminado) | ||
\-Q |
No mostrar nada; ejecutar comandos silenciosamente | ||
\-s |
Modo amigable con el script. En este modo, show no generara titulos para los elementos mostrados. Ademas, se imprimiran los nombres de los modulos en lugar de los codigos de identificacion en listados de pines, parametros y funciones. Los hilos se imprimen en una sola linea, con el periodo de hilo, el uso de FP y el nombre primero, seguido de todas las funciones en el hilo, en orden de ejecucion. Las señales se imprimen en una sola linea, con el tipo, el valor y el nombre de la señal primero, seguidos de una lista de pines conectados a la señal, que muestra la direccion y el nombre del pin. | ||
-R |
Librar el mutex HAL. Esto es util para recuperacion cuando un componente HAL falla mientras retenia el mutex HAL. | ||
\-v |
mostrar los resultados de cada comando | ||
\-V |
Mostrar informacion de depuracion |
\-h[comando]
Muestra una pantalla de ayuda y sale; muestra ayuda extendida de comando si se especifica
Los comandos le
dicen a halcmd que hacer. Normalmente halcmd
lee un solo comando desde la linea de comandos y lo ejecuta.
Si se usa la opcion ’-f’ para leer
comandos de un archivo, halcmd lee cada linea del
archivo como un nuevo comando. Todo lo que siga a
’#’ en una linea es un comentario.
loadrt modname
(load realtime module) Carga un modulo HAL en tiempo real llamado modname. halcmd busca el modulo en el directorio especificado en tiempo de compilacion.
En sistemas con tiempo real, halcmd llama a linuxcnc_module_helper para cargar modulos en tiempo real. linuxcnc_module_helper es un programa setuid y se compila con una lista blanca de modulos que se permiten cargar. Esto es actualmente solo una lista de los modulos relacionados con LinuxCNC. linuxcnc_module_helper ejecuta insmod, asi que devuelve los mensajes de codigos y error de insmod. Los administradores que deseen restringir que usuarios pueden cargar estos modulos de kernel relacionados con LinuxCNC pueden hacer esto configurando los permisos y el grupo en linuxcnc_module_helper apropiadamente.
En sistemas sin tiempo real, halcmd llama a rtapi_app que crea el entorno en tiempo real simulado, si aun no existia, y luego carga el componente solicitado con una llamada a dlopen(3).
unloadrt modname
(unload realtime module) Descarga un modulo HAL en tiempo real llamado modname. Si modname es "all", descargara todos los modulos HAL en tiempo real cargados actualmente. unloadrt Tambien funciona ejecutando linuxcnc_module_helper o rtapi_app, al igual que loadrt.
loadusr [flags] unix-command
(load Userspace component) Ejecuta unix-command, generalmente para cargar un componente de espacio de usuario. [flags] puede ser uno o mas de:
• |
-W para esperar a que el componente este listo. El componente se asume que tiene el mismo nombre que el primer argumento del comando. | ||
• |
-Wn name para esperar al componente, que tendra el nombre dado. | ||
• |
-w para esperar a que el programa salga | ||
• |
-i para ignorar el valor de retorno del programa (con -w) |
waitusr name
(wait for Userspace component) Espera al componente de espacio de usuario name hasta que desconecte de HAL (generalmente en la salida). El componente ya debe estar cargado. Util cerca del final de un archivo HAL para esperar hasta que el usuario cierre algun componente de la interfaz de usuario antes de limpiar y salir.
unloadusr compname
(unload Userspace component) Descarga un componente de espacio de usuario llamado compname. Si compname es "all", descargara todos los componentes del espacio de usuario. unloadusr funciona mediante el envio de SIGTERM a todos los componentes del espacio de usuario.
unload compname
Descarga un componente de espacio de usuario o modulo en tiempo real. Si compname es "all", descargara todos los componentes del espacio de usuario y modulos en tiempo real.
newsig signame type
(OBSOLETO: use net en su lugar) (newsignal) Crea una nueva señal HAL llamada signame que puede ser posteriormente utilizada para conectar dos o mas pines de componentes HAL. type es el tipo de datos de la nueva señal y debe ser uno de "bit", "s32", "u32", o "float". Falla si ya existe una señal del mismo nombre.
delsig signame
(delete signal) Borra la señal HAL signame. Cualquier pin actualmente vinculado a la señal sera desvinculado. Falla si signame no existe.
sets signame value
(set signal) Establece el valor de la señal signame a value. Falla si signame no existe, si ya tiene un escritor, o si value no es un valor legal. Los valores legales dependen del tipo de señal.
stype name
(signal type) Obtiene el tipo de la señal name. Falla si name no existe como una señal.
gets signame
(getsignal) Obtiene el valor de la señal signame. Falla si signame no existe.
linkps pinname [arrow] signame
(OBSOLETO: use net en su lugar) (linkpin a signal) Establece un enlace entre un pin de componente HAL pinname y una señal HAL signame. Cualquier enlace anterior a pinname sera roto. arrow puede ser " =>", " <=", " <=>", u omitido. halcmd ignora las flechas, pero pueden ser utiles en los archivos de comando para documentar la direccion del flujo de datos. Las flechas no debe utilizarse en la linea de comandos ya que el shell podria intentar interpretarlas. Falla si pinname o signame no existe, o si no son del mismo tipo.
linksp signame [arrow] pinname
(OBSOLETO: use net en su lugar) (linksignal a pin) Funciona como linkps pero invierte el orden de los argumentos. halcmd trata a ambos comandos de enlace exactamente igual. Usar el que se prefiera.
linkpp pinname1 [arrow] pinname2
(OBSOLETO: use net en su
lugar) (linkpin a pin) Atajo para
linkps que crea la señal (nombrada como el
primer pin), y luego vincula a ambos a esa señal.
halcmd trata esto como:
halcmd newsig pinname1
halcmd linksp pinname1 pinname1
halcmd linksp pinname1 pinname2
net signame pinname ...
Crea signname para que coincida con el tipo de pinname si aun no existe. Luego, enlaza signame a cada pinname a su vez. Las flechas pueden ser utilizadas como en linkps. Al vincular un pin a una señal por primera vez, el valor de la señal heredara el valor predeterminado del pin.
unlinkp pinname
(unlinkpin) Rompe cualquier enlace anterior a pinname. Falla si pinname no existe. Un pin no enlazado retendra el ultimo valor de la señal a la que estaba vinculado.
setp name value
(setparameter o pin) Establece el valor del parametro o pin name a value. Falla si name no existe como pin o parametro, si es un parametro que no se puede escribir, si es un pin que es un pin salida, si es un pin que ya esta conectado a una señal, o si value no es un valor legal. Los valores legales dependen del tipo de pin o parametro. Si un pin y un parametro existen con el nombre dado, se actua en el parametro.
paramname
=value
pinname =value
Identico a setp. Esta forma alternativa del comando puede ser mas conveniente y legible cuando se utiliza en un archivo.
ptype name
(parameter o pin type) Obtiene el tipo de parametro o pin name. Falla si name no existe como pin o parametro. Si un pin y un parametro existen con el nombre dado, se actua sobre el parametro.
getp name
(getparameter o pin) Obtiene el valor del parametro o pin name. Falla si name no existe como pin o parametro. Si un pin y un parametro existen con el nombre dado, se actua sobre el parametro.
addf functname threadname
(addfunction) Agrega la funcion functname al hilo de tiempo real threadname. functname se ejecutara despues de cualquier funcion que fuera agregada previamente al hilo. Falla si cualquiera functname o threadname no existe, o si son incompatibles
delf functname threadname
(delete function) Elimina la funcion functname del hilo en tiempo real threadname. Falla si functname o bien threadname no existe, o si functname no es actualmente parte de threadname.
start |
Inicia la ejecucion de hilos en tiempo real. Cada hilo llama periodicamente a todas las funciones que se le agregaron con el comando addf, en el orden en que fueron añadidas. | ||
stop |
Detiene la ejecucion de hilos en tiempo real. Los hilos ya no llamaran a sus funciones. |
show [item]
Imprime los elementos HAL en stdout en formato legible por humanos. item puede ser uno de "comp" (componentes), "pin", "sig" (señales), "param" (parametros), "funct" (funciones), "thread", o "alias". El tipo "all" se puede utilizar para mostrar elementos coincidentes de todos los tipos anteriores. Si se omite item, show imprimira todo.
item |
Esto es equivalente a show all [item]. |
save [item]
Imprime los elementos HAL en stdout en forma de comandos HAL. Estos comandos se pueden redirigir a un archivo y luego ejecutarse utilizando halcmd -f para restaurar la configuracion guardada. item puede ser uno de los siguientes:
"comp" genera un comando loadrt para el componente en tiempo real.
"alias" genera un comando alias para cada emparejamiento de pin o parametro alias
"sig" (o "signal") genera un comando newsig para cada señal, y "sigu" genera un comando newsig para cada señal no vinculada (para usar con netl y netla).
"link" y "linka" generan comandos linkps para cada enlace. (linka incluye flechas, mientras que link no.)
"net" y "neta" generan un comando newsig para cada señal, seguida de los comandos linksp para cada pin vinculado a esa señal. (neta incluye flechas.)
"netl" genera un comando net para cada señal enlazada, y "netla" (o "netal") genera un comando similar utilizando flechas.
"param" (o "parameter)" genera un comando setp para cada parametro.
"thread" genera un comando addf para cada funcion en cada hilo en tiempo real.
"unconnectedinpins" genera un comando setp para cada pin de entrada hal desconectado.
Si item es all, save hace lo equivalente a comp, alias, sigu, netla, param, thread, y unconnectedinpins en conjunto.
Si se omite item (o all), save hace el equivalente a comp, alias, sigu, netla, param, y thread en conjunto.
source nombre_de_archivo.hal
Ejecuta los comandos desde nombre_de_archivo.hal.
alias type name alias
Asigna "alias"
como segundo nombre para el pin o parametro
"name". Para la mayoria de las operaciones, un
alias proporciona un segundo nombre que se puede usar para
referirse a un pin o parametro; tanto el nombre original
como el alias funcionaran.
"tipo" debe ser pin o param.
"nombre" debe ser un nombre existente o
alias del tipo especificado.
unalias type alias
Elimina cualquier alias del pin
o parametro.
"tipo" debe ser pin o param
"alias" debe ser un nombre existente o
alias del tipo especificado.
list type [pattern]
Imprime los nombres de los
elementos HAL del tipo especificado.
’type’ es ’comp’,
’pin’, ’sig’,
’param’, ’funct’, o
’thread’. Si se especifica
’pattern’ solo se imprime
los nombres que coinciden con el patron, que puede ser un
’shell glob’.
Para ’sig’, ’pin’ y
’param’, el primer patron puede ser
-t datatype donde datatype es el tipo de datos (por
ejemplo, ’float’)
En este caso, los pines, señales o parametros
listados
estan restringidos al tipo de datos dado.
Los nombres se imprimen en una sola linea, separados por
espacios.
lock [all| tune | none]
Bloquea HAL hasta cierto punto.
none - no hay bloqueo
tune: es posible realizar algunos ajustes (setp y
similares).
all - HAL queda completamente bloqueado.
unlock [all | tune]
Desbloquea HAL hasta cierto
punto.
tune: es posible realizar algunos ajustes (setp y
similares).
all - HAL queda completamente desbloqueado.
status [type]
Imprime informacion de estado
sobre HAL.
’type’ es ’lock’,
’mem’ o ’all’.
Si se omite "type", se asume
"all".
help [comando]
Dar informacion de ayuda para
el comando.
Si se omite ’comando’, lista todos los comandos
y una breve descripcion
Despues de que se lee un comando pero antes de que se ejecute, tiene lugar varios tipos de sustitucion de variables.
Variables de
entorno
Las variables de entorno tienen los siguientes formatos:
$ ENVVAR seguido de final de linea o espacio en blanco
$ (ENVVAR)
Variables
Inifile
Las variables inifile estan disponibles solo cuando se
especifico un inifile con la bandera de halcmd -i.
Tienen los siguientes formatos:
[SECCION]VAR seguido de final de linea o espacio en blanco
[SECCION] (VAR)
Ninguno conocido en este momento.
Version original de John Kasunich, como parte del proyecto LinuxCNC. Ahora incluye importantes aportaciones de varios miembros del proyecto.
Informar de errores en LinuxCNC bug tracker 〈 URL: http://sf.net/p/emc/bugs/ 〉 .
Copyright
© 2003 John Kasunich.
Este es un software libre; ver las fuentes para las
condiciones de copia. No hay garantia; ni siquiera para
COMERCIABILIDAD o APTITUD PARA UN PROPOSITO PARTICULAR.
halrun (1): un script conveniente para iniciar un entorno en tiempo real, procesar un archivo .hal o .tcl y, opcionalmente, iniciar una sesion de comandos interactivos usando halcmd (descrito aqui) o haltcl(1).