"Хитрости" от "чайника": различия между версиями

Материал из cnc-club
Перейти к навигации Перейти к поиску
(Новая страница: « == НАЧАЛО. ОПИСАНИЕ EMC2 или EMC2 Integrators Manual == Вместо предисловия. И почему электронщики не по…»)
 
Строка 1: Строка 1:
 +
== Предисловие ==
 +
Сколько открытий приходится делать при переходе на Linux! Особенно после Windows!!! Давайте делиться маленькими "хитростями" Linux-а для начинающих? Я, как самый-самый "чайник" начну: Две самые важные программы: Обозреватель файлов и Терминал.
  
== НАЧАЛО. ОПИСАНИЕ EMC2 или EMC2 Integrators Manual ==
+
== Горячие клавиши Обозревателя ==
Вместо предисловия.
+
Ctrl + C - копировать в буфер обмена Ctrl + V - вставить из буфера обмена Ctrl + X - вырезать в буфер обмена Ctrl + Shift + N - создать новый каталог (папку) Ctrl + 1 - просмотр в виде значков Ctrl + 2 - в виде списка Ctrl + 3 - в компактном виде Ctrl + H - показать скрытые файлы Del - удалить в корзину Shift + Del - удалить безвозвратно!!! F2 - переименовать F3 - и обозреватель похож на Total Commander !!!
  
И почему электронщики не понимают программистов? А ведь учились в соседних группах...
+
== Горячие клавиши Терминала ==
 +
Tab - дополнить набираемую команду Ctrl + Insert или Ctrl + Shift + C - копировать в буфер обмена
  
Обычно "чайники" начинают изучать LinuxCNC по мануалу: http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=150
+
Shift + Insert или Ctrl + Shift + V - вставить из буфера обмена
  
Начнём разборку тоже с этого описания.
+
Tab Tab - весь список команд, начинающихся на набранные буквы и символы, также дописывает параметры команд или имена файлов и каталогов.
  
== Глава 1. Важные определения ==
+
Ctrl + Alt + T - вызвать Терминал!!! (запомните - может выручить ;) )
Никаких проблем. Всё понятно. Идём дальше...
 
  
== Глава 2. Аппаратное обеспечение (Hardware) ==
+
== Управление окнами ==
2.1 Latency Test
+
Ctrl + Alt + D - Сворачивает все окна и показывает рабочий стол. При повторном нажатии восстанавливает свернутые ранее окна.
  
И опять всё понятно. Тест несложный. Данные записаны...
+
Super + W - Переключает в режим просмотра всех открытых окон. Окна, которые открыты на других рабочих столах, тоже отображаются. Кнопка Super = кнопка Windows на клавиатуре.
  
== Глава 3. Конфигурационные файлы ==
+
Alt + Tab - Переключение между активными окнами. Если удержать Alt, нажать Tab и не отпускать Alt, тогда появится меню для выбора приложения, удерживая Alt и нажимая Tab можно перемещаться по приложениям (также можно использовать стрелки Влево и Вправо)
И тут всё в порядке...
 
  
Дальше стал конфигурить систему, используя '''Stepconf'''. Столкнулся с проблемой, что Stepconf не дал мне возможности сконфигурировать систему такой, которая мне нужна. Испробовав несколько вариантов понял - нужно будет прописывать конфигурацию "ручками".
+
Alt + ' - переключения между окнами одного приложения. Например, у вас открыто несколько окон Firefox, тогда по Alt+' вы сможете переключаться между ними. Клавиша ' находится слева от ряда цифровых клавиш, она же клавиша Ё, она же тильда ~.
  
Вот и подошел я к '''INI-файлу'''...
+
Alt + F4 - Закрыть активное окно.
  
== Глава 4. Файл INI ==
+
Alt + F9 - Свернуть активное окно.
Вопросы начали появляться, но житейское правило: Не трогай того, что не понимаешь - помогло прописать бОльшую часть ini-файла. Больше того, прописал четвертую ось (она у меня должна качать гель: шаговик-насос). Даже подвигал насос. Но КАК его запустить программой? Да еще в нужное время, с нужной скоростью!
 
  
Тут без понимания '''HAL-файл'''а не обойтись.
+
Alt + F7 + Влево или Вправо или Вверх или Вниз - перемещение активного окна по рабочему столу. Сначала нажимаете Alt+F7, затем отпускаете и только потом пользуете клавиши перемещения.
  
