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
    534
    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.
    • timschneiderundefined
      timschneider @chrishamm
      last edited by

      @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
      
      chrishammundefined 2 Replies Last reply Reply Quote 0
      • chrishammundefined
        chrishamm administrators @timschneider
        last edited by

        @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
        • chrishammundefined
          chrishamm administrators @timschneider
          last edited by

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

          Duet software engineer

          timschneiderundefined 1 Reply Last reply Reply Quote 0
          • timschneiderundefined
            timschneider @chrishamm
            last edited by

            @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
            
            timschneiderundefined 1 Reply Last reply Reply Quote 0
            • timschneiderundefined
              timschneider @timschneider
              last edited by timschneider

              @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
              
              chrishammundefined 1 Reply Last reply Reply Quote 0
              • chrishammundefined
                chrishamm administrators @timschneider
                last edited by

                @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

                timschneiderundefined 1 Reply Last reply Reply Quote 0
                • timschneiderundefined
                  timschneider @chrishamm
                  last edited by timschneider

                  @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

                  chrishammundefined 1 Reply Last reply Reply Quote 0
                  • chrishammundefined
                    chrishamm administrators @timschneider
                    last edited by

                    @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

                    timschneiderundefined 1 Reply Last reply Reply Quote 0
                    • timschneiderundefined
                      timschneider @chrishamm
                      last edited by

                      @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 🙂

                      chrishammundefined 2 Replies Last reply Reply Quote 0
                      • chrishammundefined
                        chrishamm administrators @timschneider
                        last edited by

                        @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
                        • chrishammundefined
                          chrishamm administrators @timschneider
                          last edited by

                          @timschneider This is now fixed as well.

                          Duet software engineer

                          timschneiderundefined 1 Reply Last reply Reply Quote 0
                          • timschneiderundefined
                            timschneider @chrishamm
                            last edited by

                            @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
                            • droftartsundefined droftarts has marked this topic as solved
                            • First post
                              Last post
                            Unless otherwise noted, all forum content is licensed under CC-BY-SA