Как в EMC2 отобразить ход выполнения программы
-
- Кандидат
- Сообщения: 79
- Зарегистрирован: 18 янв 2012, 21:22
- Репутация: 21
- Откуда: Украина
- Контактная информация:
Как в EMC2 отобразить ход выполнения программы
Как в EMC2 сделать ход выполнения программы, чтоб при выполнении программы видна была строка состояния и видно было примерно прошедешее и оставшееся врямя окончания.
Мне кажется что это должно быть не сложно, можно сделать достаточно просто - считавать например раз в сек. номер текущей стороки и сравнивать с общим количеством строк в программе, и на основе этой информации менять текущее состояние выполнение программы.
А общее время расчитывать примерно можно по совсем простому алгоритму:
a - усредненнное время выполнения строки программы
s1 - текущая строка выполнения программы
s2 - общее количество строк в программе
t - оставщееся врямя, выполнения программы
a = время выполнения 50 строк программы / 50 (как пример)
t = (s2-s1)/a
У меня мало знаний по програмированию в linux и emc, но я так понимаю это надо править исходный код.
P.S. Очень удобно видеть прошедшее время, и примерно осташееся время при фрезеровке сложных деталей, где время фрезеровки может быть 12-18 часов.
У этого алгоритма конечно много недостатков, но в общем я думаю должен работать нормально.
У кого есть какие нибудь идеи как это можно реализовать.
Мне кажется что это должно быть не сложно, можно сделать достаточно просто - считавать например раз в сек. номер текущей стороки и сравнивать с общим количеством строк в программе, и на основе этой информации менять текущее состояние выполнение программы.
А общее время расчитывать примерно можно по совсем простому алгоритму:
a - усредненнное время выполнения строки программы
s1 - текущая строка выполнения программы
s2 - общее количество строк в программе
t - оставщееся врямя, выполнения программы
a = время выполнения 50 строк программы / 50 (как пример)
t = (s2-s1)/a
У меня мало знаний по програмированию в linux и emc, но я так понимаю это надо править исходный код.
P.S. Очень удобно видеть прошедшее время, и примерно осташееся время при фрезеровке сложных деталей, где время фрезеровки может быть 12-18 часов.
У этого алгоритма конечно много недостатков, но в общем я думаю должен работать нормально.
У кого есть какие нибудь идеи как это можно реализовать.
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Мач для этого при загрузке Gcode "пробегает" через весь код в холостую.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
В axis есть возможность посмотреть общее время на выполнение кода. В принципе можно стартовать таймер совместно с ходом обработки, но постоянно рассчитывать необходимое время, да еще для программы на 12-18 часов это не хорошо - будет отнимать много ресурсов.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
О, есть специальный компонент - timer, его можно заставить считать время обработки. Для этого делаем вот такую панельку pyvcp
И в post_gui.hal добавляем вот такие строчки:
http://www.linuxcnc.org/docview/2.5/htm ... ime.9.html
Код: Выделить всё
<pyvcp>
<hbox>
<label>
<text>"Cycle Time"</text>
<font>("Helvetica",14)</font>
</label>
<u32>
<halpin>"time-hours"</halpin>
<font>("Helvetica",14)</font>
<format>"2d"</format>
</u32>
<label>
<text>":"</text>
<font>("Helvetica",14)</font>
</label>
<u32>
<halpin>"time-minutes"</halpin>
<font>("Helvetica",14)</font>
<format>"2d"</format>
</u32>
<label>
<text>":"</text>
<font>("Helvetica",14)</font>
</label>
<u32>
<halpin>"time-seconds"</halpin>
<font>("Helvetica",14)</font>
<format>"2d"</format>
</u32>
</hbox>
</pyvcp>
Код: Выделить всё
loadrt time
addf time.0 servo-thread
net cycle-timer time.0.start <= halui.program.is-running
net cycle-seconds pyvcp.time-seconds <= time.0.seconds
net cycle-minutes pyvcp.time-minutes <= time.0.minutes
net cycle-hours pyvcp.time-hours <= time.0.hours
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
В главном меню, то ли в файл, то ли где-то там.
-
- Кандидат
- Сообщения: 79
- Зарегистрирован: 18 янв 2012, 21:22
- Репутация: 21
- Откуда: Украина
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Да, общее время там видно, но хотелось бы чтоб время менялось динамически по ходу фрезеровки.
А если делать расчеты спериодом раз в 1 сек. или 2 - мне кажется это не сильно дожно томозить.
axis - динамически отрисовывает траекторию - вроде нормально.
пример с таймеров видел - он только показывает, прошедешее время с момента фрезеровки, он не показывает сколько примерно осталось времени, и не показывает текущее состояние фрезеровки
Вот примерно такая строка состояния чтоб была винзу.
А если делать расчеты спериодом раз в 1 сек. или 2 - мне кажется это не сильно дожно томозить.
axis - динамически отрисовывает траекторию - вроде нормально.
пример с таймеров видел - он только показывает, прошедешее время с момента фрезеровки, он не показывает сколько примерно осталось времени, и не показывает текущее состояние фрезеровки
Вот примерно такая строка состояния чтоб была винзу.
Последний раз редактировалось umerov 06 фев 2012, 15:00, всего редактировалось 1 раз.
Re: Как в EMC2 отобразить ход выполнения программы
а в gladevcp label как такой тип (2d) присвоить? там только 0:S32, 1:float, 2:U32Nick писал(а):О, есть специальный компонент - timer, его можно заставить считать время обработки. Для этого делаем вот такую панельку pyvcp
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Pin-type нужно u32, формат настраивается в text_template
вообще с GladeVCP можно обойтись меньшим количеством label-ов.
Будет 3 label
1: "Time %2d"
2: ":%2d"
3: ":%2d"
вообще с GladeVCP можно обойтись меньшим количеством label-ов.
Будет 3 label
1: "Time %2d"
2: ":%2d"
3: ":%2d"
Re: Как в EMC2 отобразить ход выполнения программы
ща подцеплю. потом выложу всю панельку своюNick писал(а):Pin-type нужно u32, формат настраивается в text_template
вообще с GladeVCP можно обойтись меньшим количеством label-ов.
Будет 3 label
1: "Time %2d"
2: ":%2d"
3: ":%2d"
Re: Как в EMC2 отобразить ход выполнения программы
работает но если нажать и отжать паузу - таймер сбрасывается
-
- Кандидат
- Сообщения: 79
- Зарегистрирован: 18 янв 2012, 21:22
- Репутация: 21
- Откуда: Украина
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Все расчеты можно делать не realtime.
Может как-то это можно сделать через свой компонент.
Может как-то это можно сделать через свой компонент.
Re: Как в EMC2 отобразить ход выполнения программы
файл свойства - там показывается расчетное времяumerov писал(а):Все расчеты можно делать не realtime.
Может как-то это можно сделать через свой компонент.
-
- Кандидат
- Сообщения: 79
- Зарегистрирован: 18 янв 2012, 21:22
- Репутация: 21
- Откуда: Украина
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
- Я знаю.... пользуюсь... но неудобно когда обработка долгая.файл свойства - там показывается расчетное время
Время он показывает неправильно - иногда врет больше чем в 2 раза от фактического времени.
Это время не учитывает время разгона и торможения осей
Мне надо чтоб он динамически показывал оставщееся время, исли на какомто этапе ускорилась обработка (уменьшилось среднее време обработки одного кадра ) он сам менял оставщееся время.
Если по аналогии, то это как с копированием файлов, когда копириваешь много файлов - время динамически коректриуеться в зависимости от текущей скорости копирования. (Скорость копирования меняеться в зависимости от того или это много мелких файлов или несколько больших)
-
- Кандидат
- Сообщения: 79
- Зарегистрирован: 18 янв 2012, 21:22
- Репутация: 21
- Откуда: Украина
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Вот примерно фрезеровка, в некоторых местах большая в некоторых местах силно тормозится.
Время в свойствах файла врет гдето в 2,5-3 раза
https://www.youtube.com/watch?v=NTuyyouVorY
https://www.youtube.com/watch?v=4SsRAD_IP2U
Время в свойствах файла врет гдето в 2,5-3 раза
https://www.youtube.com/watch?v=NTuyyouVorY
https://www.youtube.com/watch?v=4SsRAD_IP2U
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Понятно... Можно сделать и по твоему способу, правда будет врать нещадно.
Делаем так:
1. Качаешь файл распаковываешь в директорию с конфигами.
Загружаем скрипт в hal
loadusr -Wn time-estimator python time-estimator.py
В нем будут пины
h.newpin("out-hour", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-min", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-sec", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-est-hour", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-est-min", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-est-sec", hal.HAL_U32, hal.HAL_OUT)
h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
h.newpin("len", hal.HAL_U32, hal.HAL_IN)
h.newpin("str", hal.HAL_U32, hal.HAL_IN)
h.newpin("reset", hal.HAL_BIT, hal.HAL_IO)
Нужно создать панельку gladeVCP.
В ней сделать 6 label-ов к ним подключить пины time-estimaror.out- sec min hour - это будет время работы и такие же с -est- -расчетное время работы.
Также нужно подключить пин halui.program.is-running пину enable.
Потом нужно сделать окно ввода на панельке и к нему подключить пин len, в окно нужно будет вводить длинну программы, к сожалению не знаю, где найти адрес программы или ее длину.
Также может понадобится кнопочка сбросить таймер, но правда она будет сбрасывать все значения в 0.
И нужно настроить пин str, на него завести номер текущей строки: motion.program-line .
Фух, вроде все
Делаем так:
1. Качаешь файл распаковываешь в директорию с конфигами.
Загружаем скрипт в hal
loadusr -Wn time-estimator python time-estimator.py
В нем будут пины
h.newpin("out-hour", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-min", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-sec", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-est-hour", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-est-min", hal.HAL_U32, hal.HAL_OUT)
h.newpin("out-est-sec", hal.HAL_U32, hal.HAL_OUT)
h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
h.newpin("len", hal.HAL_U32, hal.HAL_IN)
h.newpin("str", hal.HAL_U32, hal.HAL_IN)
h.newpin("reset", hal.HAL_BIT, hal.HAL_IO)
Нужно создать панельку gladeVCP.
В ней сделать 6 label-ов к ним подключить пины time-estimaror.out- sec min hour - это будет время работы и такие же с -est- -расчетное время работы.
Также нужно подключить пин halui.program.is-running пину enable.
Потом нужно сделать окно ввода на панельке и к нему подключить пин len, в окно нужно будет вводить длинну программы, к сожалению не знаю, где найти адрес программы или ее длину.
Также может понадобится кнопочка сбросить таймер, но правда она будет сбрасывать все значения в 0.
И нужно настроить пин str, на него завести номер текущей строки: motion.program-line .
Фух, вроде все
- Вложения
-
- time-estimator.py.tar.gz
- (1.12 КБ) 1439 скачиваний
-
- Кандидат
- Сообщения: 79
- Зарегистрирован: 18 янв 2012, 21:22
- Репутация: 21
- Откуда: Украина
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Nick, спасибо. Вечером проверю
Re: Как в EMC2 отобразить ход выполнения программы
тоже попробую, а нагружать систему сильно будет?
Nick, а тут что нибудь можно придумать?roach писал(а):работает но если нажать и отжать паузу - таймер сбрасывается
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Как в EMC2 отобразить ход выполнения программы
Боюсь, что нет... Хотя, можно сделать так завести пин time.out в ClassicLadder и туда же пин паузы, в общем что-то вроде этого:
Код: Выделить всё
is-running time.start
-----------|/\|-------------------(S)--------------------------------
ASSIGNMENT
is-running +--------------------+ time.start
-----------|\/|---------------+ %QW0=%QW0+%IW0 +-----------(R)----
+--------------------+
Re: Как в EMC2 отобразить ход выполнения программы
а в какой программе файл подготовлен?umerov писал(а):Вот примерно фрезеровка
Re: Как в EMC2 отобразить ход выполнения программы
Подскажите, во время работы G кода, есть возможность отобразить время между первым и последним движением станка, и возможно ли отобразить время выполнения выбраного диапазона G кода?