== Глава 5. EMC2 и HAL ==
+
== Консоль и Терминал ==
И вот первая строка:
+
Для ОС Linux существуют два режима: консольный и графический
  
'''Motion загружается при помощи команды motmod. Родственные программы должны быть запущены до motion...'''
+
Первый полностью лишен визуальных панелей - GUI - Консоль, а вот "Терминал" - это уже просто программка в GUI , которая имитирует консоль "настоящую", в которую из gui можно легко перейти нажав Crtl+Alt +F1(-F6) - то есть от F1 до F6 шесть разных консолей возвращаемся - F7
  
Перечитал пару раз. Непонятно. Пропустил и полез дальше. Ещё более непонятно. Открыл HAL у себя и стал читать, взирая на реальный текст реального HAL-а... Стал понимать структуру самого файла. Но что там написано???
+
В консоли можно много чего делать без GUI.
  
После двух недель стало ясно следующее:
+
== Команды Терминала ==
 +
Простые команды Терминала:
  
1. Система EMC2 или LinuxCNC - это огромный набор маленьких программок, которые определенным образом сконфигурированы в систему. Потому, чтобы начать самому прописывать свою систему своего станка - необходимо понять логику этой конфигурации. А она оказалась довольно простой. Только написана на ином языке, на языке программистов.
+
'''Команда cd''' - изменить местоположение:
  
Итак, эти маленькие программки называют '''КОМПОНЕНТАМИ'''. У каждого компонента есть своё '''ИМЯ'''.
+
cd - в домашний каталог /home/<имя пользователя> cd.. - на каталог выше cd- - в предыдущий каталог
  
2. У каждого компонента есть контакты (клеммы, разъемы) входов и выходов. Их называют '''ПИН'''ы. У каждого компонента пинов может быть различное количество. У каждого пина есть своё имя. Пины бывают входные и выходные. А записывать это имя пина договорились так:
+
'''Команда ls''' - посмотреть содержимое каталога ls -l - показать с дополнительной информацией
  
(имя компонента).(имя пина)
+
'''Команда man''' - справка о командах Например:
 +
man ls
 +
Перемещаться по справке (а она может быть многостраничной) клавишами PgUp и PgDw Для выхода из справки - Q Также справку о команде можно посмотреть так:
 +
ls --help
 +
Посмотреть описание директорий Linux:
 +
man hier
 +
'''Команда history''' - история введённых команд Выполнить команду из истории: !№строки истории !! - повторить предыдущую команду
  
Например:
+
'''Команда sudo''' - даёт пользователю права с неограниченными привилегиями (где их ещё можно получить? А в Линуксе можно! ) Открыть системный файл или файл под root-ом в текстовом редакторе gedit:
  '''motion.analog-out-00'''
+
sudo gedit адрес/файл
, где motion- имя компонента, analog-out-00 - имя пина, этот пин выходной и его номер 00.
+
Открыть файлой менеджер под root-ом:
 +
sudo nautilus
 +
Вообще в Linux все проще, потому, что зачастую логичнее, чем в Win. (Для быстрого понимания аргументов того же dd if=input file, of=output file). И все программы это не навороченные монстры, а небольшие утилиты, которые можно компоновать. Нужно запомнить только список часто используемых комманд: '''cd, ls, cp, mv, rm, cat, nano, grep, sudo, apt-get''' остальное придет само :). Это как LinuxCNC и Mach, в одном hal, из которого все растет, а в другом огромный Mach, или настраивать нужно все.
  
'''ВАЖНО!''' Не стоит верить имени пина в части входной он или выходной. Есть случаи, когда в названии пина есть "in" или "out@? а на самом деле всё обстоит совсем не так. Так где же узнать входной это пин или выходной?
+
== Резервное копирование в Linux ==
 +
В линухе для этого уже сразу есть несколько утилит:
  
'''Вариант 1.''' Почитать мануал (описание) EMC2. Там это выглядит как-то так:
+
'''rsync''' очень крутая штука, с ней можно делать бэкапы всего, отовсюду, и куда угодно, хоть на почту бросать. При этом rsync умеет делать инкрементальный бэкап, причем хитрый, и это просто в сотни раз снижает нагрузку на канал. Также с его помощью и с помощю cp можно делать еженедельные бэкапы с ротацией за n посделних недель, да такие, что бэкап за 4 недели будет по размеру как 1.1 первого бэкапа (если конечно не менялось все подряд).
  iocontrol.0.coolant-flood (bit, '''out''')  
 
