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

Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 21:44
odekolon
обнаружили сегодня такой глюк: - после нажатия на кнопку "стоп"
происходит движение по всем трем осям.
прежде чем поняли, что это бага, несколько граверов сломали.
вектор движения, похоже зависит от программы, то есть постоянен для конкретной программы,
но куда поедет, определить невозможно.
во время движения, координаты в AXIS стоят, после окончания появляются новые значения
на одной из программ, с особо длинным вектором движения (около 150 мм),
вылетает сообщение об ошибке типа "не могу делать (EMC_TRA)_SET_TELEOP_ENABLE в авто режиме с остановленным интерепретатором"

Что бы это могло значить?
.

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 21:49
umerov
у меня тоже самое, станок с нетривиальной кинметикой (mesa 5I20 и серво с аналоговым управлением).
У меня есть предположние - что это из-за мессы, может что-то кешируется.....

Нашел временное решение, если надо отменить программу, делаю подачу "0" потом только отменяю


Проверял с обычной кинематикой (управляеться по ЛПТ) - там все нормально.

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 22:52
Nick
Меса ничего не кеширует, всё пара метры обновляются в servo-thread . Но есть моменты, которые можно проверить. Например, что происходит при авосте. При lpt должен отключаться stepgen, и импульсы должны сразу исчезнуть. Возможно, в конфигурации с месой отключается все, ноstepgen на месе продолжает работать и останавливает двигатель плавно.

Надо посмотреть на графики halscope для обратной связи по скорости и авост.

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 22:57
odekolon
но у меня никакой mesы нет - чистый LPT
кстати странно, получается stepgen работает.
тогда вопрос " в каком случае степген работает после нажатия на кнопку "стоп"

PS - перезагрузка LinuxCNC не помогает - эффект остается!

и что означает переменная (EMC_TRA)_SET_TELEOP_ENABLE?

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 23:05
Nick
Нужен скрин halscope. Обратная связь от осей и авост. Посмотрим, что там показывает. А стоп ты как нажимаешь? На стоп или именно авост?

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 23:11
odekolon
а что такое Авост?
я жму кнопку "ESC" или кнопку c квадратиком на экране AXIS

есть еще аппаратный стоп - как внешний вход - кнопка "Грибок" (при этом у меня кроме воздействия на вход estop, еще и питание с драйвера снимается)в этом случае,естественно, все встает как есть и никто никуда не едет :hehehe:

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 23:18
Nick
Вот, по простому стоп может останавливаться с ускорением.
А авост это аварийная остановка, там все сразу встаёт. Авост = estop.

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 23:23
odekolon
хорошо, рассмотрим режим с просто стоп
я так понимаю, станок должен закончить текущий кадр и остановится?
и все-таки что означает фраза "не могу делать (EMC_TRA)_SET_TELEOP_ENABLE в авто режиме с остановленным интерепретатором"
на всякий случай - вот пример кода, при попытке остановки которого всегда происходит движение и вылет по вышеописанной ошибке

Это программа проверки механики станка на пропуск шагов/ошибки механики
по сути - это набор прямоугольников, расположенных примерно по диагонали рабочего поля
каждый прямоугольник какбы вырезается по контуру на глубину 10мм с подачей 0.1мм на проход
прямоугольники рисовались "от балды" в арткаме, поэтому значения такие неровные.
так вот - при попытке остановки этой программы, исполняется вектор движения, примерно совпадающей с воображаемой линией размещения прямоугольников, проходится путь около 15 см, после чего появляется сообщение об ошибке.

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

G0Z5.000
G0X0.000Y0.000S20000M3
G4 P2
G0X21.909Y23.322Z2.000
G1Z-0.100F600.0
G1X64.311Y23.322F6000.0
Y50.177
X21.909
Y23.322
G1Z-0.200F600.0
G1X64.311Y23.322F6000.0
Y50.177
X21.909
Y23.322
G1Z-0.300F600.0
G1X64.311Y23.322F6000.0
Y50.177
X21.909
Y23.322
G1Z-0.400F600.0

поскипано

