Latency test и LinuxCNC - тест и работа

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

В соответствии с рекомендациями в соседней теме мне удалось добиться Latency не более 5600. Это при максимальной загрузке (интернет, видео, работа с дисками). Однако, при реальной работе в LCNC почти сразу вылетает Rtapi error, даже при установке BASE PERIOD = 20000.
Что бы еще подкрутить?
ini

Код: Выделить всё

[EMC]
MACHINE = BF20
DEBUG = 0

[DISPLAY]
DISPLAY = axis
EDITOR = gedit
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.2
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 1
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
BASE_PERIOD = 20000
SERVO_PERIOD = 1000000

[HAL]
HALUI = halui
HALFILE = BF20.hal
HALFILE = custom.hal
POSTGUI_HALFILE = custom_postgui.hal

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 1.
MAX_LINEAR_VELOCITY = 50.
NO_FORCE_HOMING = 0

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

[AXIS_0]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 24.
MAX_ACCELERATION = 200.0
STEPGEN_MAXACCEL = 300.0
SCALE = 800.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -1.
MAX_LIMIT = 255.
HOME_OFFSET = 15.0
HOME_SEARCH_VEL = -20.
HOME_LATCH_VEL = 1.
HOME_SEQUENCE = 1

[AXIS_1]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 24.
MAX_ACCELERATION = 200.0
STEPGEN_MAXACCEL = 300.0
SCALE = 800.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -1.0
MAX_LIMIT = 135.
HOME_OFFSET = 15.
HOME_SEARCH_VEL = -20.

HOME_LATCH_VEL = 1.
HOME_SEQUENCE = 1

[AXIS_2]
TYPE = LINEAR
HOME = 230.
MAX_VELOCITY = 18.
MAX_ACCELERATION = 300.0
STEPGEN_MAXACCEL = 500.0
SCALE = 1047.27272727
FERROR = 1.
MIN_FERROR = 0.25
MIN_LIMIT = -1.
MAX_LIMIT = 231.
HOME_OFFSET = 215.0
HOME_SEARCH_VEL = 18.
HOME_LATCH_VEL = -1.
HOME_SEQUENCE = 0
hal

Код: Выделить всё

loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out  "
loadrt stepgen step_type=0,0,0
loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf classicladder.0.refresh servo-thread
addf stepgen.update-freq servo-thread
net spindle-cmd <= motion.spindle-speed-out
net spindle-cw <= motion.spindle-forward

net estop-out => parport.0.pin-01-out
setp parport.0.pin-02-out-invert 1
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
setp parport.0.pin-03-out-invert 1
net ystep => parport.0.pin-03-out
setp parport.0.pin-03-out-reset 1
setp parport.0.pin-04-out-invert 1
net zstep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
setp parport.0.pin-05-out-invert 1
net astep => parport.0.pin-05-out
setp parport.0.pin-05-out-reset 1
setp parport.0.pin-07-out-invert 1
setp parport.0.pin-08-out-invert 1

net xdir => parport.0.pin-06-out
net ydir => parport.0.pin-07-out
net zdir => parport.0.pin-08-out
net adir => parport.0.pin-09-out
net spindle-cw => parport.0.pin-14-out
net spindle-pwm => parport.0.pin-16-out
#net xenable => parport.0.pin-17-out


net home-x <= parport.0.pin-11-in
net home-y <= parport.0.pin-12-in
net home-z <= parport.0.pin-13-in

setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 1
setp stepgen.0.dirhold 8000
setp stepgen.0.dirsetup 8000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
net home-x => axis.0.home-sw-in

setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 1
setp stepgen.1.dirhold 8000
setp stepgen.1.dirsetup 8000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable
net home-y => axis.1.home-sw-in

setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 8000
setp stepgen.2.stepspace 8000
setp stepgen.2.dirhold 20000
setp stepgen.2.dirsetup 20000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable
net home-z => axis.2.home-sw-in

net estop-out <= iocontrol.0.user-enable-out
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