- как мы уже разобрались, эта запись означает, что это '''выходной пин''' coolant-flood компонента iocontrol.0
 
  
'''Вариант 2.''' (мной пока слабо используемый) Смотреть на свойства пина можно и в емс - любой пин открываем в Halshow и смотрим.
+
'''dd''' - это магическая утилита копирует все из if в of, где if и of это любые файлы. В linux, все устройства это файлы, поэтому снять копию винчестера можно вот так:
 +
dd if=/dev/sda1 of=/home/hdd1.iso.
 +
Также ее можно использовать для уничтожения данных, если есть секреты, которые нужно надежно удалить, и rm -r не подходит, можно сделать так:
 +
dd if=/dev/null of=/dev/sda1
 +
- это забьет весь винчестер 0, а можно еще прикольнее и надежнее, так:
 +
dd if=/dev/random of=/dev/sda1
 +
- это будет забивать винч случайной последовательностью.
  
Также компонент может иметь один или несколько '''параметр'''ов (это такие коэффициенты, которые используются при работе компонента). Тут нет проблем - такое есть в любой схеме (номиналы резисторов, например).
+
Все это можно использовать в связке с cron, тогда резервное копирование будет выполняться по расписанию.
 
 
Компоненты могут "соединяться" между собой посредством связей (проводки между входами и выходами). Тут есть тоже свои правила: 1. Чтобы не путаться, договорились каждую связь обзывать своим именем.
 
 
 
В этом случае, запись "коммутации" двух компонентов будет выглядеть так:
 
    (команда) (имя связи) (источник "сигнала") (приёмник "сигнала")
 
    net vel <= motion.current-vel => stepgen.3.vel
 
, что означает создаём (команда net) связь (vel) между пином current-vel компонента motion и пином vel компонента stepgen.3 (тут 3 - это номер компонента с таким именем - ведь один компонент может использоваться одновременно несколько раз, но под разными порядковыми номерами). Стрелочки <= и => писать необязательно. С ними на начальном этапе овладения системой проще - понятно ОТКУДА и куда передается "сигнал".
 
 
 
Возможно эту запись сделать так:
 
    net vel <= motion.current-vel
 
    net vel => stepgen.3.vel
 
- как вам будет удобнее и понятнее. Кстати, эти две строчки могут быть записаны в разных местах HAL-файла.
 
 
 
Есть и второе правило при записи связи:
 
 
 
2. К одному выходному пину можно подсоединить несколько входных пинов. Но один входной пин можно подсоединить только к одному выходному пину.
 
 
 
== Глава 6. КОМАНДЫ ==
 
Вот приходите вы домой (вошли в систему), подошли к телевизору, нажимаете на пульте 5 канал (обращаетесь к компоненту) и... А экран-то тёмный! Оказывается телевизор-то не включили!!!
 
 
 
Так же происходит и с компонентами Линукса. В HAL-е нужно первым делом "включить" нужные компоненты - "загрузить компонент HAL реального времени"!
 
 
 
Так мы подошли к понятию '''КОМАНДЫ'''.
 
 
 
1. '''loadrt''' - загружает компонент HAL реального времени. Например,
 
    loadrt stepgen step_type=0,0,0,0
 
, что означает: загружаем (loadrt) компонет stepgen с некоторыми установками (step_type=0,0,0,0), о которых поговорим позже.
 
 
 
