Cut Recovery Not Consistently Triggering

More
30 Sep 2024 17:37 #311082 by Uthayne
I run plasmac with a fiber laser now and while I have made a few modifications to the settings, the underlying plasmac component runs the same as it did with a plasma cutter. My THC is tracking to a capacitance value instead of voltage, which goes to 0 when the nozzle touches material (mainly tip-ups) during any movement. This usually leads me to needing to a do a reverse jog sequence and restart the cut - which works well.

The issue I am having is that the cut recovery panel is not consistently being enabled when paused_motion (plasmac state 19) is triggered. I can't narrow down why cut recovery is able to be used sometimes and not others. I have a component that monitors my capacitance (nozzle to work distance) and will pause the program if it goes below a threshold, or actually touches the nozzle to the work piece which prevents a crash.

To get cut recovery and reverse run to work, I usually (>90%) have to click the "REV" button, click Resume, click Pause, click "REV" again, click Resume, and then the "REV" button actually will back up the program. Other than doing this sequence, the "REV" button doesn't do anything, even while being in plasmac state 19.

I have tested cut recovery with both my custom component that will pause the program, as well as manual pausing and it doesn't make a difference for when cut recovery is not bugged.

Please Log in or Create an account to join the conversation.

More
01 Oct 2024 23:25 #311134 by snowgoer540
I vaguely remember fixing something similar to this with Phill's help semi recently...

It would help to know what specific version of QtPlasmaC you are running?

Please Log in or Create an account to join the conversation.

More
03 Oct 2024 02:44 #311209 by Uthayne
Right, my bad. I'm on QtPlasmaC v2.10-008.046

Please Log in or Create an account to join the conversation.

More
03 Oct 2024 09:19 #311216 by snowgoer540
Hmm wouldn’t have been that recent.

I can take a look into it when I get some time. I remember back when there was a lot of trickery surrounding the timing between the component(s) (plasmac.comp, and in your case your capacitance comp) and the GUI’s timing. Perhaps there’s a better way to implement now.

It is tough because I’ve not run into this when cutting or simulating. Not saying it doesn’t exist, but it just makes it infinitely harder to fix when the issue is inconsistent or varies between computers.

Hopefully at least the reverse run stuff is easy to duplicate …

Please Log in or Create an account to join the conversation.

More
03 Oct 2024 19:52 #311250 by Uthayne
My component issues an ohmic-probe signal which plasmac will then pause the program, and sometimes the "Pause" button is still shown instead of what should be a "Resume" button, so maybe that has something to do with it. However, this is not the only case when the cut recovery panel doesn't work. If I hit Pause (spacebar) manually during a cut, it is not guaranteed to have cut recovery work appropriately still.

I could try instead linking the nozzle short condition to the program-pause signal and see if that helps with the timing aspect.

Please Log in or Create an account to join the conversation.

More
04 Oct 2024 17:37 #311300 by snowgoer540
You could try using the following pin:
qtplasmac.ext_pause

I kind of doubt it will make much difference if you have issue with the space bar, but it's worth trying.

Please Log in or Create an account to join the conversation.

More
07 Oct 2024 09:34 #311478 by snowgoer540
For what it’s worth, I tried for 20 minutes or so to get my table to duplicate any of your issues. Everything works fine. The cut recovery panel comes up, reverse run always worked. I know that’s not what you want to hear …
The following user(s) said Thank You: Uthayne

Please Log in or Create an account to join the conversation.

More
07 Oct 2024 21:29 #311530 by Uthayne
If I start a program and pause it with spacebar, or the GUI, cut recovery seems to be working as intended. I just repeated this test 5 times and it worked every time.

When I touch the nozzle with my finger (laser is not on), it causes the ohmic-probe signal to go HIGH, which will pause the program throwing the error "Ohmic probe activated, program is paused" I am using this function of plasmac to detect nozzle crashes when ohmic probing should not be enabled (anytime state != 2, the probe down state). Sometimes, cut recovery works just fine, but when I just tested it now it is not.

Perhaps this is running into timing issues between the components and the GUI as you said and I should investigate explicitly calling program pause. I will have to think on this a bit as I want it to catch even when the program is not running (jogging around) and also set jog-inhibit if I happen to jog into a crash situation. The laser is not mounted on a floating Z like plasma torches typically are, so I need to be extra sensitive with nozzle crashes.

