LinuxCNC Integrators Manual Глава XI - Примеры HAL

Материал из cnc-club
Перейти к навигации Перейти к поиску

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 - Виртуальная панель управления