2. '''addf''' - добавляет компонент реального времени в поток. А по-русски, эта команда определяет, где будет находиться компонент: в высокоскоростном потоке (base-thread) или в низкоскоростном потоке (servo-thread). А если ещё точнее, то определяет, где будет находится ФУНКЦИЯ компонента, так как один компонент может исполнять несколько функций, которые могут быть высокоскоростными и низкоскоростными. Это видно на примере:
 
    addf parport.0.read base-thread
 
    addf '''stepgen.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
 
'''ВАЖНО!''' Эти команды должны быть обязательно! Именно они определяют: какими компонентами мы собираемся пользоваться и какие требования к этим компонентам мы предъявляем по скорости.
 
 
 
'''ВАЖНО 2!''' Перед тем, как прописывать функции компонента в потоки - посмотрите описание компонента! Возможно у него есть НЕСКОЛЬКО ФУНКЦИЙ и у этих функций могут быть имена ОТЛИЧНЫЕ ОТ ИМЕНИ КОМПОНЕНТА. Эти функции нужно прописывать отдельно.
 
 
 
3. С этой командой мы уже встречались - '''net''' - создает связь между сигналом и одним или несколькими пинами. Очень удобно, что если этой связи ещё не было (а ведь мы помним, что в Линуксе каждая связь имеет своё имя), то эта связь автоматически создаётся.
 
 
 
Например, нам нужно подать высчитанный программой сигнал Step на два контакта LPT-порта (мы пожелали управлять через отдельные драйвера двумя шаговиками по координате X). Для этого мы должны написать:
 
    net xstep <= stepgen.0.step
 
    net xstep => parport.0.pin-02-out
 
    net xstep => parport.0.pin-03-out
 
или
 
    net xstep <= stepgen.0.step => parport.0.pin-02-out => parport.0.pin-03-out
 
или
 
    net xstep <= stepgen.0.step => parport.0.pin-02-out parport.0.pin-03-out
 
или
 
    net xstep stepgen.0.step parport.0.pin-02-out parport.0.pin-03-out
 
или
 
    net xstep parport.0.pin-02-out parport.0.pin-03-out stepgen.0.step
 
Т.е. главное в этой команде:
 
 
 
на первом месте - команда (net), затем название связи (xstep), а уже потом источник сигнала (выходной пин компонента - stepgen.0.step) и приёмник (приёмники) сигнала (входной или входные пины компонентов parport.0.pin-02-out и parport.0.pin-03-out).
 
 
 
Стрелочки => и <= Линуксом не воспринимаются и нужны только на удобства написания. Советую писать на начальных шагах, пока не привыкнете к названиям пинов и компонентам.
 
 
 
4. Команда '''setp''' - устанавливает значение пина или параметра.
 
 
 
Если открыть ваш HAL-файл, то вы легко найдёте место, где прописываются параметры ваших шаговиков по координатам.
 
 
 
Например, по X:
 
    setp stepgen.0.position-scale [AXIS_0]SCALE
 
    setp stepgen.0.steplen 1
 
    setp stepgen.0.stepspace 0
 
    setp stepgen.0.dirhold 55000
 
    setp stepgen.0.dirsetup 55000
 
    setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
 
Тут даже переводить нечего - всё прозрачно! И мы видим, что команда setp может присваивать значения пинам и параметрам компонентов из INI-файла!!! Вот она связь между hal и ini...
 
 
 
Но, иногда, можно прописать значения не из ini, а непосредственно. А выглядеть это будет, например, так:
 
    setp stepgen.0.position-scale 44.145839
 
    setp stepgen.0.steplen 1
 
    setp stepgen.0.stepspace 0
 
    setp stepgen.0.dirhold 55000
 
    setp stepgen.0.dirsetup 55000
 
    setp stepgen.0.maxaccel 150
 
Оба варианта работают.
 
 
 
'''ВАЖНО!'''
 
 
 
На первых порах часто путался: где ставить setp, а где net? Так и подмывало написать:
 
    setp  parport.0.pin-02-out  stepgen.0.step
 
(ну типа, присвоить значение пина STEP выводу LPT-порта)
 
 
 
'''ЭТО НЕВЕРНО!!!''' (но не опасно, как вы увидите ниже ;) )
 
 
 
Мы ознакомились с основными командами. Другие будем изучать по мере встреч с ними...
 
 
 
== Ура Линуксу или ошибки, ошибки и ошибки... ==
 
Что бы мы делали, если бы LinuxCNC не проверял ошибки ДО начала работы? А ведь проверяет!
 
 
 
Изменили мы ini- и hal-файлы, запустили EMC2 и... Получили сообщение об ошибке. Что с ним делать? И ведь понаписано много! Разберёмся последовательно:
 
  '''Print file information:'''
 
Понятно - тут всё важное о самой системе.
 
  '''Debug file information:'''
 
А вот тут уже поинтереснее... Например вот эта строка у меня не понравилась EMC2:
 
  '''333.hal:105: Pin 'axis.3.amp-enable-out' does not exist'''
 
Расшифровка: в файле '''333.hal''' в строке '''105''' прописан пин '''axis.3.amp-enable-out''', которого просто нет. Забыл я подчистить остатки от четвертой оси, которую изничтожил на корню. Удалил и всё заработало!
 
 
 
Также система отслеживает ошибки с применением типа переменных и параметров (BIT или FLOAT), ошибки при применении связей между пинами компонентов и многое другое. И самое важное - указывает конкретное место, где эту ошибку нашла!
 
 
 
"И это меня радует!" ("Килаграмм")
 
 
 
== BIT или не BIT? Вот в чём вопрос! ==
 
Захотели, например, мы включать и выключать внешний двигатель, управляемый stepgen.2, командой из g-кода.
 
 
 
Выбрали motion.analog-out-00 (команда M68 E0 Q1 и M68 E0 Q0) , а управлять решили через stepgen.2.enable
 
 
 
Прописываем связь этих пинов в hal:
 
    net upr motion.analog-out-00 stepgen.2.enable
 
(это означает: создаём связь '''upr''' для соединения выходного пина '''analog-out-00''' компонента '''motion''' со входным пином '''enable''' компонента '''stepgen.2''')
 
 
 
и ... НЕ РАБОТАЕТ!!!
 
 
 
А причина проста - несоответствие типа выходного и входного пинов:
 
  motion.analog-out-00 ('''float''', out)
 
и
 
('''bit''') stepgen.<chan>.enable
 
Выход из ситуации может быть таким - использовать motion.digital-out-00 (команды M64 P0 и M65 P0) - формат сигнала BIT
 
 
 
И самое главное - НЕ ЗАБЫВАЙТЕ ПРОВЕРЯТЬ ФОРМАТЫ пинов и параметров, а также переменных. Это несложно, но позволит избежать многих ошибок...
 
 
 
== Нужно ли изобретать велосипед или Компоненты реального времени. Часть 1. ==
 
Мы уже вполне осознанно начали лазить по файлам настройки и конфигурации CNC - самое время начать усовершенствовать работу нашего станка, придумать всякие удобства, "вкусности" и т.п.
 
 
 
Например, не запускать станок, пока точно не будет ясно, что оператор нажал две кнопки безопасности, разнесенные подальше друг от друга ;)
 
 
 
Пропишем эти две кнопки:
 
    net start1 <= parport.0.pin-10-in
 
    net start2 <= parport.0.pin-11-in
 
а дальше нужно включать станок только если эти "кнопочки" (start1 и start2) нажаты (= 0). Сделаем это через пины
 
    stepgen.0.enable
 
    stepgen.1.enable
 
    stepgen.2.enable
 
всех трех координат. Т.е. пока отрабатывается программа - держи руки на кнопках!
 
 
 
 
 
Т.е. условием включения станка должно быть:
 
    start1 = 0
 
    start2 = 0
 
    stepgen.0.enable , stepgen.1.enable и stepgen.2.enable имеют уровень сигнала равный 1 или True
 
Мы, как электронщики, прекрасно знаем, что это легко реализовать через двух-входовый элемент ИЛИ-НЕ и двух-входовый И
 
 
 
(start1 или start2), затем инвертируем и на первый вход элемента И, а на второй вход того же И - axis.0.amp-enable-out
 
 
 
Тогда на выходе, при start1 = 0 и start2 = 0, получим тот же уровень, что и axis.0.amp-enable-out и передаём его на stepgen.0.enable
 
 
 
И так по всем трем осям...
 
 
 
А, если хотя бы один start (хотя бы одна кнопка) равен 1 (отжата), то stepgen.0.enable равен 0 (False) и движение по осям прекращается.
 
 
 
 
 
Что нам может предложить CNC из стандартного набора компонентов?
 
 
 
Смотрим мануал:
 
6.5 Логические компоненты
 
6.5.3 or2
 
Компонент "or2" это двух вводовый вентиль "или" ("or").
 
6.5.2 not
 
Компонент "not" ("не") это битовый инвертор.
 
6.5.1 and2
 
Компонент "and2" это вентиль "и" ("and") с двумя вводами.
 
 
 
Пропишем всё в логике CNC (только одну координату для краткости):
 
    net start1 => or2.0.in0
 
    net start2 => or2.0.in1
 
    net orout <= or2.0.out => not.0.in1
 
    net notout <= not.0.out => and2.0.in0
 
    net andin1 <= axis.0.amp-enable-out  => and2.0.in1
 
    net andout <= and2.0.out => stepgen.0.enable
 
Вроде всё... НЕТ! Опять забыли для начала "включить" компоненты и определить их в нужном потоке... Мы используем один компонент or2, один компонент not и один компонент and2 (для одной оси) или три компонента and2 (для трёх осей). Получается всё вместе:
 
    loadrt or2
 
    loadrt not
 
    loadrt and2 count=3
 
   
 
    addf or2.0 servo-thread
 
    addf not.0 servo-thread
 
    addf and2.0 servo-thread
 
    addf and2.1 servo-thread
 
    addf and2.2 servo-thread
 
   
 
    net start1 <= parport.0.pin-10-in
 
    net start2 <= parport.0.pin-11-in
 
   
 
    net start1 => or2.0.in0
 
    net start2 => or2.0.in1
 
    net orout <= or2.0.out => not.0.in1
 
    net notout <= not.0.out => and2.0.in0 => and2.1.in0 => and2.2.in0
 
    net andin0 <= axis.0.amp-enable-out  => and2.0.in1
 
    net andout0 <= and2.0.out => stepgen.0.enable
 
    net andin1 <= axis.1.amp-enable-out  => and2.1.in1
 
    net andout1 <= and2.1.out => stepgen.1.enable
 
    net andin2 <= axis.2.amp-enable-out  => and2.2.in1
 
    net andout2 <= and2.2.out => stepgen.2.enable
 
Здесь loadrt and2 '''count=3''' говорит о том, что мы будем использовать компонент 2-И трижды.
 
 
 
Это пример использования готовых компонентов для реализации "цифровой схемы". Но это далеко не все возможности компонентов реального времени.
 
 
 
== Компоненты реального времени. Часть 2. ==
 
Аналогично "цифровым" прототипам в LinuxCNC есть и "аналоговые" компоненты:
 
 
 
'''integ''' - интегратор
 
 
 
'''invert''' - инвертор
 
 
 
'''limit[N]''' - ограничитель сигнала между min и max
 
 
 
'''lowpass''' - низкочастотный фильтр
 
 
 
'''mux2, mux4, mux8''' - коммутаторы сигналов на 2, 4, 8 коммутируемых входов
 
 
 
и другие...
 
 
 
 
 
 
 
== Своя панель. Первые шаги. ==
 
В процессе отладки своего станка часто возникает потребность визуального контроля процесса или оперативного изменения параметров работы станка. Как это реализовать, если на стандартной панели таких элементов нет? Конечно, сделать эти элементы самостоятельно!
 
 
 
Начнём с простого примера. Нужно контролировать состояние сигналов stepgen.0.enable, stepgen.1.enable и stepgen.2.enable.
 
 
 
Светодиоды! Вот что нам понадобится. Но не настоящие из кремния и пластика, а "нарисованные". ;)
 
 
 
1. Создаём файл с именем ledall.xml
 
 
 
Делаем его в обычном текстовом редакторе.
 
 
 
Пишем:
 
  <pyvcp>
 
          <led halpin="led0" />
 
          <led halpin="led1" />
 
          <led halpin="led2" />
 
  </pyvcp>
 
halpin - это процедура задания имени "светодиода" в .hal
 
 
 
Сохраняем файл как ledall.xml в папку с файлом нашего .ini файла!
 
 
 
2. Прописываем в .ini в разделе [DISPLAY]:
 
  PYVCP=ledall.xml
 
а в разделе [HAL]:
 
POSTGUI_HALFILE = ledall.hal
 
3. Создаём файл ledall.hal и прописываем в нём:
 
  net  xenable  =>  pyvcp.led0
 
  net  yenable  =>  pyvcp.led1
 
  net  zenable  =>  pyvcp.led2
 
Как вы уже поняли, мы использовали СИГНАЛЫ '''xenable, yenable и zenable''' из нашего файла .hal:
 
  net  xenable  <=  axis.0.amp-enable-out  =>  stepgen.0.enable
 
  net  yenable  <=  axis.1.amp-enable-out  =>  stepgen.1.enable
 
  net  zenable  <=  axis.2.amp-enable-out  =>  stepgen.2.enable
 
, т.е. эти сигналы '''обязательно должны быть уже созданы в файле .hal'''
 
 
 
Теперь мы можем видеть состояние наших двигателей во время работы станка.
 
 
 
По умолчанию КРАСНЫЙ - это FALSE или 0, а ЗЕЛЕНЫЙ - это TRUE или 1.
 
 
 
== Как "прикрутить" свою панель к "стандартной"? ==
 
Сразу оговорюсь, что "стандартной" панелью назвал панель AXIS - это самая распространенная панель у новичков.
 
 
 
Для начала: Файл, в котором будем прописывать связи пинов панели с пинами CNC называется '''posgui.hal''' и лежит он в папке конфигурации (в папке с настройками - там, где лежат файлы .ini и .hal)
 
 
 
Свою панель вырисовываем в Glade (это такая программа для создания визуальной панели) и сохраняем в папке конфигурации под именем '''mygui.ui''' При прорисовывании в Glade брать "кнопки" и "индикаторы", по возможности, из меню '''HAL_PYTHON'''
 
 
 
В .ini прописываем:
 
[DISPLAY]
 
GLADEVCP = mygui.ui
 
Теперь при запуске CNC mygui.ui мы увидим стандартную панель с прикрученной к ней справа нашей панелью. Если открыть в CNC Станок-Установки HAL - PINS - gladevcp, то можно посмотреть весь список пинов нашей панели.
 
 
 
Когда дополнительных кнопок и индикаторов много - лучше для себя сделать табличку соответствий: пин панели - пин компонента - действие (так будет всё понятно и запутаться будет труднее).
 
 
 
== Как "связать" кнопки своей панели с CNC? ==
 
Для связи нашей панели с CNC используем пины различных компонентов.
 
 
 
'''ВНИМАНИЕ!''' Особо обратите внимание на компонент '''halui''' - в нём есть множество полезных пинов!
 
 
 
1. Прописываем в .ini , что мы будем использовать компонент '''halui''':
 
[HAL]
 
HALUI = halui
 
2. В описании EMC2 внимательно читаем о пинах компонента halui Например, Мы хотим на своей панели поставить индикатор "E-STOP". Берем в Glade в разделе "HAL_PYTHON" индикатор LED (он, например, прописал свой пин как hal_led1 Ищем соответствующий пин в halui:
 
10.2.3 E-Stop (АВОСТ)
 
halui.estop.is-activated (bit, out)- отображает состояние E-stop.
 
Прописываем в postgui.hal (связываем эти два пина):
 
net led-estop <= halui.estop.is-activated => gladevcp.hal_led1
 
Теперь у нас индикатор на панели показывает состояние E-STOP.
 
 
 
 
 
 
 
== Как не запутаться в сложной схеме CNC? ==
 
Как только мы начинаем понимать основы LCNC, то начинаем творить!
 
 
 
И натыкаемся на вопрос: как не запутаться в множестве связей? А ведь каждая связь должна иметь своё имя!
 
 
 
Я поступаю так: Даю каждой связи имя по имени выхода компонента (ведь выходы компонентов в LCNC объединять нельзя!). Например:
 
net '''mux2out3'''  mux2.3.out and2.4.in0
 
 
 
net '''and4out'''  and2.4.out    not.2.in
 

Версия 13:32, 14 мая 2014

Предисловие

Сколько открытий приходится делать при переходе на Linux! Особенно после Windows!!! Давайте делиться маленькими "хитростями" Linux-а для начинающих? Я, как самый-самый "чайник" начну: Две самые важные программы: Обозреватель файлов и Терминал.

Горячие клавиши Обозревателя

Ctrl + C - копировать в буфер обмена Ctrl + V - вставить из буфера обмена Ctrl + X - вырезать в буфер обмена Ctrl + Shift + N - создать новый каталог (папку) Ctrl + 1 - просмотр в виде значков Ctrl + 2 - в виде списка Ctrl + 3 - в компактном виде Ctrl + H - показать скрытые файлы Del - удалить в корзину Shift + Del - удалить безвозвратно!!! F2 - переименовать F3 - и обозреватель похож на Total Commander !!!

Горячие клавиши Терминала

Tab - дополнить набираемую команду Ctrl + Insert или Ctrl + Shift + C - копировать в буфер обмена

Shift + Insert или Ctrl + Shift + V - вставить из буфера обмена

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

Ctrl + Alt + T - вызвать Терминал!!! (запомните - может выручить ;) )

Управление окнами

Ctrl + Alt + D - Сворачивает все окна и показывает рабочий стол. При повторном нажатии восстанавливает свернутые ранее окна.

Super + W - Переключает в режим просмотра всех открытых окон. Окна, которые открыты на других рабочих столах, тоже отображаются. Кнопка Super = кнопка Windows на клавиатуре.

Alt + Tab - Переключение между активными окнами. Если удержать Alt, нажать Tab и не отпускать Alt, тогда появится меню для выбора приложения, удерживая Alt и нажимая Tab можно перемещаться по приложениям (также можно использовать стрелки Влево и Вправо)

Alt + ' - переключения между окнами одного приложения. Например, у вас открыто несколько окон Firefox, тогда по Alt+' вы сможете переключаться между ними. Клавиша ' находится слева от ряда цифровых клавиш, она же клавиша Ё, она же тильда ~.

Alt + F4 - Закрыть активное окно.

Alt + F9 - Свернуть активное окно.

Alt + F7 + Влево или Вправо или Вверх или Вниз - перемещение активного окна по рабочему столу. Сначала нажимаете Alt+F7, затем отпускаете и только потом пользуете клавиши перемещения.

Консоль и Терминал

Для ОС Linux существуют два режима: консольный и графический

Первый полностью лишен визуальных панелей - GUI - Консоль, а вот "Терминал" - это уже просто программка в GUI , которая имитирует консоль "настоящую", в которую из gui можно легко перейти нажав Crtl+Alt +F1(-F6) - то есть от F1 до F6 шесть разных консолей возвращаемся - F7

В консоли можно много чего делать без GUI.

Команды Терминала

Простые команды Терминала:

Команда cd - изменить местоположение:

cd - в домашний каталог /home/<имя пользователя> cd.. - на каталог выше cd- - в предыдущий каталог

Команда ls - посмотреть содержимое каталога ls -l - показать с дополнительной информацией

Команда man - справка о командах Например:

man ls

Перемещаться по справке (а она может быть многостраничной) клавишами PgUp и PgDw Для выхода из справки - Q Также справку о команде можно посмотреть так:

ls --help

Посмотреть описание директорий Linux:

man hier

Команда history - история введённых команд Выполнить команду из истории: !№строки истории !! - повторить предыдущую команду

Команда sudo - даёт пользователю права с неограниченными привилегиями (где их ещё можно получить? А в Линуксе можно! ) Открыть системный файл или файл под root-ом в текстовом редакторе gedit:

sudo gedit адрес/файл

Открыть файлой менеджер под root-ом:

sudo nautilus

Вообще в Linux все проще, потому, что зачастую логичнее, чем в Win. (Для быстрого понимания аргументов того же dd if=input file, of=output file). И все программы это не навороченные монстры, а небольшие утилиты, которые можно компоновать. Нужно запомнить только список часто используемых комманд: cd, ls, cp, mv, rm, cat, nano, grep, sudo, apt-get остальное придет само :). Это как LinuxCNC и Mach, в одном hal, из которого все растет, а в другом огромный Mach, или настраивать нужно все.

Резервное копирование в Linux

В линухе для этого уже сразу есть несколько утилит:

rsync очень крутая штука, с ней можно делать бэкапы всего, отовсюду, и куда угодно, хоть на почту бросать. При этом rsync умеет делать инкрементальный бэкап, причем хитрый, и это просто в сотни раз снижает нагрузку на канал. Также с его помощью и с помощю cp можно делать еженедельные бэкапы с ротацией за n посделних недель, да такие, что бэкап за 4 недели будет по размеру как 1.1 первого бэкапа (если конечно не менялось все подряд).

dd - это магическая утилита копирует все из if в of, где if и of это любые файлы. В linux, все устройства это файлы, поэтому снять копию винчестера можно вот так:

dd if=/dev/sda1 of=/home/hdd1.iso. 

Также ее можно использовать для уничтожения данных, если есть секреты, которые нужно надежно удалить, и rm -r не подходит, можно сделать так:

dd if=/dev/null of=/dev/sda1 

- это забьет весь винчестер 0, а можно еще прикольнее и надежнее, так:

dd if=/dev/random of=/dev/sda1 

- это будет забивать винч случайной последовательностью.

Все это можно использовать в связке с cron, тогда резервное копирование будет выполняться по расписанию.