On 21/6/22 23:18, Jose Luis wrote:
On 18/6/22 1:47, andy pugh wrote:
On Fri, 17 Jun 2022 at 17:07, Jose Luis <j.l.toledan...@gmail.com>
wrote:
Still need to figure the parts from linuxcnc like where i can get or
put
the data.
Dewey added an interface. I'll be honest and say that it isn't how I
would have done it. But I didn't do it so....
https://linuxcnc.org/docs/devel/html/tooldatabase/tooldatabase.html
Hello,
where in the source tree can i place the db_program so it goes to
PATH?
Thanks
#!/usr/bin/env python3
import os
import sys
import re
from tools_db.base import Session, Base, engine
from tools_db.tool_database import Tools, Offsets, Pockets, Spindles
from tooldb import tooldb_callbacks # functions (g,p,l,u)
from tooldb import tooldb_tools # list of tool numbers
from tooldb import tooldb_loop # main loop
# Catch unhandled exceptions
def excepthook(exc_type, exc_msg, exc_tb):
print(exc_type, file=sys.stderr)
print(exc_msg, file=sys.stderr)
print(exc_tb, file=sys.stderr)
sys.excepthook = excepthook
class DataBaseManager():
def __init__(self):
super(DataBaseManager, self).__init__()
Base.metadata.create_all(engine)
self.session = Session()
tools = self.session.query(Tools).all()
tool_list = list()
for tool in tools:
tool_list.append(tool.number)
tooldb_tools(tool_list)
tooldb_callbacks(self.user_get_tool,
self.user_put_tool,
self.user_load_spindle,
self.user_unload_spindle)
self.tool_list = tool_list
self.tools = dict()
def close(self):
self.session.close()
def user_get_tool(self, tool_no):
# print(f"GET tool {tool_no}", file = sys.stderr)
tool = self.session.query(Tools).filter(Tools.number == tool_no).one()
offsets = self.session.query(Offsets).filter(Offsets.tools_id == tool_no).one()
pocket = self.session.query(Pockets).filter(Pockets.tools_id == tool_no).one()
data = [f"T{tool.number}",
f"P{pocket.slot_pos}",
f"D{offsets.diameter}",
f"X{offsets.x_offset}",
f"Y{offsets.y_offset}",
f"Z{offsets.z_offset}",
f"A{offsets.a_offset}",
f"B{offsets.b_offset}",
f"C{offsets.c_offset}",
f"U{offsets.u_offset}",
f"V{offsets.v_offset}",
f"W{offsets.w_offset}"]
return " ".join(data)
def user_put_tool(self, tool_no, params):
# print(f"PUT tool {tool_no} {params}", file=sys.stderr)
tool = self.session.query(Tools).filter(Tools.number == tool_no).one()
offsets = self.session.query(Offsets).filter(Offsets.tools_id == tool_no).one()
pocket = self.session.query(Pockets).filter(Pockets.tools_id == tool_no).one()
params_list = re.split(r' | |;', params)
tool_dict = dict()
for param in params_list:
column = param[0]
value = param[1::]
tool_dict[column] = value
tool.number = tool_dict.get("T")
pocket.tools_id = tool_dict.get("P")
offsets.x_offset = tool_dict.get("X")
offsets.y_offset = tool_dict.get("Y")
offsets.z_offset = tool_dict.get("Z")
offsets.a_offset = tool_dict.get("A")
offsets.b_offset = tool_dict.get("B")
offsets.c_offset = tool_dict.get("C")
offsets.i_offset = tool_dict.get("I")
offsets.j_offset = tool_dict.get("J")
offsets.q_offset = tool_dict.get("Q")
offsets.u_offset = tool_dict.get("U")
offsets.v_offset = tool_dict.get("V")
offsets.w_offset = tool_dict.get("W")
offsets.diameter = tool_dict.get("D")
try:
self.session.commit()
except Exception as e:
print(e, file=sys.stderr)
def user_load_spindle(self, toolno, params):
print(f"LOAD SPINDLE {toolno} {params}", file=sys.stderr)
tno = int(toolno)
# TMP = toolline_to_dict(params,['T','P'])
# if TMP['P'] != "0": umsg("user_load_spindle_nonran_tc P=%s\n"%TMP['P'])
# if tno == 0: umsg("user_load_spindle_nonran_tc tno=%d\n"%tno)
#
# # save restore_pocket as pocket may have been altered by apply_db_rules()
# D = toolline_to_dict(self.tools[tno],all_letters)
# restore_pocket[tno] = D['P']
# D['P'] = "0"
#
# if p0tool != -1: # accrue time for prior tool:
# stop_tool_timer(p0tool)
# RESTORE = toolline_to_dict(self.tools[p0tool],all_letters)
# RESTORE['P'] = restore_pocket[p0tool]
# self.tools[p0tool] = dict_to_toolline(RESTORE,all_letters)
#
# p0tool = tno
# D['T'] = str(tno)
# D['P'] = "0"
# start_tool_timer(p0tool)
# self.tools[tno] = dict_to_toolline(D,all_letters)
# save_tools_to_file(db_savefile)
def user_unload_spindle(self, toolno, params):
print(f"UNLOAD SPINDLE {toolno} {params}", file=sys.stderr)
tno = int(toolno)
if p0tool == -1: return # ignore
# TMP = toolline_to_dict(params,['T','P'])
# if tno != 0: umsg("user_unload_spindle_nonran_tc tno=%d\n"%tno)
# if TMP['P'] != "0": umsg("user_unload_spindle_nonran_tc P=%s\n"%TMP['P'])
#
# stop_tool_timer(p0tool)
# D = toolline_to_dict(self.tools[p0tool],all_letters)
# D['T'] = str(p0tool)
# D['P'] = restore_pocket[p0tool]
# self.tools[p0tool] = dict_to_toolline(D,all_letters)
#
# p0tool = -1
# save_tools_to_file(db_savefile)
def main():
tool_db_man = DataBaseManager()
try:
tooldb_loop() # loop forever, use callbacks
except Exception as e:
# print(f"Exception = {e}", file=sys.stderr)
print("Closing database session.", file=sys.stderr)
finally:
tool_db_man.close()
if __name__ == "__main__":
main()
_______________________________________________
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers