terjeio / ioSender

A GCode Sender for Grbl and grblHAL written in C# (Windows only).
BSD 3-Clause "New" or "Revised" License
207 stars 65 forks source link

Using a tool offset for probing offcenter tools #386

Open T4KUUY4 opened 3 weeks ago

T4KUUY4 commented 3 weeks ago

Hi, Im unable to find out if its possible to use tool diameter offsets for toolchanging touch off´s so you can automatically touch off face mills etc.

Tools that are "deeper" in the center like face mills.

Is this possible in IoSender?

terjeio commented 2 weeks ago

Is this in combination with touch off @ G59.3? FYI the toolchange workflow is run on the controller side, the sender is basically waiting for a cycle start to be issued (while allowing jog commands).

T4KUUY4 commented 2 weeks ago

Hi, yea it is in combination with the automatic touch off at G59.3.

When using a normal size endmill, everything works out great. I hit M6 T5 for example, toolhead raises up, i change tool, click start and it moves over to the pin + touches off. All good for normal style endmills. But facemills for example, are deeper in the center than on the outside (where the inserts are), so the measurement is not right.

These would require a different touch off position so the inserts touch the probe and not the center deeper dish of the facemill. See examples below: normal endmill Offset FaceMill

Thanks in advance, Tom

terjeio commented 1 week ago

In the next commit I will change the signature of an event and where it is called from to allow plugin code to modify the G59.3 target. A simple plugin will be something like this:

#include "grbl/hal.h"
#include "grbl/protocol.h"

static on_probe_toolsetter_ptr on_probe_toolsetter;
static on_report_options_ptr on_report_options;

bool probeToolSetter (tool_data_t *tool, coord_data_t *position, bool at_g59_3, bool on)
{
    if(on && tool && position) {

        if(tool->tool_id == 5)
            position->y += 5;
    }

    if(on_probe_toolsetter)
        on_probe_toolsetter(tool, position, at_g59_3, on);

    return true;
}

static void report_options (bool newopt)
{
    on_report_options(newopt);

    if(!newopt)
        hal.stream.write("[PLUGIN:Toolsetter tool offset v0.01]" ASCII_EOL);
}

void my_plugin_init (void)
{
    on_probe_toolsetter = grbl.on_probe_toolsetter;
    grbl.on_probe_toolsetter = probeToolSetter;

    on_report_options = grbl.on_report_options;
    grbl.on_report_options = report_options;
}

A more complete plugin should be made that allows setting the offset(s) for multiple tools and store them in EEPROM. And maybe later incorporate the code into the core itself.

T4KUUY4 commented 1 week ago

This sounds great. Cant wait for it to happen. Thanks a bunch