См. также справочные страницы motion(9).
1. Motion
Эти контакты и параметры создаются модулем реального времени motmod.
Этот модуль предоставляет интерфейс HAL для планировщика движения LinuxCNC.
По сути, motmod принимает список путевых точек и генерирует хорошо смешанный и ограниченный поток положений сочленений для подачи на приводы двигателей.
Дополнительно количество цифровых входов/выходов устанавливается с помощью num_dio. Количество аналоговых входов/выходов устанавливается с помощью num_aio, по умолчанию 4 для каждого. Количество шпинделей задается с помощью num_spindles, по умолчанию 1.
Имена контактов и параметров, начинающиеся с axis.L и joint.N, считываются и обновляются функцией контроллера движения.
Движение загружается командой motmod. Кинематики должны быть загружены перед движением.
loadrt motmod base_period_nsec=['period'] servo_period_nsec=['period'] traj_period_nsec=['period'] num_joints=['0-9'] num_dio=['1-64'] num_aio=['1-16'] unlock_joints_mask=['0xNN'] num_spindles=['1-8']
-
base_period_nsec = 50000 - период потока Base в наносекундах. Это самый быстрый поток в станке.
Note
|
В системах на основе сервоприводов обычно нет причин для того, чтобы «base_period_nsec» был меньше, чем «servo_period_nsec». На станках с программной генерацией импульсов «base_period_nsec» определяет максимальное количество импульсов в секунду. При отсутствии требований к длине длительности импульса и длительности паузы абсолютная максимальная скорость импульса составляет один импульс за base_period_nsec. Таким образом, «base_period_nsec», показанный выше, дает абсолютную максимальную скорость импульсов 20 000 импульсов в секунду. 50 000 нс (50 мкс) — довольно консервативное значение. Наименьшее используемое значение связано с результатом Latency Test, необходимой длиной импульса и скоростью процессора. Выбор слишком малого значения «base_period_nsec» может привести к появлению сообщения «Неожиданная задержка в реальном времени», зависаниям или самопроизвольным перезагрузкам. |
-
servo_period_nsec = 1000000 — это период задачи Servo в наносекундах. Это значение будет округлено до целого числа, кратного base_period_nsec. Этот период используется даже в системах на основе шаговых двигателей.
Это скорость, с которой вычисляются новые положения двигателя, проверяется ошибка рассогласования, обновляются выходные значения ПИД-регулятора и т. д. В большинстве систем нет необходимости изменять это значение. Это частота обновления низкоуровневого планировщика движения.
-
traj_period_nsec = 100000 - это период задачи Планировщик траектории в наносекундах. Это значение будет округлено до целого числа, кратного servo_period_nsec. За исключением станков с необычной кинематикой (например, гексаподы), нет причин делать это значение больше, чем servo_period_nsec.
1.1. Варианты
Если количество необходимых цифровых входов/выходов превышает установленное по умолчанию 4, вы можете добавить до 64 цифровых входов/выходов, используя опцию num_dio при загрузке motmod.
Если количество необходимых аналоговых входов/выходов больше, чем 4 по умолчанию, вы можете добавить до 16 аналоговых входов/выходов, используя опцию num_aio при загрузке motmod.
Параметр unlock_joints_mask используется для создания контактов для сочленения, используемого в качестве индексатора блокировки (обычно поворотного). Биты маски выбирают сочленение(я). Младший бит маски выбирает сочленение 0. Пример:
unlock_joints_mask=0x38 выбирает сочленения 3,4,5
1.2. Pins)
Эти контакты, параметры и функции создаются модулем реального времени motmod .
-
motion.adaptive-feed - (float, in) Когда адаптивная подача включена с помощью M52 P1, заданная скорость умножается на это значение. Этот эффект мультипликативен со значением переопределения подачи на уровне NML и motion.feed-hold. Начиная с версии 2.9 LinuxCNC, можно использовать отрицательное значение адаптивной подачи для запуска пути G-кода в обратном направлении.
-
motion.analog-in-00 - (float, in) Эти контакты (00, 01, 02, 03 или более, если настроено) управляются M66.
-
motion.analog-out-00 — (float, out) Эти контакты (00, 01, 02, 03 или более, если настроено) управляются M67 или M68.
-
motion.coord-error - (bit, out) TRUE, когда движение столкнулось с ошибкой, такой как превышение программного предела
-
motion.coord-mode - (bit, out) TRUE, когда движение в координированном режиме, а не в режиме телеоперации
-
motion.current-vel - (float, out) Текущая скорость инструмента в пользовательских единицах в секунду.
-
motion.digital-in-00 - (bit, in) Эти контакты (00, 01, 02, 03 или более, если настроены) управляются M62-65.
-
motion.digital-out-00 - (bit, out) Эти контакты (00, 01, 02, 03 или более, если настроены) управляются M62-65.
-
motion.distance-to-go - (float,out) Расстояние, оставшееся в текущем перемещении.
-
motion.enable - (bit, in) Если этот бит установлен в FALSE, движение останавливается, станок переходит в состояние machine off, и для оператора отображается сообщение. Для нормального движения установите этот бит в значение TRUE.
-
motion.feed-hold - (bit, in) Когда управление остановкой подачи включено с помощью M53 P1, и этот бит в TRUE, скорость подачи устанавливается на 0.
-
motion.feed-inhibit - (bit, in) Когда этот бит имеет значение TRUE, скорость подачи устанавливается на 0. Это будет отложено во время синхронизации шпинделя до конца перемещения.
-
motion.in-position - (bit, out) TRUE, если станок находится в положении.
-
motion.motion-enabled - (bit, out) TRUE, когда в состянии станок включен.
-
motion.motion-type - (s32, out) Эти значения взяты из src/emc/nml_intf/motion_types.h
-
0: холостой ход (нет движения)
-
1: Traverse
-
2: Linear feed
-
3: Arc feed
-
4: Tool change
-
5: Probing
-
6: Rotary axis indexing
-
-
motion.on-soft-limit - (bit, out) TRUE, когда станок находится на программном пределе.
-
motion.probe-input - (bit, in) G38.n использует значение на этом контакте, чтобы определить, когда щуп установил контакт. TRUE для замкнутого контакта щупа (касается), FALSE для разомкнутого контакта щупа.
-
motion.program-line - (s32, out) Текущая строка программы во время выполнения. Нуль, если не работает или между строками при одиночных шагах.
-
motion.requested-vel - (float, out) Текущая запрошенная скорость в пользовательских единицах в секунду. Это значение представляет собой настройку F-слова из файла G-кода, возможно, уменьшенную для соответствия пределам скорости и ускорения станка. Значение на этом контакте не отражает переопределение подачи или какие-либо другие настройки.
-
motion.teleop-mode - (bit, out) TRUE when motion is in teleop mode, as opposed to coordinated mode
-
motion.tooloffset.x … motion.tooloffset.w - (float, out, one per axis) shows the tool offset in effect; it could come from the tool table (G43 active), or it could come from the G-code (G43.1 active)
-
motion.on-soft-limit - (bit, out) TRUE, когда станок находится на программном пределе.
-
motion.probe-input - (bit, in) G38.n uses the value on this pin to determine when the probe has made contact. TRUE for probe contact closed (touching), FALSE for probe contact open.
-
motion.program-line - (s32, out) The current program line while executing. Zero if not running or between lines while single stepping.
-
motion.requested-vel - (float, out) The current requested velocity in user units per second. This value is the F-word setting from the G-code file, possibly reduced to accommodate machine velocity and acceleration limits. The value on this pin does not reflect the feed override or any other adjustments.
-
motion.teleop-mode - (bit, out) TRUE when motion is in teleop mode, as opposed to coordinated mode
-
motion.tooloffset.x … motion.tooloffset.w - (float, out, one per axis) shows the tool offset in effect; it could come from the tool table (G43 active), or it could come from the G-code (G43.1 active)
1.3. Параметры
Многие из этих параметров служат в качестве вспомогательных средств отладки и подлежат изменению или удалению в любое время.
-
motion-command-handler.time - (s32, RO)
-
motion-command-handler.tmax - (s32, RW)
-
motion-controller.time - (s32, RO)
-
motion-controller.tmax - (s32, RW)
-
motion.debug-bit-0 - (bit, RO) Это используется в целях отладки.
-
motion.debug-bit-1 - (bit, RO) Это используется в целях отладки.
-
motion.debug-float-0 - (float, RO) Это используется в целях отладки.
-
motion.debug-float-1 - (float, RO) Это используется в целях отладки.
-
motion.debug-float-2 - (float, RO) Это используется в целях отладки.
-
motion.debug-float-3 - (float, RO) Это используется в целях отладки.
-
motion.debug-s32-0 - (s32, RO) Это используется в целях отладки.
-
motion.debug-s32-1 - (s32, RO) Это используется в целях отладки.
-
motion.servo.last-period - (u32, RO) Количество циклов ЦП между вызовами сервопотока. Обычно это число, разделенное на скорость процессора, дает время в секундах и может использоваться для определения того, соответствует ли контроллер движений в реальном времени своим временным ограничениям
-
motion.servo.last-period-ns - (float, RO)
1.4. Функции
Обычно обе эти функции добавляются в сервопоток в указанном порядке.
-
motion-command-handler - Получает и обрабатывает команды движения
-
motion-controller - Запускает контроллер движения LinuxCNC
2. Spindle
LinuxCNC может осуществлять управление до восьми шпинделей. Модуль движения создаст следующие контакты: N (целое число от 0 до 7) заменяет номер шпинделя.
2.1. Pins)
-
spindle.N.at-speed - (bit, in) Движение будет приостановлено до тех пор, пока этот контакт не станет TRUE, при следующих условиях:
-
перед первым ходом подачи после каждого запуска шпинделя или изменения скорости;
-
перед началом каждой цепочки синхронизированных со шпинделем ходов;
-
и если в режиме CSS, то при каждом быстром переходе на подачу. Этот ввод можно использовать, чтобы убедиться, что шпиндель набрал нужную скорость перед началом резки или что шпиндель токарного станка в режиме CSS замедлился после прохода снятия от большого к малому перед началом следующего прохода на большем диаметре. Многие VFD имеют выход at speed. В противном случае этот сигнал легко сгенерировать с помощью компонента HAL near, сравнивая запрашиваемую и фактическую скорость шпинделя.
-
-
spindle.N.brake - (bit, out) TRUE, когда следует задействовать тормоз шпинделя.
-
spindle.N.forward - (bit, out) TRUE, когда шпиндель должен вращаться вперед.
-
spindle.N.index-enable - (bit, I/O) Для правильной работы синхронизированных перемещений шпинделя этот контакт должен быть подключен к контакту index-enable энкодера шпинделя.
-
spindle.N.inhibit - (bit, in) Когда этот бит равен TRUE, скорость шпинделя установлена на 0.
-
spindle.N.on - (bit, out) TRUE, когда шпиндель должен вращаться.
-
spindle.N.reverse - (bit, out) TRUE, когда шпиндель должен вращаться назад
-
spindle.N.revs - (float, in) Для правильной работы синхронизированных перемещений шпинделя этот сигнал должен быть подключен к контакту положения энкодера шпинделя. Положение энкодера шпинделя должно быть масштабировано таким образом, чтобы число оборотов шпинделя увеличивалось на 1,0 при каждом обороте шпинделя по часовой стрелке (M3).
-
spindle.N.speed-in - (float, in) Обратная связь о фактической скорости шпинделя в оборотах в секунду. Это используется при движении с подачей на оборот (G95). Если ваш драйвер энкодера шпинделя не имеет выхода скорости, вы можете сгенерировать подходящий выход, отправив положение шпинделя через компонент ddt . Если у вас нет энкодера шпинделя, вы можете сделать обратную связь с spindle.N.speed-out-rps.
-
spindle.N.speed-out - (float, out) Заданная скорость шпинделя в оборотах в минуту. Положительный для вращения шпинделя вперед (M3), отрицательный для вращения шпинделя назад (M4).
-
spindle.N.speed-out-abs - (float, out) Заданная скорость шпинделя в оборотах в минуту. Это всегда будет положительное число.
-
spindle.N.speed-out-rps - (float, out) Заданная скорость шпинделя в оборотах в секунду. Положительная для вращения шпинделя вперед (M3), отрицательная для вращения шпинделя назад (M4).
-
spindle.N.speed-out-rps-abs - (float, out) Заданная скорость шпинделя в оборотах в секунду. Это всегда будет положительное число.
-
spindle.N.orient-angle - (float,out) Желаемая ориентация шпинделя для M19. Значение параметра M19 R word плюс значение параметра [RS274NGC]ORIENT_OFFSET INI.
-
spindle.N.orient-mode - (s32,out) Желаемый режим вращения шпинделя М19. По умолчанию 0.
-
spindle.N.orient - (out,bit) Указывает на начало цикла ориентации шпинделя. Устанавливается М19. Очищается любым из M3, M4 или M5. Если spindle-orient-fault не равна нулю при spindle-orient true, команда M19 завершается сбоем с сообщением об ошибке.
-
spindle.N.is-oriented - (in, bit) Контакт подтверждения для spindle-orient. Завершает цикл ориентации. Если spindle-orient было true, когда стал активным spindle-is-oriented, контакт spindle-orient сбрасывается и устанавливается в активный уровень контакт spindle-locked. Также устанавливается контакт spindle-brake.
-
spindle.N.orient-fault - (s32, in) Ввод кода неисправности для цикла ориентации. Любое значение, отличное от нуля, приведет к прерыванию цикла ориентации.
-
spindle.N.lock - (bit, out) Контакт ориентация шпинделя выполнена. Очищается любым из M3, M4 или M5.
Концептуально шпиндель находится в одном из следующих режимов:
-
режим вращения (по умолчанию)
-
поиск нужного режима ориентации
-
режим завершения ориентации.
Когда выполняется M19, шпиндель переключается на поиск желаемой ориентации, и подключается контакт HAL spindle.__N__.orient
. Желаемая целевая позиция задается контактами spindle.__N__.orient-angle
и spindle.__N__.orient-fwd
и управляется параметрами M19 R и P.
Ожидается, что логика поддержки HAL будет реагировать на spindle.__N__.orient
, перемещая шпиндель в желаемое положение. Когда это будет завершено, ожидается, что логика HAL подтвердит это, установив активным вывод spindle.__N__.is-ориентированный
.
Затем Motion подтверждает это, делая неактивным контакт spindle.__N__.orient
и делая активным контакт spindle.__N__.locked
, чтобы показать режим orientation complete. Он также делает активным контакт spindle.__N__.brake
. Шпиндель теперь находится в режиме orientation complete.
Если, пока spindle.__N__.orient
является true, а spindle.__N__.is-oriented
еще не установлен активным, контакт spindle.__N__.orient-fault
имеет значение, отличное от нуля, команда M19 прерывается, отображается сообщение, включающее код неисправности, и очередь движений очищается. Шпиндель возвращается в режим вращения.
Кроме того, любая из команд M3, M4 или M5 отменяет режим поиска нужной ориентации или ориентация завершена. На это указывает отключение контактов spindle-orient
и spindle-locked
.
Контакт spindle-orient-mode
отражает слово M19 P и интерпретируется следующим образом:
-
0: вращение по часовой стрелке или против часовой стрелки для наименьшего углового перемещения
-
1: всегда вращать по часовой стрелке
-
2: всегда вращать против часовой стрелки
Его можно использовать с компонентом HAL orient
, который предоставляет значение команды PID на основе положения энкодера шпинделя, угла ориентации шпинделя и режима ориентации шпинделя.
3. Контакты осей и сочленений и параметры
Эти контакты и параметры создаются модулем реального времени motmod. [В станках с trivial kinematics между сочленениями и осями существует соответствие один-к-одному.] Они считываются и обновляются функцией motion-controller.
Подробную информацию о контактах и параметрах см. на странице руководства по движению «motion(9)».
4. iocontrol
iocontrol - принимает команды ввода-вывода не в реальном времени через NML, взаимодействует с HAL.
Контакты HAL iocontrol включаются и выключаются не в режиме реального времени. Если у вас строгие требования к синхронизации или вам просто нужно больше операций ввода-вывода, рассмотрите возможность использования вместо этого синхронизированного ввода-вывода в реальном времени, предоставляемого motion.
4.1. Pins )
-
iocontrol.0.coolant-flood (bit, out) TRUE когда запрашивается охлаждающая жидкость.
-
iocontrol.0.coolant-mist (bit, out) TRUE когда запрашивается охлаждающая жидкость в виде тумана.
-
iocontrol.0.emc-enable-in (bit, in) Должно быть установлено значение FALSE, когда существует внешнее условие аварийного останова.
-
iocontrol.0.tool-change (bit, out) TRUE когда требуется смена инструмента.
-
iocontrol.0.tool-changed (bit, in) Должен быть установлен в TRUE, когда смена инструмента завершена.
-
iocontrol.0.tool-number (s32, out) Текущий номер инструмента.
-
iocontrol.0.tool-prep-number (s32, out) Номер следующего инструмента из Т-слова RS274NGC.
-
iocontrol.0.tool-prepare (bit, out) TRUE, когда запрашивается подготовка инструмента.
-
iocontrol.0.tool-prepared (bit, in) Должен быть установлен в TRUE, когда подготовка инструмента завершена.
-
iocontrol.0.user-enable-out (bit, out) FALSE , когда существует внутреннее условие аварийного останова.
-
iocontrol.0.user-request-enable (bit, out) TRUE, когда пользователь запросил очистку аварийного останова.
5. настройки INI
Ряд настроек INI доступен как входные контакты HAL.
5.1. Pins )
N обозначает номер сочленения, L обозначает букву оси.
-
ini.N.ferror - (float, in) [JOINT_N]FERROR
-
ini.N.min_ferror - (float, in) [JOINT_N]MIN_FERROR
-
ini.N.backlash - (float, in) [JOINT_N]BACKLASH
-
ini.N.min_limit - (float, in) [JOINT_N]MIN_LIMIT
-
ini.N.max_limit - (float, in) [JOINT_N]MAX_LIMIT
-
ini.N.max_velocity - (float, in) [JOINT_N]MAX_VELOCITY
-
ini.N.max_acceleration - (float, in) [JOINT_N]MAX_ACCELERATION
-
ini.N.home - (float, in) [JOINT_N]HOME
-
ini.N.home_offset - (float, in) [JOINT_N]HOME_OFFSET
-
ini.N.home_offset - (s32, in) [JOINT_N]HOME_SEQUENCE
-
ini.L.min_limit - (float, in) [AXIS_L]MIN_LIMIT
-
ini.L.max_limit - (float, in) [AXIS_L]MAX_LIMIT
-
ini.L.max_velocity - (float, in) [AXIS_L]MAX_VELOCITY
-
ini.L.max_acceleration - (float, in) [AXIS_L]MAX_ACCELERATION
Note
|
Контакты min_limit и max_limit для каждой оси учитываются постоянно после возврата в исходное положение. Выводы ferror и min_ferror по каждой оси учитываются, когда станок включен и не находится в нужном положении. Контакты max_velocity и max_acceleration для каждой оси сэмплируются, когда станок включен и motion_state свободен (возврат в исходное положение или медленная подача), но не выбираются во время работы программы (автоматический режим) или в режиме MDI. Следовательно, изменение значений контактов во время работы программы не будет иметь эффекта до тех пор, пока программа не будет остановлена и motion_state снова не станет свободным. |
-
ini.traj_arc_blend_enable - (bit, in) [TRAJ]ARC_BLEND_ENABLE
-
ini.traj_arc_blend_fallback_enable - (bit, in) [TRAJ]ARC_BLEND_FALLBACK_ENABLE
-
ini.traj_arc_blend_gap_cycles - (float, in) [TRAJ]ARC_BLEND_GAP_CYCLES
-
ini.traj_arc_blend_optimization_depth - (float, in) [TRAJ]ARC_BLEND_OPTIMIZATION_DEPTH
-
ini.traj_arc_blend_ramp_freq - (float, in) [TRAJ]ARC_BLEND_RAMP_FREQ
Note
|
Выборка контактов traj_arc_blend происходит непрерывно, но изменение значений контактов во время работы программы может не иметь немедленного эффекта из-за очереди команд. |
-
ini.traj_default_acceleration - (float, in) [TRAJ]DEFAULT_ACCELERATION
-
ini.traj_default_velocity - (float, in) [TRAJ]DEFAULT_VELOCITY
-
ini.traj_max_acceleration - (float, in) [TRAJ]MAX_ACCELERATION