Журнал учета работы на станке

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Журнал учета работы на станке

Сообщение atomichammer »

Добрый день.
Есть такая идея - вести журнал учета работы на станке под управлением LinuxCNC. Какая программа, в какое время, сколько раз исполнялась (это минимум). Складывать можно хоть в csv. Реально ли это все реализовать или я много хочу? И если да, то какими компонентами/модулями и пр. Дайте пинок в нужном направлении ) Или охладите мой пыл :oops:
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Журнал учета работы на станке

Сообщение Serg »

Можно, придётся написать свою программку или компонент.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

UAVpilot писал(а):Можно, придётся написать свою программку или компонент.
Ну уже хорошо. Разницы нет, на чем писать? Есть где-нибудь склад программ и компонентов на посмотреть, как это вообще выглядит (взаимодействие, апилки)?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Журнал учета работы на станке

Сообщение Serg »

Проще на python - API и примеры можно в исходниках LinuxCNC можно найти.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

Ну, по сути, мне нужно отлавливать активные M-коды (M03-M30), что можно сделать через linuxcnc там есть mcodes и писать их время в файл с указанием имени файла, которое есть в axis.py (loaded_file), но хз как его отттуда выковырять...

И это как-то [DISPLAY] - зависимо получается.. а хотелось бы универсально, конечно.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3101
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение MX_Master »

Вот в этой теме я делал отчёт, который состоял из имени текущей УП, текущей строки и времени - http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=16099. Думаю, прикрутить слежение за шпинделем не так сложно. Немного изучить python interface и вперёд.
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

MX_Master писал(а):Вот в этой теме я делал отчёт, который состоял из имени текущей УП, текущей строки и времени - http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=16099. Думаю, прикрутить слежение за шпинделем не так сложно. Немного изучить python interface и вперёд.
Во, точно, оказывается, есть там file. А я сильно быстро скроллил список и не заметил. Ну уже упрощается все в разы. Завтра попробую. Правда, я уже мочканул штук 100 программ, не пойдет в зачет )
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

С м-кодами какая-то засада, не получилось. Сделал просто по контролю за шпинделем: запустился - засекаем время старта, остановился - засекаем стоп и пишем все это + имя файла в лог.

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

#!/usr/bin/python
from sys import exit
import subprocess
import time
import linuxcnc

s = linuxcnc.stat()
out_filepath = '/home/oper/linuxcnc/configs/Big/exec_log.csv'
state = 0
start_time = 0
finish_time = 0

# 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 state == 0:
          if s.spindle_enabled > 0:
            start_time = time.time()
            state = 1
        elif state == 1:
          if s.spindle_enabled == 0:
            stop_time = time.time()
            # write new data to the output file
            f = open(out_filepath, 'a')
            f.write(str(s.file) + ',' + str(start_time) + ',' + str(stop_time) + '\n')
            f.flush()
            f.close()
            state = 0
        else:
          state = 0
exit(0)

Поправить путь out_filepath к папке на свой.
Файл сохранить как exec_log.py, сделать исполняемым, положить в /usr/local/bin
В сustom.hal вписать
loadusr exec_log.py
jkwe45
Опытный
Сообщения: 102
Зарегистрирован: 13 окт 2017, 12:26
Репутация: 5
Настоящее имя: Андрей
Контактная информация:

Re: Журнал учета работы на станке

Сообщение jkwe45 »

Скрипт пишет время начала и время окончания и название файла? А время (разницу между началом работы и окончанием не записывает?)
И что произойдёт если например выключат свет? Ничего не сохранится?
SVP
Мастер
Сообщения: 6135
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Журнал учета работы на станке

Сообщение SVP »

jkwe45 писал(а): Ничего не сохранится?
С какого рожна ? Там вроде есть
atomichammer писал(а):f.close()
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

jkwe45 писал(а):Скрипт пишет время начала и время окончания и название файла? А время (разницу между началом работы и окончанием не записывает?)
И что произойдёт если например выключат свет? Ничего не сохранится?
Разницу посчитать же можно. Юникстайм, все дела.
Если выключат свет - последняя работа не запишется, что, в принципе, правильно.

К этому делу я ещё прогу пилю, для просмотра и фильтрации по датам, например, или по имени. Можно было бы поднять мускул и апач и генерить хтмлки, но не хочу станочный комп нагружать.
я только третий день на LINUXCNC и первый на пайтоне :roll:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Журнал учета работы на станке

Сообщение nkp »

наверно отслеживать по моменту запуска уп (завершение - по окончанию уп) - это будет "по фен-шую"...
как вариант - следить за состоянием интерпретатора
jkwe45
Опытный
Сообщения: 102
Зарегистрирован: 13 окт 2017, 12:26
Репутация: 5
Настоящее имя: Андрей
Контактная информация:

Re: Журнал учета работы на станке

Сообщение jkwe45 »

atomichammer писал(а):Сделал просто по контролю за шпинделем:
А как тогда будет, если у меня в УП несколько раз запускается и выключается шпиндель? Или например у меня автосмена, где то есть несколько включений и выключений?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3101
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение MX_Master »

Очень просто (: берём и дописываем нужный функционал
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

nkp писал(а):наверно отслеживать по моменту запуска уп (завершение - по окончанию уп) - это будет "по фен-шую"...
как вариант - следить за состоянием интерпретатора
Ну я так и хотел, но чет не срослось. Там есть s.mcodes, но я не смог оттуда полезное вытащить. Наверное, надо через hal
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Журнал учета работы на станке

Сообщение nkp »

atomichammer писал(а):Наверное, надо через hal
всё упирается в "универсальность")
через hal просто ,но появляются пины в конфиге...
по шпинделю тоже не на 100% универсально - не все станки имеют его ;)
(но большинство))
может стоит добавить что то навроде:
if s.spindle_enabled > 0 and s.task_mode==2:
чтоб работало только в режиме auto
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

Накропал программку-вьюер ExecLog. Минимально рабочий продукт. Потом, может быть, допилю всякие сортировки и выборки.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Журнал учета работы на станке

Сообщение Serg »

nkp писал(а):может стоит добавить что то навроде:
Забей-те вы на шпиндель - помнится там есть признак, что УП выполняется...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

Re: Журнал учета работы на станке

Сообщение atomichammer »

UAVpilot писал(а): Забей-те вы на шпиндель - помнится там есть признак, что УП выполняется...
Ну там было шота вроде режима: AUTO, MANUAL, MDI как-то так. Но серавно надо отлавливать еще выход с этого режима: аварийный, или по завершению УП.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Журнал учета работы на станке

Сообщение Serg »

Всё гораздо проще:

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

halui.program.is−idle bit out
    status pin telling that no program is running

halui.program.is−paused bit out
    status pin telling that a program is paused

halui.program.is−running bit out
    status pin telling that a program is running

halui.program.optional−stop.is−on bit out
    status pin telling that the optional stop is on
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «LinuxCNC»