LinuxCNC — это взаимодействие с оборудованием. Но немногие пользователи имеют одинаковые характеристики оборудования — похожие, но не одинаковые. И даже для одного и того же оборудования могут существовать разные способы его использования, скажем, для разных материалов или с разными фрезерами, что потребует адаптации к управлению уже работающей системой. Абстракция была необходима, чтобы упростить настройку LinuxCNC для широкого спектра аппаратных устройств. На самом высоком уровне это может быть просто способ загрузить и соединить ряд строительных блоков для сборки сложной системы.

В этой главе рассматривается уровень аппаратной абстракции. Вы увидите, что многие из строительных блоков действительно являются драйверами для аппаратных устройств. Однако HAL может делать больше, чем просто настраивать драйверы оборудования.

1. HAL Overview

Уровень аппаратной абстракции (или со ссылкой на фильм Космическая одиссея 2001 просто "HAL") — это программное обеспечение, позволяющее

  • обеспечить инфраструктуру для связи с и между многими программными и аппаратными компонентами системы.

  • при необходимости обрабатывать и/или переопределять эту информацию при ее передаче от компонента к компоненту.

Сама по себе это link: Связующее программное обеспечение не содержит информации о ее применении на ЧПУ. Поиск в Интернете, например, нашел астрономическое приложение для управления телескопами с помощью LinuxCNC. Двигатели перемещают телескоп в правильное положение, и он должен знать, как сопоставить двигательную активность с эффектом этого позиционирования в реальном мире. Такая синхронизация положений двигателя с реальными положениями напоминает то, что должны делать станки с ЧПУ или космические корабли.

Любой контролер станка должен знать:

  • о его внутреннем состоянии и о том, как оно соотносится с окружающей средой (координаты станка, состояние переключателей/регуляторов),

  • как исполнительные механизмы должны изменить это состояние,

  • как разрешить обновление внутреннего состояния датчиков (энкодеров, зондов).

Уровень HAL состоит из частей (называемых «компонентами»), которые

  • связаны друг с другом, например, для обновления данных о местоположении или для того, чтобы алгоритм планирования сообщал двигателям о следующем шаге.

  • может знать, как взаимодействовать с оборудованием,

  • может просто обрабатывать входящие данные и предоставлять выходные данные другим компонентам,

  • всегда периодически выполняются либо

    • с очень высокой частотой в несколько микросекунд (мкс) времени выполнения, называемой базовым потоком, например, для

      1. дать шаговому двигателю триггер, чтобы сделать шаг вперед или

      2. считать позицию, представленную энкодером.

    • с более низкой частотой каждую миллисекунду (мс), например, чтобы

      1. скорректировать планирование следующих ходов, чтобы завершить инструкцию G-кода.

    • как компоненты «user-space», которые запускают «основной цикл», так же как и любое другое программное обеспечение, и могут прерываться или задерживаться, когда остальная часть системы занята или перегружена.

В совокупности HAL позволяет

  1. программировать для станка, который программист не знает напрямую, но может полагаться на программный интерфейс с четко определенным воздействием на станок. Этот интерфейс может быть использован для

    • сказать станку, что делать

    • послушать, что станок хочет сказать о своем состоянии.

  2. Вертикальные абстракции: системный интегратор такого станка использует HAL

    • чтобы описать, как выглядит станок и как какой кабель управляет каким двигателем, который приводит в движение определенную ось.

    • Описание станка, интерфейсы программиста и интерфейс пользователя каким-то образом «встречаются» на этом абстрактном уровне.

  3. Горизонтальные абстракции:

    • Не все станки имеют все виды функций

    • фрезеры, токарные станки и роботы имеют много общего

      • особенностей (двигатели, сочленения, …),

      • алгоритмы планирования своих движений.

HAL не имеет прямого взаимодействия с пользователем. Но было предоставлено несколько интерфейсов, позволяющих манипулировать HAL

  • из командной строки с помощью команды "halcmd".

  • из скриптов Python и

  • из программ C/C++,

но ни один из этих интерфейсов не является "самим HAL".

HAL сам по себе не является программой, он состоит из одного или нескольких списков загруженных программ (компонентов), которые периодически выполняются (в строгой последовательности), и области общей памяти, которую эти компоненты используют для обмена данными. Основной скрипт HAL запускается только один раз при запуске станка, настраивая потоки реального времени и места в общей памяти, загружая компоненты и настраивая каналы передачи данных между ними («сигналы» и «контакты»).

В принципе, несколько станков могут использовать общий HAL, чтобы обеспечить их взаимодействие, однако текущая реализация LinuxCNC ограничена одним интерпретатором и одним модулем задач. В настоящее время это почти всегда интерпретатор G-кода и "задача фрезерования" (которая также хорошо работает для токарных станков и адекватно для роботов), но эти модули можно выбрать во время загрузки. Учитывая растущий интерес к управлению несколькими взаимодействующими станками, преодоление этого ограничения, вероятно, станет одним из основных шагов для решения проблемы будущего развития LinuxCNC. Однако это немного сложно, и сообщество все еще формирует свои мысли по этому поводу.

HAL лежит в основе LinuxCNC и используется и/или расширяется всеми частями LinuxCNC, включая ГИП. Интерпретатор G-кода (или альтернативного языка) знает, как интерпретировать G-код, и переводит его в операции станка, запуская сигналы в HAL. Пользователь может запрашивать HAL различными способами, чтобы получить информацию о его состоянии, которая затем также представляет состояние станка. Во время разработки версии 2.9, ГИПы по-прежнему являются исключением из этого правила и могут знать что-то, чего HAL не знает (но должен).

2. Коммуникация

HAL уникален тем, что может коммуницировать очень быстро

  • с другими программами, но в частности

  • с его компонентами, которые обычно выполняются в одном из потоков реального времени.

И при общении та часть LinuxCNC, с которой происходит обмен данными, не нуждается в подготовке к обмену: все эти действия выполняются асинхронно, т. е. ни один компонент не прерывает свое обычное выполнение для получения сигнала, и сигналы могут быть отправлены сразу, т. е. приложение может ждать, пока не поступит конкретное сообщение (например, сигнал разрешения), но ему не нужно готовиться к получению этого сообщения.

Система обмена данными

  • представляет и контролирует все оборудование, подключенное к системе,

  • запускает и останавливает другие коммуникационные программы.

Связь с аппаратным обеспечением самого станка осуществляется соответствующими выделенными компонентами HAL.

Уровень HAL — это общее пространство, в котором все части, составляющие LinuxCNC, обмениваются информацией. В этом пространстве есть контакты, которые идентифицируются по имени, хотя инженер LinuxCNC может предпочесть ассоциацию с контактом электронной схемы. Эти контакты могут нести числовые и логические значения, булевы значения, числа с плавающей запятой, а также целые числа со знаком и без знака. Существует также (относительно новый) тип вывода с именем hal_port, предназначенный для потоков байтов, и платформа для обмена более сложными данными, называемая hal_stream (которая использует частную общую область памяти, а не контакт HAL). Последние два типа используются сравнительно редко.

С помощью HAL вы можете отправить сигнал на этот названный контакт. Каждая часть HAL может прочитать этот контакт, который содержит значение сигнала. То есть до тех пор, пока новый сигнал не отправляется для замены предыдущего значения на контакт с тем же именем. Базовая система обмена сообщениями HAL не зависит от ЧПУ, но HAL поставляется с большим количеством компонентов, которые многое знают о ЧПУ и представляют эту информацию через контакты. Есть контакты, обозначающие

  • статическую информация о станке

  • текущее состояние станка

    • концевиков

    • позиции, подсчитанные шаговыми двигателями или измеренные энкодерами

  • получатели инструкций

    • ручное упрваление положением станка ("медленная подача")

    • положения, которые шаговые двигатели должны занять в следующий раз

По аналогии с электронными кабелями контакты могут быть соединены "проводами", поэтому значение, изменяющееся на одном контакте, служит входом для другого контакта. Компоненты HAL подготавливают такие входные и выходные контакты и, таким образом, автоматически запускаются для работы.

HAL Components

Многие «экспертные» программные части LinuxCNC обычно реализуются как компоненты HAL, концептуально также называемые модулями. Эти компьютеризированные эксперты постоянно читают из HAL о состоянии, к которому должен стремиться станок, и сравнивают это желаемое состояние с состоянием, в котором станок находится в текущий момент. Когда существует разница между тем, что должно быть, и тем, каким является текущее состояние, выполняются некоторые действия, чтобы уменьшить эту разницу, при этом постоянно записывая обновления текущих состояний обратно в пространство данных HAL.

