LinuxCNC реверс Gкода
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC реверс Gкода
хм... надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
а что это даст?Nick писал(а):надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?
как не прерывая программу выполнить какой то код?
---------------
не может ли быть такое - что этого нужного механизма нет в емс , потому что емс считывает параметры один раз при загрузке
и поэтому менять их не может из хал???
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC реверс Gкода
Ну для начала надо проверить будет ли он менять отступ, просто он может эти отступы читать только при выполнении G43... если будет - то найдем решение .nkp писал(а):а что это даст?
как не прерывая программу выполнить какой то код?
Плюс он может эти параметры вовсе не читать, а только писать - для информации...
Не, параметры можно менять на лету (через gкод) - поэтому все будет ок.nkp писал(а):не может ли быть такое - что этого нужного механизма нет в емс , потому что емс считывает параметры один раз при загрузке
и поэтому менять их не может из хал???
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
я немного не понимаю - куда ты клонишьNick писал(а):просто он может эти отступы читать только при выполнении G43... если будет - то найдем решение
коррекция конечно без ж43 не включиться - ну и что
нам это не мешает - допустим мы работаем - инструмент Т1 - сломался - меняем -меряем- и корректируем параметр
а ж43 и так уже активен (он был активирован при смене-М6 Т1 G43) - и параметр емс учитывает
ну не фактNick писал(а):Не, параметры можно менять на лету (через gкод)
из ж-кода - в моем понимании - не совсем на лету
код грузится 1 раз - и не предполагает изменений ...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC реверс Gкода
Попробовал поменять #5402 через Gкод - сказало "параметр только для чтения "
Бум дальше думать...
Бум дальше думать...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
Вот здесь что то о параметрах
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: LinuxCNC реверс Gкода
помнится в игре герои была читерская прога, когда значение переменных менялось прямо в ОЗУ. типа денег там много себе наделать можно было и еще что-то. Тут не прокатит такой метод?
-
- Мастер
- Сообщения: 516
- Зарегистрирован: 21 янв 2012, 00:23
- Репутация: 32
- Откуда: Ивано-Франковск
- Контактная информация:
Re: LinuxCNC реверс Gкода
Да-да , а на стойке Н33-2м была целая панель корректоров , тоже все на ходу менялось http://cnc-club.ru/forum/posting.php?mo ... 15&p=55556#Lexxa писал(а):помнится в игре герои была читерская прога, когда значение переменных менялось прямо в ОЗУ. типа денег там много себе наделать можно было и еще что-то. Тут не прокатит такой метод?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
Старая ветка с подобным вопросом
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
добавил в axis несколько строк,позволяющих вывести в файл интерпретированный код:
"собираем" команду и выводим данные в ~/.srcngc...
что нам это может дать?
теперь у нас есть "линейная развертка" любых о-кодов (подпрограмм и повторений) , сложных кодов , состоящих из нескольких файлов и т.д.
например :
загружаем в емс : и в ~/.srcngc имеем:
Код: Выделить всё
import subprocess
nst = ['rs274','-g',f,'-t', tooltable, '>' , '~/.srcngc' ]
st =' '.join(nst)
r = subprocess.Popen([st], shell=True)
r.wait()
что нам это может дать?
теперь у нас есть "линейная развертка" любых о-кодов (подпрограмм и повторений) , сложных кодов , состоящих из нескольких файлов и т.д.
например :
загружаем в емс : и в ~/.srcngc имеем:
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
с такими изменениями будет проверять в ini опцию SRCNGC = srcngc.ipr
(если прописана - вывод в указаный файл)
(если прописана - вывод в указаный файл)
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
Код: Выделить всё
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
--------
вот здесь бы сделать вызвов ret_line к примеру 5 раз - не более(5 невыполненых команд)
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC реверс Gкода
Может так сделать:
Ну и вызывать так:
Код: Выделить всё
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)
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
попоробую ,спасибо ...
но тут с mdi какие то метаморфозы происходят
вроде бы на простых коротких файлах уже стабильно работает - бац - опять едет куда хочет
такое впечатление - что команды действительно хранятся в буфере , который работает пока по неизвестному алгоритму))
конечно ,используем мы это не по прямому назначению т.с. , но все же))
но тут с mdi какие то метаморфозы происходят
вроде бы на простых коротких файлах уже стабильно работает - бац - опять едет куда хочет
такое впечатление - что команды действительно хранятся в буфере , который работает пока по неизвестному алгоритму))
конечно ,используем мы это не по прямому назначению т.с. , но все же))
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
нашел немного связанного с ошибкой:
то есть размер буфера можно устанавливать в ини файле(только нужно выяснить предел))по умолчанию стоит 10
============
заодно тут же :
if (NULL != (inistring = inifile.Find("INTERP_MAX_LEN", "TASK"))) {
if (1 == sscanf(inistring, "%d", &emc_task_interp_max_len))
Код: Выделить всё
// max number of queued MDI commands
if (NULL != (inistring = inifile.Find("MDI_QUEUED_COMMANDS", "TASK"))) {
max_mdi_queued_commands = atoi(inistring);
============
заодно тут же :
if (NULL != (inistring = inifile.Find("INTERP_MAX_LEN", "TASK"))) {
if (1 == sscanf(inistring, "%d", &emc_task_interp_max_len))
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
"брал" номер активной строки программы с помощью minmax...
но он работает не для всех случаев:
запоминает максимальное значение и если остановиться в следуюший раз раньше - то номер ошибочный получается...
попробую сбрасывать - но где то на форуме другой вариант проскакивал
но он работает не для всех случаев:
запоминает максимальное значение и если остановиться в следуюший раз раньше - то номер ошибочный получается...
попробую сбрасывать - но где то на форуме другой вариант проскакивал
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC реверс Gкода
А как именно ты его берешь?nkp писал(а):"брал" номер активной строки программы с помощью minmax...
через motion.program-line в minmax, чтобы после остановки сохранить номер?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
точно...Nick писал(а):через motion.program-line в minmax, чтобы после остановки сохранить номер?
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC реверс Gкода
Ну добавь на старт/реверс ресет для minmax и все... вроде должно хватить...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC реверс Gкода
вот такой промежуточный итог:
выбрал реверс-движения по одной команде mdi ...
так избавился от нескольких проблем(но не от всех ) - таких как переполнение буфера, и еще непонятных наслоений команд
пока отработка кнопками - потом переведется на атоматическое управление из ладдера...
напомню весь алгоритм:
перед загрузкой в емс файла с кодом (а скорей всего одновременно с загрузкой - "на лету") фотмируется обратный (реверсный код) ...
потом при остановке (имеется в виду замыкание в edm) -все машины стоп,самый полный назад емс стоп, и из файла реверскода берем по одной строке и
используя их как mdi команды отходим (в данном случае до размыкания) вот такое управление процессом:
выбрал реверс-движения по одной команде mdi ...
так избавился от нескольких проблем(но не от всех ) - таких как переполнение буфера, и еще непонятных наслоений команд
пока отработка кнопками - потом переведется на атоматическое управление из ладдера...
напомню весь алгоритм:
перед загрузкой в емс файла с кодом (а скорей всего одновременно с загрузкой - "на лету") фотмируется обратный (реверсный код) ...
потом при остановке (имеется в виду замыкание в edm) -
используя их как mdi команды отходим (в данном случае до размыкания) вот такое управление процессом:
Код: Выделить всё
#!/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