Re: LinuxCNC реверс Gкода
Добавлено: 08 фев 2013, 11:27
				
				хм... надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?
			Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
а что это даст?Nick писал(а):надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?
Ну для начала надо проверить будет ли он менять отступ, просто он может эти отступы читать только при выполнении G43... если будет - то найдем решениеnkp писал(а):а что это даст?
как не прерывая программу выполнить какой то код?
Не, параметры можно менять на лету (через gкод) - поэтому все будет ок.nkp писал(а):не может ли быть такое - что этого нужного механизма нет в емс , потому что емс считывает параметры один раз при загрузке
и поэтому менять их не может из хал???
я немного не понимаю - куда ты клонишьNick писал(а):просто он может эти отступы читать только при выполнении G43... если будет - то найдем решение
ну не фактNick писал(а):Не, параметры можно менять на лету (через gкод)
Да-да , а на стойке Н33-2м была целая панель корректоров , тоже все на ходу менялось http://cnc-club.ru/forum/posting.php?mo ... 15&p=55556#Lexxa писал(а):помнится в игре герои была читерская прога, когда значение переменных менялось прямо в ОЗУ. типа денег там много себе наделать можно было и еще что-то. Тут не прокатит такой метод?
Код: Выделить всё
    import subprocess
    nst = ['rs274','-g',f,'-t', tooltable, '>' , '~/.srcngc' ]
    st =' '.join(nst)
    r = subprocess.Popen([st], shell=True)
    r.wait()Код: Выделить всё
    def ret_line(number):
        f = open(fl, "r")
        lines = f.readlines()
        f.close()
        if number >= 0:
            return lines[number]
    
    def up(event=None):
        commands.task_stop()
        ensure_mode(linuxcnc.MODE_MDI)
        num = int(comp["curent-line"]) - 1
        while num >= 0 :
            commands.send_mdi_command(commands.ret_line(num))
            num -= 1Код: Выделить всё
    def ret_line(number, num=1):
        f = open(fl, "r")
        lines = f.readlines()
        f.close()
        if number >= 0:
            lines = lines[number:max(number-num,0)]
            lines.reverse()
            return lines     
Код: Выделить всё
lines = commands.ret_line(num,5)
for l in lines :
    commands.send_mdi_command(l)Код: Выделить всё
    // max number of queued MDI commands
    if (NULL != (inistring = inifile.Find("MDI_QUEUED_COMMANDS", "TASK"))) {
	max_mdi_queued_commands = atoi(inistring);А как именно ты его берешь?nkp писал(а):"брал" номер активной строки программы с помощью minmax...
точно...Nick писал(а):через motion.program-line в minmax, чтобы после остановки сохранить номер?
Код: Выделить всё
#!/usr/bin/python
import hal, linuxcnc
h = hal.component("rev")
h.newpin("stop", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rerev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("curent-line",hal.HAL_FLOAT,hal.HAL_IN)
h.newpin("minmax-reset", hal.HAL_BIT, hal.HAL_OUT)    
h.ready()
c = linuxcnc.command()
s = linuxcnc.stat()
def ret_line(number):
	f = open('/home/nkp/temp_rev.ngc', "r") #here prepared code(revers Gcode)
	lines = f.readlines()
	f.close()
	if number >= 0:
	    return lines[number]
	else:
	    return lines[0]   
def stop():
	c.abort()
	c.wait_complete()
	global num_curent_line 
	num_curent_line = int(h["curent-line"]) - 1
 	h["stop"]=0
	print  num_curent_line
def back():
	global num_curent_line 
	c.mode(linuxcnc.MODE_MDI)
	c.wait_complete()
	c.mdi(ret_line(num_curent_line))
	print 'comand:',ret_line(num_curent_line), 'curent line:', num_curent_line
	num_curent_line -= 1
	h["minmax-reset"] = 0
	h["rev"]=0
def again_forward():
	h["rerev"]=0
	global num_curent_line
	c.mode(linuxcnc.MODE_AUTO)
	c.wait_complete()
	c.auto(linuxcnc.AUTO_RUN, (num_curent_line+2))
	h["minmax-reset"] = 1
	print  num_curent_line ,'!'
try:
    while 1:	 
	if h["stop"]==1:
		stop()
	if h["rev"]==1:
		back()		
	if h["rerev"]==1:
		again_forward()	
except KeyboardInterrupt:
    raise SystemExit