Страница 5 из 7
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 15:17
Serg
fredy79 писал(а):я про доработки, если уж делать то все должно быть на высшем уровне
а кто собрался делать?..
fredy79 писал(а):За FMS3000 платить нет желания
А за доработку?..
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 15:44
peg
Видимо, задача, поставленная в названии темы, не так проста, как это утверждает UAVpilot...
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 16:10
fredy79
за доработку Linuxcnc платить согласен, вопрос кто может этим заняться?
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 17:52
Serg
peg писал(а):Видимо, задача, поставленная в названии темы, не так проста, как это утверждает UAVpilot...
Тут уже озвучено как минимум два варианта решения...
fredy79 писал(а):вопрос кто может этим заняться?
А вот это самый трудный вопрос.
P.S. Лично мне это пока не интересно и не нужно, да и время на это я не готов выделить. Деньги значения не имеют.

Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 18:41
nkp
если брать за ТЗ пост 71,то сразу возникают вопросы:
как оно работает в системе ,пример из которой приводится - допустим время обработки по программе 12 часов,
сколько FMS3000 "вхолостую" добегает скажем до середины??
ведь реально это нереально
===============
другое дело ,если просто парсить код на предмет поиска нужных нам данных...
так это даже в самых "длинных" программах займет максимум десятки секунд...
и перекоммутация тогда в хал не требуется(хотя я когда то пытался это сделать для симуляции обработки на стойке)
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 18:59
Гагарин
Компонет с режимом симуляции мутить с мгновенными ускорениями и максимальными скоростями. И делать переход между режимом симуляции и рабочим режимом при достожении нужных строк. Примерно складывается картина. Вполне реально сделать, ноооо...кому оно надо, тот пусть и делает) Не вижу никакого рационального смысла. А подводных камней , наверняка, полно
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 21:21
peg
UAVpilot писал(а):Тут уже озвучено как минимум два варианта решения...
Ни одного варианта я тут не увидел.
Надо делать, как в посте №71. Читать программу до заданного кадра и исполнять ее фиктивно,
вычисляя координаты, запоминая технологические команды, подачи, модальные команды, номер
инструмента, идет ли обработка контура (эквидистанта), величину корректоров (размеры для эквидистанты). Возможно, интерпретатор G-кодов это все уже умеет?
А запустить программу с заданного кадра есть возможность?
Те, кто не видит смысла, могут не беспокоиться. Ясно, что проблема актуальна и ее решение
сильно облегчит работу.
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 23:22
MX_Master
peg писал(а):Читать программу до заданного кадра и исполнять ее фиктивно
УП же реально выполнялась до отключения питания. Все эти параметры УП можно периодически сохранять в файл по ходу выполнения. Включая путь к УП, номер строки, позицию и т.п. По завершению УП этот файл нужно удалить. А если такой файл остался в живых и найден при запуске LCNC, это означает, что УП была прервана. Восстановление всех параметров из этого файла для продолжения работы - не составит большого труда. Этим всем может заниматься буквально 1 скрипт на питоне.
Я делал себе похожую (но проще) сохранялку с целью ручного запуска УП после форс-мажоров. Большего мне не надо, т.к. питание боль мень стабильное.
Если кто-то хочет готовых решений из коробки, идите в магазин и платите за коробку. А
LinuxCNC - это бесплатный конструктор для самостоятельной сборки. И мне кажется, если кто-то "закажет" разработку этого функционала под LCNC, то в открытый доступ он результат не выложит. Могу ошибаться, но.. жаба, деньги. А те, кто может это сделать бесплатно - не имеют к этой задаче ни интереса, ни какой-либо необходимости.
Иными словами, мы можем только посоветовать куда копать.
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 23:24
nkp
попробую что то практически))
самое начало
вот скрипт питона,он выводит окошко,в котором можно ввести номер строки,с которой хотим продолжить прерв. программу
его кладем в папку со всеми программами(жкодом)
(расширение .txt поменять на .py)
===================================
загружаем в емс тестовый ж код(суперпростой пока ):
============================
потом через меню "Открыть" (так же как открываем в емс любой другой файл) открываем наш restart.py
и вводим(пока опять же руками)) номер строки (22222 например)
----------------------------------------------------------
наш скриптик загружает наш код не весь,а только начиная со строки 22222
====================
понятно ,что это примитивно ,но
это концепция,о которой я написал выше...
далее можно расширять скрипт различными данными ,которые он будет брать ,читая исходный файл жкода
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 23:28
nkp
что нужно "найти" скрипту??
ну понятно ,что номер инструмента,который он использует в кадре (строке) 22222(будем исходить из примера выше)
подачу
данные для шпинделя(обороты, напр. вращения)
...
...
Re: продолжение работы после отключения питания компьютера
Добавлено: 21 ноя 2017, 23:34
nkp
номер строки канеш будем брать из файла,в котором он(номер) будет сохраняться после аварии емс
это всё уже есть,просто тестить в таком режиме большие файлы неудобно,ибо обработка здесь затяжная и долго ждать тот же
кадр 22222
так что пока руками
----------
то есть - по дефолту - продолжение со строки ,на которой "оборвалась" обработка,
но с возможностью ввести номер любого другого кадра
Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 00:35
nkp
Код: Выделить всё
#!/usr/bin/env python
# --*-- coding:utf-8 --*--
import pygtk
pygtk.require('2.0')
import gtk
import re
import os,sys
import linuxcnc
class WRestart:
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def go(self):
s = linuxcnc.stat()
s.poll()
filename = s.file
f = open(filename, "r")
lines = f.readlines()
number_line = int(self.entry.get_text())
string=''
w=0
while not re.search("M2\s*",lines[w], re.I):
w+=1
if (w <= number_line):
try:
tool = int(re.search("T\s*([0-9.]+)",lines[w], re.I).group(1))
except:
pass
try:
speed = int(re.search("S\s*([0-9.]+)",lines[w], re.I).group(1))
except:
pass
try:
feed = int(re.search("F\s*([0-9.]+)",lines[w], re.I).group(1))
except:
pass
if (w >= number_line):
string+=lines[w]
string +='M2\n'
print 'M6 T',tool
print 'F',feed
print 'M3 S',speed
sys.stdout.write(string)
gtk.main_quit()
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("restart")
self.window.connect("delete_event", self.delete_event)
self.window.set_border_width(20)
self.vbox = gtk.VBox(True, 2)
self.window.add(self.vbox)
#self.entry = gtk.Label()
#self.entry.set_text("№ line")
#self.vbox.pack_start(self.entry, True, True, 2)
#self.entry.show()
self.entry = gtk.Entry()
self.entry.set_max_length(10)
self.entry.set_text("№ line")
self.vbox.pack_start(self.entry, True, True, 2)
self.entry.show()
self.button = gtk.Button("Open")
self.button.connect("clicked", lambda x: self.go())
self.vbox.pack_start(self.button, True, True, 2)
self.button.show()
self.vbox.show()
self.window.set_position(gtk.WIN_POS_CENTER)
self.window.show()
def main():
gtk.main()
return 0
if __name__ == "__main__":
WRestart()
main()
смотрит номер инстр., подачу и обороты шп. перед указанным кадром
Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 01:13
Serg
peg писал(а):Надо делать, как в посте №71.
Завтра начало?
peg писал(а):А запустить программу с заданного кадра есть возможность?
Есть как и на любых станках. Только, как и на любых станках, предварительно надо сделать множество подготовительных действий, например привести инструмент в такую точку, с которой обработка начнётся без сюрпризов. И тут никакая автоматика не поможет, ибо никакая автоматика не разумеет полностью форму детали/заготовки/крепежа.
MX_Master писал(а):Я делал себе похожую (но проще) сохранялку с целью ручного запуска УП после форс-мажоров.
Проблема в том, что в этой теме желают
автоматического продолжения после восстановления питания.
nkp писал(а):наш скриптик загружает наш код не весь,а только начиная со строки 22222
А откуда и по какой траектории поедет инструмент в эту точку?..

Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 07:35
nkp
так я и предлагаю обсуждать именно такие вопросы, а не подкалывать друг друга:-)
-----------
кмк - скрипт может получить все возможные данные(координату предстоящей строки например),
предложить варианты врезания(чекбоксы в окошке),
а принимать окончательное решение будет оператор разумеется.
Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 11:31
fredy79
UAVpilot писал(а):А откуда и по какой траектории поедет инструмент в эту точку?
я полагаю что ось Z должна находиться в крайнем верхнем положении а оси X и Y двигаться из точки 0.0 в точку Х.Х , где Х координаты положения осей в предпоследнем исполненном кадре, далее когда оси Х и У придут в эти координаты ось Z должна опуститься до своей координаты. Опускание должно происходить таким образом, ось опускается на большой скорости до значения например Z+5, далее опускается с медленной скоростью, чтоб исключить резкого врезания в материал. Наверное как то так.
Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 12:29
Serg
fredy79 писал(а):я полагаю что ось Z должна находиться в крайнем верхнем положении а оси X и Y двигаться из точки 0.0 в точку Х.Х , где Х координаты положения осей в предпоследнем исполненном кадре, далее когда оси Х и У придут в эти координаты ось Z должна опуститься до своей координаты.
А что будет, если на пути движения из точки 0.0 в точку Х.Х окажется какой-либо крепёж, высотой более, чем максимальная высота подъёма инструмента?..
nkp писал(а):так я и предлагаю обсуждать именно такие вопросы, а не подкалывать друг друга:-)
Так обсуждение только в этой теме уже на третий круг заходит...

Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 12:36
fredy79
в таком случае должна быть возможность вручную обойти все препятствия и с безопасной точки нажать продолжение работы и далее как писал выше, это реализовано в Nc-studio, то есть, отправляем станок в дом, он обнулил абсолютные координаты, если нет препятствий нажимаем кнопку продолжить и станок двигается как написано выше, если есть отводим в безопасное место и нажимаем продолжить.
Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 12:41
nkp
загрузка крайнего жкода
в самописном gui проще это было сделать))
тут нюансы есть тоже ,но для начала:
в axis.py дополняем функцию загрузки жкода(функция open_file_guts) следующим кодом:
Код: Выделить всё
if (os.path.basename(f) != 'file_yesterday.ngc'):#nkp
path_fyesterday = os.path.join(os.path.dirname(f), 'file_yesterday.ngc')
fy = open(path_fyesterday, "w")
ffy = open(f, "r")
ls = ffy.readlines()
string_fy = ''
for ysf in ls:
string_fy += ysf
fy.write(string_fy)
fy.close()
ffy.close()
вся функция будет выглядеть примерно так:
Код: Выделить всё
def open_file_guts(f, filtered=False, addrecent=True):
if addrecent:
add_recent_file(f)
if not filtered:
global loaded_file
loaded_file = f
program_filter = get_filter(f)
if program_filter:
tempfile = os.path.join(tempdir, os.path.basename(f))
exitcode, stderr = filter_program(program_filter, f, tempfile)
if exitcode:
root_window.tk.call("nf_dialog", (".error", "-ext", stderr),
_("Filter failed"),
_("The program %(program)r exited with code %(code)d. "
"Any error messages it produced are shown below:")
% {'program': program_filter, 'code': exitcode},
"error",0,_("OK"))
return
return open_file_guts(tempfile, True, False)
set_first_line(0)
t0 = time.time()
canon = None
o.deselect(None) # remove highlight line from last program
try:
# be sure to switch modes to cause an interp synch, which
# writes out the var file. there was a reset here, and that
# causes a var file write, but nukes important settings like
# TLO.
if (os.path.basename(f) != 'file_yesterday.ngc'):#nkp
path_fyesterday = os.path.join(os.path.dirname(f), 'file_yesterday.ngc')
fy = open(path_fyesterday, "w")
ffy = open(f, "r")
ls = ffy.readlines()
string_fy = ''
for ysf in ls:
string_fy += ysf
fy.write(string_fy)
fy.close()
ffy.close()
ensure_mode(linuxcnc.MODE_MDI)
c.wait_complete()
ensure_mode(linuxcnc.MODE_AUTO)
c.wait_complete()
c.program_open(f)
lines = open(f).readlines()
progress = Progress(2, len(lines))
t.configure(state="normal")
t.tk.call("delete_all", t)
code = []
i = 0
for i, l in enumerate(lines):
l = l.expandtabs().replace("\r", "")
#t.insert("end", "%6d: " % (i+1), "lineno", l)
code.extend(["%6d: " % (i+1), "lineno", l, ""])
if i % 1000 == 0:
t.insert("end", *code)
del code[:]
progress.update(i)
if code:
t.insert("end", *code)
progress.nextphase(len(lines))
f = os.path.abspath(f)
o.canon = canon = AxisCanon(o, widgets.text, i, progress, arcdivision)
root_window.bind_class(".info.progress", "<Escape>", cancel_open)
parameter = inifile.find("RS274NGC", "PARAMETER_FILE")
temp_parameter = os.path.join(tempdir, os.path.basename(parameter))
if os.path.exists(parameter):
shutil.copy(parameter, temp_parameter)
canon.parameter_file = temp_parameter
initcode = inifile.find("EMC", "RS274NGC_STARTUP_CODE") or ""
if initcode == "":
initcode = inifile.find("RS274NGC", "RS274NGC_STARTUP_CODE") or ""
if not interpname:
unitcode = "G%d" % (20 + (s.linear_units == 1))
else:
unitcode = ''
try:
result, seq = o.load_preview(f, canon, unitcode, initcode, interpname)
except KeyboardInterrupt:
result, seq = 0, 0
# According to the documentation, MIN_ERROR is the largest value that is
# not an error. Crazy though that sounds...
if result > gcode.MIN_ERROR:
error_str = _(gcode.strerror(result))
root_window.tk.call("nf_dialog", ".error",
_("G-Code error in %s") % os.path.basename(f),
_("Near line %(seq)d of %(f)s:\n%(error_str)s") % {'seq': seq, 'f': f, 'error_str': error_str},
"error",0,_("OK"))
t.configure(state="disabled")
o.lp.set_depth(from_internal_linear_unit(o.get_foam_z()),
from_internal_linear_unit(o.get_foam_w()))
except Exception, e:
notifications.add("error", str(e))
finally:
# Before unbusying, I update again, so that any keystroke events
# that reached the program while it was busy are sent to the
# label, not to another window in the application. If this
# update call is removed, the events are only handled after that
# widget is destroyed and focus has passed to some other widget,
# which will handle the keystrokes instead, leading to the
# R-while-loading bug.
#print "load_time", time.time() - t0
root_window.update()
root_window.tk.call("destroy", ".info.progress")
root_window.tk.call("grab", "release", ".info.progress")
if canon:
canon.progress = DummyProgress()
try:
progress.done()
except UnboundLocalError:
pass
o.tkRedraw()
root_window.tk.call("set_mode_from_tab")
в INI файл пишем путь к нашему файлу file_yesterday.ngc:
у меня к примеру так:
OPEN_FILE = /home/nkp/linuxcnc-reverse-run/nc_files/file_yesterday.ngc
правильно будет в меню Axis добавить возможность выбирать-не_выбирать эту опцию (потом прикрутим))
все файлы должны лежать в папке ,которая указана в ини:
PROGRAM_PREFIX =
"запись" происходит на стадии загрузки жкода,поэтому при аварии у нас ничего не теряется...
Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 12:51
nkp
заметил такую фишку(может конечно у меня только так)):
раньше в ини путь к файлу ,окрывающемуся по дефолту, писал в кавычках...
так Axis (os.path.exists(initialfile)) перестал видеть файл...
потом заметил,что в тексте ошибки путь в двух парах кавычек))
написал так:
OPEN_FILE = /home/nkp/linuxcnc-reverse-run/nc_files/file_yesterday.ngc
работает

Re: продолжение работы после отключения питания компьютера
Добавлено: 22 ноя 2017, 13:16
Serg
fredy79 писал(а):в таком случае должна быть возможность вручную обойти все препятствия
Т.е. об этом
fredy79 писал(а):Тое-сть станок должен во время работы запоминать исполненные кадры, после отключения питания и его возобновлении должен автоматически загрузить файл прерванной обработки, обнулиться и предложить продолжить работу с прерванного кадра.
уже не говорим? Тогда всё намного проще.
nkp писал(а):в INI файл пишем путь к нашему файлу file_yesterday.ngc:
у меня к примеру так:
OPEN_FILE = /home/nkp/linuxcnc-reverse-run/nc_files/file_yesterday.ngc
Лучше писать в файл file_yesterday.ini только эту строчку, тогда останется только в основном ini написать:
nkp писал(а):написал так:
OPEN_FILE = /home/nkp/linuxcnc-reverse-run/nc_files/file_yesterday.ngc
работает

Кавычки обязательны только если в значении встречаются пробелы.