# Load Classicladder without GUI (can reload LADDER GUI in AXIS GUI
loadusr classicladder --nogui custom.clp
Последний раз редактировалось Сергей Саныч 11 дек 2012, 10:48, всего редактировалось 1 раз.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение PKM »

Какая плата? Если D525MW - этот баг описан в рассылке LinuxCNC. Уже не помню деталей, но в силу некоторых причин периодически наблюдается вот такая большая задержка. Мои опыты это тоже подтверждают.
Крутить особо нечего, только увеличивать BASE PERIOD :)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

PKM писал(а):Какая плата? Если D525MW - этот баг описан в рассылке LinuxCNC
Нет, Asrock 939N68PV-GLAN.
А где в наше время найдешь материнку без лишних фишек и фенек с бантиками? :)
Чудес не бывает. Бывают фокусы.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение PKM »

Я откопал этот тред у себя в почте. В общем речь идет т том, что latency test не всегда видит задержки.

Latency test isn't foolproof. I have never been motivated enough to figure
out why, but I have seen many systems that will pass the latency test with
flying colors even under stress and then get a realtime error when starting
EMC.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

PKM писал(а):Я откопал этот тред у себя в почте. В общем речь идет т том, что latency test не всегда видит задержки.

Latency test isn't foolproof. I have never been motivated enough to figure
out why, but I have seen many systems that will pass the latency test with
flying colors even under stress and then get a realtime error when starting
EMC.
Понятно... только легче не стало :(
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Nick »

5600 это что-то запредельное, у меня такое только в консоли наблюдалось! :)

А какие у тебя длины шага и смены направления?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Nick писал(а):5600 это что-то запредельное, у меня такое только в консоли наблюдалось! :)
ну вот так получилось, после isolcpus = 1, до этого до 18000 доходило.
как там у нас - "выжми из станка всё", вот и выжимаю :)
я выложил http://www.cnc-club.ru/forum/viewtopic. ... 878#p47852 ini и hal
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 1
setp stepgen.0.dirhold 8000
setp stepgen.0.dirsetup 8000
как сказано в мануале по hal, все равно все расширятся до базового периода.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Nick »

А если опытным путем попробовать найти приблизительный baseperiod на котором не вылетает ошибка?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Nick писал(а):А если опытным путем попробовать найти приблизительный baseperiod на котором не вылетает ошибка?
Опытным путем удалось добиться, что при 25000 ошибка вылетает редко (раз в несколько минут), причем через случайные интервалы и вне зависимости от загрузки машины. То есть может просто стоять и ошибка вылетит почти сразу, а может и на загруженном аппарате довольно долго не появляться.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Nick »

Хмм... эта ошибка должна вылетать только 1 раз за запуск LinuxCNC... Как у тебя получается:
Serg-tmn писал(а):(раз в несколько минут)
Или это обобщенное значение?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Для чего мне это нужно. Мой контроллер нормально работает с ШД на малых скоростях только в микрошаге (1/8, 1/16). Уже на 1/4, не говоря про 1/2 идут сильные вибрации, аж ветви ремня трясутся. Это при скорости около 60 мм/мин.
Чтобы работать с таким микрошагом и одновременно иметь возможность работать на достаточно больших скоростях (разгонял до 5400 мм/мин, а работать бы хотелось хотя бы до 3000) нужно иметь достаточно высокую частоту STEP - до 40 кГц. Соответственно, base_period не больше 12500 нс
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Nick писал(а):Хмм... эта ошибка должна вылетать только 1 раз за запуск LinuxCNC... Как у тебя получается:
Serg-tmn писал(а):(раз в несколько минут)
Или это обобщенное значение?
Разумеется. Как только ошибка вылетала, я перезапускал LinuxCNC.
Чудес не бывает. Бывают фокусы.
_taras_
Мастер
Сообщения: 546
Зарегистрирован: 16 мар 2011, 15:19
Репутация: 69
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение _taras_ »

Serg-tmn
Можно ссілку или краткую віжимку как добиться таких впечатляющих результатов?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Nick »

Serg-tmn писал(а):нужно иметь достаточно высокую частоту STEP - до 40 кГц
40кГц с LPT снимать не просто... Лучше взять какой-нибудь внешний генератор шагов.
Вообще, если base_period 12500 и latency 5000, то частота шагов между двумя шагами может скакать до 3 раз. Т.е. один шаг может быть 5000, а второй - 17000, от момента у двигателя вообще ничего не останется.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

_taras_ писал(а):Serg-tmn
Можно ссілку или краткую віжимку как добиться таких впечатляющих результатов?
Это про Latency? Толку-то, если при работе все равно вылетает ошибка...
Собственно, в этой теме расписано http://www.cnc-club.ru/forum/viewtopic. ... 8&start=40
Запрещаешь в BIOS setup все энергосбережение и лишнюю периферию.
Если процессор многоядерный, делаешь так:

Код: Выделить всё

sudo gedit /etc/default/grub
в строку типа

Код: Выделить всё

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
добавляешь внутри кавычек через пробел

Код: Выделить всё

isolcpus = 1
Если ядер больше 2, вместо 1 ставишь количество ядер минус 1
записываешься
выполняешь

Код: Выделить всё

 sudo update-grub
перезагружаешься.

И все сильно зависит от материнки, а это - лотерея.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Nick писал(а):40кГц с LPT снимать не просто... Лучше взять какой-нибудь внешний генератор шагов.
собственно, к этому и склоняюсь.
Nick писал(а):Вообще, если base_period 12500 и latency 5000, то частота шагов между двумя шагами может скакать до 3 раз. Т.е. один шаг может быть 5000, а второй - 17000, от момента у двигателя вообще ничего не останется.
Для микрошага это не столь критично. За 8 импульсов неизбежно произойдет усреднение.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Nick »

Да, но усреднение пройдет и по неровной частоте, что в итоге даст еще более маленький момент.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Nick писал(а):Да, но усреднение пройдет и по неровной частоте, что в итоге даст еще более маленький момент.
Эээ... не понял насчет неровной частоты. Расшифруй.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Nick »

Ну скажем пришел импульс шагать на 5 мкс позже чем надо по частоте, к этому моменту двигатель по инерции должен уже проехать на некоторое расстояние больше, чем этот шаг, получается, что эти 5мкс мы вместо того, чтобы тянуть двигатель вперед, тянули его назад => потеря момента. Но т.к. у нас сигнал запаздывает не постоянно, этот эффект размазывается и получается равномерная потеря момента.

Когда получу хорошие драйвера, буду стенд испытательный делать что бы момент двигателей измерять, планирую на нем провести тесты потери момента из-за неравномерной управляющей частоты. :roll:
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Latency test и LinuxCNC - тест и работа

Сообщение Сергей Саныч »

Nick писал(а):Ну скажем пришел импульс шагать на 5 мкс позже чем надо по частоте, к этому моменту двигатель по инерции должен уже проехать на некоторое расстояние больше, чем этот шаг, получается, что эти 5мкс мы вместо того, чтобы тянуть двигатель вперед, тянули его назад => потеря момента. Но т.к. у нас сигнал запаздывает не постоянно, этот эффект размазывается и получается равномерная потеря момента.
Это справедливо для режима шага, ну или полушага, когда не вовремя пришедший импульс действительно может потянуть двигатель назад. А в микрошаге это приведет только к небольшому искажению формы тока двигателя. А накопления ошибки не произойдет, она будет оставаться в пределах +-latency на любом числе импульсов. Скажем, для одного шага при микрошаге 8 нужно подать 8 импульсов STEP, что соответствует минимум 16 тактам базовой частоты. Ошибка составит (5000*2)/(12500*16) = 0.05 - всего 5 %
Чудес не бывает. Бывают фокусы.
Ответить

Вернуться в «LinuxCNC»