• Tags
  • Documentation
  • Order
  • Register
  • Login
Duet3D Logo Duet3D
  • Tags
  • Documentation
  • Order
  • Register
  • Login

Conditional GCode and object model variables

Scheduled Pinned Locked Moved
Gcode meta commands
32
66
8.1k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined
    denke
    last edited by denke 27 Dec 2019, 08:47

    Current tool position could be nice, During multi-hotend, pressure advance and retraction calibration it would allow printing multiple lines / objects with different offsets, and then manually jogging the head to the correct one and selecting that.

    I think that E3D guys already requested this feature a few months back.

    Also, floor, ceil, round? functions would be useful.

    1 Reply Last reply Reply Quote 1
    • undefined
      TLAS
      last edited by 27 Dec 2019, 08:49

      I would like to see extruder position as something able to be used. Been thinking about adding additional motor that would perform certain actions depending on the print head position. Not sure if there’s another way of doing this or not.

      1 Reply Last reply Reply Quote 0
      • undefined
        Veti
        last edited by 27 Dec 2019, 09:33

        i remember some people asking for things like
        endstop status.
        axis homed status
        temperature
        is printing
        last command failed (failure to probe)
        macro parameters
        function to read value from analogue/digital pin

        here is an idea. have a json function that outputs the entire state of the duet as json.
        then have a jsonpath function that can be used to get whatever value is desired from that json.

        undefined 1 Reply Last reply 27 Dec 2019, 10:41 Reply Quote 0
        • undefined
          dc42 administrators
          last edited by T3P3Tony 27 Dec 2019, 10:37

          BTW in case anyone is wondering why it's taken a while: https://miscsolutions.wordpress.com/2019/12/27/using-exceptions-in-c-embedded-software/

          Duet WiFi hardware designer and firmware engineer
          Please do not ask me for Duet support via PM or email, use the forum
          http://www.escher3d.com, https://miscsolutions.wordpress.com

          ? ? 2 Replies Last reply 27 Dec 2019, 11:38 Reply Quote 1
          • undefined
            dc42 administrators @jens55
            last edited by 27 Dec 2019, 10:38

            @jens55 said in Conditional GCode and object model variables:

            Don't forget the basics ie +/-/:/x/>/</=
            You probably have those but just in case ....

            Already have: + - * / = > < >= <= & I !

            Duet WiFi hardware designer and firmware engineer
            Please do not ask me for Duet support via PM or email, use the forum
            http://www.escher3d.com, https://miscsolutions.wordpress.com

            1 Reply Last reply Reply Quote 1
            • undefined
              dc42 administrators @Veti
              last edited by 27 Dec 2019, 10:41

              @Veti said in Conditional GCode and object model variables:

              here is an idea. have a json function that outputs the entire state of the duet as json.
              then have a jsonpath function that can be used to get whatever value is desired from that json.

              This is essentially what I am implementing, except that a json representation of the entire state would be huge, so we don't actually construct it.

              Duet WiFi hardware designer and firmware engineer
              Please do not ask me for Duet support via PM or email, use the forum
              http://www.escher3d.com, https://miscsolutions.wordpress.com

              1 Reply Last reply Reply Quote 0
              • undefined
                JuKu
                last edited by 27 Dec 2019, 11:08

                For me the most useful, by far, would be something that I can set myself: Set object value to something, use the value later. I write the software that sends G code to my machine myself, so I’d be happy with something simple, like
                “var1 = xx.xx” and later use “G0 X%var1%”.

                Perhaps more generally useful would be a way to set a value from a get command or a previously set value. Examples:
                varX = M114 X // set varX to current X position
                BedT = M140 S? // set BedT value to whatever was previously set by M140 command

                1 Reply Last reply Reply Quote 1
                • ?
                  A Former User
                  last edited by 27 Dec 2019, 11:35

                  While I don't have the whole plan ready to go I'd be most interested in functions that would enable me to probe the work piece in (CNC mode)

                  Basic trig like you mentioned, tool diameters (either as user defined variables like JuKu mentioned or as part of the tool definition). And for user interaction attaching input pins to user prompts, with optional timeouts and default for M291. Input (and output) pin state instead of M582.

                  Looking forward to experiment with this!

                  1 Reply Last reply Reply Quote 0
                  • ?
                    A Former User @dc42
                    last edited by 27 Dec 2019, 11:38

                    @dc42 said in Conditional GCode and object model variables:

                    BTW in case anyone is wondering why it's taken a while: https://wordpress.com/post/miscsolutions.wordpress.com/3287

                    took me to a login page. presumably this is the one? https://miscsolutions.wordpress.com/2019/12/27/using-exceptions-in-c-embedded-software/

                    interesting read. thanks for sharing! (lots more to read as well i see, good stuff

                    1 Reply Last reply Reply Quote 0
                    • ?
                      A Former User @dc42
                      last edited by 27 Dec 2019, 12:07

                      @dc42 said in Conditional GCode and object model variables:

                      why it's taken a while

                      I hope you do know that gcc/g++ exceptions are not "really" thread-safe. Never used exceptions on embedded systems so can't confirm how it behaves on ARM but since you are using RTOS on the RRF3 you might wanna be careful 🙂

                      As variables go, no idea, never used variables in G-Code, no clue what I'd use it for but I'm sure when I see how others are using it some ideas will be born 😄

                      undefined 1 Reply Last reply 27 Dec 2019, 16:50 Reply Quote 0
                      • undefined
                        timcurtis67 @dc42
                        last edited by 27 Dec 2019, 12:21

                        @dc42 Math functions and the ability to store coordinates in temporary variables is what I am looking for. Also yes to the sin, cos, tan, sqrt, abs. It would be handy to have.

                        Example of center find on X axis,

                        Storing x axis location stop point in each direction. (H1 and H2).

                        Then subtracting location 1 from location 2. (H3=H1-H2).

                        Dividing the result in half. (H4=H3/2)

                        Adding the new result to location 1. (H5 =H4+H1)

                        Move to new location G1(H1).

                        At some point when the center location is found the XYZ offset can then be saved to G10 for the tool with an M500.

                        The "H" can of course be whatever name you are planning to use. In the Fanuc controls the variables are stored in locations with a "#". So I can call up a value to move to like this, G1 X12.125 Y#2265 F30.0. What ever is stored in 2265 gets transferred into Y.

                        Not sure if you are planning to follow a GCode standard or not.

                        1 Reply Last reply Reply Quote 0
                        • ?
                          A Former User
                          last edited by 27 Dec 2019, 12:24

                          Perhaps it’s time for a library build in between newlib and newlib-nano

                          I have seen number of these, they are pain to maintain and usually never get updated/patched ... actually now when I think about it, I don't think I ever seen one revisited after initially created for the project ... creating some "standard" newlib-milli and/or newlib-micro would probbly get traction if one is to dedicate one's time to maintain it...

                          1 Reply Last reply Reply Quote 0
                          • undefined
                            OwenD
                            last edited by 27 Dec 2019, 12:34

                            Whilst I don't have anything specific in mind, I'd think that some type of switch/case function would be handy for many of the intended uses.

                            1 Reply Last reply Reply Quote 0
                            • undefined
                              deckingman
                              last edited by 27 Dec 2019, 13:28

                              I swap between multiple mixing hot ends and have a number of configuration files to suit. I also use pre and post print macros rather than using the slicer start and end gcode. But if I use the wrong macro, I get errors setting temperatures for non-existant tools. So it would be great if I could have something like "If tool n exists, G10 Pn Snnn Rnnn". Then I'd only need one macro per filament rather than multiple macros to suit the number of tools defined in config.g as well as filament types.
                              I'd also like to be able to run a purge macro depending on the time that a filament has been held at print temperature. So when printing PLA which will hydrolyse over time, when changing tools (filaments) a purge macro would only run if the time since the new filament was last used was greater than a predefined amount of time.

                              Ian
                              https://somei3deas.wordpress.com/
                              https://www.youtube.com/@deckingman

                              1 Reply Last reply Reply Quote 0
                              • undefined
                                dc42 administrators @A Former User
                                last edited by 27 Dec 2019, 16:50

                                @smece said in Conditional GCode and object model variables:

                                I hope you do know that gcc/g++ exceptions are not "really" thread-safe. Never used exceptions on embedded systems so can't confirm how it behaves on ARM but since you are using RTOS on the RRF3 you might wanna be careful

                                Interesting, I wasn't aware of that. Are you sure? Now that C++ supports threads natively, that seems odd. The implication is that gcc uses a static area of memory to do the stack unwinding. Anyway, it won't matter because only the GCode parsing part of RRF uses exceptions, and only one task calls that code.

                                Duet WiFi hardware designer and firmware engineer
                                Please do not ask me for Duet support via PM or email, use the forum
                                http://www.escher3d.com, https://miscsolutions.wordpress.com

                                ? 1 Reply Last reply 28 Dec 2019, 06:06 Reply Quote 0
                                • undefined
                                  Danal
                                  last edited by 27 Dec 2019, 19:29

                                  • Everything reported in an M408.
                                  • Time (ticks? ).
                                  • User (dynamic)
                                  • EVERY command that sets anything, perhaps as a %command% to make it easy to remember.

                                  The above probably covers this: Everything that has a position. The 'control point' Work coordinate systems, every kind of offset like tool offset, cutter offset, and so forth. Everything that has a position or offset.

                                  Delta / Kossel printer fanatic

                                  1 Reply Last reply Reply Quote 0
                                  • undefined
                                    dc42 administrators
                                    last edited by 27 Dec 2019, 19:37

                                    What I am actually asking for is the most useful things to include in the object model, so that I can do a beta release that is useful to some people. If I wait until I have implemented everything that I plan to include, it will be weeks or even months before the beta release.

                                    Duet WiFi hardware designer and firmware engineer
                                    Please do not ask me for Duet support via PM or email, use the forum
                                    http://www.escher3d.com, https://miscsolutions.wordpress.com

                                    undefined 1 Reply Last reply 11 Jan 2020, 20:09 Reply Quote 0
                                    • undefined
                                      jay_s_uk
                                      last edited by 27 Dec 2019, 20:24

                                      The most useful thing for me would being able to detect a voltage on an input to identify which tool is fitted.
                                      E.g. tool 1 is 1V, tool 2 is 2V and so on.
                                      Then the machine would be aware of what tool is fitted and apply offsets accordingly etc.

                                      Owns various duet boards and is the main wiki maintainer for the Teamgloomy LPC/STM32 port of RRF. Assume I'm running whatever the latest beta/stable build is

                                      1 Reply Last reply Reply Quote 2
                                      • undefined
                                        littlehobbyshop
                                        last edited by littlehobbyshop 28 Dec 2019, 01:19

                                        • Currently selected filament (Similar uses to currently selected tool)

                                        • min(), max(), ave() functions. Could be used universally. Like with G29 if your initial suggestion returned a list (max deviation) rather than a specific function alone for G29.

                                        BLV MGN Cube w/Hemera, K8200, Sunlu S8

                                        1 Reply Last reply Reply Quote 1
                                        • undefined
                                          mrehorstdmd
                                          last edited by 28 Dec 2019, 02:45

                                          I use a Duet wifi card in my sand table. Right now I can program playlists using the M98 command, but it would be nice if there was some means to randomly select pattern files to run from among any gcode file stored in a specific directory on card 0 or card 1. It would be especially nice if I could call a single gcode macro file upon power-up that would then randomly select pattern files to run and just keep doing that until the machine is powered off (maybe days or weeks later). That would require some looping capability, I imagine.

                                          It would be especially nice if the random function were seeded by a real time clock or other means so that when I power up the table, the random sequence that it plays would be different every time (or almost every time).

                                          https://drmrehorst.blogspot.com/

                                          1 Reply Last reply Reply Quote 3
                                          12 out of 66
                                          • First post
                                            12/66
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA