Is G-code read line by line?

  • I am trying to add the line

    G4 P4000 G1 F4000 E-50

    to pause and retract the print in order for the printed line to dry (printing in mid air vertically). Does the above code work or should i skip lines or does it not matter at all?

    G4 P4000

    G1 F4000 E-50

    Would the following line do the exact same thing?

    G4 P5000 E-50

    Basically, only one "Gx" command per line. Everything following is a parameter list modifying the command.

    Maybe you should update the question to explain what you exactly want to do, e.g. do you want to change to another filament, e.g. do you pause to retract during the pause? As it stands now the print pauses, you retract the filament after the pause and then the print continues without filament when inserted in between the code lines. Please explain where the pause is taking place.

    Please [edit] your question to include the requested information!

    Thank you @0scar i have clarified.

  • 0scar

    0scar Correct answer

    4 years ago

    Yes, G-code is read line by line. G-code is a numerical control programming language. It basically instructs the machine sequentially line by line to do a specific task. The printer than executes the lines one by one until it reaches the end.

    If you instruct the printer to wait (G4 dwell), it will do the wait/dwell first and than will execute the next command to retract the filament. As such, your examples will not work if you want to retract the filament during the pause, you reversed the process if you want to achieve that.

    To add a pause (simple) for e.g. filament changing, you should instruct the head to go to a certain position, extract the filament, and now insert the pause/dwell command. Give yourself enough time to insert and prime the nozzle and go back to the last location to continue printing.

    You could insert something like (e.g. in between layer change, before G1 Zx.xx):

    G1 X0 Y0 F2000 ; Relocate the print head
    G1 F4000 E-50 ; Retract filament
    G4 P40000 ; Wait for 40 seconds
    G92 E50 ; The new filament should continue at this value
    G1 Zx.xx

    Depending on what happens after G1 Zx.xx, you may need to set the head back to the location prior to where it was before G1 X0 Y0 F2000.

    Do note that there are pausing scripts/plugins available for e.g. Ultimaker Cura, and there is also a filament changing command M600 that can be enabled for certain firmware (if this is your ultimate goal).

    Using a post processing plugin of Ultimaker Cura, a pausing script looks like:

    G0 X137.692 Y105
    ;TYPE:CUSTOM;added code by post processing
    ;current z: 5
    ;current height: 5.0
    G1 F300 Z6
    G1 F9000 X190 Y190
    G1 F300 Z15
    M104 S0; standby temperature
    M0;Do the actual pause
    M109 S200; resume temperature
    G1 F300 Z6
    G1 F9000 X133.423 Y105
    G1 F9000
    G92 E911.50045
    G0 X137.692 Y105 Z5

    Note that G0 and G1 are "move to" location instructions (albeit through a different way, fast move and linear move respectively). If you look closely, you see that after the pause, the printer returns to the X-Y position where it left prior to the pause (X137.692 Y105).

    Side note:

    Some firmware flavors allow buffering, but each statement is executed sequentially.

    As you rightly state, `G0` and `G01` are not quite the same thing... `G0` means linear interpolation at the rapid rate, whereas `G01` means linear interpolation at the feed rate. the OP would need `G01` (at the feed rate).

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM

Tags used