Есть компоненты, специализирующиеся на взаимодействии с шаговыми двигателями, а другие компоненты умеют управлять сервоприводами. На более высоком уровне некоторые компоненты знают, как расположены оси станка в 3D, а другие знают, как плавно перемещаться из одной точки пространства в другую. Токарные станки, фрезерные станки и роботы будут различаться активным компонентом LinuxCNC, т.е. который загружается файлом конфигурации HAL для этого станка. Тем не менее, два станка могут выглядеть очень по-разному, поскольку они созданы для совершенно разных целей, но когда они оба используют серводвигатели, они все равно могут использовать один и тот же серво-компонент HAL.

Происхождение стимула к перемещению

На самом нижнем (ближайшем к аппаратному) уровне, например, для шаговых двигателей, описание состояния этого двигателя весьма понятно интуитивно: это количество шагов в определенном направлении. Разница между желаемым положением и фактическим положением преобразуется в движение. Скорость, ускорение и другие параметры могут быть ограничены внутри самого компонента или могут быть ограничены вышестоящими компонентами. (Например, в большинстве случаев значения положения оси по каждому моменту, отправляемые компонентам генератора шаговых импульсов , уже ограничены и сформированы в соответствии с настроенными ограничениями станка или текущей скоростью подачи.)

Любая строка G-кода интерпретируется и запускает набор процедур, которые, в свою очередь, знают, как взаимодействовать с компонентами, расположенными на среднем уровне, например, для создания круга.

Контакты и Сигналы

HAL занимает особое место в сердцах своих программистов из-за способа представления потока данных между модулями. Когда традиционные программисты думают о переменных, адресах или портах ввода-вывода, HAL относится к "контактам". И эти контакты подключены или им присвоены значения через сигналы. Подобно тому, как инженер-электрик соединяет провода между контактами компонентов фрезера, инженер HAL устанавливает поток данных между контактами экземпляров модуля.

ГИПы LinuxCNC (AXIS, GMOCCAPY, Touchy и т. д.) будут отображать состояния некоторых контактов (например, концевых выключателей), но существуют и другие графические инструменты для устранения неполадок и настройки: Halshow, Halmeter, Halscope и Halreport.

Оставшаяся часть этого введения представляет

  • синтаксис того, как контакты различных компонентов соединяются в файлах конфигурации HAL, и

  • программное обеспечение для проверки значений контактов

    • в любой данный момент,

    • развивающийся с течением времени.

3. HAL Системный дизайн

HAL основан на традиционных методах проектирования систем.

HAL основан на тех же принципах, которые используются для проектирования аппаратных схем и систем, поэтому полезно сначала изучить эти принципы. Любая система, в том числе и станок с ЧПУ состоит из взаимосвязанных компонентов. Для станка с ЧПУ такими компонентами могут быть главный контроллер, сервоусилители или шаговые приводы, двигатели, энкодеры, концевые выключатели, выносные пульты, возможно, ЧРП для привода шпинделя, ПЛК для управления устройством смены инструмента и т. д. Производитель станка должен выбрать, смонтировать и соединить эти части вместе, чтобы создать целостную систему.

HAL Схемная концепция
Figure 1. Концепция HAL – Соединение как электрические цепи.

Рисунок 1 будет записан в коде HAL следующим образом:

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. Выбор детали

Станкостроителю не нужно беспокоиться о том, как работает каждая отдельная деталь. Он обращается с ними как с черными ящиками. На этапе проектирования он решает, какие детали он собирается использовать — шаговые двигатели или сервоприводы, сервоусилитель какой марки, какие концевые выключатели и в каком количестве и т. д. Решение интегратора какие конкретно компоненты использовать, основывается на том, что именно делает компонент и характеристиках, предоставленным производителем устройства. Размер двигателя и нагрузка, которую он должен развивать, будут влиять на выбор усилителя, необходимого для его работы. Выбор усилителя может повлиять на тип обратной связи, необходимой усилителю, а также на сигналы скорости или положения, которые должны быть отправлены на усилитель от элемента управления.

В мире HAL интегратор должен решить, какие компоненты HAL необходимы. Обычно для каждой интерфейсной карты требуется драйвер. Дополнительные компоненты могут потребоваться для программного генерирования шаговых импульсов, функциональности ПЛК и множества других задач.

3.2. Проектирование соединений

