LinuxCNC Integrators Manual Глава XI - Примеры HAL
Содержание
LinuxCNC Integrators Manual Глава XI - Примеры HAL
Примеры HAL
Все эти примеры подразумевают, что вы начинаете с конфигурации основанной на stepconf и имеете два потока, base-thread и servo-thread. Мастер stepconf создаст пустые custom.hal и custom_postgui.hal. Файл custom.hal будет загружен после главного hal файла, а custom_postgui.hal загружается после того, как запустится GUI.
11.1 Ручная смена инструмента
В этом примере подразумевается, что вы используете свои собственные конфигурационные файлы и хотите добавить окно HAL Manual Toolchange. HAL Manual Toolchange в основном используется если у вас есть заранее настраиваемые инструменты и вы храните параметры их компенсаций в таблице инструментов. Если вам нужен touch off (определение положения касания) для каждой смены инструмента, тогда лучше просто разделить ваш Gкод на части. Для того, чтобы использовать окно HAL Manual Toolchangeвам просто нужно загрузить компонент hal manualtoolchange и потом послать iocontrol "tool change" в пин hal manualtoolchange "change" и послать обратно пин hal manualtoolchange "changed" в iocontrol "tool changed".
Это пример HAL Manual Toolchange из мастера stepconf
loadusr -W hal_manualtoolchange net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
Это пример без HAL Manual Toolchange из мастера stepconf
net tool-number <= iocontrol.0.tool-prep-number net tool-change-loopback iocontrol.0.tool.-change => iocontrol.0.tool-changed net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
11.2 Вычисление скорости
Этот пример использует "ddt", "mult2" и "abs" для вычисления скорости одной оси. Для более подробной информации по компонентам реального времени см. страницы man или раздел 8.2 Компоненты реального времени (Realtime Components).
Сначала, проверим вашу конфигурацию, чтобы убедиться, что вы не уже не используете компаненты реального времени. Вы можете сделать это открыв окно настройки HAL и посмотрев список компонентов в секции пины. Если вы их уже используете, откройте hal файл в котором они загружаются и исправьте их количество и настройте названия сущностей. После этого добавьте следующий код в ваш файл custom.hal:
Загружаем компоненты реального времени.
loadrt ddt count=1 loadrt mult2 count =1 loadrt abs count=1
Добавляем функции к потокам, чтобы они своевременно обновлялись.
addf ddt.0 servo-thread addf mult2.0 servo-thread addf abs.0 servo-thread
Делаем связи.
setp mult2.in1 60 net xpos-cmd ddt.0.in net X-IPS mult2.0.in0 <= ddt.0.out net X-ABS abs.0.in <= mult2.0.out net X-IPM abs.0.out
В последнем разделе мы натсраиваем mult2.0.in1 равным 60 чтобы преобразовать дюймы (мм) в секунду в дюймы (мм) в минуту, которые мы получаем изи ddt.0.out.
Сигнал xpos-cmd отправляет запрошенное положение в ddt.0.in. ddt вычисляет производную изменения ввода.
ddt2.0.out умножается на 60 чтобы получить единицы измерения в мин.
mult2.0.out отправляется в abs чтобы получить абсолютное значение (модуль) скорости.
Следующее изображение показывает результат когда ось X движется со скоростью 15 IPM (дюймов в минуту) в отрицательном направлении.
Заметьте, что мы можем получить абсолютное значение либо с пина abs.0.out или из сигнала X-IPM.
Рис. 11.1: Пример Скорости
11.3 Плавный старт
Этот пример показывает кок могут быть использованы компаненты "lowpass", "limit2" или "limit3" для того, чтобы ограничить скорость изменения сигнала.
В этом примере у нас есть серво мотор управляющий шпинделем токарного станка. Если бы мы просто использовали запрошенную скорость (commanded spindle speed) то серво мотор будет пытаться достичь ее как можно быстрее. Это может вызвать проблему и повредить двигатель. Для того, чтобы замедлить изменение скорости мы можем пропустить значение пина motion.spindle-speed-out через ограничитель перед PID регулятором, таким образом запрошенное (commanded) значение в PID будет изменяться медленно.
Три встроенных компонента, которые ограничивают сигнал:
limit2 ограничивает диапазон и первую производную сигнала.
limit3 ограничивает диапазон, первую и вторую производную сигнала.
lowpass использует функцию взвешенного-экспоненциального среднего для сглаживания входного сигнала.
Более подробно о компонентах HAL смотрите на страницах man.
Поместите следующий текст в файл под названием softstart.hal. Если вы не знакомы с Linux поместите этот файл в вашу домашнюю директорию.
############################## loadrt threads period1=1000000 name1=thread loadrt siggen loadrt lowpass loadrt limit2 loadrt limit3 net square siggen.0.square => lowpass.0.in limit2.0.in limit3.0.in net lowpass <= lowpass.0.out net limit2 <= limit2.0.out net limit3 <= limit3.0.out setp siggen.0.frequency .1 setp lowpass.0.gain .01 setp limit2.0.maxv 2 setp limit3.0.maxv 2 setp limit3.0.maxa 10 addf siggen.0.update thread addf lowpass.0 thread addf limit2.0 thread addf limit3.0 thread start loadusr halscope ##############################
Откройте терминал и запустите файл следующей коммандой:
[cmd]halrun -I softstart.hal[/cmd]
Когда запустится HAL Oscilloscope нажмите Ок чтобы принять поток по умолчанию.
Потом добавьте сигналы в каналы. Нажмите на сигнал 1, потом выберите "square" (квадратный) из списка сигналов. Повторите для 2-4 сигнала и добавьте lowpass, limit2, и limit3. Потом добавьте тригерный сигнал, кликните на кнопке "Source None" и выберите "square". Кнопка изменится на Source Chan 1.
Потом кликните на Single (одиночный) в выборе Run Mode. Это выполнит запуск, и когда он закончится вы увидите ваши сигналы.
Чтобы разделить сигналы, чтобы их было лучше видно, нажмите на сингал и используйте ползунок Pos в рамке Vertical.
Рис. 11.2: Плавный старт
Чтобы увидеть эффект изменения установленных значений любого компонента вы можете поменять их в окне терминала. Чтобы увидеть как разные заничения gain меняют lowpass, просто наберите следующее в консоле и попробуйте разные значения:
setp lowpass.0.gain .01
После изменения настройки запустите осциллограф снова и наблюдайте изменения.
Когда закончите, напиште "exit" в терминале для завершения работы halrun и закройте halscope.
Не закрывайте терминал с запущенным halrun, т.к. он может оставить некоторые вещи в памяти, которые могут препятствовать последующему запуску EMC2.
Для более подробной информации по HalScope см. руководство по HAL.
Оглавление книги LinuxCNC Integrators Manual
Глава | Название |
---|---|
Глава 1 | LinuxCNC Integrators Manual Глава I - Важные определения |
Глава 2 | LinuxCNC Integrators Manual Глава II - Аппаратное обеспечение (Hardware) |
Глава 3 | LinuxCNC Integrators Manual Глава III - Конфигурационные файлы |
Глава 4 Доделать! | LinuxCNC Integrators Manual Глава IV - Файл INI |
Глава 5 Доделать! | LinuxCNC Integrators Manual Глава V - LinuxCNC и HAL |
Глава 6 Доделать! | LinuxCNC Integrators Manual Глава VI - Основы HAL |
Глава 7 Доделать! | LinuxCNC Integrators Manual Глава VII - Настройка шаговых двигателей |
Глава 8 Доделать! | LinuxCNC Integrators Manual Глава VIII - Компонетны HAL |
Глава 9 Забыли перевести! | LinuxCNC Integrators Manual Глава IX - Параллельный порт |
Глава 10 Доделать! | LinuxCNC Integrators Manual Глава X - Пользовательский интерфейс HAL (Halui) |
Глава 11 Доделать! | LinuxCNC Integrators Manual Глава XI - Примеры HAL |
Глава 12 Доделать! | LinuxCNC Integrators Manual Глава XII - Virtual Control Panel - Виртуальная панель управления |