Предпросмотр и бесконечный цикл

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

Предпросмотр и бесконечный цикл

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

Достаточно типовая, думаю, задача - обработка в бесконечном цикле неограниченного количества заготовок с паузой M00 после каждой и ручной сменой.
Однако, не так все просто. При загрузке программа циклится и виснет во время отработки предпросмотра (axis). Можно остановить ESC. Можно ограничить количество циклов по repeat. Но хотелось бы узнать, есть ли более радикальное решение. Например, если есть какой-нибудь флажок, который позволяет отличить режим предпросмотра от нормальной работы, то все решается элементарно. Или, скажем, флажок, который установливается автоматически во время загрузки программмы, но может быть сброшен вручную?
Здесь обсуждался похожий вопрос http://www.cnc-club.ru/forum/viewtopic. ... t=40&hilit , но окончательно решения вроде бы не найдено.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

В Gкод перед циклом или в конце цикла, а лучше вообще так:

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

(AXIS,hide) 
o100 repeat
(AXIS,show)
...
(AXIS,hide) 
o100 end repeat
(AXIS,show)
Либо вообще в конец цикла: (AXIS,stop) тогда как только дойдет до конца цикла превьшка прекратит рисоваться.


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

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а):В Gкод перед циклом или в конце цикла, а лучше вообще так:

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

(AXIS,hide) 
o100 repeat
(AXIS,show)
...
(AXIS,hide) 
o100 end repeat
(AXIS,show)
Либо вообще в конец цикла: (AXIS,stop) тогда как только дойдет до конца цикла превьшка прекратит рисоваться.
Нет, не работает.
В первом варианте (hide/show) зацикливается, во втором - превьюшка не рисуется.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а):Хммм... может попробовать сделать патч, который все циклы ограничит скажем 10 или 20 повторами или добавить параметр в ini...
Сделать repeat[20] не проблема...

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

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

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

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а):
Serg-tmn писал(а):А нет никакой возможности узнать из G-программы - превью выполняется в данный момент или работа?
хммм... не совсем понимаю... Я думаю так, превью рассчитывается только при загрузке программы. А во время выполнения ничего такого быть не должно... Или я что-то не правильно понял?
Да, но чтобы нарисовать превьюшку, G-код обязательно должен быть просмотрен и выполнен (в этом и суть "расчета превью", как сам понимаешь). Единственная разница - результат выводится не на станок,а на экран (точнее, в какой-то внутренний буфер, а потом на экран). Конечно, некоторые команды пропускаются (пауза, смена инструмента и т.п.).

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

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

o102 if [#<_эта переменная> EQ 0] (идет расчет для превью)
 о103 repeat[1] (однократно)
o102 else (идет обработка)
 о103 repeat[1000000] (многократно)
o102 endif
..........
..........
o103 endrepeat
Более того, если существует любая переменная, которая, скажем, обнуляется в момент загрузки файла G-кода, то это тоже можно использовать.

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

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

Просто выдели все repeat в (AXIS,hide) и не надо никаких переменных.

Или можешь написать что-то типа такого

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

#<num> = 1 (это для превьшки)

(AXIS,hide) 
#<num> = 100000 (это для обработки)
(AXIS,show) 

o100 repeat #<num>
....
Или вот тебе переменная для проверки превью:

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

#<preview> = 0 (это для обработки)
(AXIS,hide) 
#<preview> = 1(это для превью)
(AXIS,show) 
О как, я даже не ожидал, что такое можно сделать :)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Предпросмотр и бесконечный цикл

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

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

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

Ну в мане так написано:
Special comments can be inserted into the G Code file to control how the preview of AXIS behaves. In the case where you want
to limit the drawing of the preview use these special comments. Anything between the (AXIS,hide) and (AXIS,show) will not be
drawn during the preview. The (AXIS,hide) and (AXIS,show) must be used in pairs with the (AXIS,hide) being first. Anything
after a (AXIS,stop) will not be drawn during the preview.

These comments are useful to unclutter the preview display (for instance while debugging a larger g-code file, one can disable
the preview on certain parts that are already working OK).
• (AXIS,hide) Stops the preview (must be first)
• (AXIS,show) Resumes the preview (must follow a hide)
• (AXIS,stop) Stops the preview from here to the end of the file.
Кстати, а ты экранировал repeat или и repeat и end repeat? Вроде как говорят, что надо end repeat обязательно экранировать.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а): Кстати, а ты экранировал repeat или и repeat и end repeat? Вроде как говорят, что надо end repeat обязательно экранировать.
Естественно. Как ты сказал, так и сделал. Но не работает.
Экранированная строка выполняется при предпросмотре. Правда, достаточно своеобразно. Возможно, это глюк AXIS.
Вот иллюстрация:

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

G00 X0 Y0
F400
(AXIS,hide)
G01 Y100
(AXIS,hide)
G01 X80
Должна рисовать что-то вроде буквы Г ? Она и рисует при выполнении. А превью должен выдать только горизонтальный отрезок на уровне Y=100. Это если выключается только отрисовка. Или горизонтальный отрезок на уровне Y=0, если скрытая команда вообще не выполняется.
А выдает диагональ от 0,0 до 80,100! То есть внутренние переменные изменились, но отработка их не произошла.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

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

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а):поменяй второй
(AXIS,hide)
на
(AXIS,show)
Пардон, это опечатка, я вручную перепечатывал, а на станочном компьютере было как надо (все не соберусь подключить его в сеть).

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

G00 X0 Y0
F400
(AXIS,hide)
G01 Y100
(AXIS,show)
G01 X80
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

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

Re: Предпросмотр и бесконечный цикл

Сообщение Nick »

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

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а):хмммм... и правда не работает.... Т.е. такое ощущение, что все эти команды отрабатываются, но не отрисовываются.... хотя тоже странно как-то...
Если бы отрабатывались, но не отрисовывались, был бы горизонтальный отрезок длиной 80 на уровне 100. А так - диагональ. Получается, что неправильно отрабатывается и неправильно отрисовывается.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Предпросмотр и бесконечный цикл

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

Nick писал(а):Хммм... (AXIS,stop) вроде совсем отрубает предпросмотр... (точнее оставляет предпросмотр от прошлого раза).
Как-то так. Причем, если ставишь stop в конец длинной программы, то при загрузке - длительная пауза, как будто идет отработка, а потом - никаких результатов.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Предпросмотр и бесконечный цикл

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

Похоже, нашел выход. Может, кому пригодится.

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

o101 sub
......(код обработки одной заготовки)
o101 endsub
o101 call (это нарисует превьюшку и после запуска обработает первую заготовку)
(AXIS,hide)
o102 repeat[1000]
o101 call (а это обработка "от забора до обеда")
o102 endrepeat
(AXIS,show)
Чудес не бывает. Бывают фокусы.
Ответить

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