Разработчик аппаратной системы не только выбирает детали, но и решает, как эти части будут связаны между собой. Каждый черный ящик имеет клеммы, возможно, всего две для простого переключателя или десятки для сервопривода или ПЛК. Их необходимо соединить вместе. Двигатели подключаются к сервоусилителям, концевые выключатели подключаются к контроллеру и так далее. Работая над проектом, машиностроитель создает большую схему соединений, на которой показано, как все детали должны быть соединены между собой.

При использовании HAL компоненты соединяются между собой сигналами. Проектировщик должен решить, какие сигналы необходимы и что они должны соединять.

3.3. Реализация

Когда схема подключения готова, пришло время собрать станок. Детали нужно приобрести и смонтировать, а затем соединить их между собой согласно схеме подключения. В физической системе каждое межсоединение представляет собой кусок провода, который необходимо отрезать и подключить к соответствующим клеммам.

HAL предоставляет ряд инструментов, помогающих построить систему HAL. Некоторые инструменты позволяют подключить (или отключить) один провод. Другие инструменты позволяют сохранить полный список всех деталей, проводов и другую информацию о системе, чтобы ее можно было перестроить с помощью одной команды.

3.4. Тестирование

Очень немногие станки работают правильно с первого раза. Во время тестирования создатель может использовать измеритель, чтобы проверить, работает ли концевой выключатель, или измерить напряжение постоянного тока, поступающее на серводвигатель. Он может подключить осциллограф, чтобы проверить настройку привода или поискать электрические помехи. Он может обнаружить проблему, требующую изменения схемы подключения; возможно, какую-то деталь нужно подключить по-другому или заменить на что-то совсем другое.

HAL предоставляет программные эквиваленты вольтметра, осциллографа, генератора сигналов и других инструментов, необходимых для тестирования и настройки системы. Те же команды, которые использовались для построения системы, можно использовать для внесения изменений по мере необходимости.

3.5. Краткое содержание

Этот документ предназначен для людей, которые уже знают, как выполнять подобную интеграцию системы оборудования, но не знают, как подключить оборудование к LinuxCNC. См. раздел Пример удаленного запуска в документации HAL UI Examples.

Пример удаленного запуска (схема)
Figure 2. Пример удаленного запуска (схема)

Традиционная аппаратная конструкция, описанная выше, заканчивается на краю основного элемента управления. За пределами элемента управления находится куча относительно простых коробок, соединенных вместе, чтобы делать все необходимое. Внутри управление представляет собой большую загадку: один огромный черный ящик, который, как мы надеемся, работает.

HAL распространяет этот традиционный метод проектирования аппаратного обеспечения на внутреннюю часть большого черного ящика. Он превращает драйверы устройств и даже некоторые внутренние части контроллера в меньшие черные ящики, которые можно соединять между собой и даже заменять, как и внешнее оборудование. Это позволяет на схеме подключения системы отображать часть внутреннего контроллера, а не просто большой черный ящик. И самое главное, это позволяет интегратору тестировать и модифицировать контроллер, используя те же методы, которые он использовал бы для остального оборудования.

Такие термины, как двигатели, усилители и энкодеры, знакомы большинству разработчиков станков. Когда мы говорим об использовании сверхгибкого восьмижильного экранированного кабеля для подключения энкодера к плате ввода сервопривода в компьютере, читатель сразу понимает, что это такое, и возникает вопрос: Какие разъемы мне понадобятся, чтобы его оконцевать Тот же тип мышления необходим и для HAL, но конкретный ход мыслей может занять некоторое время, чтобы войти в нужное русло. Использование слов HAL на первый взгляд может показаться немного странным, но концепция работы от одного соединения к другому одна и та же.

Идея расширения схемы подключения внутрь контроллера и есть суть HAL. Если вас устраивает идея соединения аппаратных черных ящиков, у вас, вероятно, не возникнет проблем с использованием HAL для соединения программных черных ящиков.

4. HAL Концепции

Этот раздел представляет собой глоссарий, в котором определены ключевые термины HAL, но он немного отличается от традиционного глоссария, поскольку эти термины расположены не в алфавитном порядке. Они упорядочены по своим отношениям или последовательности в порядке вещей HAL.

Component (Компонент )

Когда мы говорили о проектировании аппаратного обеспечения, мы называли отдельные кусочки частями, строительными блоками, черными ящиками и т. д. Эквивалентом HAL является компонент или компонент HAL. В этом документе используется компонент HAL, когда существует вероятность путаницы с другими типами компонентов, но обычно используется просто компонент. Компонент HAL — это часть программного обеспечения с четко определенными входами, выходами и поведением, которую можно установить и подключить по мере необходимости. + + Многие компоненты HAL моделируют поведение осязаемой части станка, и контакт действительно может предназначаться для подключения к физическому контакту на устройстве для связи с ним, отсюда и названия. Но чаще всего это не так. Представьте себе модернизацию ручного токарно-фрезерного станка. LinuxCNC реализует то, как станок представляет себя внешнему миру, и это вторично, если реализация рисования круга уже реализована на машине или предоставлена LinuxCNC. И к воображаемой модернизации часто добавляют кнопки, которые сигнализируют о действии, например, об аварийной остановке. LinuxCNC и станок становятся одним целым. И это происходит через HAL.

Parameter (Параметр)

Многие аппаратные компоненты имеют настройки, которые не связаны ни с какими другими компонентами, но к которым все же требуется доступ. Например, сервоусилители часто имеют подстроечные потенциометры, позволяющие выполнять настройку, и контрольные точки, к которым можно подключить измеритель или осциллограф для просмотра результатов настройки. Компоненты HAL также могут иметь такие элементы, которые называются параметрами. Существует два типа параметров: Входные параметры эквивалентны регуляторам потенциометра — это значения, которые может регулировать пользователь и они остаются фиксированными после установки. Выходные параметры не могут быть настроены пользователем — они эквивалентны контрольным точкам, позволяющим контролировать внутренние сигналы.

Контакт

Аппаратные компоненты имеют клеммы, которые используются для их соединения. Эквивалентом HAL является контакт или контакт HAL. Контакт HAL используется, когда необходимо, чтобы избежать путаницы. Все контакты HAL имеют имена, и имена контактов используются при их соединении. Контакты HAL — это программные объекты, существующие только внутри компьютера.

Physical_Pin (Физический контакт)

Многие устройства ввода-вывода имеют реальные физические контакты или клеммы, которые подключаются к внешнему оборудованию, например контакты разъема параллельного порта. Во избежание путаницы их называют физическими контактами. Это вещи, которые смотрят в реальный мир.

Note

Вам может быть интересно, какая связь существует между HAL_pins, Physical_pins и внешними элементами, такими как энкодеры или карта STG: здесь мы имеем дело с интерфейсами типа трансляции/преобразования данных.

Signal (Сигнал)

В физическом станке выводы реальных аппаратных компонентов соединены между собой проводами. Эквивалентом провода HAL является сигнал или сигнал HAL. Сигналы HAL соединяют контакты HAL вместе, как того требует производитель оборудования. Сигналы HAL можно отключать и повторно подключать по желанию (даже во время работы станка).

Type

При использовании реального оборудования вы не будете подключать релейный выход 24 В к аналоговому входу +/-10 В сервоусилителя. Контакты HAL имеют те же ограничения, которые зависят от их типа. И контакты, и сигналы имеют типы, и сигналы могут быть подключены только к контактам одного и того же типа. На данный момент существует 4 типа:

  • bit - единичное значение TRUE/FALSE или ON/OFF

  • float — 64-битное значение с плавающей запятой, разрешением примерно 53 бита и динамическим диапазоном более 1000 бит.

  • u32 — 32-битное целое число без знака, допустимые значения от 0 до 4,294,967,295

  • s32 — 32-битное целое число со знаком, допустимые значения: от -2,147,483,648 до +2,147,483,647

  • u64 — 64-битное целое число без знака, допустимые значения от 0 до 18,446,744,073,709,551,615

  • s64— 64-битное целое число со знаком, допустимые значения: от -9,223,372,036,854,775,808 до +9,223,372,036,854,775,807

Function

Реальные аппаратные компоненты имеют тенденцию немедленно реагировать на свои входы. Например, если входное напряжение сервоусилителя изменится, выходное напряжение также изменится автоматически. Однако программные компоненты не могут действовать автоматически. Каждый компонент имеет определенный код, который должен быть выполнен, чтобы сделать все, что этот компонент должен делать. В некоторых случаях этот код просто выполняется как часть компонента. Однако в большинстве случаев, особенно в компонентах реального времени, код должен выполняться в определенной последовательности и через определенные промежутки времени. Например, входные данные следует считывать до выполнения вычислений над входными данными, а выходные данные не следует записывать до тех пор, пока вычисления не будут выполнены. В этих случаях код предоставляется системе в виде одной или нескольких функций. Каждая функция представляет собой блок кода, выполняющий определенное действие. Системный интегратор может использовать потоки для планирования ряда функций, которые будут выполняться в определенном порядке и через определенные промежутки времени.

