LinuxCNC is about interacting with hardware. But few users have the same exact hardware specifications - similar, but not the same. And even for the exact same hardware, there may be different ways to use it, say for different materials or with different mills, which would require adaptations to the control of an already running system. An abstraction was needed to make it easier to configure LinuxCNC for a wide variety of hardware devices. At the highest level, it could simply be a way to allow a number of building blocks to be loaded and interconnected to assemble a complex system.
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
The Hardware Abstraction Layer (or with a reference to the 2001 Space Odyssey movie just "HAL") is a software to
-
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 is based on traditional system design techniques.
HAL is based on the same principles that are used to design hardware circuits and systems, so it is useful to examine those principles first. Any system, including a CNC machine, consists of interconnected components. For the CNC machine, those components might be the main controller, servo amps or stepper drives, motors, encoders, limit switches, pushbutton pendants, perhaps a VFD for the spindle drive, a PLC to run a toolchanger, etc. The machine builder must aselect, mount and wire these pieces together to make a complete system.
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
The machine builder does not need to worry about how each individual part works. He treats them as black boxes. During the design stage, he decides which parts he is going to use - steppers or servos, which brand of servo amp, what kind of limit switches and how many, etc. The integrator’s decisions about which specific components to use is based on what that component does and the specifications supplied by the manufacturer of the device. The size of a motor and the load it must drive will affect the choice of amplifier needed to run it. The choice of amplifier may affect the kinds of feedback needed by the amp and the velocity or position signals that must be sent to the amp from a control.
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
The designer of a hardware system not only selects the parts, he also decides how those parts will be interconnected. Each black box has terminals, perhaps only two for a simple switch, or dozens for a servo drive or PLC. They need to be wired together. The motors connect to the servo amps, the limit switches connect to the controller, and so on. As the machine builder works on the design, he creates a large wiring diagram that shows how all the parts should be interconnected.
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
Once the wiring diagram is complete it is time to build the machine. The pieces need to be acquired and mounted, and then they are interconnected according to the wiring diagram. In a physical system, each interconnection is a piece of wire that needs to be cut and connected to the appropriate terminals.
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
Very few machines work right the first time. While testing, the builder may use a meter to see whether a limit switch is working or to measure the DC voltage going to a servo motor. He may hook up an oscilloscope to check the tuning of a drive, or to look for electrical noise. He may find a problem that requires the wiring diagram to be changed; perhaps a part needs to be connected differently or replaced with something completely different.
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
This document is aimed at people who already know how to do this kind of hardware system integration, but who do not know how to connect the hardware to LinuxCNC. See the Remote Start Example section in the HAL UI Examples documentation.
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
This section is a glossary that defines key HAL terms but it is a bit different than a traditional glossary because these terms are not arranged in alphabetical order. They are arranged by their relationship or flow in the HAL way of things.
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.
|
Note
|
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
Each HAL component is a piece of software with well-defined inputs, outputs, and behavior, that can be installed and interconnected as needed. The section HAL Components List lists all available components and a brief description of what each does.
6. Problemas de sincronización en HAL
Unlike the physical wiring models between black boxes that we have said that HAL is based upon, simply connecting two pins with a HAL-signal falls far short of the action of the physical case.
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.