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

[3.5.0-rc.3+5] [bug] nested while job Illegal para letter '.'

Scheduled Pinned Locked Moved Solved
DSF Development
2
14
513
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
    timschneider
    last edited by 29 Feb 2024, 21:20

    Hi @chrishamm today I had the following bug while porting a jobfile with meta commands from duet2 in standalone to an duet3 in sbc mode.

    the following will work in standalone mode

    if !inputs[state.thisInput].active
    M99
    var x = 0
    var y = 1
    var N = 5
    while var.x < var.y
    var i = 0
    while var.i < var.N
    echo "var.i = " ^ var.i
    echo "var.N = " ^ var.N
    if var.i > 2
    set var.N = var.i
    if var.i > 5
    break
    set var.i = var.i + 1
    set var.x = var.x + 1

    b5ba2241-977a-4cb4-ac80-4ebbb2f2023b-grafik.png

    and will fail in sbc mode
    b498dbad-2d8e-43fc-8925-80299d66e67d-grafik.png

    Feb 29 21:11:01 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: [info] var.i = 0
    Feb 29 21:11:01 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: [info] var.N = 5
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: [error] in job file (channel File) line : Illegal parameter letter '.'
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: [error] DuetAPI.CodeParserException: Illegal parameter letter '.'
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: DuetAPI.CodeParserException: Illegal parameter letter '.'
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: at DuetAPI.Commands.Code.AddParameter(Code code, Char letter, String value, Boolean isQuoted, Boolean isSingleParameter) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetAPI/Commands/Code/Parser.cs:line 746
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: at DuetAPI.Commands.Code.ParseAsync(Stream stream, Code result, CodeParserBuffer buffer, CancellationToken cancellationToken) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetAPI/Commands/Code/ParserAsync.cs:line 725
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: at DuetControlServer.Files.CodeFile.ReadCodeAsync(Code sharedCode) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetControlServer/Files/CodeFile.cs:line 221
    Feb 29 21:11:02 Meltingplot-MBL-480-vaswsq DuetControlServer[405]: at DuetControlServer.Files.JobProcessor.DoFilePrint(CodeFile file) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetControlServer/Files/JobProcessor.cs:line 344
    Feb 29 21:12:07 Meltingplot-MBL-480-vaswsq systemd[1]: Stopping Duet Control Server...

    with a small modifikation of the code {...}

    if !inputs[state.thisInput].active
    M99
    var x = 0
    var y = 1
    var N = 5
    while {var.x < var.y}
    var i = 0
    while {var.i < var.N}
    echo "var.i = " ^ var.i
    echo "var.N = " ^ var.N
    if {var.i > 2}
    set var.N = var.i
    if var.i > 5
    break
    set var.i = var.i + 1
    set var.x = var.x + 1

    the output is the following:
    c5c7a966-c75f-4c63-a040-712868137d18-grafik.png

    M122

    M122
    === Diagnostics ===
    RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.3+5 (2024-02-21 14:58:54) running on Duet 3 MB6HC v1.02 or later (SBC mode)
    Board ID: 08DJM-9P63L-DJ3T8-6JKD4-3SJ6K-9A77A
    Used output buffers: 1 of 40 (17 max)
    === RTOS ===
    Static ram: 155208
    Dynamic ram: 88620 of which 4112 recycled
    Never used RAM 94788, free system stack 125 words
    Tasks: SBC(2,ready,0.9%,406) HEAT(3,nWait 1,0.0%,327) Move(4,nWait 6,0.0%,235) CanReceiv(6,nWait 1,0.0%,940) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,334) TMC(4,nWait 6,8.8%,56) MAIN(2,running,90.0%,103) IDLE(0,ready,0.2%,30), total 100.0%
    Owned mutexes: HTTP(MAIN)
    === Platform ===
    Last reset 00:09:43 ago, cause: power up
    Last software reset at 2024-02-29 20:53, reason: User, Gcodes spinning, available RAM 94812, slot 0
    Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
    Error status: 0x00
    MCU temperature: min 25.8, current 34.0, max 34.2
    Supply voltage: min 0.4, current 24.1, max 24.2, under voltage events: 0, over voltage events: 0, power good: yes
    12V rail voltage: min 0.1, current 12.3, max 12.8, under voltage events: 0
    Heap OK, handles allocated/used 99/4, heap memory allocated/used/recyclable 2048/536/432, gc cycles 0
    Events: 0 queued, 0 completed
    Driver 0: standstill, SG min 0, mspos 40, reads 60308, writes 27 timeouts 0
    Driver 1: standstill, SG min 0, mspos 360, reads 60309, writes 27 timeouts 0
    Driver 2: standstill, SG min 0, mspos 8, reads 60315, writes 21 timeouts 0
    Driver 3: standstill, SG min 0, mspos 8, reads 60315, writes 21 timeouts 0
    Driver 4: standstill, SG min 0, mspos 8, reads 60315, writes 21 timeouts 0
    Driver 5: standstill, SG min 0, mspos 4, reads 60317, writes 19 timeouts 0
    Date/time: 2024-02-29 21:19:04
    Slowest loop: 64.73ms; fastest: 0.06ms
    === Storage ===
    Free file entries: 20
    SD card 0 not detected, interface speed: 37.5MBytes/sec
    SD card longest read time 0.0ms, write time 0.0ms, max retries 0
    === Move ===
    DMs created 125, segments created 17, maxWait 498358ms, bed compensation in use: none, height map offset 0.000, max steps late 1, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00
    no step interrupt scheduled
    Moves shaped first try 4, on retry 0, too short 0, wrong shape 34, maybepossible 0
    === DDARing 0 ===
    Scheduled moves 40, completed 40, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 1], 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 doing "M122" 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 0, running macro
    Aux2 is idle in state(s) 0
    Autopause is idle in state(s) 0
    File2* is idle in state(s) 0, sync state 2
    Queue2 is idle in state(s) 0
    Q0 segments left 0, axes/extruders owned 0x0000003
    Code queue 0 is empty
    Q1 segments left 0, axes/extruders owned 0x0000000
    Code queue 1 is empty
    === Filament sensors ===
    check 633993 clear 4462564
    Extruder 0: pos 2160.00, errs: frame 0 parity 0 ovrun 0 pol 0 ovdue 0
    === CAN ===
    Messages queued 5175, received 0, lost 0, errs 2753656, boc 0
    Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 2916/0/0
    Tx timeouts 0,0,2915,0,0,2258 last cancelled message type 30 dest 127
    === SBC interface ===
    Transfer state: 5, failed transfers: 0, checksum errors: 0
    RX/TX seq numbers: 15981/15981
    SPI underruns 0, overruns 0
    State: 5, disconnects: 1, timeouts: 1 total, 1 by SBC, IAP RAM available 0x255b4
    Buffer RX/TX: 0/0-0, open files: 0
    === Duet Control Server ===
    Duet Control Server version 3.5.0-rc.3+5 (2024-02-21 14:42:00, 32-bit)
    Failed to deserialize the following properties:
    - MoveSegmentation -> Int32 from 2.0
    Daemon:
    >> Doing macro daemon.g, started by system
    Code buffer space: 4096
    Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0
    Full transfers per second: 38.68, max time between full transfers: 47.4ms, max pin wait times: 38.1ms/3.3ms
    Codes per second: 0.97
    Maximum length of RX/TX data transfers: 4445/296
    undefined 1 Reply Last reply 1 Mar 2024, 10:45 Reply Quote 1
    • undefined
      chrishamm administrators @timschneider
      last edited by 1 Mar 2024, 10:45

      @timschneider Thanks, fixed. This bug only showed up if meta G-code with while loops was used in job files.

      Duet software engineer

      undefined 1 Reply Last reply 1 Mar 2024, 14:30 Reply Quote 1
      • undefined
        timschneider @chrishamm
        last edited by 1 Mar 2024, 14:30

        @chrishamm thank you for working on the bug that fast!

        I've just installed rc.3+6 and tried to retest the above code, but now something else went wrong.

        but the initial problem is solved.
        7ee96460-2574-4aad-bace-66479c7346ef-grafik.png

        and now to the new problem

        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: [debug] Evaluation result: (true) = True
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: [error] in file daemon.g line 2: Illegal parameter letter '='
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: [error] DuetAPI.CodeParserException: Illegal parameter letter '='
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: DuetAPI.CodeParserException: Illegal parameter letter '='
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: at DuetAPI.Commands.Code.AddParameter(Code code, Char letter, String value, Boolean isQuoted, Boolean isSingleParameter) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetAPI/Commands/Code/Parser.cs:line 726
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: at DuetAPI.Commands.Code.ParseAsync(Stream stream, Code result, CodeParserBuffer buffer, CancellationToken cancellationToken) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetAPI/Commands/Code/ParserAsync.cs:line 725
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: at DuetControlServer.Files.CodeFile.ReadCodeAsync(Code sharedCode) in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetControlServer/Files/CodeFile.cs:line 232
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: at DuetControlServer.Files.MacroFile.ReadCodeAsync() in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetControlServer/Files/MacroFile.cs:line 260
        Mar 01 14:04:34 Meltingplot-MBL-480-vaswsq DuetControlServer[2500]: at DuetControlServer.Files.MacroFile.Run() in /home/runner/work/DuetSoftwareFramework/DuetSoftwareFramework/src/DuetControlServer/Files/MacroFile.cs:line 311

        part of daemon.g

        while true
        if exists(global.initial_temp) == false
        global initial_temp = 0

        this will also fail

        part of daemon.g

        while true
        if !exists(global.initial_temp)
        global initial_temp = 0

        the above error is in the daemon.g, but it can be recreated in a macro.

        echo "0"
        if !exists(global.initial_temp)
        echo "1"
        else
        echo "2"
        echo "3"

        The output in the console

        1.3.2024, 15:09:53 M98 P"0:/macros/test-sbc-4"
        1.3.2024, 15:09:52 0

        and the same in the job processor
        18a4778f-14dd-40ab-bd0b-14d23111acc4-grafik.png

        content of print_end

        G10 ; Retract the filament
        G10 P0 R0 S0 ; disable hotend
        M140 S0 R0 ; set bed heater to 0°
        M140 P0 S-273.1 ; disable bed heater
        T-1 ; deselect all tools
        if exists(global.clearanceHeight) && move.axes[2].homed
        G90 ; absolute positioning
        G1 Z{max(20,global.clearanceHeight)} ; lift z to clearance height
        G28 X Y ; home x and y
        if (sensors.gpIn[2].value == 1 && sensors.gpIn[3].value == 1 )
        G91 ; relative
        if move.axes[2].homed
        G1 Z100 F1250 ; lift z ; move only if both doors are closed
        G90
        ;G1 Z{move.axes[2].max-5} F1250 ; lift z
        G1 X{move.axes[0].max} ; move gantry away from camera
        ;M84 ; turn off motors
        M107 ; Turn off fans
        undefined 2 Replies Last reply 1 Mar 2024, 14:31 Reply Quote 0
        • undefined
          chrishamm administrators @timschneider
          last edited by 1 Mar 2024, 14:31

          @timschneider I just wanted to edit my post and say that I've discovered something else. I'm looking into it.

          Duet software engineer

          1 Reply Last reply Reply Quote 1
          • undefined
            chrishamm administrators @timschneider
            last edited by 5 Mar 2024, 13:01

            @timschneider I've got another bug fix ready in case you want to try it.

            Duet software engineer

            undefined 1 Reply Last reply 6 Mar 2024, 11:48 Reply Quote 0
            • undefined
              timschneider @chrishamm
              last edited by 6 Mar 2024, 11:48

              @chrishamm
              thank you for the fix !

              the main problem is fixed now, but idk if there is another one.
              If started as a job file it will never terminate, even with an explicit M0 at the end of the .gcode file.

              Mar 06 11:38:42 X: [debug] HTTP: Finished code M23 "0:/macros/test-sbc-3.gcode" => File 0:/macros/test-sbc-3.gcode selected for printing
              Mar 06 11:38:42 X: [debug] IPC#14: Connection closed
              Mar 06 11:38:42 X: [debug] Requesting update of key job, seq 1 -> 3
              Mar 06 11:38:42 X: [debug] Updated key job
              Mar 06 11:38:44 X: [debug] Requesting update of key inputs, seq 30 -> 31
              Mar 06 11:38:44 X: [debug] Updated key inputs
              Mar 06 11:38:44 X: [debug] Requesting update of key inputs, seq 31 -> 32
              Mar 06 11:38:44 X: [debug] Updated key inputs
              Mar 06 11:38:52 X: [debug] Got new UNIX connection via IPC#15, checking permissions...
              Mar 06 11:38:52 X: [debug] IPC#15: Granting full DSF permissions to external plugin
              Mar 06 11:38:52 X: [debug] Command processor added for IPC#15
              Mar 06 11:38:52 X: [debug] IPC#15: Received command SimpleCode
              Mar 06 11:38:52 X: [debug] HTTP: Starting code M24
              Mar 06 11:38:52 X: [debug] Processing M24
              Mar 06 11:38:52 X: [debug] HTTP: Sent M24, remaining space 1512, needed 24
              Mar 06 11:38:52 X: [info] Starting macro file start.g on channel File
              Mar 06 11:38:52 X: [debug] File: Starting code ; start.g (macro code)
              Mar 06 11:38:52 X: [debug] File: Starting code ; is run when you start a print from SD card. Runs immediately before any slicer created gcode (macro code)
              Mar 06 11:38:52 X: [debug] Processing ; start.g
              Mar 06 11:38:52 X: [debug] File: Starting code M98 P"0:/sys/meltingplot/check_doors_closed" (macro code)
              Mar 06 11:38:52 X: [debug] Processing ; is run when you start a print from SD card. Runs immediately before any slicer created gcode
              Mar 06 11:38:52 X: [debug] Processing M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] File: Finished code ; start.g
              Mar 06 11:38:52 X: [debug] File: Finished code ; is run when you start a print from SD card. Runs immediately before any slicer created gcode
              Mar 06 11:38:52 X: [debug] File: Sent M98 P"0:/sys/meltingplot/check_doors_closed", remaining space 1464, needed 72
              Mar 06 11:38:52 X: [info] Starting macro file start.g on channel File2
              Mar 06 11:38:52 X: [debug] File2: Starting code ; start.g (macro code)
              Mar 06 11:38:52 X: [debug] File2: Starting code ; is run when you start a print from SD card. Runs immediately before any slicer created gcode (macro code)
              Mar 06 11:38:52 X: [debug] Processing ; start.g
              Mar 06 11:38:52 X: [debug] Processing ; is run when you start a print from SD card. Runs immediately before any slicer created gcode
              Mar 06 11:38:52 X: [debug] File2: Finished code ; start.g
              Mar 06 11:38:52 X: [debug] File2: Finished code ; is run when you start a print from SD card. Runs immediately before any slicer created gcode
              Mar 06 11:38:52 X: [debug] File2: Starting code M98 P"0:/sys/meltingplot/check_doors_closed" (macro code)
              Mar 06 11:38:52 X: [debug] Processing M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] File2: Sent M98 P"0:/sys/meltingplot/check_doors_closed", remaining space 1464, needed 72
              Mar 06 11:38:52 X: [info] Starting macro file 0:/sys/meltingplot/check_doors_closed on channel File
              Mar 06 11:38:52 X: [debug] File: ==> Starting code M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] HTTP: Finished code M24 =>
              Mar 06 11:38:52 X: [info] Starting file print
              Mar 06 11:38:52 X: [debug] IPC#15: Connection closed
              Mar 06 11:38:52 X: [info] Starting macro file 0:/sys/meltingplot/check_doors_closed on channel File2
              Mar 06 11:38:52 X: [debug] File2: ==> Starting code M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] Evaluating While block
              Mar 06 11:38:52 X: [debug] Evaluating While block
              Mar 06 11:38:52 X: [debug] Evaluating (sensors.gpIn[2].value == 0 || sensors.gpIn[3].value == 0 ) on channel File
              Mar 06 11:38:52 X: [debug] Evaluating (sensors.gpIn[2].value == 0 || sensors.gpIn[3].value == 0 ) on channel File2
              Mar 06 11:38:52 X: [debug] Evaluation result: ((sensors.gpIn[2].value == 0 || sensors.gpIn[3].value == 0 )) = False
              Mar 06 11:38:52 X: [debug] Evaluation result: ((sensors.gpIn[2].value == 0 || sensors.gpIn[3].value == 0 )) = False
              Mar 06 11:38:52 X: [debug] End of While block
              Mar 06 11:38:52 X: [debug] End of While block
              Mar 06 11:38:52 X: [debug] Finished codes from macro file 0:/sys/meltingplot/check_doors_closed
              Mar 06 11:38:52 X: [info] Finished macro file 0:/sys/meltingplot/check_doors_closed
              Mar 06 11:38:52 X: [debug] Finished codes from macro file 0:/sys/meltingplot/check_doors_closed
              Mar 06 11:38:52 X: [info] Finished macro file 0:/sys/meltingplot/check_doors_closed
              Mar 06 11:38:52 X: [debug] File: ==> Unfinished starting code: M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] File: Finished code M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] Requesting update of key inputs, seq 32 -> 36
              Mar 06 11:38:52 X: [debug] Finished codes from macro file start.g
              Mar 06 11:38:52 X: [info] Finished macro file start.g
              Mar 06 11:38:52 X: [debug] File: Disposing macro file 0:/sys/meltingplot/check_doors_closed
              Mar 06 11:38:52 X: [debug] File2: ==> Unfinished starting code: M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] File2: Disposing macro file 0:/sys/meltingplot/check_doors_closed
              Mar 06 11:38:52 X: [debug] File2: Finished code M98 P"0:/sys/meltingplot/check_doors_closed"
              Mar 06 11:38:52 X: [debug] Finished codes from macro file start.g
              Mar 06 11:38:52 X: [info] Finished macro file start.g
              Mar 06 11:38:52 X: [debug] File: Disposing macro file start.g
              Mar 06 11:38:52 X: [debug] Evaluating If block
              Mar 06 11:38:52 X: [debug] Evaluating !inputs[state.thisInput].active on channel File
              Mar 06 11:38:52 X: [debug] Updated key inputs
              Mar 06 11:38:52 X: [debug] Requesting update of key job, seq 3 -> 4
              Mar 06 11:38:52 X: [debug] File2: Disposing macro file start.g
              Mar 06 11:38:52 X: [debug] Evaluating If block
              Mar 06 11:38:52 X: [debug] Evaluating !inputs[state.thisInput].active on channel File2
              Mar 06 11:38:52 X: [debug] Evaluation result: (!inputs[state.thisInput].active) = False
              Mar 06 11:38:52 X: [debug] Updated key job
              Mar 06 11:38:52 X: [debug] End of If block
              Mar 06 11:38:52 X: [debug] File: Starting code var x = 0
              Mar 06 11:38:52 X: [debug] File: Starting code var y = 1
              Mar 06 11:38:52 X: [debug] File: Starting code var N = 5
              Mar 06 11:38:52 X: [debug] Processing var x = 0
              Mar 06 11:38:52 X: [debug] Setting variable var.x to 0 on channel File
              Mar 06 11:38:52 X: [debug] Evaluation result: (!inputs[state.thisInput].active) = True
              Mar 06 11:38:52 X: [debug] File2: Starting code M0
              Mar 06 11:38:52 X: [debug] Processing M0
              Mar 06 11:38:52 X: [debug] End of If block
              Mar 06 11:38:52 X: [debug] File2: Starting code var x = 0
              Mar 06 11:38:52 X: [debug] File2: Starting code var y = 1
              Mar 06 11:38:52 X: [debug] File2: Starting code var N = 5
              Mar 06 11:38:52 X: [debug] Set variable var.x to 0
              Mar 06 11:38:52 X: [debug] Processing var y = 1
              Mar 06 11:38:52 X: [debug] Setting variable var.y to 1 on channel File
              Mar 06 11:38:52 X: [debug] File: Finished code var x = 0 =>
              Mar 06 11:38:52 X: [debug] Set variable var.y to 1
              Mar 06 11:38:52 X: [debug] Processing var N = 5
              Mar 06 11:38:52 X: [debug] File: Finished code var y = 1 =>
              Mar 06 11:38:52 X: [debug] Setting variable var.N to 5 on channel File
              Mar 06 11:38:52 X: [debug] Set variable var.N to 5
              Mar 06 11:38:52 X: [debug] Evaluating While block
              Mar 06 11:38:52 X: [debug] Evaluating var.x < var.y on channel File
              Mar 06 11:38:52 X: [debug] File: Finished code var N = 5 =>
              Mar 06 11:38:52 X: [debug] Evaluation result: (var.x < var.y) = True
              Mar 06 11:38:52 X: [debug] File: Starting code var i = 0
              Mar 06 11:38:52 X: [debug] Processing var i = 0
              Mar 06 11:38:52 X: [debug] Setting variable var.i to 0 on channel File
              Mar 06 11:38:52 X: [debug] Set variable var.i to 0
              Mar 06 11:38:52 X: [debug] Evaluating While block
              Mar 06 11:38:52 X: [debug] File: Finished code var i = 0 =>
              Mar 06 11:38:52 X: [debug] Evaluating var.i < var.N on channel File
              Mar 06 11:38:52 X: [debug] Requesting update of key inputs, seq 36 -> 44
              Mar 06 11:38:52 X: [debug] Evaluation result: (var.i < var.N) = True
              Mar 06 11:38:52 X: [debug] File: Starting code echo "var.i = " ^ var.i
              Mar 06 11:38:52 X: [debug] Processing echo "var.i = " ^ var.i
              Mar 06 11:38:52 X: [debug] Evaluating "var.i = " ^ var.i on channel File
              Mar 06 11:38:52 X: [debug] File: Starting code echo "var.N = " ^ var.N
              Mar 06 11:38:52 X: [debug] Updated key inputs
              Mar 06 11:38:52 X: [debug] Processing echo "var.N = " ^ var.N
              Mar 06 11:38:52 X: [debug] Evaluating "var.N = " ^ var.N on channel File
              Mar 06 11:38:52 X: [info] var.i = 0
              Mar 06 11:38:52 X: [debug] File: Finished code echo "var.i = " ^ var.i => var.i = 0
              Mar 06 11:38:52 X: [info] var.N = 5
              Mar 06 11:38:52 X: [debug] Evaluating If block
              Mar 06 11:38:52 X: [debug] Evaluating var.i > 2 on channel File
              Mar 06 11:38:52 X: [debug] File: Finished code echo "var.N = " ^ var.N => var.N = 5
              Mar 06 11:38:52 X: [debug] Evaluation result: (var.i > 2) = False
              Mar 06 11:38:52 X: [debug] End of If block
              Mar 06 11:38:52 X: [debug] Evaluating If block
              Mar 06 11:38:52 X: [debug] Evaluating var.i > 5 on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i > 5) = False
              Mar 06 11:38:53 X: [debug] End of If block
              Mar 06 11:38:53 X: [debug] File: Starting code set var.i = var.i + 1
              Mar 06 11:38:53 X: [debug] Processing set var.i = var.i + 1
              Mar 06 11:38:53 X: [debug] Setting variable var.i to var.i + 1 on channel File
              Mar 06 11:38:53 X: [debug] Set variable var.i to 1
              Mar 06 11:38:53 X: [debug] File: Finished code set var.i = var.i + 1 =>
              Mar 06 11:38:53 X: [debug] Restarting While block, iterations = 1
              Mar 06 11:38:53 X: [debug] Evaluating While block
              Mar 06 11:38:53 X: [debug] Evaluating var.i < var.N on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i < var.N) = True
              Mar 06 11:38:53 X: [debug] File: Starting code echo "var.i = " ^ var.i
              Mar 06 11:38:53 X: [debug] File: Starting code echo "var.N = " ^ var.N
              Mar 06 11:38:53 X: [debug] Processing echo "var.i = " ^ var.i
              Mar 06 11:38:53 X: [debug] Evaluating "var.i = " ^ var.i on channel File
              Mar 06 11:38:53 X: [debug] Processing echo "var.N = " ^ var.N
              Mar 06 11:38:53 X: [info] var.i = 1
              Mar 06 11:38:53 X: [debug] Evaluating "var.N = " ^ var.N on channel File
              Mar 06 11:38:53 X: [debug] File: Finished code echo "var.i = " ^ var.i => var.i = 1
              Mar 06 11:38:53 X: [info] var.N = 5
              Mar 06 11:38:53 X: [debug] Evaluating If block
              Mar 06 11:38:53 X: [debug] File: Finished code echo "var.N = " ^ var.N => var.N = 5
              Mar 06 11:38:53 X: [debug] Evaluating var.i > 2 on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i > 2) = False
              Mar 06 11:38:53 X: [debug] End of If block
              Mar 06 11:38:53 X: [debug] Evaluating If block
              Mar 06 11:38:53 X: [debug] Evaluating var.i > 5 on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i > 5) = False
              Mar 06 11:38:53 X: [debug] End of If block
              Mar 06 11:38:53 X: [debug] File: Starting code set var.i = var.i + 1
              Mar 06 11:38:53 X: [debug] Processing set var.i = var.i + 1
              Mar 06 11:38:53 X: [debug] Setting variable var.i to var.i + 1 on channel File
              Mar 06 11:38:53 X: [debug] Set variable var.i to 2
              Mar 06 11:38:53 X: [debug] File: Finished code set var.i = var.i + 1 =>
              Mar 06 11:38:53 X: [debug] Restarting While block, iterations = 2
              Mar 06 11:38:53 X: [debug] Evaluating While block
              Mar 06 11:38:53 X: [debug] Evaluating var.i < var.N on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i < var.N) = True
              Mar 06 11:38:53 X: [debug] File: Starting code echo "var.i = " ^ var.i
              Mar 06 11:38:53 X: [debug] File: Starting code echo "var.N = " ^ var.N
              Mar 06 11:38:53 X: [debug] Processing echo "var.i = " ^ var.i
              Mar 06 11:38:53 X: [debug] Evaluating "var.i = " ^ var.i on channel File
              Mar 06 11:38:53 X: [debug] Processing echo "var.N = " ^ var.N
              Mar 06 11:38:53 X: [debug] Evaluating "var.N = " ^ var.N on channel File
              Mar 06 11:38:53 X: [info] var.i = 2
              Mar 06 11:38:53 X: [debug] File: Finished code echo "var.i = " ^ var.i => var.i = 2
              Mar 06 11:38:53 X: [info] var.N = 5
              Mar 06 11:38:53 X: [debug] File: Finished code echo "var.N = " ^ var.N => var.N = 5
              Mar 06 11:38:53 X: [debug] Evaluating If block
              Mar 06 11:38:53 X: [debug] Evaluating var.i > 2 on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i > 2) = False
              Mar 06 11:38:53 X: [debug] End of If block
              Mar 06 11:38:53 X: [debug] Evaluating If block
              Mar 06 11:38:53 X: [debug] Evaluating var.i > 5 on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i > 5) = False
              Mar 06 11:38:53 X: [debug] End of If block
              Mar 06 11:38:53 X: [debug] File: Starting code set var.i = var.i + 1
              Mar 06 11:38:53 X: [debug] Processing set var.i = var.i + 1
              Mar 06 11:38:53 X: [debug] Setting variable var.i to var.i + 1 on channel File
              Mar 06 11:38:53 X: [debug] Set variable var.i to 3
              Mar 06 11:38:53 X: [debug] File: Finished code set var.i = var.i + 1 =>
              Mar 06 11:38:53 X: [debug] Restarting While block, iterations = 3
              Mar 06 11:38:53 X: [debug] Evaluating While block
              Mar 06 11:38:53 X: [debug] Evaluating var.i < var.N on channel File
              Mar 06 11:38:53 X: [debug] Evaluation result: (var.i < var.N) = True
              Mar 06 11:38:53 X: [debug] File: Starting code echo "var.i = " ^ var.i
              Mar 06 11:38:53 X: [debug] Processing echo "var.i = " ^ var.i
              Mar 06 11:38:53 X: [debug] Evaluating "var.i = " ^ var.i on channel File
              Mar 06 11:38:53 X: [debug] File: Starting code echo "var.N = " ^ var.N
              Mar 06 11:38:54 X: [info] var.i = 3
              Mar 06 11:38:54 X: [debug] File: Finished code echo "var.i = " ^ var.i => var.i = 3
              Mar 06 11:38:54 X: [debug] Processing echo "var.N = " ^ var.N
              Mar 06 11:38:54 X: [debug] Evaluating "var.N = " ^ var.N on channel File
              Mar 06 11:38:54 X: [info] var.N = 5
              Mar 06 11:38:54 X: [debug] Evaluating If block
              Mar 06 11:38:54 X: [debug] File: Finished code echo "var.N = " ^ var.N => var.N = 5
              Mar 06 11:38:54 X: [debug] Evaluating var.i > 2 on channel File
              Mar 06 11:38:54 X: [debug] Evaluation result: (var.i > 2) = True
              Mar 06 11:38:54 X: [debug] File: Starting code set var.N = var.i
              Mar 06 11:38:54 X: [debug] Processing set var.N = var.i
              Mar 06 11:38:54 X: [debug] Setting variable var.N to var.i on channel File
              Mar 06 11:38:54 X: [debug] End of If block
              Mar 06 11:38:54 X: [debug] Set variable var.N to 3
              Mar 06 11:38:54 X: [debug] Evaluating If block
              Mar 06 11:38:54 X: [debug] Evaluating var.i > 5 on channel File
              Mar 06 11:38:54 X: [debug] File: Finished code set var.N = var.i =>
              Mar 06 11:38:54 X: [debug] Evaluation result: (var.i > 5) = False
              Mar 06 11:38:54 X: [debug] End of If block
              Mar 06 11:38:54 X: [debug] File: Starting code set var.i = var.i + 1
              Mar 06 11:38:54 X: [debug] Processing set var.i = var.i + 1
              Mar 06 11:38:54 X: [debug] Setting variable var.i to var.i + 1 on channel File
              Mar 06 11:38:54 X: [debug] Set variable var.i to 4
              Mar 06 11:38:54 X: [debug] File: Finished code set var.i = var.i + 1 =>
              Mar 06 11:38:54 X: [debug] Restarting While block, iterations = 4
              Mar 06 11:38:54 X: [debug] Evaluating While block
              Mar 06 11:38:54 X: [debug] Evaluating var.i < var.N on channel File
              Mar 06 11:38:54 X: [debug] Evaluation result: (var.i < var.N) = False
              Mar 06 11:38:54 X: [debug] End of While block
              Mar 06 11:38:54 X: [debug] File: Starting code set var.x = var.x + 1
              Mar 06 11:38:54 X: [debug] Processing set var.x = var.x + 1
              Mar 06 11:38:54 X: [debug] Setting variable var.x to var.x + 1 on channel File
              Mar 06 11:38:54 X: [debug] Set variable var.x to 1
              Mar 06 11:38:54 X: [debug] End of generic block
              Mar 06 11:38:54 X: [debug] File: Finished code set var.x = var.x + 1 =>
              Mar 06 11:38:54 X: [debug] Deleting local variable i on channel File
              Mar 06 11:38:54 X: [debug] Restarting While block, iterations = 1
              Mar 06 11:38:54 X: [debug] Evaluating While block
              Mar 06 11:38:54 X: [debug] Evaluating var.x < var.y on channel File
              Mar 06 11:38:54 X: [debug] Evaluation result: (var.x < var.y) = False
              Mar 06 11:38:54 X: [debug] End of While block
              Mar 06 11:38:54 X: [debug] File: Starting code M0
              Mar 06 11:38:54 X: [debug] Processing M0
              Mar 06 11:38:54 X: [debug] Requesting update of key inputs, seq 44 -> 46
              Mar 06 11:38:54 X: [debug] Updated key inputs
              Mar 06 11:39:00 X: [debug] Requesting update of key boards, seq 166 -> 167
              Mar 06 11:39:00 X: [debug] Updated key boards
              Mar 06 11:39:04 X: [debug] Requesting update of key inputs, seq 46 -> 48
              Mar 06 11:39:04 X: [debug] Updated key inputs
              Mar 06 11:39:14 X: [debug] Requesting update of key inputs, seq 48 -> 50
              Mar 06 11:39:14 X: [debug] Updated key inputs
              undefined 1 Reply Last reply 6 Mar 2024, 11:48 Reply Quote 0
              • undefined
                timschneider @timschneider
                last edited by timschneider 3 Jun 2024, 12:06 6 Mar 2024, 11:48

                @timschneider
                and when I pause and cancle the printjob, it appears that the printjob is not cancled - I'm not able to re-run a printjob without a restart of DCS.

                Mar 06 11:44:45 X: [debug] HTTP: Starting code M25
                Mar 06 11:44:45 X: [debug] Processing M25
                Mar 06 11:44:45 X: [debug] HTTP: Sent M25, remaining space 1512, needed 24
                Mar 06 11:44:45 X: [debug] Opening 0:/sys/resurrect.g for writing (not appending), prealloc 0
                Mar 06 11:44:45 X: [debug] File 0:/sys/resurrect.g opened with handle #2
                Mar 06 11:44:45 X: [debug] Closing file #2
                Mar 06 11:44:45 X: [info] Resume state saved
                Mar 06 11:44:45 X: [debug] HTTP: Finished code M25 => Printing paused at X0.0 Y0.0 Z0.0
                Mar 06 11:44:45 X: [debug] IPC#16: Connection closed
                Mar 06 11:44:45 X: [debug] Received print pause notification for file position 0, reason User
                Mar 06 11:44:45 X: [debug] Requesting update of key inputs, seq 114 -> 115
                Mar 06 11:44:46 X: [debug] Updated key inputs
                Mar 06 11:44:46 X: [debug] Requesting update of key state, seq 5 -> 6
                Mar 06 11:44:46 X: [debug] Updated key state
                Mar 06 11:44:46 X: [debug] Requesting update of key volumes, seq 1 -> 2
                Mar 06 11:44:46 X: [debug] Updated key volumes
                Mar 06 11:44:46 X: [debug] Requesting update of key inputs, seq 115 -> 116
                Mar 06 11:44:46 X: [debug] Updated key inputs
                Mar 06 11:44:49 X: [debug] Got new UNIX connection via IPC#17, checking permissions...
                Mar 06 11:44:49 X: [debug] IPC#17: Granting full DSF permissions to external plugin
                Mar 06 11:44:49 X: [debug] Command processor added for IPC#17
                Mar 06 11:44:49 X: [debug] IPC#17: Received command SimpleCode
                Mar 06 11:44:49 X: [debug] HTTP: Starting code M0
                Mar 06 11:44:49 X: [debug] Processing M0
                Mar 06 11:44:49 X: [debug] HTTP: Sent M0, remaining space 1512, needed 24
                Mar 06 11:44:49 X: [info] Cancelled printing file 0:/macros/test-sbc-3.gcode, print time was 0h 5m
                Mar 06 11:44:49 X: [info] Starting macro file cancel.g on channel HTTP
                Mar 06 11:44:49 X: [debug] HTTP: ==> Starting code M0
                Mar 06 11:44:49 X: [debug] HTTP: Starting code ; cancel.g (macro code)
                Mar 06 11:44:49 X: [debug] HTTP: Starting code ; called when a print is cancelled after a pause. (macro code)
                Mar 06 11:44:49 X: [debug] Processing ; cancel.g
                Mar 06 11:44:49 X: [debug] HTTP: Finished code ; cancel.g
                Mar 06 11:44:49 X: [debug] Processing ; called when a print is cancelled after a pause.
                Mar 06 11:44:49 X: [debug] HTTP: Finished code ; called when a print is cancelled after a pause.
                Mar 06 11:44:49 X: [debug] HTTP: Starting code ;if move.axes[2].homed (macro code)
                Mar 06 11:44:49 X: [debug] HTTP: Starting code G10 ; retract filament (macro code)
                Mar 06 11:44:49 X: [debug] HTTP: Starting code G10 P0 R0 S0 ; disable heater (macro code)
                Mar 06 11:44:49 X: [debug] HTTP: Starting code M140 P0 S0 ; disable bed heater (macro code)
                Mar 06 11:44:49 X: [debug] HTTP: Starting code M107 ; disable fan (macro code)
                Mar 06 11:44:49 X: [debug] HTTP: Starting code G90 ; absolute position (macro code)
                Mar 06 11:44:49 X: [debug] Processing ;if move.axes[2].homed
                Mar 06 11:44:49 X: [debug] HTTP: Finished code ;if move.axes[2].homed
                Mar 06 11:44:49 X: [debug] Processing G10 ; retract filament
                Mar 06 11:44:49 X: [debug] Processing G10 P0 R0 S0 ; disable heater
                Mar 06 11:44:49 X: [debug] Processing M140 P0 S0 ; disable bed heater
                Mar 06 11:44:49 X: [debug] Processing M107 ; disable fan
                Mar 06 11:44:49 X: [debug] Processing G90 ; absolute position
                Mar 06 11:44:49 X: [debug] HTTP: Sent G10 ; retract filament, remaining space 1512, needed 24
                Mar 06 11:44:49 X: [debug] HTTP: Sent G10 P0 R0 S0 ; disable heater, remaining space 1464, needed 48
                Mar 06 11:44:49 X: [debug] HTTP: Sent M140 P0 S0 ; disable bed heater, remaining space 1424, needed 40
                Mar 06 11:44:49 X: [debug] HTTP: Sent M107 ; disable fan, remaining space 1400, needed 24
                Mar 06 11:44:49 X: [debug] HTTP: Sent G90 ; absolute position, remaining space 1376, needed 24
                Mar 06 11:44:49 X: [debug] HTTP: Finished code G10 ; retract filament
                Mar 06 11:44:49 X: [debug] HTTP: Finished code G10 P0 R0 S0 ; disable heater
                Mar 06 11:44:49 X: [debug] HTTP: Finished code M140 P0 S0 ; disable bed heater
                Mar 06 11:44:49 X: [debug] HTTP: Finished code M107 ; disable fan
                Mar 06 11:44:50 X: [debug] Evaluating If block
                Mar 06 11:44:50 X: [debug] Evaluating (sensors.gpIn[2].value == 1 && sensors.gpIn[3].value == 1 ) on channel HTTP
                Mar 06 11:44:50 X: [debug] HTTP: Finished code G90 ; absolute position
                Mar 06 11:44:50 X: [debug] Evaluation result: ((sensors.gpIn[2].value == 1 && sensors.gpIn[3].value == 1 )) = True
                Mar 06 11:44:50 X: [debug] HTTP: Starting code G91 ; relative (macro code)
                Mar 06 11:44:50 X: [debug] Processing G91 ; relative
                Mar 06 11:44:50 X: [debug] HTTP: Sent G91 ; relative, remaining space 1512, needed 24
                Mar 06 11:44:50 X: [debug] HTTP: Finished code G91 ; relative
                Mar 06 11:44:50 X: [debug] Evaluating If block
                Mar 06 11:44:50 X: [debug] Evaluating move.axes[2].homed on channel HTTP
                Mar 06 11:44:50 X: [debug] Evaluation result: (move.axes[2].homed) = False
                Mar 06 11:44:50 X: [debug] End of If block
                Mar 06 11:44:50 X: [debug] End of If block
                Mar 06 11:44:50 X: [debug] Finished codes from macro file cancel.g
                Mar 06 11:44:50 X: [info] Finished macro file cancel.g
                Mar 06 11:44:50 X: [debug] Requesting update of key inputs, seq 116 -> 119
                Mar 06 11:44:50 X: [debug] HTTP: ==> Unfinished starting code: M0
                Mar 06 11:44:50 X: [debug] HTTP: Disposing macro file cancel.g
                Mar 06 11:44:50 X: [debug] HTTP: Finished code M0 =>
                Mar 06 11:44:50 X: [debug] IPC#17: Connection closed
                Mar 06 11:44:50 X: [debug] Updated key inputs
                Mar 06 11:44:50 X: [debug] Requesting update of key job, seq 4 -> 5
                Mar 06 12:05:28 Meltingplot-MBL-480-vaswsq DuetControlServer[16205]: [debug] HTTP: Starting code M23 "0:/macros/test-sbc-3.gcode"
                Mar 06 12:05:28 Meltingplot-MBL-480-vaswsq DuetControlServer[16205]: [debug] Processing M23 "0:/macros/test-sbc-3.gcode"
                Mar 06 12:05:28 Meltingplot-MBL-480-vaswsq DuetControlServer[16205]: [debug] HTTP: Finished code M23 "0:/macros/test-sbc-3.gcode" => Error: M23: Cannot set file to print, because a file is already being printed
                undefined 1 Reply Last reply 6 Mar 2024, 13:30 Reply Quote 0
                • undefined
                  chrishamm administrators @timschneider
                  last edited by 6 Mar 2024, 13:30

                  @timschneider I'm sorry but I cannot reproduce it here, print jobs complete/pause/cancel just as expected on my machine. Is it possible that you call M0 from channel File but not File2 e.g. from a macro file or other conditionals? That could indeed lead to problems. If not, please share the output of M122 when the machine appears to have finished but it doesn't let you start another print.

                  Duet software engineer

                  undefined 1 Reply Last reply 6 Mar 2024, 14:19 Reply Quote 0
                  • undefined
                    timschneider @chrishamm
                    last edited by timschneider 3 Jun 2024, 14:33 6 Mar 2024, 14:19

                    @chrishamm
                    ok double checked it.

                    the following will not work / will just stuck

                    if !inputs[state.thisInput].active
                    M0
                    var x = 0
                    var y = 1
                    var N = 5
                    while var.x < var.y
                    var i = 0
                    while var.i < var.N
                    echo "var.i = " ^ var.i
                    echo "var.N = " ^ var.N
                    if var.i > 2
                    set var.N = var.i
                    if var.i > 5
                    break
                    set var.i = var.i + 1
                    set var.x = var.x + 1
                    G90
                    G1 X100 F6000
                    G1 Y100
                    G1 X200 Y200
                    M0

                    and the following will work

                    if !inputs[state.thisInput].active
                    M99
                    var x = 0
                    var y = 1
                    var N = 5
                    while var.x < var.y
                    var i = 0
                    while var.i < var.N
                    echo "var.i = " ^ var.i
                    echo "var.N = " ^ var.N
                    if var.i > 2
                    set var.N = var.i
                    if var.i > 5
                    break
                    set var.i = var.i + 1
                    set var.x = var.x + 1
                    G90
                    G1 X100 F6000
                    G1 Y100
                    G1 X200 Y200
                    M0

                    see the M0 at the beginning for the inactive channel.

                    ok another test revealed that is has something to do with the while code block, which is preventing it from cleaning the print job.

                    if !inputs[state.thisInput].active
                    M99
                    M18 X
                    G90
                    G1 X10 ; not possible due to unhomed x axis
                    M0

                    and the following is not working / you will be unable to restart the print (it sometimes works / then just repeat)
                    caution: even the E-Stop via DWC will stuck - be delayed!

                    if !inputs[state.thisInput].active
                    M99
                    var x = 0
                    var y = 1
                    var N = 5
                    while var.x < var.y
                    var i = 0
                    while var.i < var.N
                    echo "var.i = " ^ var.i
                    echo "var.N = " ^ var.N
                    if var.i > 2
                    set var.N = var.i
                    if var.i > 5
                    break
                    set var.i = var.i + 1
                    set var.x = var.x + 1
                    M18 X
                    G90
                    G1 X10 ; not possible due to unhomed x axis
                    M0

                    sorry but I'm unable to get an M122 of the above code, due to the fact, that DCS is stuck.

                    Error: Failed to connect to Duet, please check your connection (DCS is not started)
                    Mar 06 14:14:56 Meltingplot-MBL-480-vaswsq DuetControlServer[26336]: [warn] Received SIGTERM, shutting down...
                    Mar 06 14:15:00 Meltingplot-MBL-480-vaswsq DuetControlServer[26336]: [fatal] Regular shutdown failed, proceeding with unconditional program termination
                    Mar 06 14:15:01 Meltingplot-MBL-480-vaswsq systemd[1]: duetcontrolserver.service: Main process exited, code=exited, status=70/SOFTWARE
                    M122
                    === Diagnostics ===
                    RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.3+6 (2024-03-01 12:32:32) running on Duet 3 MB6HC v1.02 or later (SBC mode)
                    Board ID: 08DJM-9P63L-DJ3T8-6JKD4-3SJ6K-9A77A
                    Used output buffers: 1 of 40 (17 max)
                    === RTOS ===
                    Static ram: 155208
                    Dynamic ram: 88404 of which 4328 recycled
                    Never used RAM 95196, free system stack 204 words
                    Tasks: SBC(2,ready,0.4%,414) HEAT(3,nWait 6,0.0%,323) Move(4,nWait 6,0.0%,336) CanReceiv(6,nWait 1,0.0%,940) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,336) TMC(4,nWait 6,8.4%,56) MAIN(2,running,91.0%,103) IDLE(0,ready,0.2%,30), total 100.0%
                    Owned mutexes: HTTP(MAIN)
                    === Platform ===
                    Last reset 00:08:06 ago, cause: software
                    Last software reset at 2024-03-06 14:00, reason: User, Gcodes spinning, available RAM 94716, slot 1
                    Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
                    Error status: 0x00
                    MCU temperature: min 32.6, current 32.9, max 34.8
                    Supply voltage: min 24.0, current 24.1, max 24.2, under voltage events: 0, over voltage events: 0, power good: yes
                    12V rail voltage: min 11.8, current 12.3, max 12.8, under voltage events: 0
                    Heap OK, handles allocated/used 99/0, heap memory allocated/used/recyclable 2048/440/440, gc cycles 0
                    Events: 0 queued, 0 completed
                    Driver 0: standstill, SG min n/a, mspos 296, reads 10168, writes 22 timeouts 0
                    Driver 1: standstill, SG min n/a, mspos 248, reads 10168, writes 22 timeouts 0
                    Driver 2: standstill, SG min n/a, mspos 168, reads 10169, writes 21 timeouts 0
                    Driver 3: standstill, SG min n/a, mspos 936, reads 10169, writes 21 timeouts 0
                    Driver 4: standstill, SG min n/a, mspos 680, reads 10169, writes 21 timeouts 0
                    Driver 5: standstill, SG min n/a, mspos 804, reads 10171, writes 19 timeouts 0
                    Date/time: 2024-03-06 14:08:31
                    Slowest loop: 66.36ms; fastest: 0.06ms
                    === Storage ===
                    Free file entries: 20
                    SD card 0 not detected, interface speed: 37.5MBytes/sec
                    SD card longest read time 0.0ms, 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, max steps late 0, min interval 0, bad calcs 0, 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 doing "M122" 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 0x0000001
                    Code queue 0 is empty
                    Q1 segments left 0, axes/extruders owned 0x0000000
                    Code queue 1 is empty
                    === Filament sensors ===
                    check 31279 clear 4266391
                    Extruder 0: pos 2160.00, errs: frame 0 parity 0 ovrun 0 pol 0 ovdue 0
                    === CAN ===
                    Messages queued 4333, received 0, lost 0, errs 2298737, boc 0
                    Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 2435/0/0
                    Tx timeouts 0,0,2434,0,0,1897 last cancelled message type 4514 dest 127
                    === SBC interface ===
                    Transfer state: 5, failed transfers: 0, checksum errors: 0
                    RX/TX seq numbers: 4628/4628
                    SPI underruns 0, overruns 0
                    State: 5, disconnects: 1, timeouts: 1 total, 1 by SBC, IAP RAM available 0x255b4
                    Buffer RX/TX: 0/0-0, open files: 0
                    === Duet Control Server ===
                    Duet Control Server version 3.5.0-rc.3+7 (2024-03-06 11:22:55, 32-bit)
                    Failed to deserialize the following properties:
                    - MoveSegmentation -> Int32 from 2.0
                    Code buffer space: 4096
                    Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0
                    Full transfers per second: 40.79, max time between full transfers: 54.2ms, max pin wait times: 37.8ms/3.0ms
                    Codes per second: 0.02
                    Maximum length of RX/TX data transfers: 4349/48

                    https://streamable.com/u9d4i9

                    undefined 1 Reply Last reply 6 Mar 2024, 14:47 Reply Quote 0
                    • undefined
                      chrishamm administrators @timschneider
                      last edited by 6 Mar 2024, 14:47

                      @timschneider said in [3.5.0-rc.3+5] [bug] nested while job Illegal para letter '.':

                      see the M0 at the beginning for the inactive channel.

                      Hence my question from the previous post. M0 attempts to synchronize both file streams but since File2 never reaches it due to your check, it leads to a deadlock. I'm going to investigate why it might delay E-STOP, though.

                      You should never call M0/M1/M2/M24/M25/M32 from a single file channel only.

                      Even without your condition at the top the file should behave like a macro.

                      Duet software engineer

                      undefined 1 Reply Last reply 6 Mar 2024, 14:52 Reply Quote 0
                      • undefined
                        timschneider @chrishamm
                        last edited by 6 Mar 2024, 14:52

                        @chrishamm
                        ok, I missunderstood the concept of the two channels at all I guess - I thought if if tell channel File2 to leave/stop the file, it will just stop working as I do not utilize multiple motion systems, but in fact it turned out to do the opposit.

                        Anyhow the second example from above which will also fail is not using the conditional M0 as shown above.
                        Unfortunately, I cannot provide any further information from the journal this time, as there is no information / exceptions - it is just sitting in a dead lock 🙂

                        undefined 2 Replies Last reply 6 Mar 2024, 15:18 Reply Quote 0
                        • undefined
                          chrishamm administrators @timschneider
                          last edited by 6 Mar 2024, 15:18

                          @timschneider If you do not use two motion systems you should not worry about File2 at all.

                          There was a recent bug which could lead to abort being executed even on an inactive file channel (aka File2) and the if-statement at the start of your files above (at least followed only by M99) was meant to work-around this particular case. But it won't be needed in the next versions either.

                          I could reproduce the deadlock that you managed to provoke and I am working on a fix. I'll keep you posted.

                          Duet software engineer

                          1 Reply Last reply Reply Quote 1
                          • undefined
                            chrishamm administrators @timschneider
                            last edited by 6 Mar 2024, 19:28

                            @timschneider This is now fixed as well.

                            Duet software engineer

                            undefined 1 Reply Last reply 6 Mar 2024, 21:17 Reply Quote 0
                            • undefined
                              timschneider @chrishamm
                              last edited by 6 Mar 2024, 21:17

                              @chrishamm
                              Thanks for the great patch! Your work is outstanding! It's impressive to see the passion and dedication you and the duet3d team put into the software and hardware!

                              Now that all the show-stoppers are out of the way, we are going to switch completely to duet3 in the sbc setup. Starting with 4 closed loop steppers with 4 1HCL and 4 open loop steppers directly on the 6HC. Also two filament monitors and two IR probes per machine. This will be followed at a later stage by two tool boards and a distribution board per machine. I am excited to see the results.

                              1 Reply Last reply Reply Quote 4
                              • droftartsundefined droftarts marked this topic as a question 9 Mar 2024, 16:08
                              • droftartsundefined droftarts has marked this topic as solved 9 Mar 2024, 16:08
                              7 out of 14
                              • First post
                                7/14
                                Last post
                              Unless otherwise noted, all forum content is licensed under CC-BY-SA