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

    [bug] Error: in job file (channel File2) variable already exists

    Scheduled Pinned Locked Moved Solved
    DSF Development
    2
    15
    387
    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

      This post is deleted!
      1 Reply Last reply Reply Quote 0
      • timschneiderundefined
        timschneider
        last edited by timschneider

        @chrishamm so I just checked it in standalone mode, first on Duet2, but there is not second queue so I went to an duet3 6XD.

        The gcode was just fine on an duet2 with

        M115
        FIRMWARE_NAME: RepRapFirmware for Duet 2 WiFi/Ethernet FIRMWARE_VERSION: 3.5.0-rc.2 ELECTRONICS: Duet WiFi 1.02 or later + DueX5v0.11 FIRMWARE_DATE: 2023-12-14 10:30:41
        

        I had to adopt the gcode for the 6XD, so maybe that is the bug in the first place.
        The error of the original gcode

        M32 "0:/gcodes/job-variable.gcode"
        File 0:/gcodes/job-variable.gcode selected for printing
        Error:  line 1 column 4: meta command: unknown value 'exists'
        Cancelled printing file 0:/gcodes/job-variable.gcode, print time was 0h 0m
        

        so I changed the gcode to the following:

        if {exists(global.TestVar1)}
          echo global.TestVar1
          set global.TestVar1 = true
        else
          global TestVar1 = true
        
        
        echo global.TestVar1
        
        G4 S1
        
        M112
        

        but with this gcode I was not able to reproduce the error in standalone mode

        Error: in job file (channel File2) line 5: variable 'global.TestVar1' already exists 
        

        58a9a024-cd3d-48f5-9da4-bcf5f14386dc-grafik.png

        M122

        M122
        === Diagnostics ===
        RepRapFirmware for Duet 3 MB6XD version 3.5.0-rc.2 (2023-12-14 10:33:00) running on Duet 3 MB6XD v1.01 or later (standalone mode)
        Board ID: 0JD2M-999AL-D2PS0-6J9F6-3SD6L-KPJM0
        Used output buffers: 3 of 40 (18 max)
        === RTOS ===
        Static ram: 153284
        Dynamic ram: 116748 of which 0 recycled
        Never used RAM 75960, free system stack 196 words
        Tasks: NETWORK(1,ready,33.8%,182) ETHERNET(5,nWait,0.1%,321) HEAT(3,nWait,0.0%,369) Move(4,nWait,0.0%,340) CanReceiv(6,nWait,0.0%,942) CanSender(5,nWait,0.0%,334) CanClock(7,delaying,0.0%,343) MAIN(1,running,63.2%,128) IDLE(0,ready,2.9%,30), total 100.0%
        Owned mutexes:
        === Platform ===
        Last reset 00:04:45 ago, cause: software
        Last software reset at 2024-01-16 10:56, reason: User, Gcodes spinning, available RAM 73040, slot 1
        Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
        Error status: 0x00
        MCU temperature: min 23.1, current 23.9, max 25.0
        Supply voltage: min 23.7, current 23.8, max 23.8, under voltage events: 0, over voltage events: 0, power good: yes
        12V rail voltage: min 12.1, current 12.2, max 12.2, under voltage events: 0
        Heap OK, handles allocated/used 0/0, heap memory allocated/used/recyclable 0/0/0, gc cycles 0
        Events: 0 queued, 0 completed
        Driver 0: ok
        Driver 1: ok
        Driver 2: ok
        Driver 3: ok
        Driver 4: ok
        Driver 5: ok
        Date/time: 2024-01-16 11:01:38
        Slowest loop: 6.31ms; fastest: 0.07ms
        === Storage ===
        Free file entries: 20
        SD card 0 detected, interface speed: 25.0MBytes/sec
        SD card longest read time 3.3ms, 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, 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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
        === GCodes ===
        Movement locks held by null, null
        HTTP is idle in state(s) 0
        Telnet is idle in state(s) 0
        File is idle in state(s) 0
        USB is idle in state(s) 0
        Aux is idle in state(s) 0
        Trigger is idle in state(s) 0
        Queue is idle in state(s) 0
        LCD is idle in state(s) 0
        SBC is idle in state(s) 0
        Daemon is idle in state(s) 0
        Aux2 is idle in state(s) 0
        Autopause is idle in state(s) 0
        File2 is idle in state(s) 0
        Queue2 is idle in state(s) 0
        Q0 segments left 0, axes/extruders owned 0x0000000
        Code queue 0 is empty
        Q1 segments left 0, axes/extruders owned 0x0000000
        Code queue 1 is empty
        === CAN ===
        Messages queued 1434, received 0, lost 0, errs 1352416, boc 0
        Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 49), ts 1427/0/0
        Tx timeouts 0,0,1426,6,0,0 last cancelled message type 30 dest 127
        === Network ===
        Slowest loop: 6.24ms; fastest: 0.03ms
        Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
        HTTP sessions: 1 of 8
        = Ethernet =
        Interface state: active
        Error counts: 0 0 0 0 0 0
        Socket states: 5 2 2 2 2 0 0 0
        === Multicast handler ===
        Responder is inactive, messages received 0, responses 0
        
        chrishammundefined 1 Reply Last reply Reply Quote 0
        • chrishammundefined
          chrishamm administrators @timschneider
          last edited by

          @timschneider Note that the Duet 2 does not support multiple motion systems due to the lack of RAM. I will look into the error once again even though I still think it shouldn't be possible to start a print if the machine is halted.

          Duet software engineer

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

            @chrishamm ok thank you! But again, this is after a restart, after the machine was haltet - so in a normal operating state - not while the machine is haltet.

            And the test was carried out on the duet3 6XD in standalone mode due to the missing support for multiple motion systems on the duet2 as you mentioned.

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

              @timschneider Ok, I just tried to reproduce it and I can confirm what I said before: This is actually expected behaviour. If you put conditional G-code into a job file, that conditional G-code is always executed on the two File channels on the Duet 3, and the order doesn't necessarily need to be the same. That's why this error can be provoked. I'm pretty sure RRF behaves in the same way in standalone mode as well even if you couldn't reproduce the issue. That's why it is a good idea to check state.thisInput if you must put conditional G-code directly in a job file.

              If you put that conditional G-code in a macro file and the corresponding motion system of the input is not used (as is the case with File2 by default), that macro is only executed on File and not File2 (see here for further info).

              Besides, it isn't possible to start prints again in halted mode, so that's OK as well.

              Duet software engineer

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

                @chrishamm thank you for checking it that fast, and I respectfully see your response, but the underlaying bug in it is not addressed.
                There is some initialize/reset bug in the dsf which is causing all kind of trouble, but this is a minimal working example on how to reproduce it very easy. You will come back to that bug later on, even if you do not see the bug now.

                In sbc mode, channel 0 and 2 are sometimes mixed up, which will lead to unexpected behaviour of the machine - even after a fresh hard reboot.

                the following execution order is not possible with normal behaviour.

                9a8720fc-194c-404d-817c-8d5321b72b6a-grafik.png

                another example
                9880b3c5-fb9b-48a8-a7e2-025903753a87-grafik.png
                g-code used to produce it

                content of 0:/gcodes/job-variable.gcode

                echo {state.thisInput}
                
                if {state.thisInput == 2}
                  if {exists(global.TestVar1)}
                    echo "before set: " ^ { global.TestVar1 }
                    set global.TestVar1 = true
                  else
                    global TestVar1 = true
                
                
                  echo global.TestVar1
                
                G4 S5
                
                if {state.thisInput == 2}
                  M999
                  ;M112
                

                content of 0:/sys/stop.g

                ; stop.g
                ; called when M0 (Stop) is run (e.g. when a print from SD card is cancelled)
                ;
                
                echo "0:/sys/stop.g"
                ;M98 P"0:/sys/meltingplot/print_end"
                

                if conditional gcode in job files is not supported, the machine should output an error message.

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

                  @timschneider Thanks, now I see what you mean. It looks like there is indeed an issue with evaluation requests which I will look into next. I highly doubt it is related to resetting/E-STOP, though.

                  Duet software engineer

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

                    @timschneider This bug is now fixed upstream.

                    PS: The extra curly braces around your expressions aren't needed.

                    Duet software engineer

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

                      @chrishamm Thank you for your work and the fast fix! I'll try it as soon as the fix is available in the beta channel.

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

                        @chrishamm I can confirm, that I'm unable to reproduce the above error - so it should be fixed 🙂

                        1 Reply Last reply Reply Quote 1
                        • T3P3Tonyundefined T3P3Tony marked this topic as a question
                        • T3P3Tonyundefined T3P3Tony has marked this topic as solved
                        • First post
                          Last post
                        Unless otherwise noted, all forum content is licensed under CC-BY-SA