Thread (Поток)

поток — это список функций, которые выполняются через определенные промежутки времени как часть задачи реального времени. Когда поток создается впервые, он имеет определенный временной интервал (период), но не имеет функций. Функции можно добавлять в поток, и они будут выполняться по порядку при каждом запуске потока.

В качестве примера предположим, что у нас есть компонент parport с именем hal_parport. Этот компонент определяет один или несколько контактов HAL для каждого физического контакта. Контакты описаны в разделе документации этого компонента: их имена, как каждый контакт связан с физическим выводом, инвертированы ли они, можно ли изменить полярность и т. д. Но это само по себе не передает данные с контактов HAL на физические выводы. Для этого требуется код, и именно здесь на сцену выходят функции. Компоненту parport необходимы как минимум две функции: одна для чтения физических входных контактов и обновления контактов HAL, другая для получения данных с контактов HAL и записи их на физические выходные контакты. Обе эти функции являются частью драйвера parport.

5. HAL компоненты

Каждый компонент HAL представляет собой часть программного обеспечения с четко определенными входами, выходами и поведением, которую можно установить и подключить по мере необходимости. В разделе HAL Components List перечислены все доступные компоненты и краткое описание того, что каждый из них делает.

6. Временные проблемы в HAL

В отличие от моделей физического соединения между черными ящиками, на которых, как мы говорили, основан HAL, простое соединение двух контактов с сигналом HAL далеко не соответствует действию физического случая.

Настоящая релейная логика состоит из реле, соединенных вместе, и когда контакт размыкается или замыкается, ток течет (или прекращается) немедленно. Другие катушки могут изменить состояние и т. д., и все это просто происходит. Но в языке релейных схем ПЛК это не работает. Обычно за один проход по цепям каждая цепь оценивается в том порядке, в котором она появляется, и только один раз за проход. Прекрасным примером является цепь с одним НЗ контактом, включенным последовательно с катушкой. Контакт и катушка принадлежат одному реле.

Если бы это было обычное реле, то как только на катушку подается напряжение, контакты начинают размыкаться и обесточивать ее. Это означает, что контакты снова замыкаются и т. д. и т. п. Реле начинает издавать звуковой сигнал.

В ПЛК, если катушка выключена и контакт замкнут, когда ПЛК начинает оценивать цепь, то по завершении этого прохода катушка включается. Тот факт, что включение катушки размыкает контакт, питающий ее, игнорируется до следующего прохода. На следующем проходе ПЛК видит, что контакт разомкнут, и обесточивает катушку. Таким образом, реле по-прежнему быстро переключается между включением и выключением, но со скоростью, определяемой тем, как часто ПЛК оценивает цепь.

В HAL функция — это код, который оценивает цепь(и). Фактически, версия ClassicLadder реального времени с поддержкой HAL экспортирует функцию, которая делает именно это. Между тем, поток — это то, что запускает функцию через определенные промежутки времени. Точно так же, как вы можете выбрать, чтобы ПЛК оценивал все свои цепочки каждые 10 мс или каждую секунду, вы можете определять потоки HAL с разными периодами.

Что отличает один поток от другого, так это не то, что поток делает — это определяется тем, какие функции к нему подключены. Настоящее различие заключается лишь в том, как часто запускается поток.

В LinuxCNC у вас может быть поток 50 мкс и поток 1 мс. Они будут созданы на основе BASE_PERIOD и SERVO_PERIOD, фактическое время зависит от значений в вашем INI-файле.

Следующий шаг — решить, что должен делать каждый поток. Некоторые из этих решений одинаковы (почти) в любой системе LinuxCNC. Например, обработчик команды движения всегда добавляется в сервопоток.

Другие соединения будут выполнены интегратором. Они могут включать в себя подключение функций чтения и записи ЦАП драйвера STG к сервопотоку или подключение функции StepGen к базовому потоку вместе с функциями parport для записи импульсов шага в порт.