Skip to main content

Generate time dependent boundary conditions from a .gcode file.

Project description

pyGCodeDecode

LOGO

License: MIT tests GitHub Release

Python Black isort pre-commit

What is this repository for?

This package reads the target trajectory and commands for changing firmware settings from a GCode file. Furthermore it simulates a motion planner with acceleration and jerk / junction control. The simulation result describes the nozzle and extrusion axis position and velocity at every point in time. Notably, this method does try to simulate the real printer movements at a higher accuracy than assuming constant velocity. This is achieved by replicating grbl and derivative firmwares specific movement planner solutions, such as Junction Deviation as an interpretation for Jerk. This python package can be used to generate time dependent boundary conditions from a GCode file, needed in additive manufacturing simulations such as Fused Filament Fabrication. With implemented 3D plotting functions, it also can be useful as a GCode analyzer tool, to visualize local velocities to gain better process understanding.

The package is highly modularized to enable quick modification and extension of all features.

PyGCodeDecode is currently as a generator for Abaqus Event Series to model the material extrusion process.

Install pyGCodeDecode

It is recommended that you first create a virtual Python-environment, e.g. using the venv-module built into Python. You can clone the repository and run

    pip install .

from inside the root directory. Alternatively you can simply install from PyPI:

    pip install pyGCodeDecode

If you plan to contribute to the development, install in development mode and with the additional dependencies:

    pip install -e .[DEVELOPER]

You may want to verify the installation and version. Inside your environment, just run:

    python -c "import pyGCodeDecode
    print(pyGCodeDecode.__version__)"

This should return the correct version.

Supported GCode commands

fully supported:

    "G0": {"E": None, "X": None, "Y": None, "Z": None, "F": None},  # non Extrusion Move
    "G1": {"E": None, "X": None, "Y": None, "Z": None, "F": None},  # Extrusion Move
    "G4": {"P": None, "S": None},  # Dwell
    "M82": None,  # E Absolute
    "M83": None,  # E Relative
    "G20": None,  # Inches
    "G21": None,  # Milimeters
    "G90": None,  # Absolute Positioning
    "G91": None,  # Relative Positioning
    "G92": {"E": None, "X": None, "Y": None, "Z": None},  # Set Position
    ";": None,  # Comment

partially supported:

    "M203": {"E": None, "X": None, "Y": None, "Z": None},  # Max Feedrate *read only
    "M204": {"P": None, "R": None, "S": None, "T": None},  # Starting Acceleration *P only
    "M205": {"E": None, "J": None, "S": None, "X": None, "Y": None, "Z": None},  # Advanced Settings *X only
    "G10": {"S": None}, *read only
    "G11": None, *read only

Workflow

define a printer with default parameters in a .yaml

example definition (also see ./pyGCodeDecode/data/default_printer_presets.yaml):

    prusa_mini:
            # general properties
            nozzle_diam: 0.4
            filament_diam: 1.75
            # default settings
            p_vel: 35
            p_acc: 1250
            jerk: 8
            # axis max speeds
            vX: 180
            vY: 180
            vZ: 12
            vE: 80
            firmware: marlin_jerk

create a script to run pyGCD

Create a .py file to set up and run the simulation. Import the package:

    from pyGCodeDecode import gcode_interpreter

load the setup with:

    setup = gcode_interpreter.setup(filename=r"e./pygcodedecode/data/default_printer_presets.yaml")

select a printer:

    setup.select_printer("prusa_mini")

(optional) set custom properties:

    setup.set_property({"layer_cue": "LAYER_CHANGE"})

run the simulation:

    simulation = gcode_interpreter.simulation(filename=r"example\example.gcode", initial_machine_setup=setup)

use the simulation obj from now on, to retrieve information or use plot functions:

get axis values at a certain time (e.g. 2.6 s):

    simulation.get_values(t=2.6)

plot in 3D:

    simulation.plot_3d()

pyGCD can also be used to create files defining an event series for ABAQUS simulations:

    generate_abaqus_event_series(
            simulation=simulation,
            filpath="path/to/event_series.csv"
    )

For more in depth information have a look into the documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyGCodeDecode-0.2.0.tar.gz (34.4 kB view details)

Uploaded Source

Built Distribution

pyGCodeDecode-0.2.0-py3-none-any.whl (32.4 kB view details)

Uploaded Python 3

File details

Details for the file pyGCodeDecode-0.2.0.tar.gz.

File metadata

  • Download URL: pyGCodeDecode-0.2.0.tar.gz
  • Upload date:
  • Size: 34.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for pyGCodeDecode-0.2.0.tar.gz
Algorithm Hash digest
SHA256 85d65dfc2be6c84496fb2d9ed6b3c3e5cd84afcf1dce4066ad5bcc7548783b77
MD5 2416a0268c86d01641d2d2b8e1ffa0f9
BLAKE2b-256 bed22c0b8e53a131a0ea700eaac38dc489870698930a7c62cb5511c43d3234de

See more details on using hashes here.

File details

Details for the file pyGCodeDecode-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pyGCodeDecode-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a0c21a930d82e509c259ebf7ecc709ac0f92ba6ef500d0c6b3be96bbad23f80
MD5 31e0b1d65db6923824491b7017f5309c
BLAKE2b-256 14455e0a64b0cae30844cf25d55f2bd75f248a9198b3dc8996aeddc612d64208

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page