Here's my fiber laser component, and the dynamic probing section is what takes care of nozzle crashes:
component fibercap "Convert BCL-AMP frequency to an appropriate level";

description """This component takes the BCL-Amplifier frequency input
and converts it to a 'voltage' value that plays nicely with Plasmac.

It also includes power level adjusting based on velocity and dynamic probing which
probes to a set capacitance value instead of touching the material.""";

/* INPUT PINS */
pin in  float bcl_amp_freq                  "BCL-AMP frequency IN";
pin in  float bcl_amp_freq_max                "Max frequency observed from BCL-AMP";  
pin in  float bcl_amp_freq_min                "Minimum frequency observed from BCL-AMP";
pin in  float capacitance_max                "Desired maximum capacitance value";
pin in  float capacitance_min                "Desired minimum capacitance value, usually 0";
pin in  float current_velocity                "Current machine velocity";    
pin in  float cut_capacitance               "Cut capacitance setting, from plasmac.cut-volts";
pin in  float cut_feed_rate                 "Cut velocity, from plasmac.cut-feed-rate";
pin in  float cut_height                    "Cut height, from plasmac.cut-height";
pin in  bit   enable_dynamic_probing   ;
pin in  float full_power_percent    ;
pin in  float lower_power            ;
pin in  float laser_max_power       ;
pin in  float nozzle_short_capacitance      "Desired capacitance to detect nozzle crashes";
pin in  bit ohmic_pierce_delay              "Delay for ohmic sense after torch-on to deal with slag hitting nozzle";
pin in  s32 plasmac_state                   "Plasmac state";
pin in  float probe_factor                  "Adjustment factor for use with dynamic probing";
pin in  bit torch_on                        "Plasmac Torch On signal";

/* OUTPUT PINS */
pin out float current_capacitance   ;
pin out float raw_freq                ;
pin out float laser_power              ;
pin out bit   ohmic_probe           ;

/* LOCAL VARIABLES */
variable float bcl_amp_range            ;
variable float capacitance_range        ;

function _;
author "Bryan LaRochelle";
license "GPL";
;;
#include <rtapi_math.h>

FUNCTION(_) {
    
    /* Scaling the frequency input to a preferred range */
    raw_freq = bcl_amp_freq;
    bcl_amp_range = (bcl_amp_freq_max - bcl_amp_freq_min);
    capacitance_range = (capacitance_max - capacitance_min);
    current_capacitance = (((bcl_amp_freq - bcl_amp_freq_min) * capacitance_range) / bcl_amp_range) + capacitance_min;
    
    /* Set the floor at 0 */
    if(current_capacitance < capacitance_min){
        current_capacitance = capacitance_min;
    }
        
    /* Dynamic Power */
    //if torch.on and motion.current-vel > some number, set power
    
    if(torch_on){
        if(current_velocity*60 > cut_feed_rate * (full_power_percent/100)){
            laser_power = laser_max_power;
        }
        else{
            laser_power = lower_power;
        }
    }


if(enable_dynamic_probing){
    
    /* Dynamic Probing */
    /* If probing, trigger at cut_capacitance instead of material */
    if(plasmac_state == 2){ //probe down state
        if(current_capacitance <= cut_capacitance + probe_factor){
            ohmic_probe = true;
        }
    }
}    

if(!enable_dynamic_probing || plasmac_state != 2){
    /* Catch nozzle tips any other time */
    if(((current_capacitance <= nozzle_short_capacitance + probe_factor) || (current_capacitance <= capacitance_min)) && (!torch_on || ohmic_pierce_delay)){
        ohmic_probe = true;
    }

    else{
        ohmic_probe = false;
    }
  }

}

Please Log in or Create an account to join the conversation.

More
08 Oct 2024 02:53 - 08 Oct 2024 02:59 #311539 by phillc54
Unfortunately we need to interface with some user space signals so we do work around some timing issues.

Maybe your ohmic-probe output is not active for long enough during a nozzle crash.

EDIT: Does the Z axis raise even though the cut recovery panel does not appear?
Last edit: 08 Oct 2024 02:59 by phillc54. Reason: add question

Please Log in or Create an account to join the conversation.

More
08 Oct 2024 11:23 #311559 by Uthayne
Yes, it has never failed to pause and go to Z max height after a nozzle crash.

Please Log in or Create an account to join the conversation.

Moderators: snowgoer540
Time to create page: 0.091 seconds
Powered by Kunena Forum