Re: LinuxCNC реверс Gкода
Добавлено: 08 фев 2013, 11:27
хм... надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?
Статьи, обзоры, цены на станки и комплектующие.
https://www.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