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

CNC Setup Duet 3D 6XD Controller Board

Scheduled Pinned Locked Moved Solved
CNC
4
16
709
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
    fcwilt @droftarts
    last edited by 7 Dec 2023, 21:53

    @droftarts said in CNC Setup Duet 3D 6XD Controller Board:

    No, it doesn’t. Config.g can have multiple errors, and still run to the end. If you can show an example where it breaks the running, please start a new thread showing this so we can track down why it’s happening.

    It most certainly appeared to stop executing for me.

    I concluded that nothing past the point of the error had been executed based on the fact that the configuration of the Z probe, triggers, tools, etc. which all followed the point of the error, had not been configured.

    I will try to come up with a simple example of such a config file. Mine is quite complex, using lots of M98 calls to other code.

    I remember what the error was in my config file - so I can put that error back and run some more tests.

    Frederick

    Printers: a small Utilmaker style, a small CoreXY and a E3D MS/TC setup. Various hotends. Using Duet 3 hardware running 3.4.6

    undefined 1 Reply Last reply 7 Dec 2023, 22:14 Reply Quote 0
    • undefined
      droftarts administrators @fcwilt
      last edited by 7 Dec 2023, 22:14

      @fcwilt perhaps missing a quote mark, so everything following until the next quote mark counts as a string, could cause chunks of config.g not to work, I suppose. Please start a new thread if you find an example.

      Ian

      Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

      1 Reply Last reply Reply Quote 0
      • undefined
        moe.adams9093
        last edited by moe.adams9093 12 Aug 2023, 02:37 8 Dec 2023, 02:19

        I have done some tests first I removed the 1 HCL board CAN address from the config.g file the error is gone now, but still no movement after that I added timing input as @droftarts requested still no luck.

        I still do get some errors on of them it says

        Error in macro line 27 while starting up: in file macro line 27 column 27: M92: array too long, max length = 0
        

        Here's my new M122

        m122
        === Diagnostics ===
        RepRapFirmware for Duet 3 MB6XD version 3.5.0-rc.1 (2023-08-31 16:21:04) running on Duet 3 MB6XD v1.0 (standalone mode)
        Board ID: 08DLM-956DA-M2NS4-6JKD6-3S86T-1B32S
        Used output buffers: 1 of 40 (19 max)
        Error in macro line 27 while starting up: in file macro line 27 column 27: M92: array too long, max length = 0
        === RTOS ===
        Static ram: 153300
        Dynamic ram: 117888 of which 248 recycled
        Never used RAM 71556, free system stack 193 words
        Tasks: NETWORK(1,ready,34.4%,182) ETHERNET(5,nWait,0.1%,325) HEAT(3,nWait,0.0%,370) Move(4,nWait,0.0%,255) CanReceiv(6,nWait,0.0%,941) CanSender(5,nWait,0.0%,335) CanClock(7,delaying,0.0%,344) MAIN(1,running,65.4%,444) IDLE(0,ready,0.0%,30), total 100.0%
        Owned mutexes:
        === Platform ===
        Last reset 00:03:32 ago, cause: software
        Last software reset at 2023-12-07 19:59, reason: User, Gcodes spinning, available RAM 71700, slot 1
        Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
        Error status: 0x00
        Aux0 errors 0,0,0
        MCU temperature: min 33.9, current 34.5, max 34.8
        Supply voltage: min 26.7, current 26.8, max 26.8, under voltage events: 0, over voltage events: 0, power good: yes
        12V rail voltage: min 12.0, current 12.1, max 12.2, under voltage events: 0
        Heap OK, handles allocated/used 99/2, heap memory allocated/used/recyclable 2048/80/0, gc cycles 0
        Events: 0 queued, 0 completed
        Driver 0: ok
        Driver 1: ok
        Driver 2: ok
        Driver 3: ok
        Driver 4: ok
        Driver 5: ok
        Date/time: 2023-12-07 20:03:03
        Slowest loop: 4.30ms; fastest: 0.07ms
        === Storage ===
        Free file entries: 20
        SD card 0 detected, interface speed: 25.0MBytes/sec
        SD card longest read time 3.5ms, write time 0.0ms, max retries 0
        === Move ===
        DMs created 125, segments created 6, maxWait 80472ms, bed compensation in use: none, height map offset 0.000, ebfmin 0.00, ebfmax 0.00
        no step interrupt scheduled
        Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
        === DDARing 0 ===
        Scheduled moves 25, completed 25, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 15], CDDA state -1
        === DDARing 1 ===
        Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
        === Heat ===
        Bed heaters -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
        === GCodes ===
        Movement locks held by null, null
        HTTP is idle in state(s) 0
        Telnet is idle in state(s) 0
        File is idle in state(s) 0
        USB is idle in state(s) 0
        Aux is idle in state(s) 0
        Trigger is idle in state(s) 0
        Queue is idle in state(s) 0
        LCD is idle in state(s) 0
        SBC is idle in state(s) 0
        Daemon is idle in state(s) 0
        Aux2 is idle in state(s) 0
        Autopause is idle in state(s) 0
        File2 is idle in state(s) 0
        Queue2 is idle in state(s) 0
        Q0 segments left 0, axes/extruders owned 0x0000006
        Code queue 0 is empty
        Q1 segments left 0, axes/extruders owned 0x0000000
        Code queue 1 is empty
        === CAN ===
        Messages queued 1061, received 0, lost 0, boc 0
        Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 1061/0/0
        Tx timeouts 0,0,1060,0,0,0 last cancelled message type 30 dest 127
        === Network ===
        Slowest loop: 1.54ms; fastest: 0.03ms
        Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
        HTTP sessions: 1 of 8
        = Ethernet =
        Interface state: active
        Error counts: 0 0 0 0 0 0
        Socket states: 5 2 2 2 2 0 0 0
        === Multicast handler ===
        Responder is inactive, messages received 0, responses 0

        in side M122 file under the Movement Locks

        Movement locks held by null, null
        HTTP is idle in state(s) 0
        Telnet is idle in state(s) 0
        File is idle in state(s) 0
        USB is idle in state(s) 0
        Aux is idle in state(s) 0
        Trigger is idle in state(s) 0
        Queue is idle in state(s) 0
        LCD is idle in state(s) 0
        SBC is idle in state(s) 0
        Daemon is idle in state(s) 0
        Aux2 is idle in state(s) 0
        Autopause is idle in state(s) 0
        File2 is idle in state(s) 0
        Queue2 is idle in state(s) 0
        Q0 segments left 0, axes/extruders owned 0x0000006
        Code queue 0 is empty
        Q1 segments left 0, axes/extruders owned 0x0000000
        Code queue 1 is empty

        I don't know if there's an issue under this section causing this problem

        I ran M121 and I get this error

        m121
        Error: Pop(): stack underflow on HTTP

        Also, here's my most recent config.g file

        ; Configuration file for Duet 3 MB 6XD (firmware version 3.3)
        ; executed by the firmware on start-up
        ;
        ; generated by RepRapFirmware Configuration Tool v3.3.16 on Sun Dec 03 2023 20:33:20 GMT-0600 (Central Standard Time)
        ; General preferences
        M575 P1 S1 B57600 ; enable support for PanelDue
        G90 ; send absolute coordinates...
        M83 ; ...but relative extruder moves
        M550 P"Makinta-R1500" ; set printer name
        ; Wait a moment for the CAN expansion boards to start
        G4 S2
        ; Network
        M552 P0.0.0.0 S1 ; enable network and acquire dynamic address via DHCP
        M586 P0 S1 ; enable HTTP
        M586 P1 S0 ; disable FTP
        M586 P2 S0 ; disable Telnet
        ; Drives
        M569 P0.0 S1 T5:5:10:10 ; physical drive 0.0 goes forwards
        M569 P0.2 S1 ; physical drive 0.2 goes forwards
        M569 P0.3 S1 ; physical drive 0.3 goes forwards
        M584 Y0.0 Z0.2 X0.3 ; set drive mapping
        M92 X80.00 Y80.00 Z80.00 E420.00 ; set steps per mm
        M566 X900.00 Y900.00 Z60.00 E120.00 ; set maximum instantaneous speed changes (mm/min)
        M203 X6000.00 Y6000.00 Z180.00 E1200.00 ; set maximum speeds (mm/min)
        M201 X500.00 Y500.00 Z20.00 E250.00 ; set accelerations (mm/s^2)
        M906 X800 Y800 Z800 E800 I30 ; set motor currents (mA) and motor idle factor in per cent
        M84 S30 ; Set idle timeout
        ; Axis Limits
        M208 X0 Y0 Z0 S1 ; set axis minima
        M208 X1500 Y1500 Z150 S0 ; set axis maxima
        ; Endstops
        M574 Y1 S1 P"io0.in" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin io0.in
        M574 Z1 S1 P"io1.in" ; configure switch-type (e.g. microswitch) endstop for low end on Z via pin io1.in
        ; Z-Probe
        M558 P0 H5 F120 T12000 ; disable Z probe but set dive height, probe speed and travel speed
        M557 X15:215 Y15:195 S20 ; define mesh grid
        ; Heaters
        M140 H-1 ; disable heated bed (overrides default heater mapping)
        ; Fans
        M950 F0 C"out3" Q500 ; create fan 0 on pin out3 and set its frequency
        M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
        M950 F1 C"out4" Q500 ; create fan 1 on pin out4 and set its frequency
        M106 P1 S1 H T45 ; set fan 1 value. Thermostatic control is turned on
        ; Tools
        M563 P0 D0 F0 ; define tool 0
        G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
        G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C
        ; Custom settings are not defined

        here's the current driver status

        12/7/2023, 8:21:18 PM M569 P0.0
        Drive 0 runs forwards, active high enable, timing 5.0:5.0:10.0:10.0us (actual 5.0:5.7:10.7:11.0us)

        M98

        ~~M98 P"config.g"
        HTTP is enabled on port 80
        FTP is disabled
        TELNET is disabled
        Error: bad drive number
        Error: in file macro line 58: G10: Invalid tool number
        Error: in file macro line 59: G10: Invalid tool number~~

        thank you

        undefined 1 Reply Last reply 8 Dec 2023, 02:42 Reply Quote 0
        • undefined
          fcwilt @moe.adams9093
          last edited by fcwilt 12 Aug 2023, 03:21 8 Dec 2023, 02:42

          @moe-adams9093

          Let's start with the easy one: M121 will "pop" the saved state of the machine but you need to do M120 first to save the state of the machine to have something to "pop".

          The error mentioning M92 is very odd. It may be caused by referencing the E axis but you have no E drive in the M584.

          That is the first thing I would do - remove the E in M92 and see if the error goes away.

          Frederick

          Printers: a small Utilmaker style, a small CoreXY and a E3D MS/TC setup. Various hotends. Using Duet 3 hardware running 3.4.6

          undefined 1 Reply Last reply 8 Dec 2023, 03:16 Reply Quote 0
          • undefined
            moe.adams9093 @fcwilt
            last edited by 8 Dec 2023, 03:16

            @fcwilt Thank you, for all your help.

            I did figure it out I was using the old configurator tool for the 3.5 firmware, and I didn't know that Reprap has a new configurator tool after I did a new config setup the motors are working fine now these are just testing motors next step is going with the 1 HCL + Moons Nema 24 with the incremental encoder so hopefully that goes smooth.

            undefined undefined undefined 3 Replies Last reply 8 Dec 2023, 03:24 Reply Quote 1
            • undefined
              fcwilt @moe.adams9093
              last edited by 8 Dec 2023, 03:24

              @moe-adams9093

              I never used the config tools - I felt they just got in the way of learning all the bits and pieces I needed to know to really understand what was going on in the various files.

              Very glad you got it working so far. Keep us informed of your progress.

              Frederick

              Printers: a small Utilmaker style, a small CoreXY and a E3D MS/TC setup. Various hotends. Using Duet 3 hardware running 3.4.6

              1 Reply Last reply Reply Quote 0
              • undefined
                dc42 administrators @moe.adams9093
                last edited by 8 Dec 2023, 07:00

                @moe-adams9093 thanks, I'll mark this as solved. Please start a new thread if you have other problems unrelated to this one.

                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 dc42 marked this topic as a question 8 Dec 2023, 07:00
                • undefined dc42 has marked this topic as solved 8 Dec 2023, 07:00
                • undefined
                  droftarts administrators @moe.adams9093
                  last edited by droftarts 12 Aug 2023, 07:52 8 Dec 2023, 07:49

                  @moe-adams9093 can you post your current config.g?

                  Also, see https://docs.duet3d.com/en/User_manual/Machine_configuration/Configuration_CNC

                  Ian

                  Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

                  1 Reply Last reply Reply Quote 0
                  • undefined
                    moe.adams9093
                    last edited by 9 Dec 2023, 19:58

                    Sure, I do get some errors when I start up the duet controller I'm going to post some screenshots, as well as M122, M98, and Config.g.

                    Screen Shots.PNG

                    M122

                    12/9/2023, 1:46:27 PM M122
                    === Diagnostics ===
                    RepRapFirmware for Duet 3 MB6XD version 3.5.0-rc.1 (2023-08-31 16:21:04) running on Duet 3 MB6XD v1.0 (standalone mode)
                    Board ID: 08DLM-956DA-M2NS4-6JKD6-3S86T-1B32S
                    Used output buffers: 1 of 40 (18 max)
                    Error in macro line 54 while starting up: exactly one of EFHJPSR must be given
                    === RTOS ===
                    Static ram: 153300
                    Dynamic ram: 117976 of which 0 recycled
                    Never used RAM 71860, free system stack 210 words
                    Tasks: NETWORK(1,ready,36.0%,182) ETHERNET(5,nWait,0.1%,317) HEAT(3,nWait,0.0%,340) Move(4,nWait,0.0%,339) CanReceiv(6,nWait,0.0%,941) CanSender(5,nWait,0.0%,335) CanClock(7,delaying,0.0%,344) MAIN(1,running,63.9%,162) IDLE(0,ready,0.0%,30), total 100.0%
                    Owned mutexes:
                    === Platform ===
                    Last reset 00:18:19 ago, cause: power up
                    Last software reset at 2023-12-08 02:09, reason: User, Gcodes spinning, available RAM 71756, slot 1
                    Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
                    Error status: 0x00
                    MCU temperature: min 16.9, current 35.3, max 35.4
                    Supply voltage: min 26.7, current 26.8, max 26.8, under voltage events: 0, over voltage events: 0, power good: yes
                    12V rail voltage: min 12.0, current 12.1, max 12.2, under voltage events: 0
                    Heap OK, handles allocated/used 99/2, heap memory allocated/used/recyclable 2048/48/0, gc cycles 0
                    Events: 0 queued, 0 completed
                    Driver 0: ok
                    Driver 1: ok
                    Driver 2: ok
                    Driver 3: ok
                    Driver 4: ok
                    Driver 5: ok
                    Date/time: 2023-12-09 13:46:25
                    Slowest loop: 4.30ms; fastest: 0.07ms
                    === Storage ===
                    Free file entries: 20
                    SD card 0 detected, interface speed: 25.0MBytes/sec
                    SD card longest read time 3.5ms, write time 0.0ms, max retries 0
                    === Move ===
                    DMs created 125, segments created 0, maxWait 0ms, bed compensation in use: none, height map offset 0.000, ebfmin 0.00, ebfmax 0.00
                    no step interrupt scheduled
                    Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
                    === DDARing 0 ===
                    Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                    === DDARing 1 ===
                    Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                    === Heat ===
                    Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
                    === GCodes ===
                    Movement locks held by null, null
                    HTTP is idle in state(s) 0
                    Telnet is idle in state(s) 0
                    File is idle in state(s) 0
                    USB is idle in state(s) 0
                    Aux is idle in state(s) 0
                    Trigger is idle in state(s) 0
                    Queue is idle in state(s) 0
                    LCD is idle in state(s) 0
                    SBC is idle in state(s) 0
                    Daemon is idle in state(s) 0
                    Aux2 is idle in state(s) 0
                    Autopause is idle in state(s) 0
                    File2 is idle in state(s) 0
                    Queue2 is idle in state(s) 0
                    Q0 segments left 0, axes/extruders owned 0x0000000
                    Code queue 0 is empty
                    Q1 segments left 0, axes/extruders owned 0x0000000
                    Code queue 1 is empty
                    === CAN ===
                    Messages queued 5499, received 0, lost 0, boc 0
                    Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 5499/0/0
                    Tx timeouts 0,0,5498,0,0,0 last cancelled message type 30 dest 127
                    === Network ===
                    Slowest loop: 3.95ms; fastest: 0.03ms
                    Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
                    HTTP sessions: 1 of 8
                    = Ethernet =
                    Interface state: active
                    Error counts: 0 0 0 1 0 0
                    Socket states: 5 2 2 2 2 0 0 0
                    === Multicast handler ===
                    Responder is inactive, messages received 0, responses 0

                    M98 P"config.g"

                    12/9/2023, 1:48:12 PM M98 P"config.g"
                    HTTP is enabled on port 80
                    Warning: Sensor number 0 has not been defined
                    Warning: Heater 0 predicted maximum temperature at full power is 321°C
                    Warning: Sensor number 1 has not been defined
                    Error: exactly one of EFHJPSR must be given

                    Config.g

                    ; Configuration file for RepRapFirmware on Duet 3 Main Board 6XD
                    ; executed by the firmware on start-up
                    ;
                    ; generated by RepRapFirmware Configuration Tool v3.5.0-rc.1 on Thu Dec 07 2023 21:03:57 GMT-0600 (Central Standard Time)
                    ; General
                    M550 P"MAKINTA-R1500" ; set hostname
                    ; Network
                    M552 P0.0.0.0 S1 ; configure Ethernet adapter
                    M586 P0 S1 ; configure HTTP
                    ; Motor Idle Current Reduction
                    M906 I30 ; set motor current idle factor
                    M84 S30 ; set motor current idle timeout
                    ; External Drivers
                    M569 P0.0 S1 R0 T5:5:10:0 ; driver 0.0 goes forwards and requires an active-low enable signal (X axis)
                    M569 P0.1 S1 R0 T5:5:10:0 ; driver 0.1 goes forwards and requires an active-low enable signal (Y axis)
                    M569 P0.2 S1 R0 T5:5:10:0 ; driver 0.2 goes forwards and requires an active-low enable signal (Y axis)
                    M569 P0.3 S1 R0 T5:5:10:0 ; driver 0.3 goes forwards and requires an active-low enable signal (Z axis)
                    ; Kinematics
                    M669 K0 ; configure Cartesian kinematics
                    ; Axes
                    M584 X0.0 Y0.1:0.2 Z0.3 ; set axis mapping
                    M350 X16 Y16 Z16 I0 ; configure microstepping without interpolation
                    M92 X20 Y20 Z20 ; configure steps per mm
                    M208 S1 X0 Y0 Z0 ; set axis minima
                    M208 S0 X1500 Y1500 Z150 ; set axis maxima
                    M566 X5000 Y5000 Z5000 ; set maximum instantaneous speed changes (mm/min)
                    M203 X10000 Y10000 Z10000 ; set maximum speeds (mm/min)
                    M201 X1000 Y1000 Z1000 ; set accelerations (mm/s^2)
                    ; Endstops
                    M574 X1 P"!io1.in" S1 ; configure X axis endstop
                    M574 Y1 P"!io2.in+!io3.in" S1 ; configure Y axis endstop
                    M574 Z1 P"!io4.in" S1 ; configure Z axis endstop
                    ; Heaters
                    M950 H0 C"out0" T0 ; create heater #0
                    M143 H0 P0 T0 C0 S140 A0 ; configure heater monitor #0 for heater #0
                    M307 H0 R2.43 D5.5 E1.35 K0.56 B1 ; configure model of heater #0
                    M950 H1 C"out1" T1 ; create heater #1
                    M143 H1 P0 T1 C0 S285 A0 ; configure heater monitor #0 for heater #1
                    M307 H1 R2.43 D5.5 E1.35 K0.56 B0 ; configure model of heater #1
                    ; Heated beds
                    M140 P0 H0 ; configure heated bed #0
                    ; Spindles
                    M950 C"io4.out+pson+led" Q500 L60:10000 ; configure spindle #0
                    ; Miscellaneous
                    M453 ; select CNC mode

                    please let me know how can I fix those errors.

                    Thank you

                    undefined 1 Reply Last reply 9 Dec 2023, 20:51 Reply Quote 0
                    • undefined
                      droftarts administrators @moe.adams9093
                      last edited by 9 Dec 2023, 20:51

                      @moe-adams9093 said in CNC Setup Duet 3D 6XD Controller Board:

                      For this error in M122 (and onscreen in DWC, and in the response to running config.g) Error in macro line 54 while starting up: exactly one of EFHJPSR must be given it relates to this line:

                      M950 C"io4.out+pson+led" Q500 L60:10000 ; configure spindle #0

                      See https://docs.duet3d.com/en/User_manual/Reference/Gcodes#configuration-examples-and-notes

                      You need an R parameter to denote this output as a spindle, ie

                      M950 R0 C"io4.out+pson+led" Q500 L60:10000 ; configure spindle #0
                      

                      I'm not sure these are the best pins for laser control. io4.out and pson are 3.3V signalling, while led is 5V.

                      For the DWC incompatibility error, check what version of RRF and DWC you are using in the Setting > General and Settings > Machine specific menu options. They should match.

                      Ian

                      Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

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