G1Z-9.900F600.0
G1X773.851F6000.0
Y346.997
X731.448
Y314.488
G1Z-10.000F600.0
G1X773.851F6000.0
Y346.997
X731.448
Y314.488
G0Z2.000
G0X0.000Y0.000Z5.000
G0Z5.000
G0X0Y0
M30

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 08 сен 2015, 23:53
Serg
Предлагаю начать с описания конфигурации станка, версии LinuxCNC, ну и кусок УП не помешал-бы...

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 00:12
odekolon
UAVpilot писал(а):Предлагаю начать с описания конфигурации станка, версии LinuxCNC, ну и кусок УП не помешал-бы...
станок вотhttp://www.cnc-club.ru/forum/viewtopic. ... 74#p216974
Пример УП в посте выше

Хал файл:
мой-станок.hal
Hal
(3.54 КБ) 1031 скачивание
INI файл
мой-станок.ini
(3.24 КБ) 1062 скачивания
в общем-то на основе stepconfig
в папке my_subroutine_path, лежат файлы компенсации длины инструмента
как описано в моем сообщении 162 http://www.cnc-club.ru/forum/viewtopic. ... &start=160
версия linux CNC щас точно не помню, но вроде 2.6.6
комп - что-то типа пень4
вот где то так..

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 09:19
nkp
а не может это быть связано со сменой инструмента...
просто всего конфига не видно,и жкод не весь...
так можно было бы попытаться "повторить" ошибку...

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 09:28
odekolon
смена инструмента призводится вызовом подпрогорамм, кторые вставляет поспроцессор арткама
для проверки гипотезы глюков со сменой инструмента, строки из УП были удалены, а линуксCNC перезагружен
в коде больше ничего особенного нет - все одно и то же .
на другом коде, вектор глюка другой
да, всякие другие файлы конфигурации , типа там custom.hal - пустые

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 10:51
Nick
А никакие офсеты или компенсации при этом не включены?
Еще раз посмотреть бы на графики из halscope. Так можно точно определить, где искать проблему.
Вот эти пины интересно посмотреть:
axis.0.joint-vel-cmd
axis.1.joint-vel-cmd
axis.2.joint-vel-cmd
и наверное
halui.program.is-running

А сообщение об ошибке каждый раз появляется?

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 11:20
nkp
odekolon писал(а):для проверки гипотезы
аргументов в пользу гипотезы не было , просто не назначая смену в емс может быть уже
активным какой то инструмент (можно легко проверить в параметрах)
а в ини увидел движение в точку определенную для смены
вот и подумалось ;)
хотя не имею ни малейшего представления - как это может всё быть связанным со стопом :thinking:

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 11:58
odekolon
Nick писал(а):А никакие офсеты или компенсации при этом не включены?
Еще раз посмотреть бы на графики из halscope. Так можно точно определить, где искать проблему.
Вот эти пины интересно посмотреть:
axis.0.joint-vel-cmd
axis.1.joint-vel-cmd
axis.2.joint-vel-cmd
и наверное
halui.program.is-running

А сообщение об ошибке каждый раз появляется?
на этой программе - всегда, на других программах- никогда, но глючный вектор другой
номер инструмента установлен (остался от предыдущих запусков)

вот сейчас почитал CNC девелопер мануал, пока не все понял, но смысл примерно такой:

существуют команды, выдаваемые модулю EMCMOT:

-ABORT - просто прекращает все перемещения. команда может быть выдана в любое время, она не выключает EMCMOT , не меняет его состояния, просто прекращаются все движения.
результат зависит от режима в котором находится EMCMOT
но в общем, все движения прекращаются - я так понимаю, что эта команда и должна генериться по команде "СТОП программы"
-FREE - в этом режиме каждая ось независима,то есть кинематика неважна (хоть какая) и перемещения каждой оси независимы
команды толчкового перемещения (JOG) работают только в режиме FREE.
- TELEOP тут я немножко не понял, но похоже этот режим похож на FREE, но оси связаны кинематикой станка, и перемещения определяются не планировщиком траекторий а вектором скорости(???)
с этим режимом хотелось бы разобраться подробнее, поскольку он выдает ошибку.
- COORD машина переводится в режим координат, включается планировщик, можно исполнять G-коды.
- ENABLE\DISABLE - ну тут все понятно
оригинал под спойлером:
(для просмотра содержимого нажмите на ссылку)
2.7 Commands
This section simply lists all of the commands that can be sent to the motion module, along with detailed explanations of what
they do. The command names are defined in a large typedef enum in emc2/src/emc/motion/motion.h, called cmd_code_t. (Note
that in the code, each command name starts with EMCMOT_, which is omitted here.)
The commands are implemented by a large switch statement in the function emcmotCommandHandler(), which is called at the
servo rate. More on that function later.
There are approximately 44 commands - this list is still under construction.
2.7.1 ABORT
The ABORT command simply stops all motion. It can be issued at any time, and will always be accepted. It does not disable the
motion controller or change any state information, it simply cancels any motion that is currently in progress.1
2.7.1.1 Requirements
None. The command is always accepted and acted on immediately.
2.7.1.2 Results
In free mode, the free mode trajectory planners are disabled. That results in each joint stopping as fast as its accel (decel) limit
allows. The stop is not coordinated. In teleop mode, the commanded Cartesian velocity is set to zero. I don’t know exactly what
kind of stop results (coordinated, uncoordinated, etc), but will figure it out eventually. In coord mode, the coord mode trajectory
planner is told to abort the current move. Again, I don’t know the exact result of this, but will document it when I figure it out.
2.7.2 FREE
The FREE command puts the motion controller in free mode. Free mode means that each joint is independent of all the other
joints. Cartesian coordinates, poses, and kinematics are ignored when in free mode. In essence, each joint has its own simple
trajectory planner, and each joint completely ignores the other joints. Some commands (like JOG) only work in free mode. Other
commands, including anything that deals with Cartesian coordinates, do not work at all in free mode.
1 It seems that the higher level code (TASK and above) also use ABORT to clear faults. Whenever there is a persistent fault (such as being outside the
hardware limit switches), the higher level code sends a constant stream of ABORTs to the motion controller trying to make the fault go away. Thousands of
’em. . . . That means that the motion controller should avoid persistent faults. This needs to be looked into.
Developer Manual V2.6.9-14-ga2399e1, 2015-08-31 9 / 78
2.7.2.1 Requirements
The command handler applies no requirements to the FREE command, it will always be accepted. However, if any joint is in
motion (GET_MOTION_INPOS_FLAG() == FALSE), then the command will be ignored. This behavior is controlled by code
that is now located in the function set_operating_mode() in control.c, that code needs to be cleaned up. I believe the command
should not be silently ignored, instead the command handler should determine whether it can be executed and return an error if
it cannot.
2.7.2.2 Results
If the machine is already in free mode, nothing. Otherwise, the machine is placed in free mode. Each joint’s free mode trajectory
planner is initialized to the current location of the joint, but the planners are not enabled and the joints are stationary.
2.7.3 TELEOP
The TELEOP command places the machine in teleoperating mode. In teleop mode, movement of the machine is based on
Cartesian coordinates using kinematics, rather than on individual joints as in free mode. However the trajectory planner per se
is not used, instead movement is controlled by a velocity vector. Movement in teleop mode is much like jogging, except that it
is done in Cartesian space instead of joint space. On a machine with trivial kinematics, there is little difference between teleop
mode and free mode, and GUIs for those machines might never even issue this command. However for non-trivial machines like
robots and hexapods, teleop mode is used for most user commanded jog type movements.
2.7.3.1 Requirements
The command handler will reject the TELEOP command with an error message if the kinematics cannot be activated because the
one or more axes have not been homed. In addition, if any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), then
the command will be ignored (with no error message). This behavior is controlled by code that is now located in the function
set_operating_mode() in control.c. I believe the command should not be silently ignored, instead the command handler should
determine whether it can be executed and return an error if it cannot.
2.7.3.2 Results
If the machine is already in teleop mode, nothing. Otherwise the machine is placed in teleop mode. The kinematics code is
activated, interpolators are drained and flushed, and the Cartesian velocity commands are set to zero.
2.7.4 COORD
The COORD command places the machine in coordinated mode. In coord mode, movement of the machine is based on Cartesian
coordinates using kinematics, rather than on individual joints as in free mode. In addition, the main trajectory planner is used
to generate motion, based on queued LINE, CIRCLE, and/or PROBE commands. Coord mode is the mode that is used when
executing a G-code program.
2.7.4.1 Requirements
The command handler will reject the COORD command with an error message if the kinematics cannot be activated because the
one or more axes have not been homed. In addition, if any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), then
the command will be ignored (with no error message). This behavior is controlled by code that is now located in the function
set_operating_mode() in control.c. I believe the command should not be silently ignored, instead the command handler should
determine whether it can be executed and return an error if it cannot.
Developer Manual V2.6.9-14-ga2399e1, 2015-08-31 10 / 78
2.7.4.2 Results
If the machine is already in coord mode, nothing. Otherwise, the machine is placed in coord mode. The kinematics code is
activated, interpolators are drained and flushed, and the trajectory planner queues are empty. The trajectory planner is active and
awaiting a LINE, CIRCLE, or PROBE command.
2.7.5 ENABLE
The ENABLE command enables the motion controller.
2.7.5.1 Requirements
None. The command can be issued at any time, and will always be accepted.
2.7.5.2 Results
If the controller is already enabled, nothing. If not, the controller is enabled. Queues and interpolators are flushed. Any movement
or homing operations are terminated. The amp-enable outputs associated with active joints are turned on. If forward kinematics
are not available, the machine is switched to free mode.
2.7.6 DISABLE
The DISABLE command disables the motion controller.
2.7.6.1 Requirements
None. The command can be issued at any time, and will always be accepted.
2.7.6.2 Results
If the controller is already disabled, nothing. If not, the controller is disabled. Queues and interpolators are flushed. Any
movement or homing operations are terminated. The amp-enable outputs associated with active joints are turned off. If forward
kinematics are not available, the machine is switched to free mode.
вопрос - кто пытается включить режим TELEOP?

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 09 сен 2015, 12:06
Nick
При остановке, станок хочет переключиться в ручной режим, это примено и есть teleop.

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 10 сен 2015, 12:21
Serg
А на симуляторе это получается воспроизвести?

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 11 сен 2015, 00:09
odekolon
да вроде нашел я косяк, не была заремлена строчка

