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

вопрос по Look ahead

Добавлено: 17 мар 2015, 10:05
_ardilla_
Доброе утро! Может кто подскажет, ищу по интернету алгоритм опережающего просмотра Look ahead контурной подачи для просмотра всей управляющей программы, второй день ничего найти не могу. Хоть кое где и встречается упоминания, что некоторые разработчики используют просмотр вперед не ограниченного набора кадров, а всей программы целиком, не нашла ни одного конкретного разработчика, ни одной статьи. Может кто знает такие конкретные реализации киньте ссылку пожалуйста

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 10:19
aftaev
_ardilla_ писал(а):Может кто подскажет, ищу по интернету алгоритм опережающего просмотра Look ahead контурной подачи для просмотра всей управляющей программы, второй день ничего найти не могу.
а для чего вам это?

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 10:46
verser
Когда я экспериментировал с "печатью" паяльной маски на pcb, была необходимость заблаговременно включать диспенсер, для чего надо было просмотреть вперед g-code и рассчитать длину траектории до нужной точки. Делал на pyton и подключал в .hal
Такой функцией парсил g-code из mask.ngc

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

    self.stat = linuxcnc.stat()
    self.coords = []
	
    def parse_ngc_file(self) :
        self.stat.poll()
        f = open("mask.ngc","r")
        f_lines = f.readlines()
        for line in f_lines :
            coords = [str(s) for s in line.split()]
            self.coords.append(coords)
А вот так делал анализ длины

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

    def all_other_segments_length(self, line_num) : # distance from now  to Z lift-up point (self.dtg_curr+ all next segment lengths)
#            print "line_num:", line_num, self.coords[line_num-1], self.dtg_curr,self.dtg_prev
            position = self.stat.actual_position
            offset = self.stat.g5x_offset
            self.x0 = position[0]-offset[0]
            self.y0 = position[1]-offset[1]
#            self.z0 = position[2]-offset[2] #actual positions
            if self.coords[line_num-1][0] == "G0" :
		return 0
            
	    dist=float( self.stat.distance_to_go ) # include current segment length
            for parsed_coord in self.coords[line_num-1] : # Positions in G1 command
                    if parsed_coord[0:1] == "X" :
                        self.x0=float(parsed_coord[1:])
                        continue
                    if parsed_coord[0:1] == "Y" :
                        self.y0=float(parsed_coord[1:])
                        continue
#                    if parsed_coord[0:1] == "Z" :
#                        self.z0=float(parsed_coord[1:])
#                        continue
            xi = self.x0
            yi = self.y0
	    print "x0 y0 :", xi,yi
#            zi = self.z0
            i=1
            while self.coords[line_num-1+i][0] not in ( "G0", "M02", "%") : # iteration for all next points  and dist calculation
                    if self.coords[line_num-1+i][0]  not in ( "M64", "M65","G4") : 
                            for parsed_coord in self.coords[line_num-1+i] :
                                    if parsed_coord[0:1] == "X" :
                                        xi=float(parsed_coord[1:])
                                        continue
                                    if parsed_coord[0:1] == "Y" :
                                        yi=float(parsed_coord[1:])
                                        continue
#                                    if parsed_coord[0:1] == "Z" :
#                                        zi=float(parsed_coord[1:])
#                                        continue 
                            dist=dist+math.sqrt((xi-self.x0)**2 + (yi-self.y0)**2) # + (zi-self.z0)**2) # dist calculation
	    	    print "xi yi :", xi,yi
                    self.x0=xi
                    self.y0=yi
#                    self.z0=zi
                    i=i+1                
            return dist
Идея не дошлифована, поскольку появилась нереально дешевая возможность заказывать pcb мелкими тиражами,
но вдруг окажется полезной :)
Вот целиком мои потуги, правда, под gmoccapy(есть небольшие отличия, чем для от axis) и сырые, не пиняйте:
mask.rar
(4.59 КБ) 368 скачиваний

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 10:50
michael-yurov
Нужен сам алгоритм, или система чпу, способная просматривать весь код УП?

