Gcode: How to move continuously?



  • I'd like to set up macros for loading and unloading filament. I'm not really satisfied with solutions that use G1 to move the extruder stepper a fixed amount and that's it. They either extrude too much filament (and waste it) or they extrude too little. What I'd like (and what I became accustomed to using sailfish) was "just extrude continuously until I stop it."

    For example, I start this continuous extrusion and then use M291 to display a message in blocking mode. When the message was cleared, it would stop extruding. Simple.

    The question is, how can I turn on the extruder stepper continuously and then later stop it?

    Thanks
    Gary



  • I wonder if Stall Guard could work in this way?


  • administrators

    @Dougal1957:

    I wonder if Stall Guard could work in this way?

    That should be possible, if you temporarily reduce the extruder motor current so that that the extruder motor is guaranteed to skips steps before it grinds the filament. It sounds like I need to support G1 S1 SEnnn moves in RRF.



  • Would that run unblocked (and then able to be canceled from gcode?)


  • administrators

    Implemented the easy way, it would be blocking just like ordinary G1 S1 homing moves are.



  • So, it wouldn't be useful at least for my question. What I'm looking for is a way to extrude forever until some interaction makes it stop. The only way I can think that stall guard would help would be to force stopping by grabbing the filament (tightly) to simulate a jam.



  • "just extrude continuously until I stop it."

    +1 for that feature request.
    It's definitely useful.



  • +1 for this feature.



  • @garyd9:

    So, it wouldn't be useful at least for my question. What I'm looking for is a way to extrude forever until some interaction makes it stop. The only way I can think that stall guard would help would be to force stopping by grabbing the filament (tightly) to simulate a jam.

    But if you use it when loading filament into a COLD hotend then it will effectively hit a brick wall when fully loaded and for retracting you just make sure you unload distance is large enough?



  • @Dougal1957:

    @garyd9:

    So, it wouldn't be useful at least for my question. What I'm looking for is a way to extrude forever until some interaction makes it stop. The only way I can think that stall guard would help would be to force stopping by grabbing the filament (tightly) to simulate a jam.

    But if you use it when loading filament into a COLD hotend then it will effectively hit a brick wall when fully loaded and for retracting you just make sure you unload distance is large enough?

    Yes, I agree. It seems a dangerous feature to have.

    Macros offer far more elegant ways to load and unload filament IMO. My load macros, first select the correct extruder, then heat the tool, then do the initial load at high speed, then the last part at slow speed. The unload macros select the tool, heat it to print temperature, then cool it to around 120deg C, then unload the first part slowly, followed by a fast unload, and finally turning the heater off - effectively doing an automated "cold pull". OK, it's a bit of work to establish the distances and speeds but once set up, it's just a matter of running the macro, rather than go through all the individual steps. Very much faster, much less complicated and safer IMO.


  • administrators

    Surely a "normal" G1 S1 Ennn move would work here, using motor stall to terminate the move, with the motor current reduced to ensure that it skip steps instead of grinding the filament? You would set nnn to the maximum length of filament that might need to be fed.



  • @dc42:

    Surely a "normal" G1 S1 Ennn move would work here, using motor stall to terminate the move, with the motor current reduced to ensure that it skip steps instead of grinding the filament? You would set nnn to the maximum length of filament that might need to be fed.

    Yes, I don't see anything wrong with that. Much safer than having something that could potentially try and pass a complete reel of filaments through the extruder.


  • administrators

    Thanks, Ian. If it's easy to implement, I might try to squeeze it into 1.20.1.



  • I added a load cell on my Bowden extruder, to make some measures:

    I planned to use it to detect when the filament is loaded. On the other hand, the stalled detection feature should work as well…



  • @dc42:

    Thanks, Ian. If it's easy to implement, I might try to squeeze it into 1.20.1.

    You'd better check with the OP - he's the one who wants to be able to extrude continuously (I'll just use macros).



  • @deckingman:

    @dc42:

    Thanks, Ian. If it's easy to implement, I might try to squeeze it into 1.20.1.

    You'd better check with the OP - he's the one who wants to be able to extrude continuously (I'll just use macros).

    Ian he was wanting to load the filament to his machine without having it extrude a load of plastic which if I understand correctly he must have been doing it hot for that to happen a small change in workflow to load when cold and this is actually an elegant way of doing titbit of course it will only work with a cold Hotend.

    So the way I would see it working is cold hotend high speed extrude with low motor current so something like a macro that sets cold extrude allowed reduce motor current extrude an amount of filament (say the length of bowden tube plus an amount) once loaded set motor current back to normal set cold extrude disabled.

    Should be relatively easy to do. Tho in my setup I have no need to use load/unload sequences any way

    Doug



  • Hi Doug,

    I was just going by the OPs first paragraph in which he says …...

    "What I'd like (and what I became accustomed to using sailfish) was "just extrude continuously until I stop it." "

    That sounds to me to be a dangerous feature to have, so I agree with David that his solution would be preferable. But, it doesn't fulfil the OPs desire to have continuous extrude until he stops it, hence my comment to David that he should check with the OP that he'd be happy with what he is proposing.



  • I agree Ian but his first sentence was "set up macros for loading and unloading filament" and the solution David is looking at is the better one.

    Just also funny that the OP hasn't responded to any of these suggestions

    Doug



  • Yes all true. It's how you interpret the words "until I stop it" and then in the context of a macro. AS for response, it's the weekend so the OP probably has better things to do than us old codgers 🙂



  • You could well be right Ian



  • I haven't responded simply because there hasn't been a response to my question. There have been lots of alternatives to the example I gave to try to give the question context, but not a simple "yes" or "no" answer. (Apparently, the answer is "no.")

    Please don't take this the wrong way: I appreciate the responses and attempts to address what I posted, but a simple "no, you can't do that" would have been perfectly acceptable (even if it isn't what I'd like to see.)

    Before going on, I want to point out that I think of loading/unloading filament as a human interactive process. I have to manually get the filament to the extruder, manually ensure that the drive gear "catches" the filament, and manually see the filament coming out of the nozzle. To me, doing it any other way is odd, unusual, unsafe, etc. (And perhaps that's another reason I'm coming to love the Duet: People can usually do things their own way.)

    In response to the various alternatives to loading filament (and other responses that caught my eye), please allow me to answer each:

    It's unsafe: Really? Think about that in the grand scheme of 3D printing. Is it any more safe to have a gcode script that runs for hours (or days) with no interaction whatsoever while heating plastic in 1 or more nozzles to 280C (for PC)? I'm talking about manually putting filament in an extruder hole, starting a macro, and turning it back off again. Owners of Sailfish based printers have been doing it this way for years and years. Get the filament ready, turn on the "load filament" function, feel filament pulling into extruder, watch it come out the nozzle, turn off the load filament function. Done.

    Macros and scripts to auto-feed set amounts: I thought I addressed this already. They either feed too much or not enough. I really have no idea how much I want to feed until I'm watching it flow through the nozzle. Sometimes I like to extrude a bit more to clean out a previous color. Sometimes I know the nozzle is clean (and the particular filament is expensive, such as PVA, so I want a lot less.) On occasion, I notice that something looks odd with the flow and want to stop, adjust temperature or something, and extrude some more.

    Using a stall guard to stop feeding when the cold filament hits the nozzle: That doesn't allow me to see that the filament is flowing. All it tells me is that the filament drive gear has encountered resistance. See above paragraph.

    So, being that I can't do what I'd like to do, I'll keep using the alternative I've been using in the meantime: Heat nozzle, shove filament into extruder, use the PanelDue to extrude filament in 100mm (or less) chunks until I'm happy with the load. Not a big problem and "close enough" to what I was doing before.

    Thank you - and take care
    Gary


  • administrators

    The way the firmware currently works, every move must have a defined limit. The only ways of terminating moves that are implemented are:

    1. If the move is sensitive to endstop switches and switch is triggered;

    2. Because of a power panic;

    3. Because of an emergency stop.

    I am reluctant to make major changes to the movement system just to support this feature. I guess one way to implement it would be to treat the user 'stop' input as a virtual endstop. You would still need to specify a maximum length to extrude.

    Personally, I think being able to extrude up to a certain limit or until motor resistance becomes high would be a big improvement. At that point you could use the normal extrude buttons to extrude e.g. 50mm @ 5mm/sec. or do that automatically in the same macro. If extrusion then happens, you can decide whether you want to extrude more. If not, you can investigate the problem.



  • It's okay that the firmware (and gcode) doesn't support what I want. I was really only asking if it was possible to do within the existing duet framework.

    There are other ways to do things (such as poking buttons on the paneldue to feed 100mm, 50mm, etc of filament at a time until I'm happy with the load.) I was just trying to fit reprap/gcode into the sailfish box I had grown accustomed to.

    Being that I'm already moving outside that box (slowly, but surely), it's not a big problem. I've already changed T0 to be my left tool and T1 to be my right. It better matches the paneldue display, the DWC, and the tendency for most English speakers to think in terms of left to right.

    Anyway, if I really wanted some kind of continuous feed, there's nothing stopping me from grabbing the source code and adding it. 🙂

    Take care
    Gary


Log in to reply