#ON_ABORT_COMMAND=O <on_abort> call
она осталось после экспериментов
и подпрограмма on_abort тоже была
а в этой подпрограмме, была всего одна строчка G90

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

o<on_abort> sub
g90
o<on_abort> endsub
M2
это, как я думал, чтоб после сбоя в момент измерения, чпушка не оставалась в режиме G91
поэкспериментировав, понял что это не работает, а ненужную строку не удалил...
в результате вылезла вот такая бага...
сегодня, после удаления этой строки все работало нормально, но вернуть строку на место и попытаться воспроизвести глюк - не догадался...

Re: Странный глюк: приключения продолжаются

Добавлено: 20 окт 2015, 23:11
odekolon
сегодня при резке рельефа 3Д была запорота заготовка, причем подобное уже было, просто списали на сбой ПО.
2 раза - это уже система!
конфигурация из моего поста от 9 сентября (во вложении)
Одна большая программа со сменой инструмента - черновая обработка - окончательная - вырезка из заготовки
приблизительно 170000 строк
приблизительно в момент, когда окончательная обработка закончена на 90-95, происходит неожиданный вызов процедуры смены инструмента, инструмент едет хрен знает куда, портя заготовку, встает хрен знает где, и предлагает сменить инструмент на вырезающий.
указатель выполнения - на последней реально выполненной строке.
естествннно, программу останавливаем, обнаруживаем что координаты не сбились! :shock:
повторный запуск - с той строки, что уже была выполнена - приводит к нормальному выполнению оставшейся части программы, при смене инструмента шпиндель едет туда, куда нужно, программа нормально завершает выполнение.
результат сбоя на вырезанном рельефе, не заметен.(кроме следа от дурной траектории)
вопрос знатокам - как такое вообще может быть?

ЗЫ
попробуем завтра запустить программу "в воздухе" - посмотрим что получится...

Re: Странный глюк: движение после нажатия "СТОП"

Добавлено: 21 окт 2015, 13:44
Nick
Значит какой-то код вызывает смену инструмента... что там у тебя в тех строчках?