А если УП будет на 27 ГБ - ее тоже всю просматривать?

В принципе, нет никаких проблем установить просмотр на большое количество строк УП. Проблема будет только с запуском больших УП при такой настройке.

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 10:55
Serg
_ardilla_ писал(а):Может кто знает такие конкретные реализации киньте ссылку пожалуйста
Там всё просто: читаете G-код и рассчитываете нужные вам параметры (например скорость и вектор) и складываете в табличку, длина таблицы = глубина просмотра.
При выполнении кода при необходимости заглядываете в табличку на желаемое количество кадров.

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 12:19
_ardilla_
спасибо огромное за ответы и примеры! Объясню зачем мне это надо, я пишу обзорную статью на тему предварительного просмотра управляющей программы Look ahead. Конечно, никто из разработчиков свои алгоритмы раскрывать не будет, это один из наиболее закрытых алгоритмов в системах ЧПУ. В основном вкратце пишут, что в системе есть такая функциональность и производительность становится лучше.

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 14:38
aftaev
_ardilla_ писал(а):я пишу обзорную статью на тему предварительного просмотра управляющей программы Look ahead.
А для кого или чего статья пишется?

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 14:44
_ardilla_
aftaev, аспирантура

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 15:24
ukr-sasha
Тут еще инемного информации, от производителя контроллера: http://dynomotion.com/Help/KMotionCNC/T ... reenTP.htm

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 15:37
SVP
_ardilla_ писал(а): это один из наиболее закрытых алгоритмов в системах ЧПУ.
Честно говоря слабо себе представляю какая тут вообще может быть закрытость и вариативность.
Ноу-хау могут и будут в области "что делать в углах" "как обрабатывать круги" итп, но сам
предпросмотр он предпросмотр и есть.
Можете ли привести пример двух разных алгоритмов предпросмотра ?

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 15:47
Сергей Саныч
SVP писал(а):Честно говоря слабо себе представляю какая тут вообще может быть закрытость и вариативность.
Да сколько угодно. Не в самом предпросмотре, а в алгоритме действий по его результатам, то есть в планировании траектории с учетом допустимых отклонений, скоростей, ускорений и т.п.

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 15:50
Serg
Сергей Саныч писал(а):а в алгоритме действий по его результатам
Это уже не алгоритм предпросмотра, алгоритм действий по его результатам. :)

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 16:22
_ardilla_

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 16:36
_ardilla_
в этой статье пишут, что некоторые системы могут просматривать всю управляющую программу http://woodstanki.ru/info/lookahead/

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 17:36
SVP
Какая-то чудовищная статья... с таким не защититься.

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 18:38
_ardilla_
svp, это не моя статья, это в интернете нашла

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 20:31
aftaev
_ardilla_ писал(а):aftaev, аспирантура
как называется будущая профессия?

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 20:32
NightV
О, вот так порядок! теперь и _ardilla_ порозовела :)

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 20:49
Predator
NightV писал(а):О, вот так порядок! теперь и _ardilla_ порозовела :)
Тут ведь вот в чём нюанс - главное, чтобы ты не порозовел снова! :hehehe:

Re: вопрос по Look ahead

Добавлено: 17 мар 2015, 21:01
michael-yurov
_ardilla_ писал(а):в этой статье пишут, что некоторые системы могут просматривать всю управляющую программу http://woodstanki.ru/info/lookahead/
Тут небольшая путаница слов получилась.
В статье сказано, что есть системы, которые не имеют ограничения на количество просматриваемых кадров. Это не значит, что они просматривают всю программу. Это значит, что они могут просмотреть любое необходимое количество кадров (если это потребуется).
В некоторых случаях, если в этом есть необходимость, может получиться так, что система просмотрит всю программу управления до конца.
Но не значит, что существуют системы, которые всегда будут просматривать всю программу.