Cut Recovery Not Consistently Triggering

More
2 years 3 weeks ago #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
2 years 3 weeks ago #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:
Code:
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
2 years 3 weeks ago - 2 years 3 weeks ago #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: 2 years 3 weeks ago by phillc54. Reason: add question

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

More
2 years 3 weeks ago #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.

More
2 years 3 weeks ago - 2 years 3 weeks ago #311841 by snowgoer540
if you do what i suggested earlier, update and use this pin instead:

Code:
qtplasmac.ext_pause_only
Last edit: 2 years 3 weeks ago by snowgoer540.

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

More
1 year 10 months ago - 1 year 10 months ago #316408 by Uthayne
Thanks! I was able to get it to work by connecting my components pause-program output to the qtplasmac.ext_pause (I haven't updated yet to try to the ext_pause_only). It appears there was timing issues when I was trying to trigger this by throwing the ohmic signal high.

Side note, I believe when I was first working on this I was occasionally using sudo with halcompile (I'm on a RIP install) so the changes to the comp weren't actually happening.... lessons learned!

Reverse run seems to be working without fault now, but I do have another question on why it can't go back further than the last M03 (or any M-code)? I have some M64/65 set periodically in gcode and it will not reverse past these points. I took a look at the tcq.c file which is where the 200 line limit is set, but cannot find any reference.
Last edit: 1 year 10 months ago by Uthayne.

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

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