LinuxCNC trata la interacción con hardware. Pero pocos usuarios tienen exactamente las mismas especificaciones de hardware, similares mas no las mismas. E incluso para el exactamente mismo hardware, pueden haber maneras diferentes de usarlo, digamos para materiales diferentes o fresados diferentes, las cuales necesitarán adaptaciones para controlar un sistema que ya esté en funcionamiento. Fue necesaria una abstracción para hacer más fácil la configuración de LinuxCNC para una amplia variedad de dispositivos de hardware. Al nivel más alto, podría ser una manera simple de permitir que un número de bloques de construcción se carguen y se interconecten para ensamblar un sistema complejo.
Este capítulo da una introducción a la Capa de Abstracción de Hardware. Notarás que muchos de los bloques de construcción son de hecho, controladores de dispositivos hardware. Sin embargo, HAL puede hacer más que solo configurar controladores.
1. Descripción general
La Capa de Abstracción de Hardware (o con una referencia a la película 2001: Odisea del espacio sólo "HAL") es un software para
-
proporcionar la infraestructura para la comunicación con y entre los muchos componentes de software y hardware del sistema.
-
opcionalmente procesar y/o alterar esa información como fluya de componente a componente.
En sí mismo, este Middleware es agnóstico sobre su aplicación en CNC. Una búsqueda en internet, por ejemplo, arrojó una aplicación astronómica para controlar telescopios usando LinuxCNC. Motores mueven el telescopio en la posición correcta, y se necesita saber cómo mapear actividad del motor con el efecto de ese posicionamiento con el mundo real. Tal sincronización de posiciones de motor con posiciones del mundo real es una reminiscencia de lo que las máquinas CNC, o naves espaciales, necesitan hacer.
Cualquier controlador de máquina necesita saber:
-
acerca de su estado interno y cómo se mapea esto en el entorno (coordenadas de máquina, estado de interruptores/reguladores),
-
cómo se espera que los actuadores cambien ese estado,
-
cómo permitir actualizaciones del estado interno por medio de sensores (codificadores, sondas).
La HAL consiste de partes (referidas como "componentes") que
-
están conectados entre sí, p. ej. para actualizar datos de posición o para que el algoritmo de planificación le diga a los motores sobre el paso siguiente.
-
pueden saber cómo comunicarse con el hardware,
-
pueden simplemente procesar datos entrantes y proporcionar datos de salida para otros componentes,
-
son siempre ejecutados periódicamente, ya sea
-
con una frecuencia muy alta o con unos cuantos microsegundos (µs) de tiempo de ejecución, llamado hilo base, p. ej. para
-
darle a un motor de pasos un impulso a dar el paso, o para
-
leer la posición que presenta un codificador.
-
-
con una frecuencia baja cada milisegundo (ms), p. ej. para
-
ajustar la planeación de los movimientos siguientes para terminar una instrucción en código G.
-
-
como componentes en tiempo no-real "espacio de usuario" que corren en un "ciclo principal" tal y como otro software, y pueden ser interrumpidos o retrasados cuando el resto del sistema esta ocupado o sobrecargado.
-
En conjunto, HAL permite
-
programar una máquina que el programador no conoce directamente, pero puede confiar en una interfaz de programación con un efecto en la máquina bien especificado. Esa interfaz puede usarse para
-
decirle a la máquina qué hacer
-
escuchar lo que la máquina quiera decir sobre el estado en el que está.
-
-
Abstracciones verticales: El integrador de sistema humano de tal máquina usa HAL
-
para describir que busca la máquina y cómo lo busca y qué cable controla cuál motor que controla cuál eje.
-
La descripción de la máquina, las interfaces del programador y la interfaz del usuario de alguna manera se "encuentran" en esa capa de abstracción.
-
-
Abstracciones horizontales:
-
No todas las máquina tienen todos los tipos de características
-
Fresadoras, tornos y robots comparten muchas
-
características (motores, articulaciones, …),
-
algoritmos de planificación para sus movimientos.
-
-
HAL no tiene interacción directa con el usuario. Pero se han proporcionado múltiples interfaces que permiten manipular a la HAL
-
desde la línea de comandos usando el comando "halcmd".
-
desde secuencias de comandos en Python y
-
desde dentro de programas en C/C++,
pero ninguna de esas interfaces es HAL en sí.
HAL en sí mismo no es un programa, consiste en una o más listas de programas cargados (los componentes) que se ejecutan periódicamente (en secuencia estricta), y en un área de memoria compartida que usan esos componentes para intercambiar datos. La secuencia de comandos HAL principal se ejecuta solo una vez al arrancar la máquina, preparando los hilos de tiempo real y las ubicaciones de memoria compartida, cargando los componentes y preparando enlaces de datos entre ellos (las "señales" y los "pines").
En principio, múltiples máquinas pueden compartir una HAL común para permitirles interoperar, sin embargo, la implementación actual de LinuxCNC esta limitada a un solo intérprete y un solo módulo de Tarea. Actualmente, casi siempre es un intérprete de código G y "milltask" (el cual se encontró que también funciona bien para tornos y adecuadamente para robots), pero esos módulos son seleccionables en tiempo de carga. Con un interés creciente en el control de múltiples máquinas cooperantes, es probable que sobrepasar esta limitación sea uno de los pasos principales a abordar en desarrollos futuros de LinuxCNC.
HAL yace en el corazón de LinuxCNC y se usa y/o extiende por todas las partes de LinuxCNC, incluyendo las GUIs. El intérprete de código G (o lenguaje alternativo) sabe cómo interpretar el código G y lo traduce en operaciones de máquina al disparar señales en HAL. El usuario puede consultar la HAL de varias maneras para obtener información sobre su estado, el cual también representa el estado de la máquina. Durante el desarrollo de la versión 2.9, las GUIs aún son, por poco, una excepción a la regla y pueden saber algo que (sin necesitarlo) la HAL no.
2. Comunicación
Lo especial de la HAL es que puede comunicarse muy rápido
-
con otros programas, pero en particular
-
con sus componentes que típicamente corren en uno de los hilos de tiempo real.
Y mientras está en comunicación, la parte de LinuxCNC a la que le habla no necesita preparase para la comunicación: Todas esas acciones se realizan asíncronamente, es decir, ningún componente interrumpe su ejecución normal para recibir una señal, y las señales pueden enviarse inmediatamente, es decir, una aplicación puede esperar hasta que llegue un mensaje en particular -como una señal de activación, pero no necesita prepararse para recibir ese mensaje.
El sistema de comunicación
-
representa y controla a todo el hardware conectado al sistema,
-
inicia y detiene otros programas de comunicación.
La comunicación con el hardware de la máquina en sí, la realiza con los respectivos componentes HAL dedicados.
La HAL es un espacio compartido en el cual todas de las muchas partes que constituyen LinuxCNC intercambian información. Ese espacio dispone pines que son identificados por un nombre, aunque un ingeniero de LinuxCNC pueda preferir la asociación con un pin de un circuito electrónico. Esos pines pueden acarrear valores numéricos y lógicos, boleanos, de punto flotante y enteros con y sin signo. También hay un (relativamente nuevo) tipo de pin llamado hal_port destinado para flujos de bytes, y un framework para intercambiar datos mas complejos llamado hal_stream (el cual usa un área de memoria compartida privada, en lugar de un pin HAL). Los últimos dos tipos se usan relativamente infrecuentemente.
Con la HAL puedes enviar una señal a ese pin nombrado. Cada parte de la HAL puede leer ese pin que contiene ese valor de la señal. Eso hasta que una nueva señal se envía al mismo pin nombrado para sustituir el valor previo. El sistema central de intercambio de mensajes de la HAL es agnóstico de CNC, pero la HAL viene con un gran número de componentes que saben mucho de CNC y presentan esa información mediante pines. Hay pines que representan
-
información estática sobre la máquina
-
el estado actual de la máquina
-
interruptores de límite
-
posiciones contadas por motores a pasos o medidas por codificadores
-
-
recipientes para instrucciones
-
control manual de posición de la máquina (trote o "jogging")
-
posiciones que el motor a pasos debería tomar después
-
En una analogía con cables electrónicos, los pines pueden cablearse, de tal manera que el valor que cambia en un pin sirve como entrada de otro pin. Los componentes HAL preparan tales pines de entrada y salida, y por lo tanto disparados automáticamente.
Las muchas partes "expertas" de LinuxCNC son típicamente implementadas como componentes de HAL, conceptualmente también referidos como módulos. Esos expertos implementados en computadora leen perpetuamente desde la HAL sobre un estado que la máquina debería esmerarse en alcanzar, y comparan ese estado deseado con el estado en el que esta actualmente la máquina. Cuando hay una diferencia entre lo que debería ser y el estado actual, es cuando se realizan algunas acciones para reducir tal diferencia, mientras se escriben actualizaciones perpetuamente de los estados actuales de vuelta al espacio de datos de la HAL.
Hay componentes especializados en cómo hablarle a motores a pasos, y otros componentes saben cómo controlar servos. En un nivel más alto, algunos componentes saben cómo están dispuestos los ejes de la máquina en 3D y otros saben cómo realizar un movimiento suave desde un punto en el espacio a otro. Tornos, fresadoras y robots diferirán en el componente de LinuxCNC que este activo, es decir, el que es cargado por un archivo de configuración HAL para esa máquina. Después de todo, dos máquinas pueden verse muy diferentes por haber sido construidas para propósitos distintos, pero cuando ambas usan servo motores, pueden usar el mismo componente servo de HAL.
En el nivel mas bajo (cercano al hardware), p. ej. para motores de pasos, la descripción de un estado de ese motor es muy intuitiva: es el número de pasos en una dirección particular. Una diferencia entre la posición deseada y la real se traduce en un movimiento. Velocidades, aceleración y otros parámetros pueden estar internamente limitados dentro del componente mismo, o pueden estar opcionalmente limitados por componentes río arriba. (Por ejemplo, en la mayoría de los casos los valores de posición del eje momento a momento enviados a los componentes generadores de pasos ya han sido limitados y conformados para adecuarse a los límites de máquina configurados o a la velocidad de alimentación actual.)
Cualquier línea de código G es interpretada y dispara un conjunto de rutinas que en turno saben cómo comunicarse con componentes de la capa intermedia, p. ej. para crear un círculo.
HAL tiene un lugar especial en el corazón de sus programadores por la forma en que se representa el flujo de datos entre módulos. Cuando programadores tradiciones piensan en variables, direcciones o puertos de E/S, HAL refiere "pines". Y esos pines se conectan o se les asignan valores mediante señales. Muy similar a como un ingeniero eléctrico conectaría cables entre pines de componentes de una fresadora, un ingeniero HAL establece el flujo de datos entre pines de instancias de módulo.
Las GUIs de LinuxCNC (AXIS, GMOCCAPY, Touchy, etc.) representarán los estados de algunos pines (como los interruptores de límite) pero también existen otras herramientas gráficas para solucionar problemas y configuración: Halshow, Halmeter, Halscope y Halreport.
El resto de esta introducción presenta
-
la sintaxis de cómo se conectan los pines de distintos componentes en los archivos de configuración de HAL, y
-
software para inspeccionar los valores de los pines
-
en cualquier momento dado,
-
desarrollándose sobre el tiempo.
-
3. Diseño del sistema HAL
.HAL se basa en técnicas de diseño de sistemas tradicionales.
HAL se basa en los mismos principios que se usan para diseñar sistemas y circuitos de hardware, por lo que es útil examinar primero esos principios. Cualquier sistema, incluida una máquina CNC, consiste en componentes interconectados. Para una máquina CNC, esos componentes podrían ser el controlador principal, servoamplificadores o controladores de pasos, motores, codificadores, interruptores de límite, volantes con pulsadores (los populares MPG), quizás un VFD para el husillo, un PLC para manejar un cambiador de herramientas, etc. El constructor de la máquina debe seleccionar, montar y conectar estas piezas para formar un sistema completo.
La figura se transcribe a código HAL de esta manera:
net signal-blue component.0.pin1-in component.1.pin1-out net signal-red component.0.pin3-out component.1.pin3-in component.1.pin4-in
3.1. Selección de componentes
El constructor de una máquina no necesita preocuparse de cómo funciona cada componente individualmente. Los trata como cajas negras. Durante la etapa de diseño, él decide qué componentes va a usar: motores a pasos o servos, cuál marca de servo-amplificador, qué tipo de interruptores de límite y cuántos, etc. Las decisiones del integrador sobre qué componentes específicos usar se basarán en lo que hace ese componente y las especificaciones suministradas por el fabricante de dispositivo. El tamaño de un motor y la carga que debe mover afectará a la elección del amplificador necesario para manejarlo. La elección del amplificador puede afectar al tipo de retroalimentación necesario y a las señales de velocidad o posición que deben enviarse al propio amplificador desde el controlador.
De igual forma, en el mundo HAL el integrador debe decidir qué componentes HAL son necesarios. Por lo general, cada tarjeta de interfaz requerirá un controlador. Pueden ser necesarios componentes adicionales para la generación de pulsos de pasos por software, funcionalidad PLC, y una amplia variedad de otras tareas.
3.2. Diseño de interconexión
El diseñador de un sistema hardware no solo selecciona los componentes; también decide cómo interconectarlos. Cada caja negra tiene terminales, quizás solo dos como en un simple interruptor, o docenas para una unidad servo o un PLC. Los componentes necesitan estar interconectados. Los motores se conectan a los servo-amplificadores, los interruptores de límite se conectan al controlador, y así sucesivamente. Conforme el constructor de la máquina trabaja en el diseño, crea un diagrama de cableado completo que muestra cómo deben estar interconectados todos los componentes.
Cuando se usa HAL, los componentes están interconectados por señales. El diseñador debe decidir qué señales son necesarias y qué deberían conectar.
3.3. Implementación
Una vez que se completa el diagrama de cableado, es hora de construir la máquina. Las piezas deben ser adquiridas y montadas, y luego son interconectadas de acuerdo con el diagrama de cableado. En un sistema físico, cada interconexión es un trozo de cable con características determinadas, que debe conectarse a las terminales apropiadas.
HAL proporciona una serie de herramientas para ayudar a construir un sistema HAL. Algunas de las herramientas te permiten conectar (o desconectar) un solo cable. Otras herramientas te permiten guardar una lista completa de todos los componentes, cables y otra información sobre el sistema, para que pueda ser reconstruido con un solo comando.
3.4. Pruebas
Muy pocas máquinas funcionan bien la primera vez. Mientras hace las pruebas pertinentes, el constructor puede usar un tester para ver si un interruptor de límite está funcionando o para medir la tensión de CC que va a un servomotor. Puede conectar un osciloscopio para verificar la sintonización de un controlador, o para buscar ruido eléctrico. Puede encontrar un problema que requiera cambios en el diagrama de cableado; tal vez un componente debe estar conectado de manera diferente o ser reemplazado con algo completamente diferente.
HAL proporciona los equivalentes en software de un voltímetro, un osciloscopio, un generador de señales y otras herramientas necesarias para probar y ajustar un sistema. Los mismos comandos utilizados para construir el sistema se pueden usar para hacer cambios según sea necesario.
3.5. Resumen
Este documento está dirigido a personas que ya saben cómo hacer este tipo de integración de sistemas de hardware, pero que no saben cómo conectar el hardware a LinuxCNC. Vea la sección Ejemplo de arranque remoto en la documentación de Ejemplos UI HAL.
El diseño de hardware tradicional, como se ha descrito arriba, termina en el limite del control principal. Fuera del control (la PC) hay un montón de cajas relativamente simples, conectadas entre sí para hacer lo que sea necesario. En el interior, el control es un gran misterio; una enorme caja negra que esperamos funcione.
HAL extiende este método de diseño de hardware tradicional al interior de la gran caja negra. Hace de los controladores de dispositivos, e incluso algunas partes internas del controlador, cajas negras más pequeñas que se pueden interconectar, e incluso reemplazar al igual que el hardware externo. HAL permite al diagrama de cableado del sistema mostrar parte del controlador interno, en lugar de una gran caja negra. Y lo más importante, permite que el integrador pruebe y modifique el controlador utilizando los mismos métodos que usaría en el resto del hardware.
A la mayoría de los integradores le son familiares términos como motores, amplificadores y codificadores. Cuando hablamos de usar un cable blindado extra flexible de ocho conductores para conectar un codificador a la placa de entrada del servo en la computadora, el lector comprende de inmediato lo que es y le lleva a la pregunta ¿qué tipo de conectores necesitaré en cada extremo?. El mismo tipo de pensamiento es esencial para HAL, pero ese tren de pensamiento específico puede tardar un poco en encarrilarse. Usando HAL, las palabras pueden parecer un poco extrañas al principio, pero el concepto de trabajar desde una conexión a la siguiente es el mismo.
Esta idea de extender el diagrama de cableado al interior del controlador es la adoptada por HAL. Si se siente cómodo con la idea de interconectar cajas negras de hardware, es probable que tenga pocos problemas al utilizar HAL para interconectar cajas negras de software.
4. HAL: Conceptos
Esta sección es un glosario que define los términos clave HAL, aunque es un poco diferente de un glosario tradicional porque estos términos no estan ordenados alfabéticamente sino por su relación o flujo dentro de la manera de hacer las cosas con HAL.
Componente:: Cuando hablamos de diseño de hardware, nos referimos a las piezas individuales como partes, bloques de construcción, cajas negras, etc. El equivalente en HAL es un componente o componente HAL. Este documento usa componente HAL cuando pueda haber confusión con otros tipos de componentes, pero normalmente usa solamente componente. Un componente HAL es una pieza de software con entradas, salidas y comportamiento bien definidos, que puede ser instalado e interconectado como se necesite. ++ Muchos componentes HAL modelan el comportamiento de una parte tangible de una máquina, y un pin puede, de hecho, estar destinado a conectarse a un pin físico del dispositivo con el que se comunicará, de ahí los nombres. Pero más a menudo, este no es el caso. Imagina la modernización de un torno/fresadora manual. Lo que implementa LinuxCNC es cómo la máquina se presenta por sí misma al mundo exterior, y es secundario si la implementación de cómo trazar un círculo ya esta implementada en la máquina o es proporcionada por LinuxCNC. Y es común agregar botones a la actualización imaginaria que señaliza una acción, como una parada de emergencia. LinuxCNC y la máquina se convierten en uno. Y todo eso mediante la HAL.
Parámetro:: Muchos componentes de hardware tienen mandos de ajustes que no están conectados a ningún otro componente, pero que deben tener alguna forma de acceso. Por ejemplo, los servoamplificadores a menudo tienen potenciómetros, para permitir ajustes de afinación, y puntos de prueba donde puede ser conectado un medidor u osciloscopio para ver los resultados del ajuste. Los componentes HAL también pueden tener tales cosas, que se conocen como parámetros. Hay dos tipos de parámetros: los parámetros de entrada son equivalentes a potenciómetros; son valores que pueden ser ajustados por el usuario, y permanecen fijos si no son ajustados de nuevo. Los parámetros de salida no pueden ser ajustados por el usuario; son equivalente a los puntos de prueba que permiten monitorizar las señales internas.
Pin:: Los componentes hardware tienen terminales que se utilizan para interconectarlos. El equivalente HAL es un pin o pin HAL. Se usa pin HAL cuando sea necesario para evitar confusiones. Todos los pines HAL tienen nombre y esos nombres de pines se usan para interconectarlos. Los pines HAL son entidades de software que existen solo dentro de la computadora.
Pin físico:: Muchos dispositivos de E/S tienen pines físicos reales o terminales que se conectan a hardware externo, por ejemplo, los pines del conector de puerto paralelo. Para evitar confusiones, estos se conocen como pines físicos. Son esas cosas que se enchufan en el mundo real.
|
Nota
|
Podrías preguntarte qué relación hay entre los pines HAL, pines físicos y elementos externos como codificadores o tarjetas STG: estamos lidiando aquí con interfaces del tipo traslado/conversión de datos. |
Señal:: En una máquina física, las terminales reales de los componentes en hardware están interconectados por cables. El equivalente HAL de un cable es una señal o señal HAL. Las señales HAL conectan los pines HAL según lo requiera el constructor de la máquina. Las señales HAL pueden ser desconectadas y reconectadas a voluntad (incluso cuando la máquina está en funcionamiento).
Tipo:: Cuando se usa hardware real, no se conectaría una salida de relé de 24 voltios a una entrada analógica +/-10 V de un servoamplificador. Los pines HAL tienen las mismas restricciones, las cuales se basan en su tipo. Tanto los pines como las señales tienen tipos, y las señales solo se pueden conectar a pines del mismo tipo. Actualmente hay 4 tipos, que son los siguientes:
+ - bit - un único valor, VERDADERO/FALSO o ENCENDIDO/APAGADO o 1/0 - float - un valor de punto flotante de 64 bits, con aproximadamente 53 bits de resolución y más de 1000 bits de rango dinámico. - u32 - un entero sin signo de 32 bits, los valores legales son de 0 a 4,294,967,295 - s32 - un entero de 32 bits con signo, los valores legales son de -2,147,483,647 a +2,147,483,647 - u64 - un entero sin signo de 64 bits, los valores legales son de 0 a 18,466,744,073,709,551,615 - s64 - un entero de 64 bits con signo, los valores legales son de -9,223,372,036,854,775,808 a +9,223,372,036,854,775,807
Función:: Los componentes de hardware reales tienden a actuar de inmediato ante una entrada. Por ejemplo, si el voltaje de entrada a un servoamplificador cambia, la salida también cambia automáticamente. Sin embargo, los componentes de software no pueden actuar automáticamente. Cada componente tiene un código específico que se debe ejecutar para hacer lo que ese componente se supone debe hacer. En algunos casos, ese código simplemente se ejecuta como parte del componente. Por otra parte, en la mayoría de los casos, especialmente en componentes en tiempo real, el código debe ejecutarse en una secuencia específica y en intervalos específicos. Por ejemplo, las entradas deben leerse antes de realizar cálculos con los datos de entrada, y las salidas no deben escribirse hasta que los cálculos estén hechos. En estos casos, el código está disponible para el sistema en la forma de una o más funciones. Cada función es un bloque de código que realiza una acción específica. El integrador de sistema puede usar hilos para programar una serie de funciones que serán ejecutadas en un orden particular y en intervalos de tiempo específicos.
Hilo:: Un hilo es una lista de funciones que se ejecuta en intervalos específicos como parte de una tarea en tiempo real. Cuando un hilo es creado por primera vez, tiene un intervalo de tiempo específico (período), pero no tiene funciones. Las funciones se pueden agregar al hilo, y se ejecutarán en orden cada vez que se ejecuta el hilo.
Como ejemplo, supongamos que tenemos un componente de puerto paralelo llamado hal_parport. Ese componente define uno o más pines HAL para cada pin físico. Los pines se describen en la sección de documentación de ese componente: sus nombres, cómo se relaciona cada pin HAL con pines físicos, si están invertidos, si puedes cambiar su polaridad, etc. Pero eso por sí solo no hace que los datos de los pines HAL lleguen a los pines físicos. Se necesita código para hacer eso, y ahí es donde entran en escena las funciones. El componente hal_parport necesita al menos dos funciones: una para leer los pines de entrada física y actualizar los pines HAL, y otra para tomar datos de los pines HAL y escribirlos en pines de salida física. Ambas funciones son parte del controlador parport.
5. Componentes HAL
Cada componente HAL es una pieza de software con entradas, salidas y comportamiento bien definidos, que puede ser instalado e interconectado como sea necesario. La sección Lista de componentes HAL enlista todos los componentes disponibles y una descripción breve de lo que hace cada uno.
6. Problemas de sincronización en HAL
A diferencia de los modelos de cableado físico entre cajas negras en el que se dijo que está basado HAL, la simple conexión de dos pines con una señal HAL queda aún lejos de la acción del caso físico.
La lógica de relés consiste en relés conectados entre sí, y cuando el contacto se abre o se cierra, la corriente fluye (o se detiene) inmediatamente. Otras bobinas pueden cambiar de estado, etc., y todo simplemente ocurre. Pero un PLC de lógica de escalera no funciona de esa manera. Usualmente, en un solo pase a través de la escalera, cada escalón se evalúa en el orden en que aparece, y solo una vez por pase. Un ejemplo perfecto es una escalera de un solo escalón, con un contacto NC en serie con una bobina. El contacto y la bobina pertenecen al mismo relé.
Si se tratara de un relé convencional, tan pronto como se energiza la bobina, los contactos comienzan a abrirse y la des-energiza. Eso significa que los contactos cerrarán de nuevo, etc, etc. El relé se convierte en un zumbador.
Con un PLC, si la bobina está DESACTIVADA y el contacto está cerrado cuando el PLC comienza a evaluar el peldaño, cuando termina ese pase, la bobina estará ENCENDIDA. El hecho de que al encender la bobina se abre el contacto alimentado es ignorado hasta el próximo pase. En la siguiente pasada, el PLC ve que el contacto está abierto y des-energiza la bobina. Entonces el relé sigue cambiando rápidamente entre encendido y apagado, pero a un ritmo determinado por la frecuencia con la que el PLC evalúa el escalón.
En HAL, la función es el código que evalúa el(los) escalón(es). De hecho, la versión HAL en tiempo real de ClassicLadder exporta una función que hace exactamente eso. Entre tanto, un hilo es lo que permite la ejecución de la función en intervalos de tiempo específicos. Al igual que puedes elegir que un PLC evalúe todos sus escalones cada 10 ms, o cada segundo, puedes definir hilos HAL con períodos diferentes.
Lo que distingue a un hilo de otro no es lo que el hilo hace - eso está determinado por las funciones que son conectadas a él. La distinción real es simplemente qué tan seguido se ejecuta un hilo.
En LinuxCNC, puedes tener un hilo de 50 µs y un hilo de 1 ms. Estos se crearían con base en BASE_PERIOD y SERVO_PERIOD; los tiempos reales dependen de los valores en tu archivo INI.
El siguiente paso es decidir qué debe hacer cada hilo. Algunas de estas decisiones son las mismas en (casi) cualquier sistema LinuxCNC. Por ejemplo, la función motion-command-handler siempre se agrega al hilo servo.
Otras conexiones serán hechas por el integrador. Estas pueden incluir conectar las funciones de lectura de codificador de un controlador STG y las de escritura de un DAC al hilo servo, o enganchar la función de StepGen al hilo base, junto con la(s) función(es) parport para escribir pasos en el puerto.