Алгоритм работы ЕМС
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Алгоритм работы ЕМС
Где нибудь есть описание алгоритма работы ЕМС. То есть при запуске что и как грузится, какие файлы или модули подключаются и описание какие файлы зачем ЕМС.
Как понимаю ЕМС состоит из отдельных кусков(модулей)
Как понимаю ЕМС состоит из отдельных кусков(модулей)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Алгоритм работы ЕМС
EMC2 Руководство станкостроителя на русском языке все прочитал?
Там особенно вначале многое написано.
Вообще есть несколько модулей, такие как:
HAL - отвечает за работу с оборудованием.
Motion - рассчитывает траекторию инструмента, работу шпинделя.
GUI - отображает все на экране.
и т.д.
Чтобы посмотреть все процессы которые запускаются при старте EMC2 можно сделать например так: в консоли выполняешь ps aux, смотришь pid (process id) последнего процесса, потом запускаешь emc и еще раз выполняешь ps aux и смотришь какие процессы добавились. Хотя, наверняка есть более изящный метод.
Там особенно вначале многое написано.
Вообще есть несколько модулей, такие как:
HAL - отвечает за работу с оборудованием.
Motion - рассчитывает траекторию инструмента, работу шпинделя.
GUI - отображает все на экране.
и т.д.
Чтобы посмотреть все процессы которые запускаются при старте EMC2 можно сделать например так: в консоли выполняешь ps aux, смотришь pid (process id) последнего процесса, потом запускаешь emc и еще раз выполняешь ps aux и смотришь какие процессы добавились. Хотя, наверняка есть более изящный метод.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
подниму-ка я эту давно_начатую тему...
в перемешку : догадки , домыслы и таки факты - и как следствие -
приветствуются все поправки...)
что бы узнать, из чего состоит емс и каков алгоритм работы -
рассмотрим(по возможности) процесс старта программы...
в общих чертах это не сложно - открываем файл scripts/linuxcnc : и пытаемся понять - что к чему...
(здесь рассматриваем емс установленый из исходников,соответственно
все пути указаны относительно папки установки)
немного забежим наперед ...
как было выше сказанно - емс состоит из нескольких модулей (можно
сказать из нескольких небольших программ , которые конечно взаимодействуют друг с другом...
их исполняемые файлы находятся в папке bin ...
1).
первая такая программка - это linuxcncsvr (по ней очень мало информации вообще)
вот описание ее работы:"Its function is to manage the lifetime of the nml shared memory segments
used by various parts of emc (gui, milltask and iotask)."
то есть - это программный серевер , который обеспечивает взаимодействие отдельных модулей
емс с использованием процессами разделяемой памяти...
запускается командой :
./linuxcncsvr -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
(с указанием пути к ini файлу конфигурации)
2). следом выполняется скрипт scripts/realtime ...
запускается командой :
REALTIME=/home/nkp/emc2-dev-80db2a2/scripts/realtime
$REALTIME start
3).
halcmd loadusr -Wn iocontrol io -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" &
контроллер ввода-вывода
4).
halcmd loadusr -Wn halui halui -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
интерфейс для взаимодействия с Hal
5).
halcmd -i "/home/nkp/emc2-dev-80db2a2/configs/Bosh/Bosh.ini" -f "/home/nkp/emc2-dev-80db2a2/configs/1/core_stepper.hal"
загрузка компонентов из файлов .hal ,указанных в ini
6).
halcmd start
старт Hal
7).
./milltask -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
контроллер движения
8).
./axis -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
один из графических интерфейсов
==========================================================
если в bin выполнить примерно :
то в принципе запустится емс , для работы которого после открытия файла с G кодами
задейстуется rs274 (интерпретатор)
папка с конфигом:
в перемешку : догадки , домыслы и таки факты - и как следствие -
приветствуются все поправки...)
что бы узнать, из чего состоит емс и каков алгоритм работы -
рассмотрим(по возможности) процесс старта программы...
в общих чертах это не сложно - открываем файл scripts/linuxcnc : и пытаемся понять - что к чему...
(здесь рассматриваем емс установленый из исходников,соответственно
все пути указаны относительно папки установки)
немного забежим наперед ...
как было выше сказанно - емс состоит из нескольких модулей (можно
сказать из нескольких небольших программ , которые конечно взаимодействуют друг с другом...
их исполняемые файлы находятся в папке bin ...
1).
первая такая программка - это linuxcncsvr (по ней очень мало информации вообще)
вот описание ее работы:"Its function is to manage the lifetime of the nml shared memory segments
used by various parts of emc (gui, milltask and iotask)."
то есть - это программный серевер , который обеспечивает взаимодействие отдельных модулей
емс с использованием процессами разделяемой памяти...
запускается командой :
./linuxcncsvr -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
(с указанием пути к ini файлу конфигурации)
2). следом выполняется скрипт scripts/realtime ...
запускается командой :
REALTIME=/home/nkp/emc2-dev-80db2a2/scripts/realtime
$REALTIME start
3).
halcmd loadusr -Wn iocontrol io -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" &
контроллер ввода-вывода
4).
halcmd loadusr -Wn halui halui -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
интерфейс для взаимодействия с Hal
5).
halcmd -i "/home/nkp/emc2-dev-80db2a2/configs/Bosh/Bosh.ini" -f "/home/nkp/emc2-dev-80db2a2/configs/1/core_stepper.hal"
загрузка компонентов из файлов .hal ,указанных в ini
6).
halcmd start
старт Hal
7).
./milltask -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
контроллер движения
8).
./axis -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini"
один из графических интерфейсов
==========================================================
если в bin выполнить примерно :
Код: Выделить всё
./linuxcncsvr -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" &
sleep 4
REALTIME=/home/nkp/emc2-dev-80db2a2/scripts/realtime
$REALTIME start
halcmd loadusr -Wn iocontrol io -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" &
sleep 4
halcmd loadusr -Wn halui halui -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" &
sleep 4
halcmd -i "/home/nkp/emc2-dev-80db2a2/configs/Bosh/Bosh.ini" -f "/home/nkp/emc2-dev-80db2a2/configs/1/core_stepper.hal" &
sleep 4
halcmd start
./milltask -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" &
./axis -ini "/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" задейстуется rs274 (интерпретатор)
папка с конфигом:
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
пройдемся (как сможем)) по скрипту запуска емс подробно,
вплоть до синтаксиса bash ...
------------------
вначале идет присваивание значений переменным... (пробелы до и после = недопустимы)
по умолчанию переменные являются локальными,чтоб сделать
их глобальными(переменные окружения) применяется команда export
export LINUXCNC_HOME
списки значений записываются через двоеточие (':')
LINUXCNC_CONFIG_PATH="~/linuxcnc/configs:/home/nkp/emc2-sim/configs"
посмотреть переменные окружения можно командой в терминале printenv
в выведеном списке HOME - путь к вашей домашней папке (переменная HOME используется в "нашем" скрипте)
упрощенно:
variable - переменная
$variable или ${variable} - значение переменной
---------------------
эти переменные используются командами функции завершения процессов( KillTaskWithTimeout() )
------------------
[ -d $LINUXCNC_HOME/scripts ]
выражение в квадратных скобках - синтаксис команды test , результат которой true или false...
&& - применяется ,когда нужно выполнить вторую команду в зависимости
от успешности выполнения первой:
попросту - если [ -d $LINUXCNC_HOME/scripts ] уже False , то вторую команду уже нет смысла и выполнять (исходя
из того ,что && "руководствуется" правилами логического AND)
в этом скрипте командв test проверяет:
-d существует ли указанная папка
-z пустая ли указанная строка
-n не пустая ли указанная строка
в [ -d $LINUXCNC_HOME/scripts ] && PATH=$LINUXCNC_HOME/scripts:$PATH
если существует папка $LINUXCNC_HOME/scripts (значение переменной $LINUXCNC_HOME
берем выше - LINUXCNC_HOME=/home/nkp/emc2-sim) , то левая часть - true , и значит
выполняем правую (после &&),
то есть присваиваем переменной PATH значение (в данном случае - список путей через двоеточие)
---------------------
далее - немаловажный момент - вывод информции для отладки программы...
по умолчанию емс создает два временных файла в /tmp
DEBUG_FILE=$(mktemp /tmp/linuxcnc.debug.XXXXXX)
PRINT_FILE=$(mktemp /tmp/linuxcnc.print.XXXXXX)
и в них перенаправляется вся отладочная информация,
если только скрипт не был запущен с аргументом -d :
linuxcnc -d здесь в скрипте обрабатываются все возможные аргументы
имхо самым полезным являетя -d
if tty -s; then
DEBUG_FILE=/dev/fd/2
echo "Debug mode on" >$DEBUG_FILE
fi
команда tty "говорит" - запущен ли терминал
в таком случае вывод перенаправляется в стандартный поток ошибок /dev/fd/2
если нет - активируется режим debugging (set -x;;)(деактивируется +x)
~~~~~~~~~~~~
режим debugging можно устанавливать и в файле ini в секции [EMC]
0x00000000 Do not print any debugging messages.
0x00000001 Print invalid messages
0x00000002 Print configuration settings
0x00000004 Print defaults
0x00000008 Print version
0x00000010 Print task messages
0x00000020 Print IO points
0x00000040 Print NML messages
0x00000080 Print time taken for motion to complete
0x00000100 Print interpreter debugging
0x00000200 Print RCS debugging
0x00000400 Print raw trajectory data
0x00000800 Print interpreter list
0x7FFFFFFF Print all debugging messages
-----------------------------------------------
об остальных возможных аргументах:
-v включает режим подробных сообщений
-k присваивает DASHK=-k и "разрешает" halcmd выполнять команды далее после ошибки
http://www.linuxcnc.org/docs/2.5/html/m ... cmd.1.html
-h выводит help:
вплоть до синтаксиса bash ...
------------------
Код: Выделить всё
prefix=/home/nkp/emc2-sim
exec_prefix=${prefix}
LINUXCNC_HOME=/home/nkp/emc2-sim; export LINUXCNC_HOME
LINUXCNC_BIN_DIR=/home/nkp/emc2-sim/bin
LINUXCNC_TCL_DIR=/home/nkp/emc2-sim/tcl
LINUXCNC_HELP_DIR=/home/nkp/emc2-sim/docs/help
LINUXCNC_RTLIB_DIR=/home/nkp/emc2-sim/rtlib
LINUXCNC_CONFIG_PATH="~/linuxcnc/configs:/home/nkp/emc2-sim/configs"
LINUXCNC_NCFILES_DIR=/home/nkp/emc2-sim/nc_files
LINUXCNC_LANG_DIR=/home/nkp/emc2-sim/src/objects
REALTIME=/home/nkp/emc2-sim/scripts/realtime
LINUXCNC_IMAGEDIR=/home/nkp/emc2-sim
LINUXCNC_TCL_LIB_DIR=/home/nkp/emc2-sim/tcl
PATH=$LINUXCNC_BIN_DIR:$PATHпо умолчанию переменные являются локальными,чтоб сделать
их глобальными(переменные окружения) применяется команда export
export LINUXCNC_HOME
списки значений записываются через двоеточие (':')
LINUXCNC_CONFIG_PATH="~/linuxcnc/configs:/home/nkp/emc2-sim/configs"
посмотреть переменные окружения можно командой в терминале printenv
в выведеном списке HOME - путь к вашей домашней папке (переменная HOME используется в "нашем" скрипте)
упрощенно:
variable - переменная
$variable или ${variable} - значение переменной
---------------------
Код: Выделить всё
LSMOD=/sbin/lsmod # команда управления модулями http://nix.zeya.org/wiki/Lsmod
PIDOF="/bin/pidof -x" # команда , идентификатор процессов (PID) http://ru.wikipedia.org/wiki/Pidof----------------------------
PS=/bin/ps # ps (process status) — отчёт о работающих процессах http://ru.wikipedia.org/wiki/Ps
AWK=/usr/bin/awk # http://rus-linux.net/MyLDP/consol/awk.html
IPCS=/usr/bin/ipcs # информации о состоянии средств межпроцессной связи http://citforum.ru/operating_systems/manpages/IPCS.1.shtml
KILL=/bin/kill # http://pingvinus.ru/note/ps-kill-killall------------------
[ -d $LINUXCNC_HOME/scripts ]
выражение в квадратных скобках - синтаксис команды test , результат которой true или false...
&& - применяется ,когда нужно выполнить вторую команду в зависимости
от успешности выполнения первой:
попросту - если [ -d $LINUXCNC_HOME/scripts ] уже False , то вторую команду уже нет смысла и выполнять (исходя
из того ,что && "руководствуется" правилами логического AND)
в этом скрипте командв test проверяет:
-d существует ли указанная папка
-z пустая ли указанная строка
-n не пустая ли указанная строка
в [ -d $LINUXCNC_HOME/scripts ] && PATH=$LINUXCNC_HOME/scripts:$PATH
если существует папка $LINUXCNC_HOME/scripts (значение переменной $LINUXCNC_HOME
берем выше - LINUXCNC_HOME=/home/nkp/emc2-sim) , то левая часть - true , и значит
выполняем правую (после &&),
то есть присваиваем переменной PATH значение (в данном случае - список путей через двоеточие)
---------------------
далее - немаловажный момент - вывод информции для отладки программы...
по умолчанию емс создает два временных файла в /tmp
DEBUG_FILE=$(mktemp /tmp/linuxcnc.debug.XXXXXX)
PRINT_FILE=$(mktemp /tmp/linuxcnc.print.XXXXXX)
и в них перенаправляется вся отладочная информация,
если только скрипт не был запущен с аргументом -d :
linuxcnc -d здесь в скрипте обрабатываются все возможные аргументы
имхо самым полезным являетя -d
if tty -s; then
DEBUG_FILE=/dev/fd/2
echo "Debug mode on" >$DEBUG_FILE
fi
команда tty "говорит" - запущен ли терминал
в таком случае вывод перенаправляется в стандартный поток ошибок /dev/fd/2
если нет - активируется режим debugging (set -x;;)(деактивируется +x)
~~~~~~~~~~~~
режим debugging можно устанавливать и в файле ini в секции [EMC]
0x00000000 Do not print any debugging messages.
0x00000001 Print invalid messages
0x00000002 Print configuration settings
0x00000004 Print defaults
0x00000008 Print version
0x00000010 Print task messages
0x00000020 Print IO points
0x00000040 Print NML messages
0x00000080 Print time taken for motion to complete
0x00000100 Print interpreter debugging
0x00000200 Print RCS debugging
0x00000400 Print raw trajectory data
0x00000800 Print interpreter list
0x7FFFFFFF Print all debugging messages
-----------------------------------------------
об остальных возможных аргументах:
-v включает режим подробных сообщений
-k присваивает DASHK=-k и "разрешает" halcmd выполнять команды далее после ошибки
http://www.linuxcnc.org/docs/2.5/html/m ... cmd.1.html
-h выводит help:
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
далее на очереди ini файл...
INIVAR=inivar
inivar -var DISPLAY -sec DISPLAY -ini /home/nkp/emc2-dev-80db2a2/configs/Bosh/Bosh.ini вернет axis
inivar - утилита , выводит на stdout значения полей из ini файла
syntax: inivar -var <variable> {-sec <section>} {<-ini inifile>}
/bin/inivar - программа
/src/libnml/inifile/inivar.cc - исходники
можно использовать в своих скриптах для парсинга ини файла
-----------------------------------
выполнение команд и присвоение результатов переменной:
есть два синтаксических способа
INIFILE=$($INIVAR -ini ~/.linuxcncrc -var LAST_CONFIG -sec PICKCONFIG )
и
INIFILE=`$INIVAR -ini ~/.linuxcncrc -var LAST_CONFIG -sec PICKCONFIG `
в обоих случаях переменной INIFILE будет присвоен результат выполнения
команды $INIVAR -ini ~/.linuxcncrc -var LAST_CONFIG -sec PICKCONFIG
в скрипте применяются оба способа...
~~~~~~~~~~~~~~~~~
INIVAR=inivar
inivar -var DISPLAY -sec DISPLAY -ini /home/nkp/emc2-dev-80db2a2/configs/Bosh/Bosh.ini вернет axis
inivar - утилита , выводит на stdout значения полей из ini файла
syntax: inivar -var <variable> {-sec <section>} {<-ini inifile>}
/bin/inivar - программа
/src/libnml/inifile/inivar.cc - исходники
можно использовать в своих скриптах для парсинга ини файла
Код: Выделить всё
from subprocess import *
servo_period_ns = float(Popen(["inivar","-var","SERVO_PERIOD","-sec","EMCMOT",
"-ini","/home/nkp/emc2-dev-80db2a2/configs/1/Sherline3Axis_mm.ini" ],stdout=PIPE).communicate()[0])выполнение команд и присвоение результатов переменной:
есть два синтаксических способа
INIFILE=$($INIVAR -ini ~/.linuxcncrc -var LAST_CONFIG -sec PICKCONFIG )
и
INIFILE=`$INIVAR -ini ~/.linuxcncrc -var LAST_CONFIG -sec PICKCONFIG `
в обоих случаях переменной INIFILE будет присвоен результат выполнения
команды $INIVAR -ini ~/.linuxcncrc -var LAST_CONFIG -sec PICKCONFIG
в скрипте применяются оба способа...
~~~~~~~~~~~~~~~~~
Последний раз редактировалось nkp 14 апр 2014, 07:34, всего редактировалось 1 раз.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Алгоритм работы ЕМС
Не советую использовать термин "глобальными", правильнее назвать их наследуемыми.nkp писал(а):их глобальными(переменные окружения) применяется команда export
Значения таких переменных наследуются дочерними процессами. Родительский процесс от потомков ничего унаследовать не может.
Правильнее будет сказать, что это не список, а тоже просто строка. А вот программа, которая читает значение этой переменной может воспринимать её как список, а может не воспринимать.nkp писал(а):списки значений записываются через двоеточие (':')
можно в 3 раза короче: env - показывает переменные, значения которых наследуются, а вот set без аргументов показывает вообще все переменные текущего процесса.nkp писал(а):посмотреть переменные окружения можно командой в терминале printenv
Это своего рода конфиг. Так делают для того, чтобы например если где программа awk будет находится не в /usr/bin, а просто в /bin не нужно было лазить по всему скрипту и исправлять.nkp писал(а):эти переменные используются командами функции завершения процессов( KillTaskWithTimeout() )
Я даже больше скажу: команда /bin/[ - это второе имя команды test.nkp писал(а):выражение в квадратных скобках - синтаксис команды test
Это полезно знать хотябы для понимания, что между командой и её аргументами должен быть пробел.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
то есть - отсюда правило ,что после кв.скобки всегда должен быть пробел ,иначе ошибка...UAVpilot писал(а):Я даже больше скажу: команда /bin/[ - это второе имя команды test. Это полезно знать хотябы для понимания, что между командой и её аргументами должен быть пробел
(и наверно отсюда же в прошлом необязательность правой скобки...
====================
единственно не понятное (пока) мне место в скрипте,
а вернее вообще этот синтаксический прием:
Код: Выделить всё
if test "xyes" = "xyes"; then
if [ -z "$LD_LIBRARY_PATH" ]; then
LD_LIBRARY_PATH=$LINUXCNC_HOME/lib
else
LD_LIBRARY_PATH=$LINUXCNC_HOME/lib:"$LD_LIBRARY_PATH"
fi
export LD_LIBRARY_PATH
fiбыл бы признателен за разъяснения...
============
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Алгоритм работы ЕМС
Некоторые современные реализации test умеют ругаться так:nkp писал(а):и наверно отсюда же в прошлом необязательность правой скобки.
Код: Выделить всё
$ /bin/[
/bin/[: пропущена «]»Код: Выделить всё
$ /bin/[ --help
Использование: test ВЫРАЖЕНИЕ
или: test
или: [ ВЫРАЖЕНИЕ ]
или: [ ]
или: [ КЛЮЧ
...это они так матом ругаются.nkp писал(а):точнее даже вот это: test "xyes" = "xyes";
Сам if из той-же серии, что недавно осбуждали: #if 0
"xyes" пошло вот откуда:
синтаксис команды test:
test операнд операция операнд
Соотв. в коде можно написать
Код: Выделить всё
if [ $VAR = "yes" ]Код: Выделить всё
$ VAR=yes
$ [ $VAR = "yes" ] && echo ok
ok
$ VAR=no
$ [ $VAR = "yes" ] && echo ok
$ VAR=
$ [ $VAR = "yes" ] && echo ok
bash: [: =: ожидается использование унарного оператора
$ Код: Выделить всё
if [ x$VAR = "xyes" ]Так-же можно и вот такой вариант использовать:
Код: Выделить всё
if [ "$VAR" = "xyes" ]Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
всё это познавательно ...UAVpilot писал(а):"xyes" пошло вот откуда:
но test "xyes" = "xyes"; - сравниваются две строки (одинаковые)
то есть - всегда вернет 0
в чём же смысл такого if-а ??
с таким же успехом можно было написать test "aa" = "aa";
??
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Алгоритм работы ЕМС
В том-же, что и того if'а - можно лёгким движением руки включить/выключить целый участок кода, без необходимости добавлять # в начало каждой строки.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Алгоритм работы ЕМС
Когда создавал эту тему хотел услышать как оно ЕМС работает "на пальцах", а не в if 
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
кто бы мог подумать))UAVpilot писал(а):В том-же, что и того if'а - можно лёгким движением руки включить/выключить целый участок кода, без необходимости добавлять # в начало каждой строки.
гугл был честно перелопачен(весь))
я думал отдельную создать - потом нашел всеми забытую , на околицах форума темку ...)aftaev писал(а):Когда создавал эту тему хотел услышать как оно ЕМС работает "на пальцах", а не в if
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Алгоритм работы ЕМС
Вообще-то как раз и разбираем как работает EMC, просто делаем это методично, по кусочкам.aftaev писал(а):Когда создавал эту тему хотел услышать как оно ЕМС работает "на пальцах", а не в if
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Алгоритм работы ЕМС
сложно как тоUAVpilot писал(а):просто делаем это методично, по кусочкам.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Алгоритм работы ЕМС
Тема интересная. Просто вряд ли получится.
nkp а Вы не разбирались как работают базовый и серво потоки?
nkp а Вы не разбирались как работают базовый и серво потоки?
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
UAVpilot,вот объясняют немного как это работает:nkp писал(а):
я так понимаю,вот этой строкой:
net spindle-index-enable <=> hm2_5i23.0.encoder.04.index-enable
net spindle-index-enable <=> motion.spindle-index-enable
и берется...
Только при этом счётчик энкодера обнуляется после каждого оборота.
https://www.mail-archive.com/emc-users% ... 57375.html
разве речь не о том ,что обнуляется не каждый оборот,а только вначале прохода один раз??
"поведение" index-enable зависит от режима (home) или активного кода (ж33,76)
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Алгоритм работы ЕМС
компонент encoder на python
:
Код: Выделить всё
#!/usr/bin/python
lut_x4 = [
0x00, 0x44, 0x88, 0x0C, 0x80, 0x04, 0x08, 0x4C,
0x40, 0x04, 0x08, 0x8C, 0x00, 0x84, 0x48, 0x0C
]
SM_PHASE_A_MASK = 0x01
SM_PHASE_B_MASK = 0x02
SM_LOOKUP_MASK = 0x0F
SM_CNT_UP_MASK = 0x40
SM_CNT_DN_MASK = 0x80
raw_counts = 0
cw = [[0,0],[0,1],[1,1],[1,0], [0,0],[0,1],[1,1],[1,0], [0,0],[0,1],[1,1],[1,0],[0,0],]
ccw = [[0,0],[1,0],[1,1],[0,1], [0,0],[1,0],[1,1],[0,1], [0,0],[1,0],[1,1],[0,1],[0,0],]
c_state = 0
if (0) : # (1)
d = cw
else:
d = ccw
for i in d :
state = c_state;
phaseA = i[0]
phaseB = i[1]
if (phaseA):
state |= SM_PHASE_A_MASK
if (phaseB):
state |= SM_PHASE_B_MASK
state = lut_x4[state & SM_LOOKUP_MASK]
if (state & SM_CNT_UP_MASK):
raw_counts += 1
elif (state & SM_CNT_DN_MASK):
raw_counts -= 1
c_state = state
print 'raw_counts=' , raw_counts
для "пощупать" алгоритм)
