Может плохо искал, но спрошу..
Вопрос такой:
Как лучше всего организовать сохранение имени файла УП и текущей строки во время выполнения УП?
Применение:
Ручной запуск УП с нужной строки после какого-ньть форс мажора. Например, завис ПК, отрубилось питание и т.д. И вот всё снова работает после перезагрузки, надо продолжать, а имя УП и текущая строка неизвестна.
Варианты:
Первое, что пришло на ум - накатать простенький python скрипт, который раз в 5 секунд будет писать в файл какие-то параметры LCNC, взятые из Python Interface. Вопрос только как запустить этот скрипт в начале выполнения УП (или при запуске LCNC)?
Или есть другие варианты?
Сохранение имени файла и текущей строки УП
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Сохранение имени файла и текущей строки УП
Плохо искал, тут это уже несколько раз обсуждалось. 
Самый простой вариант - userspace HAL компонент, который мониторит соотв. статус/пины и записывает их изменения.
Самый простой вариант - userspace HAL компонент, который мониторит соотв. статус/пины и записывает их изменения.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Сохранение имени файла и текущей строки УП
Вощем, в custom.hal добавил строку
сам скрипт сделал исполняемым и положил его в /usr/local/bin.
Код: Выделить всё
loadusr program_state.pyКод: Выделить всё
#!/usr/bin/python
from sys import exit
import time
import linuxcnc
s = linuxcnc.stat()
out_filepath = '/home/{USER}/linuxcnc/configs/{CONFIG}/program_state.var'
s_file = '75d16f48z19ss'
s_current_line = 'fj7qd5janck1a'
# main cycle
while 1:
# check program data every 5 seconds
time.sleep(5)
try:
# update lcnc state data
s.poll()
except linuxcnc.error, detail:
# exit if any lcnc error
exit(1)
else:
# if program file or line is changed
if s_file != s.file or s_current_line != s.current_line :
# update program data for the next check
s_file = s.file
s_current_line = s.current_line
# write new data to the output file
f = open(out_filepath, 'w')
f.write('time = ' + time.strftime("%d.%m.%Y, %H:%M:%S", time.localtime()) + '\n')
f.write('file = ' + str(s_file) + '\n')
f.write('line = ' + str(s_current_line) + '\n')
f.flush()
f.close()
exit(0)
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Сохранение имени файла и текущей строки УП
Воблин, скрипт остаётся в процессах даже после закрытия LCNC. Пришлось прикрутить некрасивую проверку на наличие процесса linuxcnc
теперь, если linuxcnc нет в процессах, скрипт прекращает свою работу. Всё вместе выглядит теперь вот так
Если кто-то будет использовать, {USER} и {CONFIG} подставьте свои
Код: Выделить всё
# check for the linuxcnc procces state
if 1 > subprocess.Popen(['ps','-C','linuxcnc'], stdout=subprocess.PIPE).communicate()[0].count('linuxcnc'):
# exit if no linuxcnc procces found
exit(1)
Код: Выделить всё
#!/usr/bin/python
from sys import exit
import subprocess
import time
import linuxcnc
s = linuxcnc.stat()
out_filepath = '/home/{USER}/linuxcnc/configs/{CONFIG}/program_state.var'
s_file = '75d16f48z19ss'
s_current_line = 'fj7qd5janck1a'
# main cycle
while 1:
# check program data every 5 seconds
time.sleep(5)
# check for the linuxcnc process state
if 1 > subprocess.Popen(['ps','-C','linuxcnc'], stdout=subprocess.PIPE).communicate()[0].count('linuxcnc'):
# exit if no linuxcnc process found
exit(1)
try:
# update lcnc state data
s.poll()
except linuxcnc.error, detail:
# exit if any lcnc error
exit(1)
else:
# if program file or line is changed
if s_file != s.file or s_current_line != s.current_line :
# update program data for the next check
s_file = s.file
s_current_line = s.current_line
# write new data to the output file
f = open(out_filepath, 'w')
f.write('time = ' + time.strftime("%d.%m.%Y, %H:%M:%S", time.localtime()) + '\n')
f.write('file = ' + str(s_file) + '\n')
f.write('line = ' + str(s_current_line) + '\n')
f.flush()
f.close()
exit(0)
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Сохранение имени файла и текущей строки УП
Вот так покорректней будет:MX_Master писал(а):теперь, если linuxcnc нет в процессах, скрипт прекращает свою работу. Всё вместе выглядит теперь вот так
Код: Выделить всё
...
try:
print "THCController: Starting Up."
SetDefaults()
UpdatePins()
h.ready()
....
while 1:
....
except:
h["estop-out"] = 1
traceback.print_exc()
print "THCController Shutting down. ( " + repr(state) + ", " + repr(next_state) + ", " + repr(last_state) + ")"
raise SystemExit
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...