Duet3D Logo

    Duet3D

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Documentation
    • Order

    GCodes for the next-generation Duet

    General Discussion
    15
    49
    3004
    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.
    • dc42
      dc42 administrators last edited by dc42

      I am currently specifying how existing G- and M-codes will be adapted to support the next-generation Duet. One of the issues is how to address stepper drivers, heaters, fans, temperature sensors etc. on multiple expansion boards. For example, the M569 and M584 commands both have parameters that represent driver numbers. In the next generation, drivers can be on the master board or any of potentially many expansion boards.

      Each expansion board will have an ID. Therefore, a driver number in a GCode command needs to map to the board ID together with the driver ID within that board. The question is, how to represent that in the GCode parameter. Here are a few options:

      1. Driver numbers are allocated sequentially at boot time, starting with all the drivers on the main board, then all the drivers on the expansion board with the lowest ID, and so on. For example, if the main board has 5 drivers:

      M569 P3 S1 ; set direction of driver #3 on main board
      M569 P6 S1 ; set direction of driver #1 on expansion board #1 (P5 would be the first driver on expansion board #1)

      1. Expansion boards IDs start at 1. To indicate a driver on an expansion board, add 100 * board_ID to the driver number. For example:

      M569 P3 S1 ; set direction of driver #3 on main board
      M569 P101 S1 ; set direction of driver #1 on expansion board #1

      1. To indicate a driver on an expansion board, use <board#>.<driver#>. This sort of syntax is already used in some CNC GCode commands. For example:

      M569 P3 S1 ; set direction of driver #3 on main board
      M569 P1.1 S1 ; set direction of driver #1 on expansion board #1

      Is one of these better than the others? What are the advantages and disadvantages of each? Is there an even better solution?

      Please share your views in this thread. Whatever numbering scheme we choose should apply to heaters, fans etc. too.

      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

      gtj0 wilriker JoergS5 3 Replies Last reply Reply Quote 0
      • gtj0
        gtj0 @dc42 last edited by gtj0

        @dc42 Option 1 is most backwards compatible but option 3 is probably the best from an architectural point of view. Are you thinking that the new numbering scheme would also apply to the current versions? I.E. The second drive on a Duex5 connected to a Duet2 would be 1.1.

        On a similar topic, I hope you're planning to separate physical from logical between the drives, endstops, fans, heaters, etc. I.E. The "X" axis could have drives 0.1 and 2.3, endstops 0.2 (low limit), and 1.4 (high limit), etc.

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

          @dc42 My personal favorite in this list is number 3. I would in this case also allow to optionally address the drivers of the main board with a 0. prefix to be able to have a consistent scheme if one wishes to do so.

          Second choice would be number 2 for me.

          I don't like number 1 because on a say 6th expansion board one would have to seriously calculate the number of the driver taking into account that these are indexed zero-based. That might confuse non-CS people too much and is bound to cause trouble.

          Manuel
          Duet 3 6HC (v0.6) with RPi 4B on a custom Cartesian
          with probably always latest firmware/DWC (incl. betas or self-compiled)
          My Tool Collection

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

            @dc42 The more drivers, fans and heater you support the more problems with counting ("what is my P8?") will arise. So an optional labeling would be nice, maybe implemented as preprocessor. Then the user can name it as one's will and it can be displayed in the panel. It is easer to recognise "Heater Back Top" than H7.

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

              @joergs5 said in GCodes for the next-generation Duet:

              @dc42 The more drivers, fans and heater you support the more problems with counting ("what is my P8?") will arise. So an optional labeling would be nice, maybe implemented as preprocessor. Then the user can name it as one's will and it can be displayed in the panel. It is easer to recognise "Heater Back Top" than H7.

              So in the command you used to assign the name "Heater Back Top" to a heater, how would you specify which heater that is?

              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

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

                I think option two would be my first choice with the third coming next. Also if there will be the possibility to daisy chain more than one expansion would the drivers on the first expansion be 101, 102, 103.... while the next expansion in the line be 201, 202, 203...?

                gtj0 dc42 2 Replies Last reply Reply Quote 0
                • gtj0
                  gtj0 @projectR3D last edited by

                  @projectr3d said in GCodes for the next-generation Duet:

                  I think option two would be my first choice with the third coming next. Also if there will be the possibility to daisy chain more than one expansion would the drivers on the first expansion be 101, 102, 103.... while the next expansion in the line be 201, 202, 203...?

                  FWIW, I think option 3 will result in even more "this is too fricking hard to configure" posts. πŸ™‚

                  dc42 1 Reply Last reply Reply Quote 0
                  • gtj0
                    gtj0 last edited by gtj0

                    Oh yeah @dc42, on the new boards you'd better make sure the silkscreen labels match the physical designator scheme. πŸ™‚ Labelling things with their logical uses on the Duet2 and Duex5 was very confusing for me when I started out.

                    Labelling them with their physical capabilities would be the best option.
                    drive
                    2 pin pwm out (2PO)
                    3 pin in (3IN)
                    low power mosfet (LPM)
                    high power mosfet (HPM)
                    etc.

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

                      @dc42 said in GCodes for the next-generation Duet:

                      @joergs5 said in GCodes for the next-generation Duet:

                      @dc42 The more drivers, fans and heater you support the more problems with counting ("what is my P8?") will arise. So an optional labeling would be nice, maybe implemented as preprocessor. Then the user can name it as one's will and it can be displayed in the panel. It is easer to recognise "Heater Back Top" than H7.

                      So in the command you used to assign the name "Heater Back Top" to a heater, how would you specify which heater that is?

                      I would take option 1 in this case to be back compatible. The function is recognisable by the label, you have to assign it only one time at the beginning.

                      1 Reply Last reply Reply Quote 0
                      • fma
                        fma last edited by

                        Option #3 is the most intuitive.

                        To second @gtj0, the naming on the boards should be totally neutral. I mean, don't use X, Y, Z, just numbers, so routing between drives, hotends, endstops is not confusing. I would also put all drivers together, all endstops inputs together, all fans input together... Aslo, if all I/O could have the same behavior, it would be great (on the current board, Duet endstops and Duex ones can't do the same things, like monitoring filament sensor...).

                        Anyway, I'm sure the next hardware will be awesome!

                        FrΓ©dΓ©ric

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

                          @projectr3d said in GCodes for the next-generation Duet:

                          I think option two would be my first choice with the third coming next. Also if there will be the possibility to daisy chain more than one expansion would the drivers on the first expansion be 101, 102, 103.... while the next expansion in the line be 201, 202, 203...?

                          To achieve that numbering, you would need to set the ID switch on the first expansion board to 1, and the ID switch on the second board to 2.

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

                            @gtj0 said in GCodes for the next-generation Duet:

                            Oh yeah @dc42, on the new boards you'd better make sure the silkscreen labels match the physical designator scheme. πŸ™‚ Labelling things with their logical uses on the Duet2 and Duex5 was very confusing for me when I started out.

                            Labelling them with their physical capabilities would be the best option.
                            drive
                            2 pin pwm out (2PO)
                            3 pin in (3IN)
                            low power mosfet (LPM)
                            high power mosfet (HPM)
                            etc.

                            We're planning to label the connectors Motor0, Motor1, Out0, Out1 etc. Some of the Out ports will have a higher power capability than others, but all will be configurable as motors, fans or general purpose output.

                            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

                            gtj0 Pilotltd 2 Replies Last reply Reply Quote 0
                            • dc42
                              dc42 administrators @gtj0 last edited by

                              @gtj0 said in GCodes for the next-generation Duet:

                              @projectr3d said in GCodes for the next-generation Duet:

                              I think option two would be my first choice with the third coming next. Also if there will be the possibility to daisy chain more than one expansion would the drivers on the first expansion be 101, 102, 103.... while the next expansion in the line be 201, 202, 203...?

                              FWIW, I think option 3 will result in even more "this is too fricking hard to configure" posts. πŸ™‚

                              Why do you think option 3 is harder than option 2? They are logically the same, but for option 2 you need to do the (100 * board_id + device_id) calculation yourself.

                              Just to be clear: if you don't have any expansion boards then you will just need to specify the device number on the main board as now; although if we adopt option 3 then I would allow "0.1" as an alternative to "1" and so on.

                              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

                              gtj0 1 Reply Last reply Reply Quote 0
                              • keyz182
                                keyz182 last edited by

                                I think option 3 is by far the cleanest. If labelling is added too, it becomes even more clear, e.g. if you set the label of expansion board 1 to "MyAwesomeExpansion" and one of it's drives to "ZAxis", you get super easy to visually parse
                                M569 S1 PMyAwesomeExapnsion.ZAxis

                                fma 1 Reply Last reply Reply Quote 1
                                • Qdeathstar
                                  Qdeathstar last edited by

                                  I think option 3 is best. If only because that is an existing standard.

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

                                    @dc42 said in GCodes for the next-generation Duet:

                                    @gtj0 said in GCodes for the next-generation Duet:

                                    @projectr3d said in GCodes for the next-generation Duet:

                                    I think option two would be my first choice with the third coming next. Also if there will be the possibility to daisy chain more than one expansion would the drivers on the first expansion be 101, 102, 103.... while the next expansion in the line be 201, 202, 203...?

                                    FWIW, I think option 3 will result in even more "this is too fricking hard to configure" posts. πŸ™‚

                                    Why do you think option 3 is harder than option 2? They are logically the same, but for option 2 you need to do the (100 * board_id + device_id) calculation yourself.

                                    Just to be clear: if you don't have any expansion boards then you will just need to specify the device number on the main board as now; although if we adopt option 3 then I would allow "0.1" as an alternative to "1" and so on.

                                    Sorry, I meant option 2 would result in more "this is too...". I'm totally on board with option 3.

                                    1 Reply Last reply Reply Quote 1
                                    • fma
                                      fma @keyz182 last edited by

                                      @keyz182 said in GCodes for the next-generation Duet:

                                      I think option 3 is by far the cleanest. If labelling is added too, it becomes even more clear, e.g. if you set the label of expansion board 1 to "MyAwesomeExpansion" and one of it's drives to "ZAxis", you get super easy to visually parse
                                      M569 S1 PMyAwesomeExapnsion.ZAxis

                                      Some sort of device tree overlay could be used to make the labeling...

                                      FrΓ©dΓ©ric

                                      keyz182 1 Reply Last reply Reply Quote 0
                                      • gtj0
                                        gtj0 @dc42 last edited by

                                        @dc42 said in GCodes for the next-generation Duet:

                                        @gtj0 said in GCodes for the next-generation Duet:

                                        Oh yeah @dc42, on the new boards you'd better make sure the silkscreen labels match the physical designator scheme. πŸ™‚ Labelling things with their logical uses on the Duet2 and Duex5 was very confusing for me when I started out.

                                        Labelling them with their physical capabilities would be the best option.
                                        drive
                                        2 pin pwm out (2PO)
                                        3 pin in (3IN)
                                        low power mosfet (LPM)
                                        high power mosfet (HPM)
                                        etc.

                                        We're planning to label the connectors Motor0, Motor1, Out0, Out1 etc. Some of the Out ports will have a higher power capability than others, but all will be configurable as motors, fans or general purpose output.

                                        YAY! πŸ™‚ πŸ™‚ πŸ™‚

                                        1 Reply Last reply Reply Quote 0
                                        • keyz182
                                          keyz182 @fma last edited by

                                          @fma Could be an interesting idea, especially it the DTO is stored on the expansion (seeing as they're getting more intelligent, with CanBus). Plug'n'Play πŸ˜›

                                          1 Reply Last reply Reply Quote 0
                                          • Danal
                                            Danal last edited by

                                            Another vote for option 3.

                                            And another vote for neutral naming on the silkscreen, and exactly matching the silkscreen number to the gcode number.

                                            And... EVERYTHING should use a CONSISTENT index origin. The first thingie should always be the zero-eth thingie. Always. In a all silkscreen, configuration addressing, documentation, DWC text, etc, etc.

                                            Delta / Kossel printer fanatic

                                            1 Reply Last reply Reply Quote 0
                                            • pawPrinter
                                              pawPrinter last edited by

                                              I like #3, but could a 4th idea be an additional parameter? eg. P for board, Q for it's driver. Maybe that complicates it more...

                                              deckingman 1 Reply Last reply Reply Quote 0
                                              • fcwilt
                                                fcwilt last edited by

                                                Hi,

                                                #3 for sure.

                                                Frederick

                                                Printers: A FT-5 with the 713 upgrade bits. A custom MarkForged style. A small Utilmaker style and a CoreXY from kits. Various hotends. Using Duets (2 and 3) running 3.4.1

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

                                                  We're planning to label the connectors Motor0, Motor1, Out0, Out1 etc. Some of the Out ports will have a higher power capability than others, but all will be configurable as motors, fans or general purpose output.

                                                  Labelling as you are planning - Option 3 is fine if this is aimed at CNC machining users but not sure how a slicer would cope - post processors seem to be sadly missing from the usable ones.

                                                  Steve

                                                  dc42 1 Reply Last reply Reply Quote 0
                                                  • deckingman
                                                    deckingman @pawPrinter last edited by

                                                    @pawprinter said in GCodes for the next-generation Duet:

                                                    I like #3, but could a 4th idea be an additional parameter? eg. P for board, Q for it's driver. Maybe that complicates it more...

                                                    I like this idea but why can't we use "B" for board or "E" for expansion board.

                                                    So e.g M569 B0 P0 means drive 0 on board zero. The default if no "B" value is present would be the main board so M569 P0 would mean the same thing and would be backwardly compatible for the majority of users with just one main board. Then M569 B1 P2 would mean drive 2 on (expansion) board 1.

                                                    Come to that, why the hell do we have to use "P" for drive number? Why not "D" M569 B1 D2 would make a lot more sense.

                                                    Some consistency of letters within gcode commands would make a lot of sense too. e.g. when referring to heaters, in M143, M570 M307, we use "Hn" which is fine. But in M305 we have to use "Pn" to refer to heater number. In M563 we have to use "Pn" to define tools. Why not "Tn". We use "Tn" in gcode files, why do we have to use "Pn" to refer to the same thing in configuration files? In M106 we have to use "Pn" again to refer to fan number. Why not "Fn"?

                                                    No wonder new users get confused and frustrated.

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

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

                                                      @pilotltd said in GCodes for the next-generation Duet:

                                                      We're planning to label the connectors Motor0, Motor1, Out0, Out1 etc. Some of the Out ports will have a higher power capability than others, but all will be configurable as motors, fans or general purpose output.

                                                      Labelling as you are planning - Option 3 is fine if this is aimed at CNC machining users but not sure how a slicer would cope - post processors seem to be sadly missing from the usable ones.

                                                      My intention is that only GCodes used for configuration (and normally used only in config.g) would use the <board_id>.<device_id> format. So a slicer would have no reason to use 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
                                                      • First post
                                                        Last post
                                                      Unless otherwise noted, all forum content is licensed under CC-BY-SA