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

    Conditional GCode and object model variables

    Scheduled Pinned Locked Moved
    Gcode meta commands
    32
    66
    7.5k
    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.
    • dc42undefined
      dc42 administrators @A Former User
      last edited by

      @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

      A Former User? 1 Reply Last reply Reply Quote 0
      • Danalundefined
        Danal
        last edited by

        • 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
        • dc42undefined
          dc42 administrators
          last edited by

          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

          Rievundefined 1 Reply Last reply Reply Quote 0
          • jay_s_ukundefined
            jay_s_uk
            last edited by

            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
            • littlehobbyshopundefined
              littlehobbyshop
              last edited by littlehobbyshop

              • 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
              • mrehorstdmdundefined
                mrehorstdmd
                last edited by

                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
                • A Former User?
                  A Former User @dc42
                  last edited by

                  @dc42 said in Conditional GCode and object model variables:

                  Are you sure?

                  Unfortunately, yes. that's for e.g. why Falcon never went GA after so many engineer years was put in and hundreds of bugs reported (and fixed) to both GCC and Intel C/C++ compiler. It's not unsafe by design, it's just that most C++ compilers have it buggy as hell. Today situation is much better than for e.g. 2009, but is still not resolved. Again, no clue how that relates to embedded systems, and if it relates at all.. it's just one of those things few ppl think about and can hit you below the belt when you least expect

                  Now that C++ supports threads natively, that seems odd.

                  If that's the only thing 😄

                  only the GCode parsing part of RRF uses exceptions, and only one task calls that code.

                  That's safe.
                  I think it would be safe even if not only that 'cause the unsafe part start to pop up under contention, I don't finally remember all the details but but I think it's the number of threads and not the CPU load that was a problem so since I doubt you'll have issue with number of threads on the RRF you should be safe 😄 whatever you do... but yes, single thread using exceptions will never hit any of those bugs

                  1 Reply Last reply Reply Quote 0
                  • wescundefined
                    wesc @dc42
                    last edited by

                    @dc42

                    Ternary operator like the c language ? :
                    Very useful for doing machine specific parameter substitutions vs having to do if then else.

                    Min, max functions

                    Max z of the current print job. Useful for doing tuning of parameters. That, or an interpolate with z function. For example
                    M572 DO S%zinterpolate(0.1,2.0)%
                    which would be the same as
                    M572 D0 S%0.1+(2.0-0.1)*z/max_z%

                    CroXY - Crossed Gantry Printer, Ultibots D300VS+, Custom CoreXYU

                    1 Reply Last reply Reply Quote 0
                    • DaBitundefined
                      DaBit
                      last edited by

                      I suspect most of my conditional code use would be some form of
                      while (measured value < setpoint) {
                      move this
                      move that
                      pause a while
                      }

                      and if (this) then { that }

                      The conditional code provided by LinuxCNC and accessing of state information through numbered or named variables is not all that complicated and works well enough.

                      I would at prefer to have access to axis positions and sensor values.

                      1 Reply Last reply Reply Quote 0
                      • JoergS5undefined
                        JoergS5
                        last edited by JoergS5

                        My proposal for G-Code is to have all sorts of input values like external pin signals, temperaturs, voltages, current stepper positions; then calling macros to react to them and have some time waiting/pausing/reset to specified state methods. G-Code to call external methods like a Raspi for camera analysis and come back for reaction. The G-Code implementation should follow syntax rules of a known programming language (C++, Python etc. but only one of them), so the syntax needs not to be learned new again.

                        1 Reply Last reply Reply Quote 0
                        • dc42undefined
                          dc42 administrators
                          last edited by

                          The syntax has already been defined. It id described at https://duet3d.dozuki.com/Wiki/GCode_Meta_Commands. We are constrained by the conventions and symbols that are already used in GCode.

                          As GCode is a line-oriented language, the main decision that had to be taken was whether to denote block scopes using indentation (as in Haskell and Python) or using block end keywords (as in Algol 68, Ada and Fortran). I chose indentation.

                          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 2
                          • mwolterundefined
                            mwolter
                            last edited by

                            Min and Max X and Y coordinates of the print.

                            Would be very helpful if the min and max X and Y coordinates of the print could be read from the g code and used as a variable in an M557 which is saved before running G29. This would allow a custom probe grid to be used that only probes the area of the bed used for that particular print.

                            Luke'sLaboratoryundefined 1 Reply Last reply Reply Quote 1
                            • Luke'sLaboratoryundefined
                              Luke'sLaboratory @mwolter
                              last edited by

                              @mwolter
                              It would be pretty neat to have this built in to the printer instead of the slicer as I've been thinking about!

                              Luke
                              http://lukeslab.online

                              1 Reply Last reply Reply Quote 0
                              • A Former User?
                                A Former User
                                last edited by

                                On the subject of Min/Max. Access to work dimensions as well as the specific job dimensions as mrwolter requets.

                                dc42undefined 1 Reply Last reply Reply Quote 0
                                • dc42undefined
                                  dc42 administrators @A Former User
                                  last edited by

                                  @bearer said in Conditional GCode and object model variables:

                                  On the subject of Min/Max. Access to work dimensions as well as the specific job dimensions as mrwolter requets.

                                  This is tricky, because GCode files do not contain information about the total dimensions of the part being printed/CNC'd/cut. But we can make a reasonable guess at it by scanning the entire GCode file. This assumes the the GCode file does not contain custom scripts for purge or prime towers, or similar operation that move to coordinates outside the model.

                                  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

                                  gtj0undefined A Former User? 2 Replies Last reply Reply Quote 0
                                  • fÅ¡kundefined
                                    fšk
                                    last edited by fšk

                                    @jay_s_uk said in Conditional GCode and object model variables:

                                    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.

                                    I would also find this very useful. Probably the only thing i would need conditional gcode for.
                                    Would need this to load a different config depending on what is connected on machine boot.

                                    1 Reply Last reply Reply Quote 0
                                    • HebigTundefined
                                      HebigT
                                      last edited by

                                      The ability to call a macro using a "Layer_#" variable would be useful for my research. I'm planning to develop non-extrusion tools for tool-changing printers.

                                      1 Reply Last reply Reply Quote 0
                                      • Rievundefined
                                        Riev @dc42
                                        last edited by

                                        @dc42 , I think The most useful things is :

                                        1. The conditional block may consist "AND / OR" expression so we can combine two or more logic expression.

                                        2. SELECT CASE Function as alternative conditional block after IF-ELIF

                                        3. Attach "LABEL" name Function in any certain line and "JUMP TO LABEL / GOTO LABEL" Function so we can jump or loop to any line we desire. I think this is more flexible than "While" or other Loop function.

                                        4. "WAIT" Function for any input signal or variable is triggered/changed, and make decision with conditional expression based on change of that input signal (Like wait for button is pressed)

                                        5. Any variable / command to manipulate "Counter and Timer" Function.

                                        dc42undefined 1 Reply Last reply Reply Quote 0
                                        • dc42undefined
                                          dc42 administrators @Riev
                                          last edited by

                                          @Riev said in Conditional GCode and object model variables:

                                          @dc42 , I think The most useful things is :

                                          1. The conditional block may consist "AND / OR" expression so we can combine two or more logic expression.

                                          2. SELECT CASE Function as alternative conditional block after IF-ELIF

                                          3. Attach "LABEL" name Function in any certain line and "JUMP TO LABEL / GOTO LABEL" Function so we can jump or loop to any line we desire. I think this is more flexible than "While" or other Loop function.

                                          4. "WAIT" Function for any input signal or variable is triggered/changed, and make decision with conditional expression based on change of that input signal (Like wait for button is pressed)

                                          5. Any variable / command to manipulate "Counter and Timer" Function.

                                          Thanks for your suggestions. #1 is already implemented. #2 is complicated to do in a line-oriented language, also I don't envisage any common situations in which there would be many cases to choose from; so I won;t imllement it at least for now. For #3, 60 years of program language development have taught us GOTO is bad, so I won't be implementing it. #4 is interesting and I will consider it. Can you explain exactly what you mean by #5?

                                          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

                                          garyd9undefined grizewaldundefined 2 Replies Last reply Reply Quote 0
                                          • garyd9undefined
                                            garyd9 @dc42
                                            last edited by garyd9

                                            @dc42 said in Conditional GCode and object model variables:

                                            For #3, 60 years of program language development have taught us GOTO is bad, so I won't be implementing it.

                                            Surely you knew when typing the above that you'd be starting a discussion on the merits of goto in programming, right?

                                            Goto isn't the demon that it's made out to be. The problem is that it was massively abused. (Just like anything.) For things such as state machines, they are extremely useful. (Is conditional gcode a state machine?)

                                            Keep in mind that all our languages are usually compiled to assembly. Show me any functional assembly that isn't littered with "goto" (jmp) instructions.

                                            (I'm not suggesting that any type of 'goto' should exist. I was just making a silly point.)

                                            "I'm not saying that you are wrong - I'm just trying to fit it into my real world simulated experience."

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA