Страница 1 из 2

Отобразить ошибки linuxcnc

Добавлено: 25 мар 2019, 11:34
Taganrog
Добрый день, linuxcnc на некоторых программа останавливается без каких либо сообщений и явных багов в коде.
Как выяснить что именно не нравиться программе ?
Допустим методом тыка удалось выяснить что две команды g33 идущие друг за другом -работают не правильно. Между ними обязательно должно быть перемещение по G0 или G1 хоть на 0,001мм.
А вот когда исполняется только часть кода :
11.png (5354 просмотра) <a class='original' href='./download/file.php?id=159594&mode=view' target=_blank>Загрузить оригинал (145.71 КБ)</a>
а потом программа просто стоит - что делать непонятно. Может есть какой механизм узнать чего она ждет или что ей не нравиться?
Вот видео пример одной такой программы:
https://www.youtube.com/watch?v=eYeEk8J_p_A

Вот она сама:
test2.ngc
(4.75 КБ) 907 скачиваний
также вот этот кусок смены инструмента отлично работает если запускать как обычную программу:

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

%
#<tool>=11
#<z_start>=#<_z>
#<x_change>= 25

G0 X#<x_change>
G53 G0 Z100
M6T#<tool>
G43
G0 X#<x_change>
G0 Z#<z_start>
m30
%

а когда оформил его в О-код:

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

o<change>sub
#<tool>=#1
#<z_start>=#<_z>
#<x_change>= 25
G0 X#<x_change>
G53 G0 Z100
M6T#<tool>
G43
G54
G0 X#<x_change>
G0 Z#<z_start>
o<change>endsub
M2
и вызываю так :

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

o<change> call [11]
Выполняется только до строчки с G43.
После нее Движения по G0 - не происходит. Программа просто чего то ждет.

Re: Отобразить ошибки linuxcnc

Добавлено: 25 мар 2019, 13:41
iMaks-RS
Становиться на паузу, после нажатия на ОК запроса о смене инструмента, если отжать - продолжает работу.
Интерфейс Axis.

Дополню - происходит если нажата кнопка на панели "Остановка по требованию Alt+M 1". Если её отжать - то код продолжает работу после нажатия ОК.

Проверял на "голом" пк, не подключенном к станку.. Как ведёт себя шпиндель в этот время - без понятия. (таки 5мм мало для смены инструмента.. строка 21)

Re: Отобразить ошибки linuxcnc

Добавлено: 25 мар 2019, 15:45
Taganrog
iMaks-RS писал(а):Становиться на паузу, после нажатия на ОК запроса о смене инструмента, если отжать - продолжает работу.
Интерфейс Axis.
Попробовал перекинуть конфиг на Axis.
Кстати в симуляции - эта программа работает.
Скриншот 2019-03-25 15.34.03.png (5301 просмотр) <a class='original' href='./download/file.php?id=159613&mode=view' target=_blank>Загрузить оригинал (77.34 КБ)</a>
В Axis видно что на паузе не стоит. Окошко после смены инструмента не выскакивает. Возможно неверно его зациклил ?

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

#---------------  смена инструмента без подтверждения -----------------
net tool-number <= iocontrol.0.tool-prep-number
net tool-change-loopback iocontrol.0.tool-change => iocontrol.0.tool-changed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
Файлы конфига на всякий случай для axis:
Axis_tokar.tar.gz
(20.49 КБ) 981 скачивание
П.С.
Эта программа тоже содержит и смену инструмента и перемещения и отрабатывается на Ура на этом же конфиге.

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

%
#<tool>=10
#<z_start>=#<_z>
#<x_man>= 25
G0 X#<x_man>
G53 G0 Z100
M6T#<tool>
G43
G0 X#<x_man>
G0 Z#<z_start>
G4P5
#<tool>=11
G0 X#<x_man>
G53 G0 Z100
M6T#<tool>
G43
G0 X#<x_man>
G0 Z#<z_start>
m30
%

Re: Отобразить ошибки linuxcnc

Добавлено: 26 мар 2019, 15:33
Taganrog
Экспериментальным путем выяснил что код

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

o<change> call [1]
вызываемый в режиме auto (если находится в тексте программы) отрабатывается корректно. Вечером проверю на железке.
Но если высзвать этуже функцию в MDI режиме , просто вставив в строчку - то файл начинает исполняться только до смены инструмента .
А далее 2 варианта:
1. Если уже установлен инструмент на который ты меняешь - движения происходят корректно.
2. Инструмент меняется - движение останавливается.
Вот код файла change.ngc

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

o<change>sub
#<tool>=#1
#<z_start>=#<_z>
#<x_change>= 25
G0 X#<x_change>
G53 G0 Z100
G43 M6T#<tool>
G0 X#<x_change>
G0 Z#<z_start>
o<change>endsub
M2
Может есть у кого мысли ?

п.с. Если вбивать в MDI весь код файла построчно то все тоже работает. Что за барабашка ? Как его победить. Ведь хочется и в ручном режиме точить разными инструментами.

Re: Отобразить ошибки linuxcnc

Добавлено: 26 мар 2019, 16:41
solo
Re: FAQ по Gcode, примеры #206
может это поможет
или вот еще
Re: Авто ноль по Z в EMC #112

Re: Отобразить ошибки linuxcnc

Добавлено: 28 мар 2019, 08:52
nkp
запускай емс из терминала:

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

linuxcnc -d
может чего напишет полезного...

Re: Отобразить ошибки linuxcnc

Добавлено: 28 мар 2019, 11:01
vovafed
может поможет
по сути инструмент переключается так

M64 P3
M64 P0
M65 P3 ; release tool
все остальное можно дописать
программа смены toolchange.ngc

Re: Отобразить ошибки linuxcnc

Добавлено: 14 май 2019, 12:26
Taganrog
Прошлый косяк обошел перестав пользоваться вызовом внешней процедуры. Вписывал все в тело программы. Но пришла и тут беда.
Появилась вчера следующая проблема аналогичного плана. Программа выполняется ровно 1 раз. при попытки запустить ее снова останавливается не выполняя эту строку:
Скриншот 2019-05-14 12.04.54.png (5062 просмотра) <a class='original' href='./download/file.php?id=162639&mode=view' target=_blank>Загрузить оригинал (151.08 КБ)</a>
Просто стоит и чего-то ждет. Если нажать кнопку стоп и снова запустить то опять пройдет полностью ровно 1 раз. Как так ? Неужели в linuxcnc программа выполняясь способна оставлять какие то хвосты или флаги что мешают ей повторить этот же код?
Вот тело программы:

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

%
#1=4 (dlina prutka)
G7
G0 G53 Z60
G0 G53 X428
G0 G53 Z8
M64 P0 (position mode)  
G10 L20 P0 C0
G1 F8000 C-250(otkrutit)
G0 G53 Z20
G0 G53 X510
G53 Z10
G53 X537
G1 F500 G53 Z[10+ #1]
G0 G53 X510
G0 G53 Z20
G0 G53 X428
G0 G53 Z8
M65 P0 (velocity mode)  
m3 S100
m5
G4 P2
G0 G53 Z60
m30
%
Она отлично работала более недели. потом дописал отображение оборотов на экране (правил hal файл). На следующий день появился такой эффект. Вот не понимаю, что в принципе можно прописать там чтоб код выполнялся только 1 раз. трогал только пины отвечающие за обороты шпинделя. но в этих строчках он даже не включается. Да и hal создает постоянные связи и если бы были ошибки то конфиг не работал бы корректно вообще. Может вообще так совпало и hal файл не причем ? никакого обновления системы я не делал. вот и грешу на него.

Прикрепляю весь конфиг станочка.
tokar.rar
(36.13 КБ) 199 скачиваний

Re: Отобразить ошибки linuxcnc

Добавлено: 14 май 2019, 13:35
nkp
сам емс этот ж-код выполняет несколько раз подряд без проблем
https://www.youtube.com/watch?v=HJl_RTJ ... e=youtu.be

Re: Отобразить ошибки linuxcnc

Добавлено: 14 май 2019, 13:37
nkp
попробуй поставить перед этой строкой небольшую паузу (g4 p0.5)

Re: Отобразить ошибки linuxcnc

Добавлено: 14 май 2019, 14:46
Taganrog
nkp писал(а):сам емс этот ж-код выполняет несколько раз подряд без проблем
Ага, то же только что создал еще один конфиг с нуля и погонял. Получается что действительно что-то в hal или ini файле может оказывать такой эффект.
nkp писал(а):попробуй поставить перед этой строкой небольшую паузу (g4 p0.5)
Сделал. Непомогло. расставил после каждой строки задержку в 1 секунду.
Скриншот 2019-05-14 14.42.48.png (5016 просмотров) <a class='original' href='./download/file.php?id=162648&mode=view' target=_blank>Загрузить оригинал (154.29 КБ)</a>
Если есть еще какие либо идей, или хотябы предположения, пиши плиз. Потому как просмотрел еще раз hal файл- ошибок не вижу.

Re: Отобразить ошибки linuxcnc

Добавлено: 14 май 2019, 15:09
Serg
Я б сделал так:
Прикрутил бы свой BlackBox и сделал бы активацию пином, управляемым M64. Вставил бы активацию перед "стрёмным" кадром и запустил бы УП сначала и повторно, а потом сравнил бы записи в blackbox.log и помедитировал бы над различиями...

Re: Отобразить ошибки linuxcnc

Добавлено: 15 май 2019, 07:13
atomichammer
дописал отображение оборотов на экране (правил hal файл)
Мож ты "оторвал" пин от чего-то важного, когда прикручивал обороты? Вот он и тупит как раз над этой строчкой F8000. Частотник с обратной связью? Можно глянуть пин spindle-at-speed

Re: Отобразить ошибки linuxcnc

Добавлено: 15 май 2019, 10:04
Taganrog
UAVpilot писал(а):Прикрутил бы свой BlackBox и сделал бы активацию пином,
Почитал что это такое, пока сложновато для меня. Пошел более простым, но муторным методом- стал отключать по 1 строчке в hal файле до устранения неисправности.
Вечером нашел такую.
atomichammer писал(а):Вот он и тупит как раз над этой строчкой F8000.
Так это "линейное" перемещение 4 оси. обороты задаются в конце строчкой m3S100 . но ты оказался прав :)
atomichammer писал(а): Частотник с обратной связью? Можно глянуть пин spindle-at-speed
Да. в качестве привода серва и энкодер с нее заведен в linuxcnc .
Снял видео ,там действительно оказалось подключенный пин spindle-at-speed к выходу таймера является причиной бага. Если его закоментировать - все работает отлично:
https://www.youtube.com/watch?v=3KirZBspMqg
На мой взгляд какая то логическая ошибка, ибо:
1. В коде нет синхронного перемещения со шпинделем. Тоесть включен он или нет не должно мешать перемещению осей.
2. Почему задержка включения этого сигнала может влиять на часть кода где вообще нет управлением шпинделем ?
3. Почему это же не мешает проходить программе в первый раз.

Задержка мне необходима, оттого вопрос. как это победить?
Прикладываю текст hal файла:

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

# прутковый автомат февраль 2019
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0
loadrt encoder num_chan=1
loadrt scale count=1
loadrt lut5
loadrt pwmgen output_type=1
loadrt timedelay count=2
loadrt or2 count=1

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf encoder.update-counters 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 encoder.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
addf lut5.0 servo-thread
addf pwmgen.update servo-thread
addf scale.0 servo-thread
addf timedelay.0   servo-thread
addf timedelay.1   servo-thread
addf or2.0 servo-thread

#-----------    SPINDEL ----------------------------------
setp pwmgen.0.pwm-freq 100.0
setp pwmgen.0.scale 3687.5
setp pwmgen.0.offset 0.0864406779661
setp pwmgen.0.dither-pwm true
net spindle-cmd-rpm     <= motion.spindle-speed-out
net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-cmd-rps     <= motion.spindle-speed-out-rps
net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-cmd-rpm => pwmgen.0.value
net spindle-on <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
net spindle-pwm  => parport.0.pin-04-out
setp parport.0.pin-04-out-invert TRUE

#----- encoder spindle
net spindle-phase-a <= parport.0.pin-10-in
net spindle-phase-b <= parport.0.pin-11-in
net spindle-index   <= parport.0.pin-12-in-not
net spindle-phase-a => encoder.0.phase-A
net spindle-phase-b => encoder.0.phase-B
net spindle-index   => encoder.0.phase-Z
setp encoder.0.index-enable 1
setp encoder.0.counter-mode true
setp encoder.0.position-scale 40

net spindle-position encoder.0.position => motion.spindle-revs
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
net spindle-velocity-feedback-rps encoder.0.velocity => motion.spindle-speed-in

setp scale.0.gain 60
net spindle-velocity-feedback-rps => scale.0.in
net spindle-velocity-feedback-rpm <= scale.0.out

#------ Управление питанием сервы c задержкой по выключнию-----------
setp timedelay.0.on-delay 0
setp timedelay.0.off-delay 1.4
net spindle-on => timedelay.0.in
net spindle_timer timedelay.0.out => or2.0.in0
net servo_position_mode           => or2.0.in1
net servo_on <= or2.0.out
setp parport.0.pin-16-out-invert 1
net servo_on   => parport.0.pin-16-out
net servo_position_mode <= motion.digital-out-00
net servo_position_mode => parport.0.pin-03-out

#-------  задержка установки сигнала  spindle-at-speed
setp timedelay.1.on-delay 2
setp timedelay.1.off-delay 0
net spindle-on => timedelay.1.in
#net spindle-at-speed  <= timedelay.1.out
net spindle-at-speed    => motion.spindle-at-speed




#----- подач СОЖ---------- 
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
net coolant-flood   => parport.0.pin-17-out

#--------------- Homing --------------------
net all-limit-home  <= parport.0.pin-13-in
setp lut5.0.function 0x10000
net all-limit-home => lut5.0.in-4
net all-limit <= lut5.0.out
net homing-x <= axis.0.homing => lut5.0.in-0
net homing-z <= axis.2.homing => lut5.0.in-2

#------------------ ось X --------------------
net xenable         => parport.0.pin-09-out
net xstep           => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir            => parport.0.pin-14-out
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
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 all-limit-home => axis.0.home-sw-in
net all-limit => axis.0.neg-lim-sw-in
net all-limit => axis.0.pos-lim-sw-in

#-----------------  ось Z --------------------
net zstep           => parport.0.pin-07-out
setp parport.0.pin-07-out-reset 1
net zdir            => parport.0.pin-08-out
setp stepgen.1.position-scale [AXIS_2]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 35000
setp stepgen.1.dirsetup 35000
setp stepgen.1.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.1.position-cmd
net zpos-fb stepgen.1.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.1.step
net zdir <= stepgen.1.dir
net zenable axis.2.amp-enable-out => stepgen.1.enable
net all-limit-home => axis.2.home-sw-in
net all-limit => axis.2.neg-lim-sw-in
net all-limit => axis.2.pos-lim-sw-in

#----------------- ось C --------------------
net cdir            => parport.0.pin-05-out
net cstep           => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
setp stepgen.2.position-scale [AXIS_5]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 35000
setp stepgen.2.dirsetup 35000
setp stepgen.2.maxaccel [AXIS_5]STEPGEN_MAXACCEL
net cpos-cmd axis.5.motor-pos-cmd => stepgen.2.position-cmd
net cpos-fb stepgen.2.position-fb => axis.5.motor-pos-fb
net cstep <= stepgen.2.step
net cdir <= stepgen.2.dir
net cenable axis.5.amp-enable-out => stepgen.2.enable
net all-limit-home => axis.5.home-sw-in
net all-limit => axis.5.neg-lim-sw-in
net all-limit => axis.5.pos-lim-sw-in

#---------------  Стоп сигнал --------------------
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

#---------------  смена инструмента без потверждения--------------------
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

Re: Отобразить ошибки linuxcnc

Добавлено: 15 май 2019, 14:46
Serg
Taganrog писал(а):На мой взгляд какая то логическая ошибка, ибо:
Я думаю (проверять лень), что тут ошибка в LinuxCNC. Но ошибка именно в том, что в первый раз работает нормально. :)
Похоже система не реагирует на spindle-at-speed до первого использования шпинделя, а после M3 или S100 "вспоминает", что у неё есть шпиндель и начинает ждать нужного сигнала на spindle-at-speed. Считаю, что правильным будет сделать так, чтобы при "M64 P0" на spindle-at-speed сразу появлялся нужный сигнал...

