LinuxCNC / Настройка: различия между версиями

Материал из Wiki CNC
Перейти к навигации Перейти к поиску
(Справочник параметров *.hal файла)
(Удаление устаревшей информации)
 
(не показано 76 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
=Введение=
 
=Введение=
 +
В настоящий момент всё оборудование под управлением LinuxCNC поставляется на контроллерах [[EP7i92]].
  
В '''LinuxCNC''' настройка системы под заданное оборудование, происходит отлично от стандартного графического интерфейса (Mach3 или NC-Studio). Большинство необходимых параметров задаются внесением изменений в текстовые конфигурационные файлы *hal и *ini.<br>
+
В '''LinuxCNC''' настройка параметров под конкретное оборудование, происходит отлично от большинства популярных систем управления ЧПУ (Mach3 или NC-Studio). Большинство необходимых параметров задаются внесением изменений в текстовые конфигурационные файлы *.hal и *.ini.<br>
  
''Примечание: В составе LinuxCNC есть приложение с графическим интерфейсом пользователя для настройки конфигурации станка (Stepconf), однако, как показывает практика некоторые изменения приходится вносить в конфигурационные файлы вручную. Именно поэтому в данном руководстве вся настройка и внесение изменений происходят через *.hal и *.ini файлы.'' <br>
+
''Примечание: В составе LinuxCNC есть приложение с графическим интерфейсом пользователя для настройки конфигурации станка (Stepconf), однако, как показывает практика некоторые изменения приходится вносить в конфигурационные файлы вручную. В большинстве случаев в этом нет необходимости. Именно поэтому в данном руководстве вся настройка и внесение изменений происходят через *.hal и *.ini файлы.'' <br>
  
Что же такое *.hal и *.ini файлы? Давайте обратимся к теории. <br>
+
Что же такое *.hal и *.ini файлы? Немного теории. <br>
  
 
'''hal''' - Hardware Abstraction Layer (Слой аппаратных абстракций) - конфигурационный файл Linux, отвечающий за связь аппаратной и программной части станка. <br>
 
'''hal''' - Hardware Abstraction Layer (Слой аппаратных абстракций) - конфигурационный файл Linux, отвечающий за связь аппаратной и программной части станка. <br>
Строка 13: Строка 14:
 
К примеру в данном файле содержится информация: скорости, ускорения, количество импульсов на мм, скорость поиска домашнего положения, пределы перемещений и др.  
 
К примеру в данном файле содержится информация: скорости, ускорения, количество импульсов на мм, скорость поиска домашнего положения, пределы перемещений и др.  
  
Обратите внимание, что ниже указаны параметры и значение каждого из них. Для удобства работы мы постарались сделать раздел F.A.Q. в котором постараемся систематизировать информацию по темам (к примеру, как настроить датчики домашнего положения и др.). Ниже перечислены все, необходимые параметры для настройки вашего станка под управлением LPT (в руководстве используется контроллер [https://cnc-tehnologi.ru/chpu-kontrollery-i-perekhodniki/kontroller-lpt-dptr-1-03 LPT-DPTR 1.03])
+
Для удобства освоения материала настоящее руководство разделено на 2 части: справочники по *.hal и *.ini файлам, а также отдельные главы по настройке тех или иных функций (перемещения, шпинделя, датчиков и прочее). Ниже перечислены все необходимые параметры для настройки вашего станка под управлением LPT (в руководстве используется контроллер [https://cnc-tehnologi.ru/chpu-kontrollery-i-perekhodniki/kontroller-lpt-dptr-1-03 LPT-DPTR 1.03])
  
В данном руководстве подразумевается, что вы установили скаченный образ Craftex т.к. некоторые аспекты по настройке уже сделаны. Также в данном руководстве не подразумевается использование утилит по автоматическому созданию или изменению файлов конфигурации.
+
В данном руководстве подразумевается, что вы установили скаченный образ LinuxCNC т.к. некоторые аспекты по настройке уже сделаны. Также в данном руководстве не подразумевается использование утилит по автоматическому созданию или изменению файлов конфигурации.  
 
 
=Настройка=
 
Изучение настройки LinuxCNC сложно разделить на *hal и *ini файлы отдельно, логичнее настраивать систему с точки зрения тем (к примеру, настройка шаговых двигателей, настройка датчиков и.т.д). Именно по такому принципу и построено настоящее руководство.
 
 
 
В начале определим местоположение наших файлов конфигурации. По умолчанию файлы конфигурации расположены по адресу home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal и home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal. Обратите внимание, в директории config лежат все созданные конфигурации. Конфигурация может отличаться в зависимости от названия станка к примеру, Cutter_GR и другое. В любом случае, название ярлыка для запуска на рабочем столе соответствует названию папки директории с конфигурацией.  
 
  
 +
В начале определим местоположение наших файлов конфигурации. По умолчанию файлы конфигурации расположены по адресу home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal и home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal. Обратите внимание, в директории config лежат все созданные конфигурации. Конфигурация может отличаться в зависимости от названия станка к примеру, Cutter_GR, мой-станок.hal и другое.
  
 
==Настройка адреса ввода\вывода LPT-PCI==
 
==Настройка адреса ввода\вывода LPT-PCI==
Настройка системы LinuxCNC для работы с LPT-портом начинается с указания адреса ввода вывода LPT в вашем ПК.  
+
Настройка системы LinuxCNC для работы с LPT-портом начинается с указания адреса ввода-вывода LPT в вашем ПК.  
 
В случае использования материнской платы не имеющего на борту встроенного LPT порта, рекомендуется воспользоваться платой PCI-LPT c чипом CH351Q (ссылка на сайт [https://cnc-tehnologi.ru/chpu-kontrollery-i-perekhodniki/kontroller-pci-lpt CNC-Technology]).
 
В случае использования материнской платы не имеющего на борту встроенного LPT порта, рекомендуется воспользоваться платой PCI-LPT c чипом CH351Q (ссылка на сайт [https://cnc-tehnologi.ru/chpu-kontrollery-i-perekhodniki/kontroller-pci-lpt CNC-Technology]).
  
 
Для того, чтобы увидеть установленные в системный блок PCI устройства нужно открыть эмулятор терминала и набрать команду:<br>
 
Для того, чтобы увидеть установленные в системный блок PCI устройства нужно открыть эмулятор терминала и набрать команду:<br>
 
<code>lspci –vv</code><br>
 
<code>lspci –vv</code><br>
В командной строке отобразятся все устройства, доступные операционной системе для работы. Среди них необходимо найти Paralell controller. Необходимый нам Region 0, адрес данного устройства, к примеру c000.  
+
В командной строке отобразятся все устройства, доступные операционной системе для работы. Среди них необходимо найти Parallel controller. Необходимый нам Region 0, адрес данного устройства, к примеру c000.  
  
 
Данный адрес необходимо указать в *.hal файле конфигурации: <br>
 
Данный адрес необходимо указать в *.hal файле конфигурации: <br>
 
'''linuxcnc/configs/Cutter_ST/ST.hal'''<br>
 
'''linuxcnc/configs/Cutter_ST/ST.hal'''<br>
''<small>Обратите внимание, что название hal файла может отличаться. Однако практически всегда название ярлыка для запуска на рабочем столе соответствует названию конфигурационного файла.</small>''
 
  
 
В открытом файле Cutter_ST.hal изменить строку '''loadrt hal_parport cfg=”0x378 out”''' на '''loadrt hal_parport cfg=”0xс000 out”''', где '''0xс000''' адрес п0орта pci-платы, который мы определили ранее. Теперь мы можем запустить linuxcnc ярлыком на рабочем столе и убедиться что станок перемещается.
 
В открытом файле Cutter_ST.hal изменить строку '''loadrt hal_parport cfg=”0x378 out”''' на '''loadrt hal_parport cfg=”0xс000 out”''', где '''0xс000''' адрес п0орта pci-платы, который мы определили ранее. Теперь мы можем запустить linuxcnc ярлыком на рабочем столе и убедиться что станок перемещается.
  
 
==Настройка работы шаговых двигателей==
 
==Настройка работы шаговых двигателей==
Необходимо убедиться, что в .hal (к примеру /home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal).файле верно назначены пины для примеру Cutter_ST.hal).
+
Основные параметры настройки шаговых двигателей это деление шага (кол-во импульсов на мм), направление движения, скорости и ускорения. Дополнительные параметры, которые могут потребоваться: изменение временных составляющих импульсов на драйвер. Рассмотрим основные параметры и алгоритм настройки. <br>
 +
 
 +
Установка пинов в *.hal
 +
 
 +
Необходимо открыть *.hal файл и убедиться в том, что порты и пины указаны в соответствии с распиновкой LPT. Подробнее смотрите в справочнике по *.hal файлу.
 +
Настройка направлений, скоростей и ускорений для каждой из осей. <br>
 +
Детальней рассмотрим назначение пинов для xtep и xdir.<br>
 +
<code>
 +
net xstep          => parport.0.pin-02-out<br>
 +
net xdir            => parport.0.pin-03-out<br>
 +
</code>
 +
Данные записи означают, что сигнал Step по оси X будет подаваться на пин 2 LPT-порта, а сигнал Dir по оси X будет подаваться на пин 3 LPT-порта. По аналогии проверяем другие сигналы для LPT. <br>
 +
 
 +
Кроме этого, для правильной работы шаговых двигателей необходимо выставить параметр SCALE в *.ini файле. SCALE - количество импульсов на мм, параметр прямо-пропорциональный количеству импульсов на оборот шагового двигателя и обратно-пропорциональный шагу винта. Другими словами, если на драйвере выставлено деление шага 1/4, шаговому двигателю требуется 800 импульсов на оборот (т.е. стандартное деление шага 200 умножили на делитель 4), а винт ШВП, установленный на станке, имеет шаг 5 мм, то параметр SCALE = 800 / 5 = 160. <br>
 +
 
 +
Параметр SCALE указана в *.ini файле, в соответствии с каждой группой для своей оси. К примеру для того, чтобы изменить данный параметр для оси X нужно найти его в группе [JOINT_0]. Аналогично [JOINT_1] для оси Y и [JOINT_2] для оси Z.<br>
 +
 
 +
Если направление перемещения не совпадает с фактическим, то необходимо удалить строчку setp parport.... для необходимого пина. К примеру, если направление перемещения не совпадает по оси X то в *.hal файле необходимо найти строчку setp parport.0.pin-03-out-invert 1 и её удалить (достаточно сделать её комментарием поставив знак # перед строчкой: #setp parport.0.pin-03-out-invert 1).
  
 
==Настройка датчиков домашнего положения==
 
==Настройка датчиков домашнего положения==
 +
Для настройки датчиков необходимо убедиться, что аппаратная и программная часть связаны. Для этого откроем наш *.hal файл и проверим правильность настройки. <br>
 +
<code>
 +
net home-x      <= parport.0.pin-10-in<br>
 +
net home-y      <= parport.0.pin-11-in<br>
 +
net home-z      <= parport.0.pin-12-in<br>
 +
net home-a      <= parport.0.pin-13-in<br>
 +
</code>
 +
 +
Подобным образом происходит связь аппаратной и программной части в области датчиков домашнего положения. Рассмотрев детальнее мы поймешь что pin 10 соответствует входу LimX на плате LPT-DPTR 1.03 и другие входные сигналы соответственно. <br>
 +
 +
После того, как мы установили датчики домашнего положения необходимо проверить их срабатывание через hal-scope или  HAL-метр (более подробно см. в главе Hal-scope настоящего руководства).<br>
 +
Необходимо убедиться, что в свободном состоянии т.е. в состоянии когда датчик не сработал состояние в LinuxCNC соответствует FALSE.<br>
 +
Для того, чтобы привести значение всех датчиков к FALSE необходимо изменить значение датчика на in-not. <br>
 +
После того, как все датчики в свободном состоянии соответствуют показанию FALSE, можно приступать к дальнейшей настройке. <br>
 +
 +
Убедитесь, что строки, отвечающие за датчики в *.ini файле верные. Так, к примеру для оси X настройки датчиков хранятся в группе параметров [JOINT_0]:<br>
 +
<code>
 +
HOME_OFFSET = 0.00<br>
 +
HOME_SEARCH_VEL = 15.00<br>
 +
HOME_LATCH_VEL = -1.50<br>
 +
HOME_IGNORE_LIMITS = YES<br>
 +
HOME_SEQUENCE = 1 <br>
 +
</code><br>
 +
Такие же параметры соответствуют осям в группах [JOINT_1] для оси X, [JOINT_1] для оси Z.<br>
  
 +
Теперь можно вернуть все оси в домашнее положение. <br>
 +
В случае, если одна из осей начинает перемещаться в направлении обратном положению датчика, необходимо изменить направление поиска домашнего положения. Для этого необходимо изменить знак скорости поиска домашнего положения, к примеру: <br>
 +
<code>
 +
HOME_SEARCH_VEL = -15.00<br>
 +
HOME_LATCH_VEL = 1.50<br>
 +
</code><br>
 +
Обратите внимание, что также изменяется знак параметра HOME_LATCH_VEL.<br>
 +
 +
Далее необходимо определить минимальные и максимальные пределы (размеры рабочего поля). Для этого обратимся к *.ini файлу. В *.ini файле, для каждой оси присутствует группа параметров AXIS и JOINT. К примеру, для оси X группа [AXIS_X] и [JOINT_0]. В этих группах необходимо изменить параметры MIN_LIMIT и MAX_LIMIT, для минимального и максимального перемещения соответственно. Обратите внимание, что данные параметры повторяются как в группе AXIS, так и в группе JOINT.<br>
  
 
==Настройка работы шпинделя==
 
==Настройка работы шпинделя==
 +
Настройка шпинделя как правило состоит из двух частей: настройка автоматического вкл./выкл. шпинделя и настройка генерации ШИМ для управления скоростью вращения шпинделя. <br>
  
 +
Рассмотрим первую составляющую. Включение - выключение шпинделя простая задача, потому в *.hal файле всего две строки, указывающие на эту функцию. Необходимо убедиться, что в *.hal файле существует связь сигнала <code>spindle-cw</code> с пином, отвечающим за включение. <br>
 +
<code>
 +
net spindle-cw      => parport.0.pin-16-out<br>
 +
setp parport.0.pin-16-out-invert 1<br>
 +
</code>
 +
 +
Далее необходимо убедиться, что точно также подключен сигнал <code>spindle-pwm </code> отвечающий за выход ШИМ. <br>
 +
<code>
 +
net spindle-pwm    => parport.0.pin-14-out<br>
 +
setp parport.0.pin-14-out-invert 1<br>
 +
</code>
 +
 +
Далее, обратим внимание на настройку формирования импульсов ШИМ, который отвечает за регулировку оборотов шпинделя.<br>
 +
<code>
 +
setp pwmgen.0.pwm-freq 988.0<br>
 +
setp pwmgen.0.scale 24000<br>
 +
setp pwmgen.0.offset 0.02<br>
 +
setp pwmgen.0.dither-pwm true<br>
 +
</code>
 +
Среди них, параметр <code> setp pwmgen.0.pwm-freq 988.0 </code> является несущей частотой ШИМ сигнала, параметр <code> setp pwmgen.0.scale 24000 </code> является максимальной скоростью шпинделя, параметр <code> setp pwmgen.0.offset 0.02 </code>, определяет смещение фактической частоты от заданной (применяется для более точной калибровки) и параметр <code> setp pwmgen.0.dither-pwm true </code> указывает на "метод округления".
  
 
==Настройка сети и подключение сетевой папки==
 
==Настройка сети и подключение сетевой папки==
Настройку общего доступа к папке будем производить на компьютере под управлением ОС Windows. А подключаться к ней будем уже с компьютера с ОС Debian (LinuxCNC-Craftex).
+
Настройку общего доступа к папке будем производить на компьютере под управлением ОС Windows. А подключаться к ней будем уже с компьютера с ОС Debian GNU/Linux с LinuxCNC.
 
Создаём папку в Windows где-нибудь, кликаем правой кнопкой мыши, выбираем "Свойства" - "Доступ" и жмём "Расширенная настройка":<br>
 
Создаём папку в Windows где-нибудь, кликаем правой кнопкой мыши, выбираем "Свойства" - "Доступ" и жмём "Расширенная настройка":<br>
 
[[Файл:Share files windows 1.png|border|400px]]<br>
 
[[Файл:Share files windows 1.png|border|400px]]<br>
Строка 65: Строка 132:
 
Надо отключить общий доступ с парольной защитой и "Сохранить изменения".
 
Надо отключить общий доступ с парольной защитой и "Сохранить изменения".
  
==Настройка удаленного доступа==
+
==Настройка внешней кнопки E-Stop==
Удаленный доступ к Debian можно осуществить несколькими способами. Например через терминальный или графический доступ.  
+
Для удобства работы чаще всего организовывается внешняя кнопка E-stop (фактически сигналом E-Stop может, более того, должна являться не только кнопка E-stop, но и другие источники сигнала аварии. Такими источниками: драйвера шаговых двигателей имеющих выход Alarm или Fault; преобразователь частоты). Отдельное внимание стоит обратить на то, что в случае использования внешней кнопки E-stop первая функциональная клавиша (соответствующая F1) в LinuxCNC становится привязана к сигналу E-stop, что также является очень удобным.  
  
Терминальный или SSH(Secure Shell) доступ полезен, когда достаточно функционала командной строки для осуществления деятельности, такой доступ очень экономичен в плане интернет трафика. SSH сервер уже встроен в минимальную сборку с Craftex. Для доступа из ОС Windows потребуется лишь установленная программа [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Putty].<br>
+
Для того, чтобы клавиша была функциональна необходимо внести соответствующие изменения в *.hal файл.  
[[Файл:Putty.jpg|border|400px]]<br>
+
Привести к данному следующие строки файла:<br>
Если вам привычнее работать с файлам в графическом обозревателе можно воспользоваться [https://winscp.net/eng/download.php WinSCP], который работает по тому же SSH протоколу.<br>
+
<code>
[[Файл:winscp.jpg|border|400px]]<br>
+
net estop-ext => parport.0.pin-15-in<br>
[[Файл:winscp2.jpg|border|400px]]<br>
+
net estop-out <= iocontrol.0.user-enable-out<br>
Надо сказать, что данный способ требует белого ip адреса для компьютера с Debian. Если у вас есть роутер, тогда потребуется пробросить стандартный для ssh порт № 22.
+
net estop-ext => iocontrol.0.emc-enable-in<br>
 +
</code>
  
Графический доступ можно осуществлять через тот же SSH и программы Putty+Xming или протокол VNC, но как показывает практика, даже в одной локальной сети задержки графики настолько большие, что комфортно работать невозможно. Поэтому придется пользоваться сторонним ПО. Всем известный Team Viewer уже встроен в образ с Craftex. Запустите его и получите доступ из Windows после ввода вашего ID и пароля.<br>
+
Примечание: если при включении система заблокирована, то вероятно дело в том, что входной сигнал имеет неправильное нормальное состояние (NO, NC). В таком случае нужно инвертировать входной сигнал, для этого: <br>
[[Файл:TV.png|border|400px]]<br>
+
<code>
 +
net estop-ext => parport.0.pin-15-in-not<br>
 +
</code>
 +
 
 +
==Рекомендации по выбору беспроводного адаптера==
 +
Для того, чтобы удобнее организовать работу оператора между рабочим ПК и ПК станка можно организовать локальную сеть. Таким образом отпадет возможность использовать Flash-диски. <br>
 +
Есть несколько способов организовать локальную сеть: проводную и беспроводную. Мы рекомендуем использовать беспроводной адаптер TP-Link TL-WN727N в ввиду надежности, стоимости и легкости установки драйверов в Linux.
 +
Драйвера для адаптера TL-WN727N можно скачать по ссылке: <br>
 +
Последовательность установки драйверов: <br>
 +
1. В скачанном архиве находятся руководство по установке и архив с драйвером. Распаковываем архив с драйвером и получаем папку rtl8188EUS_linux_v5.2.2.4_25483.20171222. Распаковывать в любое удобное место. <br>
 +
2. Открываем эмулятор терминала и переходим в папку с драйвером. К примеру, cd home/notroot/rtl8188EUS_linux_v5.2.2.4_25483.20171222.<br>
 +
3. Вводим в терминала <code> make clean</code><br>
 +
4. Вводим в терминале <code> make</code>1<br>
 +
5. Вводим <code> sudo cp 8188eu.ko lib/modules/[kernel version]/drivers/net/wirieless</code>2<br>
 +
6. Вводим <code> sudo depmode -a </code><br>
 +
7. Вводим <code> sudo modprobe 8188eu.ko </code><br>
 +
 
 +
1. После компиляции командой make в терминале мы увидим сообщения о том, какой файл скомпилирован "8188eu.ko"<br>
 +
2. Версию ядра [kernel version]мы можем увидеть, если пройдем по пути lib/modules/<br>
  
 
=Справочник параметров *.ini файла=
 
=Справочник параметров *.ini файла=
Строка 89: Строка 175:
 
Доступные интерфейсы: '''axis, touchy, gmoccapy, gscreen, keystick, mini, tklinuxcnc, xemc.'''<br>
 
Доступные интерфейсы: '''axis, touchy, gmoccapy, gscreen, keystick, mini, tklinuxcnc, xemc.'''<br>
 
<code>DISPLAY = gmoccapy</code> ''Выбран интерфейс GMOCCAPY.''<br>
 
<code>DISPLAY = gmoccapy</code> ''Выбран интерфейс GMOCCAPY.''<br>
 +
 +
====EDITOR====
 +
Имя графического редактора, с помощью которого можно открыть файл управляющей программы для редактирования. <br>
 +
Доступные редакторы: '''gedit, mousepad.'''<br>
 +
<code>EDITOR = gedit</code> ''Выбран графический редактор gedit.''<br>
 +
 +
====POSITION_OFFSET====
 +
Система координат, которая отображается по умолчанию.
 +
Доступные системы координат: '''RELATIVE - относительная, MACHINE - абсолютная.'''<br>
 +
<code>POSTION_OFFSET = RELATIVE</code> ''По умолчанию выбрана относительная система координат.''<br>
 +
 +
====POSITION_FEEDBACK====
 +
Отображение координат в интерфейсе.
 +
Возможно отображать текущую позицию двумя способами: '''ACTUAL - действительное положение т.е. положение полученное по обратной связи от двигателей, COMMANDER - заданное (идеальное) значение координат.'''<br>
 +
<code>POSITION_FEEDBACK = ACTUAL </code> ''По умолчанию выбрано актуальное отображение.''<br>
 +
 +
====ARCDIVISION====
 +
Тип отображения дуг (дробление дуги на прямые участки). Чем большее значение дробления указано, тем более точное (приближенное к идеальной дуге) отображение будет в окне предпросмотра, но чем тем требуется больше ресурсов ПК.<br>
 +
<code>ARCDIVISION = 64 </code> ''Значение по умолчанию 64.''<br>
 +
 +
====GRIDS====
 +
Тип деления сетки. Единица измерения дюймы (in), мм (mm).<br>
 +
<code>GRIDS = 10mm 20mm 50mm 100mm 1in 2in 5in 10in </code> ''Доступные по умолчанию сетки.''<br>
 +
 +
====MAX_FEED_OVERRIDE====
 +
Максимальное изменение скорости подачи, относительно скорости выставленной в управляющей программе или окне MDI. <br>
 +
<code>MAX_FEED_OVERRIDE = 1.2 </code> ''Значение 1.2 означает, что пользователь может превысить значение установленной скорости лишь на 20%''<br>
 +
 +
====MIN_SPINDLE_OVERRIDE====
 +
Минимальное значение скорости вращения шпинделя, относительно выставленной в управляющей программе или окне MDI.<br>
 +
<code>MIN_SPINDLE_OVERRIDE = 0.5 </code> ''Значение 0.5 означает, что пользователь может понизить установленную скорость вращения шпинделя не более чем на 50%''<br>
 +
 +
====MAX_SPINDLE_OVERRIDE====
 +
Максимальное значение скорости вращения шпинделя, относительно выставленной в управляющей программе или окне MDI.<br>
 +
<code>MAX_SPINDLE_OVERRIDE = 1.2 </code> ''Значение 1.2 означает, что пользователь может повысить установленную скорость вращения шпинделя не более чем на 20%''<br>
  
 
====DEFAULT_LINEAR_VELOCITY====
 
====DEFAULT_LINEAR_VELOCITY====
Установленная по умолчанию скорость перемещений, установленная при первом запуске LinuxCNC. <br>
+
Скорость перемещений, установленная при первом запуске LinuxCNC. <br>
<code>DEFAULT_LINEAR_VELOCITY = 100.0</code> ''Скорость по умолчанию 100 мм/сек.''
+
<code>DEFAULT_LINEAR_VELOCITY = 20.0</code> ''Скорость по умолчанию 20 мм/сек.''
 +
 
 
====MAX_LINEAR_VELOCITY====
 
====MAX_LINEAR_VELOCITY====
 +
Максимальная скорость свободных перемещений, которую можно изменять из интерфейса.<br>
 +
<code>MAX_LINEAR_VELOCITY = 100.0 </code> ''Максимальная скорость перемещений не более 100.0 мм\сек.''<br>
  
 
===Группа [EMCMOT]===
 
===Группа [EMCMOT]===
Строка 157: Строка 281:
  
 
=Справочник параметров *.hal файла=
 
=Справочник параметров *.hal файла=
= Основы HAL =
 
  
== 6.1 Команды Hal ==
+
Для работы системы необходим правильно настроенный *.hal файл. Пройдемся по реальному конфигурационному файлу и изучим требуемые параметры.
Более подробная информация может быть найдена на страницах man по halcmd "man halcmd" в окне терминила. Чтобы увидеть конфигурацию HAL и проверить статус пинов и параметров используйте окно HAL Configuration в меню Machine в AXIS. Чтобы наблюдать статус пинов откройте вкладку Watch и нажминте на пин, который вы хотите просматривать и он добавится в окно Watch.
 
  
[attachment=0:2419d50p]EMC2 окно настройки HAL.jpg[/attachment]
+
loadrt [KINS]KINEMATICS
 +
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
 +
loadrt hal_parport cfg="0xe000 out"
 +
setp parport.0.reset-time 5000
 +
loadrt stepgen step_type=0,0,0
 +
loadrt pwmgen output_type=1
  
Рисунок 6.1: Окно HAL Configuration.
+
В блоке выше нас интересует строка loadrt hal_parport cfg="0xe000 out", в ней указан адрес LPT порта в системе, для того, чтобы узнать какой адрес требуется сюда вписать обратимся к разделу "Настройка адреса ввода\вывода LPT-PCI".
  
 +
addf parport.0.read base-thread
 +
addf stepgen.make-pulses base-thread
 +
addf pwmgen.make-pulses base-thread
 +
addf parport.0.write base-thread
 +
addf parport.0.reset base-thread
 +
addf stepgen.capture-position servo-thread
 +
addf motion-command-handler servo-thread
 +
addf motion-controller servo-thread
 +
addf stepgen.update-freq servo-thread
 +
addf pwmgen.update servo-thread
 +
net spindle-cmd-rpm => pwmgen.0.value
 +
net spindle-on <= spindle.0.on => pwmgen.0.enable
 +
net spindle-pwm <= pwmgen.0.pwm
 +
setp pwmgen.0.pwm-freq 988.0
 +
setp pwmgen.0.scale 24000
 +
setp pwmgen.0.offset 0.02
 +
setp pwmgen.0.dither-pwm true
 +
net spindle-cmd-rpm    <= spindle.0.speed-out
 +
net spindle-cmd-rpm-abs <= spindle.0.speed-out-abs
 +
net spindle-cmd-rps    <= spindle.0.speed-out-rps
 +
net spindle-cmd-rps-abs <= spindle.0.speed-out-rps-abs
 +
net spindle-at-speed    => spindle.0.at-speed
 +
net spindle-cw <= spindle.0.forward
 +
net spindle-ccw <= spindle.0.reverse
  
 +
В данном блоке обратим внимание на строки  setp pwmgen.0.pwm-freq 988.0, setp pwmgen.0.scale 24000, setp pwmgen.0.offset 0.02.
 +
Изменение этих параметров позволяет нам настроить соответствие реального значения оборотов шпинделя и значения оборотов в процентах, которое задается в LinuxCNC пользователем.
 +
В строке setp pwmgen.0.scale 24000 задается максимальное количество оборотов шпинделя за 1 минуту.
 +
В строке setp pwmgen.0.pwm-freq 988.0 задается частота генерации импульсов, которые отправляются в частотный преобразователь.
 +
В строке pwmgen.0.offset 0.02 задается смещение рабочего цикла. Увеличение данного значения дает увеличение оборотов шпинделя при одном и том же значении % в LinuxCNC. Уменьшение - соответственно наоборот дает уменьшение оборотов.
  
=== 6.1.1 loadrt ===
+
net xstep          => parport.0.pin-02-out
Команда "loadrt" загружает компонент HAL реального времени. Функции компонента реального времени должны быть добавлены в поток, чтобы они обновлялись со скоростью потока. Вы не можете загрузить компонент пользовательского пространства в пространство реального времени.
+
setp parport.0.pin-02-out-reset 1
 +
net xdir            => parport.0.pin-03-out
 +
setp parport.0.pin-03-out-invert 1
  
Синтакс и пример:
+
net ystep          => parport.0.pin-04-out
 +
setp parport.0.pin-04-out-reset 1
 +
net ydir            => parport.0.pin-05-out
 +
setp parport.0.pin-05-out-reset 1
  
''loadrt <component> <options>''
+
net zstep          => parport.0.pin-06-out
 +
setp parport.0.pin-06-out-reset 1
 +
net zdir            => parport.0.pin-07-out
 +
setp parport.0.pin-07-out-reset 1
  
loadrt mux4 count=1
+
В блоках выше настраиваются параметры осей X,Y,Z. Разберем на примере первого блока (ось X).
 +
net xstep          => parport.0.pin-02-out  -  В данной строке мы задаем номер пина LPT, к которому подключен сигнал STEP от драйвера. Тоесть 02 - номер пина LPT.
 +
setp parport.0.pin-02-out-reset 1   -  Задает режим работы пина (он может быть прямым или инвертированным). Для сигнала STEP инверсия не требуется, поэтому в этой строке ничего кроме номера пина LPT менять не надо.
 +
net xdir            => parport.0.pin-03-out  -  В данной строке мы задаем номер пина LPT, к которому подключен сигнал DIR от драйвера. Тоесть 03 - номер пина LPT.
 +
setp parport.0.pin-03-out-reset 1  -  Задает режим работы пина (он может быть прямым или инвертированным). Для сигнала DIR может потребоваться инверсия - это изменит направление движения двигателя. Для инверсии потребуется заменить reset на invert. Что касается номера пина LPT, тут всё остается как и в пояснении выше (если меняем номер пина сигнала DIR, то тут тоже потребуется поменять).
  
 +
Остальные блоки (для других осей) настраиваются полностью аналогично. Переходим далее.
  
 +
net spindle-cw      => parport.0.pin-16-out
 +
setp parport.0.pin-16-out-invert 1
  
=== 6.1.2 addf ===
+
В первой строке задается пин LPT для запуска шпинделя в прямом напрвлении.
Команда "addf" добавляет компонент реального времени в поток. Вам необходимо добавить функцию из компонента реального времени HAL в поток, чтобы функция обновлялась со скоростью потока. Если вы использовали Stepper Config Wizard чтобы создать ваши файлы конфигурации, у вас будет два потока:
+
В второй строке задается инверсия для этого сигнала.
 +
Если требуется запускать шпиндель в обратном направлении используем spindle-ccw
 +
 +
net spindle-pwm    => parport.0.pin-14-out
 +
setp parport.0.pin-14-out-invert 1
  
 +
В первой строке этого блока задается пин LPT для ШИМ управления шпинделя.
 +
Во второй строке задается режим работы ШИМ/ЧИМ. Для наших задач этот пин должен быть инвертирован.
  
* base-thread (высокоскоростной поток): этот поток оперирует с элементами, которым нужен быстрый отклик, такими как создание импульсов шагов и запись и чтение параллельного порта.
+
net home-x      <= parport.0.pin-10-in
 +
net home-y      <= parport.0.pin-11-in
 +
net home-z      <= parport.0.pin-13-in
 +
net estop-ext      <= parport.0.pin-15-in
 +
net probe-in => motion.probe-input
 +
net probe-in <= parport.0.pin-12-in-not
  
* servo-thread (низко скоростной поток): этот поток оперирует элементами, которые могут допускать более медленный отклик, например контроллер перемещений, ClassicLadder, и обработчик команд перемещения.
+
В данном блоке настраиваются входные пины LPT для датчиков по осям, пин кнопки аварийной остановки и пин датчика высоты инструмента. Стоит заметить, что инверсия входных пинов производится с помощью кострукции -not (Примером является последняя строка в блоке)
Синтакс и пример:
 
  
''addf <component> <nowiki><thread></nowiki>''
+
setp stepgen.0.position-scale [JOINT_0]SCALE
 +
setp stepgen.0.steplen 1
 +
setp stepgen.0.stepspace 0
 +
setp stepgen.0.dirhold 10000
 +
setp stepgen.0.dirsetup 10000
 +
setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL
 +
net xpos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd
 +
net xpos-fb stepgen.0.position-fb => joint.0.motor-pos-fb
 +
net xstep <= stepgen.0.step
 +
net xdir <= stepgen.0.dir
 +
net xenable joint.0.amp-enable-out => stepgen.0.enable
 +
net home-x => joint.0.home-sw-in
 +
net min-home-x => joint.0.neg-lim-sw-in
  
addf mux4 servo-thread
+
setp stepgen.1.position-scale [JOINT_1]SCALE
 +
setp stepgen.1.steplen 1
 +
setp stepgen.1.stepspace 0
 +
setp stepgen.1.dirhold 10000
 +
setp stepgen.1.dirsetup 10000
 +
setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL
 +
net ypos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd
 +
net ypos-fb stepgen.1.position-fb => joint.1.motor-pos-fb
 +
net ystep <= stepgen.1.step
 +
net ydir <= stepgen.1.dir
 +
net yenable joint.1.amp-enable-out => stepgen.1.enable
 +
net home-y => joint.1.home-sw-in
 +
net min-home-y => joint.1.neg-lim-sw-in
  
 +
setp stepgen.2.position-scale [JOINT_2]SCALE
 +
setp stepgen.2.steplen 1
 +
setp stepgen.2.stepspace 0
 +
setp stepgen.2.dirhold 10000
 +
setp stepgen.2.dirsetup 10000
 +
setp stepgen.2.maxaccel [JOINT_2]STEPGEN_MAXACCEL
 +
net zpos-cmd joint.2.motor-pos-cmd => stepgen.2.position-cmd
 +
net zpos-fb stepgen.2.position-fb => joint.2.motor-pos-fb
 +
net zstep <= stepgen.2.step
 +
net zdir <= stepgen.2.dir
 +
net zenable joint.2.amp-enable-out => stepgen.2.enable
 +
net home-z => joint.2.home-sw-in
 +
net min-home-z => joint.2.neg-lim-sw-in
  
 +
Как мы можем видеть, в блоках выше настраиваются параметры шаговых двигателей по осям. Нас интересуют только идентичные для блоков выше параметры steplen,stepspace, dirhold, dirsetup. Они задаются в соответствии с используемыми драйверами, по-умолчанию заданы эти параметры.
  
=== 6.1.3 loadusr ===
+
net estop-out <= iocontrol.0.user-enable-out
Команда "loadusr" компонент HAL пользовательского пространства. Программы пользовательского пространства это отдельные процессы, который опционально может общаться с другими компонентами HAL через пины и параметры. Вы не можете загрузить компоненты реального времени в пользовательское пространство.
+
net estop-ext => iocontrol.0.emc-enable-in
  
Флаги могут быть один или несколько из следующего:
+
В данном блоке настраивается блокировка работы кнопкой аварийной остановки, тоесть если кнопка нажата, то мы не можем управлять станком. Если нам требуется временно отключить эту кнопку (для тестирования), то для этого потребуется заменить вторую строку на net estop-out => iocontrol.0.emc-enable-in.
  
 +
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
  
* '''-W''' подождать пока компонент станет готов. Предполагается что компонент имеет такое же имя как и первый аргумент команды.
+
Блок выше отвечает за использование автоматической или ручной смены инструмента, по умолчанию используется ручная, поэтому изменения не потребуются.
  
* '''-Wn <name>''' подождать компонент, с именем <name>.
+
=Работа с утилитами HAL=
  
* '''-w''' подождать до выхода программы.
+
===HALSHOW===
 +
Данная утилита позволяет работать со всеми переменными, пинами, сигналами системы.
  
* '''-i''' игнорировать возвращаемое значение программы (вместе с -w)
+
Для наших задач удобно просматривать состояния пинов.
Синтакс и примеры:
 
  
''loadusr <component> <options>''
+
Для запуска требуется перейти в раздел меню «Станок в LinuxCNC» и выбрать пункт «Показать установки HAL».
  
loadusr halui
+
Далее мы должны увидеть окно HALSHOW.
  
loadusr -Wn spindle gs2_vfd -n spindle
+
[[Файл:Halshow.png|border|400px]]<br>
  
на английском языке это значит "loadusr подождать компонент с именем spindle gs2_vfd имя spindle."
+
В левой колонке мы можем найти интересующий нас пин. Откроем ветку дерева Pins->parport->0.
 +
Для просмотра состояний пинов щелкнем по вкладке "Следить" и выберем из нашей ветки нужные пины для просмотра двойным кликом по ним.
  
("loadusr wait for name spindle component gs2_vfd name spindle.")
+
[[Файл:Halshow2.png|border|400px]]<br>
  
"-n spindle" это часть компонента gs2_vfd, а не команды loadusr.
+
Теперь, когда мы видим состояния нужных нам пинов, можно проверить работу утилиты физически замыкая датчики.
  
 +
=Приложения=
 +
==Ссылки на дополнительную документацию==
 +
Вы можете найти полное описание системы EMC2 перейдя по ссылке http://linuxcnc.org/docs/html/
  
 +
Список компонентов HAL http://linuxcnc.org/docs/2.7/html/hal/components.html
  
=== 6.1.4 net ===
+
Описание realtime компонентов HAL http://linuxcnc.org/docs/html/hal/rtcomps.html
Команда "net" создает связь ("connection") между сигналом и одним или несколькими пинами. Если сигнал не существует, net создает новый сигнал. Это заменяет необходимость использования команды newsig. Индикаторы направления "<= и =>" нужны только для того, чтобы людям было проще проследить за логикой и не используются командой net.
 
 
 
Синтакс и пример:
 
 
 
''net <signal-name> <pin-name> <opt-direction> <opt-pin-name>''
 
 
 
net both-home-y <= parport.0.pin-11-in
 
 
 
Каждый сигнал может иметь только один источник (пин HAL "Dir out") и столько читателей (пин HAL "Dir in"), сколько вам хочется. В колонке Dir окна HAL Configuration вы можете какие пины являются "in" (ввод), а какие "out" (вывод). Следующий рисунок показывает "направление" сигнала от источника, через сигнал и затем на ввыводы к "читателям".[attachment=0:396jzbvq]EMC2 инструкция HAL направление сигнала.jpg.jpeg[/attachment]
 
 
 
Рис. 6.2: Направление сигнала.
 
 
 
Этот пример показывает сигнал '''xStep''' с источником '''stepgen.0.out''' и двумя читателями parport.0.pin-02-out, parport.0.pin-08-out. Проще говоря, значение '''stepgen.0.out'''посылается сигналу '''xStep''' и это значение затем посылается на '''parport.0.pin-02-out''' и '''parport.0.pin-08-out'''
 
 
 
 
 
          сигнал      источник                назначение              назначение
 
 
 
      net xStep stepgen.0.out => parport.0.pin-02-out parport.0.pin-08-out
 
 
 
 
 
Т.к. сигнал xStep содержит значение stepgen.0.out (источника) вы можете использовать этот же сигнал еще раз, чтобы послать значение другому читателю. Чтобы это сделать просто используйте сигнал с читателями на другой строке.
 
 
 
''net xStep <= stepgen.0.out => parport.0.pin-02-out''
 
 
 
net xStep => parport.0.pin-08-out
 
 
 
Так называемые I/O пины (пины ввода/вывода), такие как пин index-enable, не следуют этому правилу.
 
 
 
 
 
 
 
=== 6.1.5 setp ===
 
Команда "setp" устанавливает значение пина или параметра. Допустимые значения будут зависеть от типа пина или параметра. Если типы данных на совпадают - это ошибка.
 
 
 
Некоторые компоненты имеют параметры которые должны быть установлены перед использованиемю Параметры могут быть установлены перед использованием или во время использования, как необходимо. Вы не можете использовать setp на пине, который присоединен к сигналу.
 
 
 
Синтакс и пример:
 
 
 
''setp <pin/parameter-name> <value>''
 
 
 
setp parport.0.pin-08-out TRUE
 
 
 
 
 
 
 
=== 6.1.6 unlinkp ===
 
Команда "unlinkp" отсоединяет пин от присоединенного сигнала. Если не одного сигнала не присоединено с пином до запуска этой команды, ничего не происходит.
 
 
 
Синтакс и пример:
 
 
 
''unlinkp <pin-name>''
 
 
 
unlinkp parport.0.pin-02-out
 
 
 
 
 
 
 
=== 6.1.7 Устаревшие Команды ===
 
 
 
==== 6.1.7.1 linksp ====
 
Команда "linksp" создает соединение между сигналом и одним пином.
 
 
 
Синтакс и пример:
 
 
 
''linksp <signal-name> <pin-name>''
 
 
 
linksp X-step parport.0.pin-02-out
 
 
 
''The "linksp" command has been superseeded by the "net" command.''
 
 
 
 
 
 
 
==== 6.1.7.2 linkps ====
 
Команда "linkps" создает связь между одним пином и одним сигналом. Это тоже самое, что и linksp но аргументы поменяны местами.
 
 
 
Синтакс и пример:
 
 
 
''linkps <pin-name> <signal-name>''
 
 
 
linkps parport.0.pin-02-out X-Step
 
 
 
Команда "linkps" была заменена командой "net".
 
 
 
 
 
 
 
==== 6.1.7.3 newsig ====
 
Команда "newsig" создает новый сигнал HAL с именем <signame> и типом данных <type>. Тип должен быть одним из "bit", "s32", "u32" или "float". Ошибка если <signame> уже существует.
 
 
 
Синтакс и пример:
 
 
 
''newsig <signame> <type>''
 
 
 
newsig Xstep bit
 
 
 
Более подробную информацию можно найти в руководстве по HAL на страницах man (man halrun).
 
 
 
 
 
 
 
== 6.2 Hal Data ==
 
 
 
=== 6.2.1 Bit ===
 
Значение bit или on, или off.
 
 
 
 
 
* значения bit = true или 1 и false или 0 (True, TRUE, true все варианты допустимы).
 
 
 
 
 
=== 6.2.2 Float ===
 
"float" это число с плавающей запятой. Другими словами запятая дробной части может перемещаться куда угодно.
 
 
 
 
 
* значения float = значение 32 битного числа с плавающей запятой, с приблизительно 24 битами разрешения и более 200 битами динамического диапазона.
 
Более подробно о числа с плавающей запятой см. http://en.wikipedia.org/wiki/Floating_point .
 
 
 
 
 
 
 
=== 6.2.3 s32 ===
 
Число "s32" это целое число, которое может быть отрицательным или положительным.
 
 
 
 
 
* Значения s32 values = целые числа от -2147483648 до 2147483647
 
 
 
 
 
=== 6.2.4 u32 ===
 
Число "u32" это целое только положительное число.
 
 
 
 
 
* Значения u32 = целые числа от 0 до 4294967295
 
 
 
 
 
 
 
 
 
== 6.3 Файлы Hal ==
 
Если вы использовали Stepper Config Wizard чтобы создать ваши конфигурационные файлы, у вас будет вплоть до 3 файлов HAL в вашей конфигурационной директории.
 
 
 
 
 
* '''my-mill.hal''' (Если ваш файл когфигурации называется "my-mill") Этот файл загружается первым и не должен быть изменен, если вы использовали Stepper Config Wizard.
 
 
 
* '''custom.hal''' Этот файл загружается перед запуском GUI. Здесь располагаются ваши собственные команды HAL, которые вы хотите загрузить перед загрузкой GUI.
 
 
 
* '''custom_postgui.hal''' Этот файл загружается после GUI. Здесь располагаются ваши пользовательские команды HAL, которые вы хотите загрузить после загрузки GUI. Все команды HAL которые используют pyVCP виджеты должны быть помещены сюда.
 
 
 
 
 
== 6.4 Компоненты HAL ==
 
Два параметра автоматическ добавляются к каждому компоненту HAL, когда он создается. Эти параметры позволяют наблюдать за временем исполнения компонента.
 
 
 
 
 
* .time
 
 
 
* .tmax
 
Time это количество циклов процессора которые потребовались, чтобы выполнить функцию.
 
 
 
Tmax это максимальное количество тактов процессора, которое потребовалось для того, чтобы выполнить функцию. Tmax это параметр типа read/write (чтение и запись) поэтому пользователь может выставить его в 0, чтобы избавится от больших значений при инициализации функции во время первого запуска.
 
 
 
 
 
 
 
== 6.5 Логические компоненты ==
 
Hal содержит несколько логических компонентов реального времени. Логические компоненты следуют "таблице истинности", которая задает что подавать на вывод для каждого данного значения входов. Обычно, это манипуляторы битов и они следуют таблицам истинности электрических логических вентилей.
 
 
 
 
 
 
 
=== 6.5.1 and2 ===
 
Компонент "and2" это вентиль "и" ("and") с двумя вводами. Таблица истинности ниже показывает вывод основанный на любой комбинации вводов.
 
 
 
 
 
'''Синтакс'''
 
 
 
''and2 [count=N] or [names=name1[,name2...]]''
 
 
 
 
 
'''Функции'''
 
 
 
''and2.n''
 
 
 
 
 
'''Пины'''
 
 
 
'''and2.N.in0''' (bit, in)
 
 
 
'''and2.N.in1''' (bit, in)
 
 
 
'''and2.N.out''' (bit, out)
 
 
 
 
 
'''Таблица истинности'''
 
 
 
 
 
| in0 | in1 | out
 
 
 
|False|False|False
 
 
 
|True |False|False
 
 
 
|False|True |False
 
 
 
|True |True |True
 
 
 
=== 6.5.2 not ===
 
Компонент "not" ("не") это битовый инвертор.
 
 
 
 
 
'''Синтакс'''
 
 
 
''not [count=n] or [names=name1[,name2...]]''
 
 
 
 
 
'''Функции'''
 
 
 
not.all
 
 
 
not.n
 
 
 
 
 
'''Пины'''
 
 
 
'''not.n.in''' (bit, in)
 
 
 
'''not.n.out''' (bit, out)
 
 
 
 
 
'''Таблица истинности'''
 
 
 
|in|out
 
 
 
|True|False
 
 
 
|False|True
 
 
 
=== 6.5.3 or2 ===
 
Компонент "or2" это двух вводовый вентиль "или" ("or").
 
 
 
 
 
'''Синтакс'''
 
 
 
''or2[count=n] or [names=name1[,name2...]]''
 
 
 
 
 
'''Функции'''
 
 
 
or2.n
 
 
 
 
 
'''Пины'''
 
 
 
'''or2.n.in0''' (bit, in)
 
 
 
'''or2.n.in1''' (bit, in)
 
 
 
'''or2.n.out''' (bit, out)
 
 
 
 
 
Таблица истинности
 
 
 
|in0|in1|out
 
 
 
|True|False|True
 
 
 
|True|True|True
 
 
 
|False|True|True
 
 
 
|False|False|False
 
 
 
=== 6.5.4 xor2 ===
 
Компонент "xor2" это двух вводовый вентиль "исключающий или" ("xor").
 
 
 
 
 
'''Синтаксис'''
 
 
 
''xor2[count=n] or [names=name1[,name2...]]''
 
 
 
 
 
'''Функции'''
 
 
 
xor2.n
 
 
 
 
 
'''Пины'''
 
 
 
'''xor2.n.in0''' (bit, in)
 
 
 
'''xor2.n.in1''' (bit, in)
 
 
 
'''xor2.n.out''' (bit, out)
 
 
 
 
 
'''Таблица истинности'''
 
 
 
|in0|in1|out
 
 
 
|True|False|True
 
 
 
|True|True|False
 
 
 
|False|True|True
 
 
 
|False|False|False
 
 
 
=== 6.5.5 Примеры использования логических компонентов HAL ===
 
Пример "and2" соединяющего два ввода в один вывод:
 
 
 
''loadrt and2 count=1''
 
 
 
''addf and2.0 servo-thread''
 
 
 
''net my-sigin1 and2.0.in0 <= parport.0.pin-11-in''
 
 
 
''net my-sigin2 and2.0.in1 <= parport.0.pin-12-in''
 
 
 
''net both-on parport.0.pin-14-out <= and2.0.out''
 
 
 
В примере выше, одна копия and2 загружается в пространство реального времени и добавляется к потоку серво. Затем пин 11 параллельного порта соединяется с битом in0 вентиля and. Затем, pin 12 подсоединяется к биту in1 вентиля and. И, наконец, мы подсоединяем бит вывода and2 к пину 14 параллельного порта. Таким образом, согласно таблице истинности, для and2 если pin 11 и pin 12 включены, тогда пин 14 будет включен.
 
 
 
== 6.6 Компоненты преобразования ==
 
 
 
=== 6.6.1 weighted_sum (взвешенная сумма) ===
 
weighted_sum конвертирует группу ьитов в целое число. Преобразование это сумма "весов" битов, которые положительны. Это схоже с кодированием десятичного числа в двоичной системе, но с большим количеством опций. Бит "hold" останавливает обработку входов, так чтобы "сумма" не менялась.
 
 
 
Следующий синтакс используется для загрузки компонента weighted_sum.
 
 
 
''loadrt weighted_sum wsum_sizes=size[,size,...]''
 
 
 
Создает группы взвешенных сумм, каждая с данным количеством входных битов (размером). Чтобы обновить weighted_sum вам нужно присоединить process_wsums к потоку.
 
 
 
''addf process_wsums servo-thread''
 
 
 
Это обновляет компонент weighted_sum.
 
 
 
В следующем примере вырезанном из окна HAL Configuration из Axis биты "0" и "2" равны True и нет отступа. Вес пина 0 равен 1 и пина 2 равен 4, поэтому сумма равна 5.[attachment=0:972frpa3]EMC HAL configuration руководство.png[/attachment]
 
 
 
 
 
 
 
== 6.7 Halshow ==
 
Скрипт halshow может помочь вам разобраться с работой HAL. Это очень специализированная система и она должна быть подключена к работающему HAL. Она не может работать автономно, потому что она использует способность HAL сообщать о том, что он знает о себе через интерфейс библиотеки halcmd. Каждый раз когда halshow запускается с другой конфигурацией EMC2, он будет другим. Как мы скоро увидим, способность HAL документировать самого себя является одной из ключевых возможностей для построения эффективного CNC системы.
 
 
 
 
 
 
 
=== 6.7.1 Запуск Halshow ===
 
Halshow находится в меню AXIS в Machine/Show Hal Configuration.
 
 
 
Halshow находится в меню TkEMC в Scripts/Hal Show.
 
 
 
 
 
 
 
=== 6.7.2 Hal Tree Area (Дерво HAL) ===
 
В левой части дисплея, как показано на изображении 6.4 находится окно дерева, что-то подобное вы можете увидеть в некоторых файловых менеджерах. Справа находится панель с вкладками для "SHOW" (показа) и "WATCH" (наблюдения).
 
 
 
Рис. 6.4: схема Halshow.
 
 
 
[attachment=0:3qbbyr9c]EMC HAL configuration halshow.png[/attachment]
 
 
 
Дерево показывает все основные части HAL. Перед каждым элементом ест маленький знак плюса (+) или минуса (-) в квадратике. Нажатие на плюс развернет элемент дерева чтобы отобразить что находится в нем. Если в квадрате показан минус, нажатие на него свернет список.
 
 
 
Вы также можете сворачивать / разворачивать дерево использую меню Tree View в верхнем левом крае экрана. Там вы наедете: Expand Tree (развернуть дерево), Collapse Tree (свернуть дерево), Expand Pins (развернуть пины), Expand Parameters (развернуть параметры), Expand Signals (развернуть сигналы) и Erase Watch (стереть слежения).
 
 
 
(Заметьте, что Erase Watch сотрет все ранее установленные слежения, вы не можете удалить только одно слежение.)
 
 
 
 
 
 
 
=== 6.7.3 Hal Show Area ===
 
Нажатие на название элемента, например, слово "компоненты", покажет вам (во вкладке "Show") все, что HAL знает о содержимом этого элемента. Рис. 6.4 показывает листинг точно такой же, какой вы увидите если нажмете "Компоненты" во время того, как вы работаете со стандартной m5i20 серво платой. Информационный дисплей точно такой же как в традиционных текстовых инструментах анализа HAL. Преимущество halshow в том, что есть доступ при помощи мыши.
 
 
 
[attachment=1:1ymbv3f0]EMC2 настройка HAL show menu.png[/attachment]
 
 
 
Рис. 6.5. Меню Show.
 
 
 
Если мы присмотримся поближе к окну дерева мы можем увидеть, что шесть главных частей HAL могут быть развернуты как минимум на один уровень. Если эти уровни развернуты, вы можете получить более сфокусированный ответ, когда вы кликате самом правом элементе дерева. Вы увидите, что некоторые пины и параметры HAL показывают более одного значения. Это происходит из-за самой природы поисковых операций самого halcmd. Если вы ищете один пин вы можете получить два, например:
 
 
 
''Component Pins:''
 
    Owner Type Dir Value Name
 
 
 
    06 bit -W TRUE parport.0.pin-10-in
 
 
 
    06 bit -W FALSE parport.0.pin-10-in-not
 
Имя второго пина содержит имя первого целиком.
 
 
 
Под пространством просмотра (Show) есть набор виджетов которые позволяю вам "поиграть" с работающим HAL. Команды которые вы введете здесь и эффект который они произведут на работающий HAL не сохраняются. Они будут выполняться пока работает EMC2 но исчезнут как только EMC2 будет закрыт.
 
 
 
Окно ввода "Test Hal Command:" принимает любую из перечисленных команду halcmd. Они включают:
 
 
 
 
 
* loadrt, unloadrt (загрузить/выгрузить real-time модуль)
 
 
 
* loadusr, unloadusr (загрузить/выгрузить компонент пользовательского пространства)
 
 
 
* addf, delf (добавить/удалить функцию к/из real-time потока)
 
 
 
* net (создать связь между двумя или более элементами)
 
 
 
* setp (установить значение параметра (или пина))
 
Этот маленький редактор будет выполнять команду каждый раз когда вы будете нажимать <enter> или кнопку выполнить (execute). Сообщение об ошибке от halcmd будет появляться ниже поля ввода, если команды сформированы не правильно. Если вы не уверены как настроить правильную команду вам будет необходимо еще раз прочитать документацию на halcmd и на специфические модули, с которыми вы работаете.
 
 
 
Давайте используем редактор, для того чтобы добавить дифференциальный модуль в HAL и присоединить его к положению оси, чтобы мы могли наблюдать скорость изменения положения, т.е., ускорение. Сначала нам нужно загрузить модуль hal под названием blocks, добавить его в поток серво, затем подключить его к пину положения оси. Как только это сделано мы можем наблюдать вывод дифференциала в halscope. Итак, приступим.
 
 
 
''loadrt blocks ddt=1''
 
 
 
Теперь посмотрим на ноду компонентов, вы должны увидеть blocks где-то там.
 
 
 
''Loaded HAL Components:''
 
      ID Type Name
 
 
 
      10 User halcmd29800
 
 
 
      09 User halcmd29374
 
 
 
      08 RT blocks
 
 
 
      06 RT hal_parport
 
 
 
      05 RT scope_rt
 
 
 
      04 RT stepgen
 
 
 
      03 RT motmod
 
 
 
      02 User iocontrol
 
Конечно же это так. Обратите внимание, что ее идентификационный номер 08. Затем, нам нужно нужно определить какие функции доступны в этом модуле, поэтому мы смотрим в раздел функции:
 
 
 
''Exported Functions:''
 
      Owner CodeAddr Arg FP Users Name
 
 
 
      08 E0B97630 E0DC7674 YES 0 ddt.0
 
 
 
      03 E0DEF83C 00000000 YES 1 motion-command-handler
 
 
 
      03 E0DF0BF3 00000000 YES 1 motion-controller
 
 
 
      06 E0B541FE E0DC75B8 NO 1 parport.0.read
 
 
 
      06 E0B54270 E0DC75B8 NO 1 parport.0.write
 
 
 
      06 E0B54309 E0DC75B8 NO 0 parport.read-all
 
 
 
      06 E0B5433A E0DC75B8 NO 0 parport.write-all
 
 
 
      05 E0AD712D 00000000 NO 0 scope.sample
 
 
 
      04 E0B618C1 E0DC7448 YES 1 stepgen.capture-position
 
 
 
      04 E0B612F5 E0DC7448 NO 1 stepgen.make-pulses
 
 
 
      04 E0B614AD E0DC7448 YES 1 stepgen.update-freq
 
Здесь мы смотрим на параметр Owner (владелец) №08 и видим, что blocks экспортировал функцию под названием ddt.0 в поток серво и он будет выполнять свои математические расчеты каждый раз, когда поток будет обновляться. Еще раз смотрим на команду addf и видим, то она использует три аргумента, такие как эти:
 
 
 
''addf <functname> <threadname> [<position>]''
 
 
 
Мы уже знаем, что functname=ddt.0, поэтому давайте найдем название потока threadname развернув элемент thread в дереве. Здесь мы видим два потока, servo-thread и base-thread. Положение ddt.0 в потоке не критично. Поэтому мы добавляем функцию ddt.0 к потоку серво.
 
 
 
''addf ddt.0 servo-thread''
 
 
 
Это только для просмотра, поэтомы мы оставляем position пустым и получаем последнюю позицию в потоке. Рис. 6.6 показывает состояние halcmd после того, как эта команда была выполнена.
 
 
 
[attachment=0:1ymbv3f0]EMC2 настройка HAL addf function.png[/attachment]
 
 
 
Рис 6.6. Команда Addf
 
 
 
Затем нам нужно подсоединить этот блок к чему-нибудь. Но как мы узнаем какие пины доступны? Ответ - посмотреть в разделе пины. В нем мы находим ddt и видим это:
 
 
 
''Component Pins:''
 
      Owner Type Dir Value Name
 
 
 
      08 float R- 0.00000e+00 ddt.0.in
 
 
 
      08 float -W 0.00000e+00 ddt.0.out
 
Это выглядит достаточно простым для понимания, но какой пин или сигнал мы хотим присоединить к нему? Это может быть пин axis, пин stepgen или сигнал. Мы видим следующее, когда посмотрим на axis.0:
 
 
 
''Component Pins:''
 
      Owner Type Dir Value Name
 
 
 
      03 float -W 0.00000e+00 axis.0.motor-pos-cmd ==> Xpos-cmd
 
Выглядит так, что Xpos-cmd должен быть хорошим сигналом для использования. Возвращаемся в редактор, где вводим следующую команду:
 
 
 
''linksp Xpos-cmd ddt.0.in''
 
 
 
Теперь, если мы посмотрим на сигнал Xpos-cmd используя элемент дерева, мы увидим то, что мы сделали:
 
 
 
''Signals:''
 
      Type Value Name
 
 
 
      float 0.00000e+00 Xpos-cmd
 
 
 
      <== axis.0.motor-pos-cmd
 
 
 
      ==> ddt.0.in
 
 
 
      ==> stepgen.0.position-cmd
 
Мы видим, что сигнал приходит от axis.o.motor-pos-cmd и идет к обоим ddt.0.in и stepgen.0.position-
 
 
 
cmd. Присоединив блок к сигналу мы избежали все трудности с нормальным течением этой команды перемещения.
 
 
 
Hal Show Area использует halcmd чтобы понять что происходит в запущенном HAL. Он дает вам полную информацию о том, что определенно. Он также обновляет информацию каждый раз, когда вы выполняете команды в панеле маленького редактора изменяя HAL. Бывают случаи, когда вы хотите чтобы отображался другой набор данных без всей лишней информации доступной в этой области. В этом случае пригодится Hal Watch Area.
 
 
 
 
 
 
 
=== 6.7.4 Hal Watch Area ===
 
Нажатие на вкладку Watch, открывает пустой контейнер. Вы можете добавлять сигналы и пины в этот контейнер и наблюдать их значения.<sup>1</sup> Вы можете добавлять сигналы или пины когда вкладка Watch активна нажимая на название сигнала или пина. Рис. 6.7 показывает этот контейнер с несколькили битовыми сигналами. Эти сигналы включают в себя пины enable-out для первых трех осей и два из трех сигналов estop iocontrol. Отметьте, что TkEMC показывает, что находится в состоянии ESTOP RESET. Пины amp-enable не включаются пока не включен станок.
 
 
 
<sup>1</sup> Скорость обновления наблюдений гораздо медленнее, чем у Halmeter и Halscope. Если вам нужно хорошее разрешение по времени сигналов, эти инструменты будут более эффективны.
 
 
 
[attachment=0:7gmped7j]EMC2 настройка HAL watch.png[/attachment]
 
 
 
Watch отображает значения типа бит используя цветные круги, изображающие светодиоды. Они показываются темно-коричневыми когда сигнал или пин равен False, и светло желтыми, когда сигнал равен true. Если вы выберете сигнал или пин, тип которого не "бит", watch будет отображать его как цифровое значение.
 
 
 
Watch позволит вам быстро протестировать ваши датчики или посмотреть влияние изменений, которые вы сделали в EMC использую графический интерфейс. Частота обновления Watch слегка медленновата для того, чтобы увидеть импульсы шагов шаговых двигателей, но вы можете использовать его для этих целей, если вы двигаете ось очень медленно или на маленькие дистанции. Если вы использовали IO_Show в EMC, страница Watch в halshow может быть настроена для наблюдения за параллельным портом очень похоже на то как это делал IO_Show.
 
 
 
=Приложения=
 
==Конфигурационные файлы LinuxCNC для оборудования компании CNC-Technology==
 
Данные конфигурационные файлы созданы для работы с оборудованием CNC-Technology под управлением платы опто-развязки LPT-DPTR 1.03.
 
{| class="wikitable"
 
|+Конфигурационные файлы
 
|-
 
|Модель станка
 
|Конфигурационные файлы
 
|-
 
|Cutter CH
 
|[https://yadi.sk/d/Hnqn_6gBMBYoKg Download]
 
|-
 
|Cutter GQ
 
|[https://yadi.sk/d/sKTc7x8gTCZ2KQ Download]
 
|-
 
|Cutter GR
 
|[https://yadi.sk/d/Wp1nBxckgZ5kLw Download]
 
|-
 
|Cutter GT
 
|[https://yadi.sk/d/ue4UlQokbmBBlg Download]
 
|-
 
|Cutter GTL
 
|[https://yadi.sk/d/CQ3S25Gd6q855Q Download]
 
|-
 
|Cutter H
 
|[https://yadi.sk/d/68j97sHRgPJ1zg Download]
 
|-
 
|Cutter HD
 
|[https://yadi.sk/d/NmBbZ1_h7n3d8g Download]
 
|-
 
|Cutter HM
 
|[https://yadi.sk/d/wsh4980lDS2DRA Download]
 
|-
 
|Cutter KTM
 
|[https://yadi.sk/d/34nlyxc8I2NMkQ Download]
 
|-
 
|Cutter ST
 
|[https://yadi.sk/d/ClUF8nRB8-bMTQ Download]
 
|-
 
|Cutter STL
 
|[https://yadi.sk/d/OYh1g25EZ7x0lg Download]
 
|-
 
|Cutter VSK
 
|[https://yadi.sk/d/Uz0kQoB-6HAqFg Download]
 
|}
 
  
 
==Возможные ошибки и методы их устранения==
 
==Возможные ошибки и методы их устранения==

Текущая версия на 16:37, 12 января 2024

Содержание

Введение

В настоящий момент всё оборудование под управлением LinuxCNC поставляется на контроллерах EP7i92.

В LinuxCNC настройка параметров под конкретное оборудование, происходит отлично от большинства популярных систем управления ЧПУ (Mach3 или NC-Studio). Большинство необходимых параметров задаются внесением изменений в текстовые конфигурационные файлы *.hal и *.ini.

Примечание: В составе LinuxCNC есть приложение с графическим интерфейсом пользователя для настройки конфигурации станка (Stepconf), однако, как показывает практика некоторые изменения приходится вносить в конфигурационные файлы вручную. В большинстве случаев в этом нет необходимости. Именно поэтому в данном руководстве вся настройка и внесение изменений происходят через *.hal и *.ini файлы.

Что же такое *.hal и *.ini файлы? Немного теории.

hal - Hardware Abstraction Layer (Слой аппаратных абстракций) - конфигурационный файл Linux, отвечающий за связь аппаратной и программной части станка.
К примеру в данном файле содержится информация: адрес устройства ввода-вывода (PCI-LPT или другой контроллер), назначение портов ввода\вывода функциям системы и др.

ini - файл конфигурации, содержащий настройки системы. К примеру в данном файле содержится информация: скорости, ускорения, количество импульсов на мм, скорость поиска домашнего положения, пределы перемещений и др.

Для удобства освоения материала настоящее руководство разделено на 2 части: справочники по *.hal и *.ini файлам, а также отдельные главы по настройке тех или иных функций (перемещения, шпинделя, датчиков и прочее). Ниже перечислены все необходимые параметры для настройки вашего станка под управлением LPT (в руководстве используется контроллер LPT-DPTR 1.03)

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

В начале определим местоположение наших файлов конфигурации. По умолчанию файлы конфигурации расположены по адресу home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal и home/notroot/linuxcnc/config/Cutter_ST/Cutter_ST.hal. Обратите внимание, в директории config лежат все созданные конфигурации. Конфигурация может отличаться в зависимости от названия станка к примеру, Cutter_GR, мой-станок.hal и другое.

Настройка адреса ввода\вывода LPT-PCI

Настройка системы LinuxCNC для работы с LPT-портом начинается с указания адреса ввода-вывода LPT в вашем ПК. В случае использования материнской платы не имеющего на борту встроенного LPT порта, рекомендуется воспользоваться платой PCI-LPT c чипом CH351Q (ссылка на сайт CNC-Technology).

Для того, чтобы увидеть установленные в системный блок PCI устройства нужно открыть эмулятор терминала и набрать команду:
lspci –vv
В командной строке отобразятся все устройства, доступные операционной системе для работы. Среди них необходимо найти Parallel controller. Необходимый нам Region 0, адрес данного устройства, к примеру c000.

Данный адрес необходимо указать в *.hal файле конфигурации:
linuxcnc/configs/Cutter_ST/ST.hal

В открытом файле Cutter_ST.hal изменить строку loadrt hal_parport cfg=”0x378 out” на loadrt hal_parport cfg=”0xс000 out”, где 0xс000 адрес п0орта pci-платы, который мы определили ранее. Теперь мы можем запустить linuxcnc ярлыком на рабочем столе и убедиться что станок перемещается.

Настройка работы шаговых двигателей

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

Установка пинов в *.hal

Необходимо открыть *.hal файл и убедиться в том, что порты и пины указаны в соответствии с распиновкой LPT. Подробнее смотрите в справочнике по *.hal файлу. Настройка направлений, скоростей и ускорений для каждой из осей.
Детальней рассмотрим назначение пинов для xtep и xdir.
net xstep => parport.0.pin-02-out
net xdir => parport.0.pin-03-out
Данные записи означают, что сигнал Step по оси X будет подаваться на пин 2 LPT-порта, а сигнал Dir по оси X будет подаваться на пин 3 LPT-порта. По аналогии проверяем другие сигналы для LPT.

Кроме этого, для правильной работы шаговых двигателей необходимо выставить параметр SCALE в *.ini файле. SCALE - количество импульсов на мм, параметр прямо-пропорциональный количеству импульсов на оборот шагового двигателя и обратно-пропорциональный шагу винта. Другими словами, если на драйвере выставлено деление шага 1/4, шаговому двигателю требуется 800 импульсов на оборот (т.е. стандартное деление шага 200 умножили на делитель 4), а винт ШВП, установленный на станке, имеет шаг 5 мм, то параметр SCALE = 800 / 5 = 160.

Параметр SCALE указана в *.ini файле, в соответствии с каждой группой для своей оси. К примеру для того, чтобы изменить данный параметр для оси X нужно найти его в группе [JOINT_0]. Аналогично [JOINT_1] для оси Y и [JOINT_2] для оси Z.

Если направление перемещения не совпадает с фактическим, то необходимо удалить строчку setp parport.... для необходимого пина. К примеру, если направление перемещения не совпадает по оси X то в *.hal файле необходимо найти строчку setp parport.0.pin-03-out-invert 1 и её удалить (достаточно сделать её комментарием поставив знак # перед строчкой: #setp parport.0.pin-03-out-invert 1).

Настройка датчиков домашнего положения

Для настройки датчиков необходимо убедиться, что аппаратная и программная часть связаны. Для этого откроем наш *.hal файл и проверим правильность настройки.
net home-x <= parport.0.pin-10-in
net home-y <= parport.0.pin-11-in
net home-z <= parport.0.pin-12-in
net home-a <= parport.0.pin-13-in

Подобным образом происходит связь аппаратной и программной части в области датчиков домашнего положения. Рассмотрев детальнее мы поймешь что pin 10 соответствует входу LimX на плате LPT-DPTR 1.03 и другие входные сигналы соответственно.

После того, как мы установили датчики домашнего положения необходимо проверить их срабатывание через hal-scope или HAL-метр (более подробно см. в главе Hal-scope настоящего руководства).
Необходимо убедиться, что в свободном состоянии т.е. в состоянии когда датчик не сработал состояние в LinuxCNC соответствует FALSE.
Для того, чтобы привести значение всех датчиков к FALSE необходимо изменить значение датчика на in-not.
После того, как все датчики в свободном состоянии соответствуют показанию FALSE, можно приступать к дальнейшей настройке.

Убедитесь, что строки, отвечающие за датчики в *.ini файле верные. Так, к примеру для оси X настройки датчиков хранятся в группе параметров [JOINT_0]:
HOME_OFFSET = 0.00
HOME_SEARCH_VEL = 15.00
HOME_LATCH_VEL = -1.50
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1

Такие же параметры соответствуют осям в группах [JOINT_1] для оси X, [JOINT_1] для оси Z.

Теперь можно вернуть все оси в домашнее положение.
В случае, если одна из осей начинает перемещаться в направлении обратном положению датчика, необходимо изменить направление поиска домашнего положения. Для этого необходимо изменить знак скорости поиска домашнего положения, к примеру:
HOME_SEARCH_VEL = -15.00
HOME_LATCH_VEL = 1.50

Обратите внимание, что также изменяется знак параметра HOME_LATCH_VEL.

Далее необходимо определить минимальные и максимальные пределы (размеры рабочего поля). Для этого обратимся к *.ini файлу. В *.ini файле, для каждой оси присутствует группа параметров AXIS и JOINT. К примеру, для оси X группа [AXIS_X] и [JOINT_0]. В этих группах необходимо изменить параметры MIN_LIMIT и MAX_LIMIT, для минимального и максимального перемещения соответственно. Обратите внимание, что данные параметры повторяются как в группе AXIS, так и в группе JOINT.

Настройка работы шпинделя

Настройка шпинделя как правило состоит из двух частей: настройка автоматического вкл./выкл. шпинделя и настройка генерации ШИМ для управления скоростью вращения шпинделя.

Рассмотрим первую составляющую. Включение - выключение шпинделя простая задача, потому в *.hal файле всего две строки, указывающие на эту функцию. Необходимо убедиться, что в *.hal файле существует связь сигнала spindle-cw с пином, отвечающим за включение.
net spindle-cw => parport.0.pin-16-out
setp parport.0.pin-16-out-invert 1

Далее необходимо убедиться, что точно также подключен сигнал spindle-pwm отвечающий за выход ШИМ.
net spindle-pwm => parport.0.pin-14-out
setp parport.0.pin-14-out-invert 1

Далее, обратим внимание на настройку формирования импульсов ШИМ, который отвечает за регулировку оборотов шпинделя.
setp pwmgen.0.pwm-freq 988.0
setp pwmgen.0.scale 24000
setp pwmgen.0.offset 0.02
setp pwmgen.0.dither-pwm true
Среди них, параметр setp pwmgen.0.pwm-freq 988.0 является несущей частотой ШИМ сигнала, параметр setp pwmgen.0.scale 24000 является максимальной скоростью шпинделя, параметр setp pwmgen.0.offset 0.02 , определяет смещение фактической частоты от заданной (применяется для более точной калибровки) и параметр setp pwmgen.0.dither-pwm true указывает на "метод округления".

Настройка сети и подключение сетевой папки

Настройку общего доступа к папке будем производить на компьютере под управлением ОС Windows. А подключаться к ней будем уже с компьютера с ОС Debian GNU/Linux с LinuxCNC. Создаём папку в Windows где-нибудь, кликаем правой кнопкой мыши, выбираем "Свойства" - "Доступ" и жмём "Расширенная настройка":
Share files windows 1.png
Далее проставляем галочку "Открыть общий доступ к этой папке" и нажимаем "Применить":
Share files windows 2.png
Всё, мы расшарили папку в Windows и к ней можно подключаться. Как же все таки подключиться из Debian к нашей сетевой папке? Откроем файловый менеджер (Thunar). И выберем "Обзор сети".
Без имени.png
Осталось найти сетевую папку в сети и ввести пароль и логин пользователя Windows. Как же подключиться без ввода пароля к Windows папке из Debian? Нужно в Windows открыть "Центр управления сетями и общим доступом", выбрать "Изменить дополнительные параметры общего доступа":
Share files windows 7.png
В пункте "Все сети" в самом низу будет пункт "Общий доступ с парольной защитой":
Share files windows 8.png
Надо отключить общий доступ с парольной защитой и "Сохранить изменения".

Настройка внешней кнопки E-Stop

Для удобства работы чаще всего организовывается внешняя кнопка E-stop (фактически сигналом E-Stop может, более того, должна являться не только кнопка E-stop, но и другие источники сигнала аварии. Такими источниками: драйвера шаговых двигателей имеющих выход Alarm или Fault; преобразователь частоты). Отдельное внимание стоит обратить на то, что в случае использования внешней кнопки E-stop первая функциональная клавиша (соответствующая F1) в LinuxCNC становится привязана к сигналу E-stop, что также является очень удобным.

Для того, чтобы клавиша была функциональна необходимо внести соответствующие изменения в *.hal файл. Привести к данному следующие строки файла:
net estop-ext => parport.0.pin-15-in
net estop-out <= iocontrol.0.user-enable-out
net estop-ext => iocontrol.0.emc-enable-in

Примечание: если при включении система заблокирована, то вероятно дело в том, что входной сигнал имеет неправильное нормальное состояние (NO, NC). В таком случае нужно инвертировать входной сигнал, для этого:
net estop-ext => parport.0.pin-15-in-not

Рекомендации по выбору беспроводного адаптера

Для того, чтобы удобнее организовать работу оператора между рабочим ПК и ПК станка можно организовать локальную сеть. Таким образом отпадет возможность использовать Flash-диски.
Есть несколько способов организовать локальную сеть: проводную и беспроводную. Мы рекомендуем использовать беспроводной адаптер TP-Link TL-WN727N в ввиду надежности, стоимости и легкости установки драйверов в Linux. Драйвера для адаптера TL-WN727N можно скачать по ссылке:
Последовательность установки драйверов:
1. В скачанном архиве находятся руководство по установке и архив с драйвером. Распаковываем архив с драйвером и получаем папку rtl8188EUS_linux_v5.2.2.4_25483.20171222. Распаковывать в любое удобное место.
2. Открываем эмулятор терминала и переходим в папку с драйвером. К примеру, cd home/notroot/rtl8188EUS_linux_v5.2.2.4_25483.20171222.
3. Вводим в терминала make clean
4. Вводим в терминале make1
5. Вводим sudo cp 8188eu.ko lib/modules/[kernel version]/drivers/net/wirieless2
6. Вводим sudo depmode -a
7. Вводим sudo modprobe 8188eu.ko

1. После компиляции командой make в терминале мы увидим сообщения о том, какой файл скомпилирован "8188eu.ko"
2. Версию ядра [kernel version]мы можем увидеть, если пройдем по пути lib/modules/

Справочник параметров *.ini файла

  • .ini - файл конфигурации, в котором хранятся основные настройки конфигурации LinuxCNC под конкретное оборудование. Данный файл располагается в директории: home/user/linuxcnc/configs/ST.ini, где:

user - имя пользователя на вашем ПК
ST*.ini - название вашей конфигурации

Давайте разберем, из чего состоит *.ini файл.

Группа [DISPLAY]

DISPLAY

Имя интерфейса для использования при загрузки текущей конфигурации LinuxCNC.
Доступные интерфейсы: axis, touchy, gmoccapy, gscreen, keystick, mini, tklinuxcnc, xemc.
DISPLAY = gmoccapy Выбран интерфейс GMOCCAPY.

EDITOR

Имя графического редактора, с помощью которого можно открыть файл управляющей программы для редактирования.
Доступные редакторы: gedit, mousepad.
EDITOR = gedit Выбран графический редактор gedit.

POSITION_OFFSET

Система координат, которая отображается по умолчанию. Доступные системы координат: RELATIVE - относительная, MACHINE - абсолютная.
POSTION_OFFSET = RELATIVE По умолчанию выбрана относительная система координат.

POSITION_FEEDBACK

Отображение координат в интерфейсе. Возможно отображать текущую позицию двумя способами: ACTUAL - действительное положение т.е. положение полученное по обратной связи от двигателей, COMMANDER - заданное (идеальное) значение координат.
POSITION_FEEDBACK = ACTUAL По умолчанию выбрано актуальное отображение.

ARCDIVISION

Тип отображения дуг (дробление дуги на прямые участки). Чем большее значение дробления указано, тем более точное (приближенное к идеальной дуге) отображение будет в окне предпросмотра, но чем тем требуется больше ресурсов ПК.
ARCDIVISION = 64 Значение по умолчанию 64.

GRIDS

Тип деления сетки. Единица измерения дюймы (in), мм (mm).
GRIDS = 10mm 20mm 50mm 100mm 1in 2in 5in 10in Доступные по умолчанию сетки.

MAX_FEED_OVERRIDE

Максимальное изменение скорости подачи, относительно скорости выставленной в управляющей программе или окне MDI.
MAX_FEED_OVERRIDE = 1.2 Значение 1.2 означает, что пользователь может превысить значение установленной скорости лишь на 20%

MIN_SPINDLE_OVERRIDE

Минимальное значение скорости вращения шпинделя, относительно выставленной в управляющей программе или окне MDI.
MIN_SPINDLE_OVERRIDE = 0.5 Значение 0.5 означает, что пользователь может понизить установленную скорость вращения шпинделя не более чем на 50%

MAX_SPINDLE_OVERRIDE

Максимальное значение скорости вращения шпинделя, относительно выставленной в управляющей программе или окне MDI.
MAX_SPINDLE_OVERRIDE = 1.2 Значение 1.2 означает, что пользователь может повысить установленную скорость вращения шпинделя не более чем на 20%

DEFAULT_LINEAR_VELOCITY

Скорость перемещений, установленная при первом запуске LinuxCNC.
DEFAULT_LINEAR_VELOCITY = 20.0 Скорость по умолчанию 20 мм/сек.

MAX_LINEAR_VELOCITY

Максимальная скорость свободных перемещений, которую можно изменять из интерфейса.
MAX_LINEAR_VELOCITY = 100.0 Максимальная скорость перемещений не более 100.0 мм\сек.

Группа [EMCMOT]

EMCMOT

COMM_TIMEOUT

BASE_PERIOD

Параметр BASE_PERIOD является одним из основных параметров, влияющих на максимальную скорость перемещения станка. Параметр BASE_PERIOD определяется исходя из показателей Latency-Test.

SERVO_PERIOD

Группа [TRAJ]

Группа [AXIS_*]

TYPE

В LinuxCNC могут быть два типа оси: линейная и угловая.

TYPE = LINEAR Линейная ось
TYPE = ANGULAT Угловая (поворотная ось)

HOME

MAX_VELOCITY

Максимальная скорость перемещений данной оси (мм\сек).
MAX_VELOCITY = 100.0 Максимальная скорость перемещения 100.0 мм/сек.

MAX_ACCELERATION

Максимальное ускорение данной оси (мм\сек^2).
Пример: Максимальное ускорение 600 мм\сек^2 MAX_ACCELERATION = 600.0

STEPGEN_MAXACCEL

Данные значение должно быть на 1-10% больше по сравнению с параметром MAX_ACCELERATION. Если вы используете параметр BACKLASH (компенсацию люфта), то данный параметр необходимо увеличить в 1,5 - 2 раза по сравнению с параметром MAX_ACCELERATION.

SCALE

Параметр SCALE отвечает за количество импульсов на единицу перемещения. Другими словами, данный параметр отвечает за соответствие реального перемещения станка программному. Для того, чтобы посчитать количество импульсов на мм, необходимо воспользоваться формулой.

FERROR

Максимальное допустимое отклонение от перемещений станка (в мм). Если рассогласование между реальным и заданным положением превысит значение FERROR, то контроллер отключится. Максимально допустимое отклонение FERROR может достигаться при скорости [TRAJ] MAX_VELOCITY и при снижении скорости ошибка будет стремиться к MIN_FERROR.

MIN_FERROR

Минимальное допустимое отклонение от заданного перемещения (в мм). Если рассогласование между реальным и заданным положением превысит значение MIN_FERROR, то контроллер отключится. Минимально допустимое отклонение MIN_FERROR при низкой скорости. При росте скорости, пропорционально будет увеличиваться ошибка рассогласования и может достигать FERROR при скорости MAX_VELOCITY.

MIN_LIMIT

Минимальные машинные координаты для перемещения (мм).

MAX_LIMIT

Максимальные координаты станка для перемещения (мм).

HOME_OFFSET

Смещение рабочего поля станка относительно датчика домашнего положения для данной оси.

HOME_SEARCH_VEL

Скорость возврата в домашнее положение по датчикам (мм\сек).
Примечание: Для того, чтобы изменить направление поиска домашнего положения, необходимо поменять знак.
Пример: HOME_SEARCH_VEL = -150.00000

Примечание: При указании параметра HOME_SEARCH_VEL = 0.0, ось не будет возвращаться в домашнее положение (если в конструкции станка, не предусмотрен датчик домашнего положения).

HOME_LATCH_VEL

Скорость уточнения (точной калибровки) датчиков домашнего положения (мм\сек).

HOME_IGNORE_LIMITS

HOME_SEQUENCE

Справочник параметров *.hal файла

Для работы системы необходим правильно настроенный *.hal файл. Пройдемся по реальному конфигурационному файлу и изучим требуемые параметры.

loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hal_parport cfg="0xe000 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0
loadrt pwmgen output_type=1

В блоке выше нас интересует строка loadrt hal_parport cfg="0xe000 out", в ней указан адрес LPT порта в системе, для того, чтобы узнать какой адрес требуется сюда вписать обратимся к разделу "Настройка адреса ввода\вывода LPT-PCI".

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf pwmgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
addf pwmgen.update servo-thread
net spindle-cmd-rpm => pwmgen.0.value
net spindle-on <= spindle.0.on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 988.0
setp pwmgen.0.scale 24000
setp pwmgen.0.offset 0.02
setp pwmgen.0.dither-pwm true
net spindle-cmd-rpm     <= spindle.0.speed-out
net spindle-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-cmd-rps     <= spindle.0.speed-out-rps
net spindle-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-at-speed    => spindle.0.at-speed
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse

В данном блоке обратим внимание на строки setp pwmgen.0.pwm-freq 988.0, setp pwmgen.0.scale 24000, setp pwmgen.0.offset 0.02. Изменение этих параметров позволяет нам настроить соответствие реального значения оборотов шпинделя и значения оборотов в процентах, которое задается в LinuxCNC пользователем. В строке setp pwmgen.0.scale 24000 задается максимальное количество оборотов шпинделя за 1 минуту. В строке setp pwmgen.0.pwm-freq 988.0 задается частота генерации импульсов, которые отправляются в частотный преобразователь. В строке pwmgen.0.offset 0.02 задается смещение рабочего цикла. Увеличение данного значения дает увеличение оборотов шпинделя при одном и том же значении % в LinuxCNC. Уменьшение - соответственно наоборот дает уменьшение оборотов.

net xstep           => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir            => parport.0.pin-03-out
setp parport.0.pin-03-out-invert 1
net ystep           => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
net ydir            => parport.0.pin-05-out
setp parport.0.pin-05-out-reset 1
net zstep           => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir            => parport.0.pin-07-out
setp parport.0.pin-07-out-reset 1

В блоках выше настраиваются параметры осей X,Y,Z. Разберем на примере первого блока (ось X). net xstep => parport.0.pin-02-out - В данной строке мы задаем номер пина LPT, к которому подключен сигнал STEP от драйвера. Тоесть 02 - номер пина LPT. setp parport.0.pin-02-out-reset 1 - Задает режим работы пина (он может быть прямым или инвертированным). Для сигнала STEP инверсия не требуется, поэтому в этой строке ничего кроме номера пина LPT менять не надо. net xdir => parport.0.pin-03-out - В данной строке мы задаем номер пина LPT, к которому подключен сигнал DIR от драйвера. Тоесть 03 - номер пина LPT. setp parport.0.pin-03-out-reset 1 - Задает режим работы пина (он может быть прямым или инвертированным). Для сигнала DIR может потребоваться инверсия - это изменит направление движения двигателя. Для инверсии потребуется заменить reset на invert. Что касается номера пина LPT, тут всё остается как и в пояснении выше (если меняем номер пина сигнала DIR, то тут тоже потребуется поменять).

Остальные блоки (для других осей) настраиваются полностью аналогично. Переходим далее.

net spindle-cw      => parport.0.pin-16-out
setp parport.0.pin-16-out-invert 1

В первой строке задается пин LPT для запуска шпинделя в прямом напрвлении. В второй строке задается инверсия для этого сигнала. Если требуется запускать шпиндель в обратном направлении используем spindle-ccw

net spindle-pwm     => parport.0.pin-14-out
setp parport.0.pin-14-out-invert 1

В первой строке этого блока задается пин LPT для ШИМ управления шпинделя. Во второй строке задается режим работы ШИМ/ЧИМ. Для наших задач этот пин должен быть инвертирован.

net home-x      <= parport.0.pin-10-in
net home-y      <= parport.0.pin-11-in
net home-z      <= parport.0.pin-13-in
net estop-ext       <= parport.0.pin-15-in
net probe-in => motion.probe-input
net probe-in <= parport.0.pin-12-in-not

В данном блоке настраиваются входные пины LPT для датчиков по осям, пин кнопки аварийной остановки и пин датчика высоты инструмента. Стоит заметить, что инверсия входных пинов производится с помощью кострукции -not (Примером является последняя строка в блоке)

setp stepgen.0.position-scale [JOINT_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 10000
setp stepgen.0.dirsetup 10000
setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL
net xpos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => joint.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable joint.0.amp-enable-out => stepgen.0.enable
net home-x => joint.0.home-sw-in
net min-home-x => joint.0.neg-lim-sw-in
setp stepgen.1.position-scale [JOINT_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 10000
setp stepgen.1.dirsetup 10000
setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL
net ypos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => joint.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable joint.1.amp-enable-out => stepgen.1.enable
net home-y => joint.1.home-sw-in
net min-home-y => joint.1.neg-lim-sw-in
setp stepgen.2.position-scale [JOINT_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 10000
setp stepgen.2.dirsetup 10000
setp stepgen.2.maxaccel [JOINT_2]STEPGEN_MAXACCEL
net zpos-cmd joint.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => joint.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable joint.2.amp-enable-out => stepgen.2.enable
net home-z => joint.2.home-sw-in
net min-home-z => joint.2.neg-lim-sw-in

Как мы можем видеть, в блоках выше настраиваются параметры шаговых двигателей по осям. Нас интересуют только идентичные для блоков выше параметры steplen,stepspace, dirhold, dirsetup. Они задаются в соответствии с используемыми драйверами, по-умолчанию заданы эти параметры.

net estop-out <= iocontrol.0.user-enable-out
net estop-ext => iocontrol.0.emc-enable-in

В данном блоке настраивается блокировка работы кнопкой аварийной остановки, тоесть если кнопка нажата, то мы не можем управлять станком. Если нам требуется временно отключить эту кнопку (для тестирования), то для этого потребуется заменить вторую строку на net estop-out => iocontrol.0.emc-enable-in.

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

HALSHOW

Данная утилита позволяет работать со всеми переменными, пинами, сигналами системы.

Для наших задач удобно просматривать состояния пинов.

Для запуска требуется перейти в раздел меню «Станок в LinuxCNC» и выбрать пункт «Показать установки HAL».

Далее мы должны увидеть окно HALSHOW.

Halshow.png

В левой колонке мы можем найти интересующий нас пин. Откроем ветку дерева Pins->parport->0. Для просмотра состояний пинов щелкнем по вкладке "Следить" и выберем из нашей ветки нужные пины для просмотра двойным кликом по ним.

Halshow2.png

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

Приложения

Ссылки на дополнительную документацию

Вы можете найти полное описание системы EMC2 перейдя по ссылке http://linuxcnc.org/docs/html/

Список компонентов HAL http://linuxcnc.org/docs/2.7/html/hal/components.html

Описание realtime компонентов HAL http://linuxcnc.org/docs/html/hal/rtcomps.html

Возможные ошибки и методы их устранения

Возможные ошибки
Ошибка Возможная причина Метод устранения
Joint * following error Компьютер не отвечает техническим требованиям;
Установленная скорость перемещений слишком велика для допустимого параметра BASE_PERIOD в *.hal файле;
Провести LATENCY-TEST и установить параметр BASE_PERIOD на 10% выше значение MaxJitter (обратите внимание на метод проведения LATENCY-TEST).

Показатели Latency-Test на различных ПК

Показатели Latency Test на различных ПК
Max Interval (1.0 ms) Max Jitter (1.0 ms) Max Interval (25 ns) Max Jitter (25 ns) Материнская плата Центральный процессор Объем RAM Видеокарта HDD
1032498 36782 54009 29009 Asus A68HM-K AMD A6-7400K 4Gb AMD A6-7400K Radeon R5 HDD Western Digital WD800JD-22MSA1