Re: Отобразить ошибки linuxcnc

Добавлено: 15 май 2019, 17:06
Taganrog
UAVpilot писал(а):чтобы при "M64 P0" на spindle-at-speed сразу появлялся нужный сигнал...
В принципе его можно всегда держать активным но тогда убивается весь его смысл.

п.с. кстати а как же тогда быть если станке или манипуляторе шпинделя нет вообще как такового? или при данных перемещениях он и не должен включаться? Ведь linuxcnc не знает что ось C и шпиндель физически у меня одно и тоже и для его могзгов это две разные сущности.
п.с. Есть у кого либо рабочий пример конфига с задержкой на раскрутку шпинделя ? Функция очень нужна.

Re: Отобразить ошибки linuxcnc

Добавлено: 15 май 2019, 18:11
atomichammer
Мнээ, так этот сигнал же и должен появлятся, когда заданные обороты сравняются с принятыми с энкодера. Я свой хунянг частотник когда поставил и подключил модбас, так у меня сразу чудненько этот синал и заработал, пока обороты не дойдут до кондиции станок дальше не поедет. И вроде я ничо такого не настраивал, скопировал откуда-то.

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

net spindle-speed-cmd   motion.spindle-speed-out-abs => vfd.speed-command
#net spindle-cmd-rpm-abs => vfd.speed-command
net spindle-cw          motion.spindle-forward  => vfd.spindle-forward
net spindle-ccw         motion.spindle-reverse  => vfd.spindle-reverse
net on                  motion.spindle-on       => vfd.spindle-on
net spindle-at-speed    motion.spindle-at-speed => vfd.spindle-at-speed
net  _f.spindle-speed.fb vfd.spindle-speed-fb pyvcp.spindle_rpm
net spindle-at-speed pyvcp.spindle-at-speed-vcp
вот все мои настройки касательно шпинделя
ну у меня сигнал spindle-at-speed берется с компонента vfd, а тебе, наверное, придется самому сравнивать заданные обороты и возвращаемые, причем с некоторой погрешностью
Ну, кстати, если не по феншую, то можно перед каждым пуском и после каждого стопа в коде задержку писать руками или постпроцессор поправить, чтобы он это делал. Но я гляжу, до постпроцессора тут дело пока не дошло, все уп руками набраны )

Re: Отобразить ошибки linuxcnc

Добавлено: 16 май 2019, 07:49
Taganrog
atomichammer писал(а):Ну, кстати, если не по феншую, то можно перед каждым пуском и после каждого стопа в коде задержку писать руками
Это верно, не по феншую :) да и в случае паузы и снятия с нее программа сразу поедет. А не будет ждать раскрутки. Что не есть гуд.
atomichammer писал(а):Но я гляжу, до постпроцессора тут дело пока не дошло,
Скорее от него отошло :) . Сначала пробовал писать УП в fusion360 да sprutcam , так вот набросать программу для токарки ручками гораздо быстрее оказалось. Уж слишком простые профили деталек у меня пока . Без всяких криволинейных поверхностей. и движения получаются без лишних переходов и именно так, как хочется. Единственное, чтоб потом долго не парится читая код, я его снабжаю комментариями для себя, чтоб и после знать какой кусок что делает. особенно на повторяющихся заказах.

Вопрос в догонку а как в linuxcnc организовать отмену задания в MDI режиме кроме как кнопкой выключения станка ?
Допустим погнал я станок потихоньку кодом "g1f3z-50" и увидел что едет он слишком далеко. Как отменить задание ? кнопки пауза и стоп которые работают в режиме выполнения программы - неактивны в режиме MDI.

Re: Отобразить ошибки linuxcnc

Добавлено: 16 май 2019, 08:57
MX_Master
ESC = Abort

Re: Отобразить ошибки linuxcnc

Добавлено: 16 май 2019, 09:15
nkp
Taganrog писал(а):кнопки пауза и стоп которые работают в режиме выполнения программы - неактивны в режиме MDI.
то наверно не в Axis,
потому как там всегда останавливал кнопкой стоп.