RepRapFirmware 3.01-RC1 released
-
@Danal said in RepRapFirmware 3.01-RC1 released:
@dc42 said in RepRapFirmware 3.01-RC1 released:
@DaBit said in RepRapFirmware 3.01-RC1 released:
Question: we do have state.currentTool. Is there also a previousTool somewhere or a workaround for obtaining the previous toolnumber?
Not yet, but I can add it in a future release. My thinking is that it would only be applicable if you switched directly from another tool to the current one. If you did T-1 followed by T1, then previousTool would be -1. Do you agree that it should work like this?
Yes.
I have implemented state.previousTool in the internal RRF3 builds at https://www.dropbox.com/sh/3azy1njy3ayjsbp/AACquxr2m00eV568RZg5QG5wa?dl=0.
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
@gtj0 said in RepRapFirmware 3.01-RC1 released:
@dc42 I think the change to set the axes unhomed on ATX power off got reverted.
M115
FIRMWARE_NAME: RepRapFirmware for Duet 3 MB6HC v0.6 or 1.0 FIRMWARE_VERSION: 3.01-RC1 ELECTRONICS: Duet 3 MB6HC FIRMWARE_DATE: 2020-02-08b1I've just tested it, and it's working for me. To be clear, it's the loss of VIN voltage (to below about 9.5V) that sets the axes to not homed.
I just retried it with your binary. I do get the "12V under-voltage event (9.5V)" message but the axes still show homed. Also looked using
M409 K"move.axes"
with the same result. -
I've just tried it on a second machine (E3D Tool Changer). It's working correctly on that machine too. With both USB and VIN power applied, I home the printer. Then I turn off VIN power. All axes go to "not homed".
The code that does this is at Platform.cpp(1015):
#if HAS_VOLTAGE_MONITOR if (currentVin < driverPowerOffAdcReading) { driversPowered = false; ++numVinUnderVoltageEvents; lastVinUnderVoltageValue = currentVin; // save this because the voltage may have changed by the time we report it reprap.GetGCodes().SetAllAxesNotHomed(); }
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
Not yet, but I can add it in a future release. My thinking is that it would only be applicable if you switched directly from another tool to the current one. If you did T-1 followed by T1, then previousTool would be -1. Do you agree that it should work like this?
Yes, at least in tpostX.g and regular macros.
@dc42 said in RepRapFirmware 3.01-RC1 released:
I have implemented state.previousTool in the internal RRF3 builds at https://www.dropbox.com/sh/3azy1njy3ayjsbp/AACquxr2m00eV568RZg5QG5wa?dl=0.
Now that's quick!
Printer is busy, I will give it a shot when it is free.@dc42 said in RepRapFirmware 3.01-RC1 released:
I've just tried it on a second machine (E3D Tool Changer). It's working correctly on that machine too. With both USB and VIN power applied, I home the printer. Then I turn off VIN power. All axes go to "not homed".
On my machine RRF 3.01-RC1 shows correct behaviour: with auxiliary 5V applied to a Duet Wifi 2, the 24V main supply switched using PS_ON the axes go to 'not homed'.
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
I've just tried it on a second machine (E3D Tool Changer). It's working correctly on that machine too. With both USB and VIN power applied, I home the printer. Then I turn off VIN power. All axes go to "not homed".
Well, I just went back to 3.01-BETA2 and it's still not working. It's pretty bizarre. Ah well.
-
Are you certain that VIN really is dropping to below 9.5V? What voltage does DWC report? Which Duet are you using?
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
Are you certain that VIN really is dropping to below 9.5V? What voltage does DWC report? Which Duet are you using?
Duet3. Tried standalone mode as well as DSF. When I issue an M81, the LEDs and fans go off and I can hear the motors snap to a full step.
M409 K"boards" { "flags" : "", "key" : "boards", "result" : [ { "canAddress" : 0, "firmwareFileName" : "Duet3Firmware_MB6HC.bin", "firmwareVersion" : "3.01-RC1", "iapFileNameSBC" : "Duet3_SBCiap_MB6HC.bin", "iapFileNameSD" : "Duet3_SDiap_MB6HC.bin", "mcuTemp" : { "current" : 35.8, "max" : 36.1, "min" : 32.6 }, "name" : "Duet 3 MB6HC", "shortName" : "MB6HC", "v12" : { "current" : 0.3, "max" : 12.2, "min" : 0.3 }, "vIn" : { "current" : 0.3, "max" : 25.7, "min" : 0.2 } } ] }
-
I've been testing this on Duet 2. I'll try on Duet 3 tomorrow.
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
I've been testing this on Duet 2. I'll try on Duet 3 tomorrow.
Thanks!
-
Confirmed, it doesn't work on Duet 3. This is because Duet 3 has separate code to provide a fast response to loss of 12V power in order to protect the drivers, which preempts that code I added. I will fix it in the next build.
-
Fixed in latest commit.
-
I've just migrated from 2.04 to 3.01 (via 3.0). I must admit, I didn't stop at 3.0 to check everything was working. Anyway, after a few hiccoughs, I have almost everything working from a control perspective. All tools are registered and reporting the correct temp, all axes can be homed, tools can be heated, bed can be heated. Pretty happy with this, I moved to run my first job, which starts with mesh bed leveling, and that's where I encountered the first issue. Once G29 was issued, the head moved much slower than expected to the first point, but then held there. I looked at DWC to find it waiting for manual bed leveling. It wanted me to raise the bed up to the head. Not wanting to do this for 40 points, I quickly realised there's no way to abort this process from DWC once it begins. You can click OK, but you probably can't get to the emergency stop button before the next point, so you're just trapped. Even booting DWC up on a second browser instance resulted in the dialog popping up which I couldn't cancel. So first issue - could ideally do with a way of cancelling manual bed leveling.
However, I can't really see what's wrong with the setup. My starting point is the setup I have for Duet 2, but adjusted based on @dc42 post on the e3d forum.
M558 P8 C"zstop" H3 F360 I0 T35000 ; Set Z probe type to switch, the axes for which it is used and the dive height + speeds G31 P200 X0 Y0 Z0 ; Set Z probe trigger value, offset and trigger height M557 X10:290 Y20:180 S40 ; Define mesh grid
The only difference is my mesh definition as I'm not ready to switch to having 0,0 in the center of my bed. As far as I can see, there's no other setup for the automated mesh bed leveling, so I'm not sure what I'm missing here? I trigger the bed measurement with a simple G29, which doesn't seem to have been altered for RRF3 (https://duet3d.dozuki.com/Wiki/Gcode#Section_G29_Mesh_bed_probe). Perhaps I need to specify S0 even though that should be the default?
The second issue I have relates to the setup of a thermistor to measure the bed temperature. While the heating plate itself has an inbuilt temperature report, the physical bed itself takes some time longer to reach working temperature. To measure this, I've mounted a thermistor against the bed itself, and plugged that into duex.e5temp. The only way I could figure out how to use this to hold processing in Duet 2 was to define this as a chamber, and then use M191 P0 S65 to cause processing to wait for the bed to report a sufficient temperature to continue. In Duet 2, I defined this like this:
M305 S"P0" P6 R4700 T100000 B4388 M141 H6 P0
Even with no actual heater assigned to the chamber, the chamber would appear in DWC and I could use M191. I kinda knew this was a hack, but now I need a similar hack for Duet 3 as I don't have a heater for this chamber. So far, I've just (ab)used duex.e3heat to act as the ghost heater, which then means I have no heater for tool 3.
M308 S6 P"duex.e5temp" Y"thermistor" A"T0" T100000 B4725 C7.06e-8 ; Set thermistor M950 H6 C"duex.e3heat" T6 ; Bed heater M141 P0 H6
This looks like it'll work, but I wonder if there's a better way?
-
OK. Have made a bit of progress. It seems that I'm struggling as I'm using the same tool (a microswitch) for both a Z endstop and a Z probe. By executing commands from config.g individually, I can see that once this executes:
M574 Z1 S1 P"zstop" ; Z min active high endstop switch
this then fails
M558 P8 C"zstop" H3 F360 I0 T35000
I can't quite fathom whether this should or shouldn't be the case from the docs.
"Note, if your Z probe is connected to the Z endstop input, in RRF 3.0 on Duet 2 boards only (not in RRF 3.01 and later, and not in RRF 3.0 on Duet 3), that input is by default pre-assigned to be used by the Z endstop, so you must free it up first."
If I read it right, this whole statement doesn't apply as this is RRF 3.01, albeit an RC, not final release. So does this mean I shouldn't need to free it up? I find that if I do free it up, the the M558 command will work, and I can then execute G29 which then works properly. At this stage then, it feels like my homing statement will need to clear the pin and define M574, and my levelling process will need to clear the pin and define M558. Is this the intended final outcome or am I missing a simple alternative?
-
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
Confirmed, it doesn't work on Duet 3. This is because Duet 3 has separate code to provide a fast response to loss of 12V power in order to protect the drivers, which preempts that code I added. I will fix it in the next build.
@dc42 said in RepRapFirmware 3.01-RC1 released:
Fixed in latest commit.
Confirmed fixed, thanks.
-
@SpoonUnit said in RepRapFirmware 3.01-RC1 released:
OK. Have made a bit of progress. It seems that I'm struggling as I'm using the same tool (a microswitch) for both a Z endstop and a Z probe. By executing commands from config.g individually, I can see that once this executes:
M574 Z1 S1 P"zstop" ; Z min active high endstop switch
this then fails
M558 P8 C"zstop" H3 F360 I0 T35000
I can't quite fathom whether this should or shouldn't be the case from the docs.
"Note, if your Z probe is connected to the Z endstop input, in RRF 3.0 on Duet 2 boards only (not in RRF 3.01 and later, and not in RRF 3.0 on Duet 3), that input is by default pre-assigned to be used by the Z endstop, so you must free it up first."
If I read it right, this whole statement doesn't apply as this is RRF 3.01, albeit an RC, not final release. So does this mean I shouldn't need to free it up? I find that if I do free it up, the the M558 command will work, and I can then execute G29 which then works properly. At this stage then, it feels like my homing statement will need to clear the pin and define M574, and my levelling process will need to clear the pin and define M558. Is this the intended final outcome or am I missing a simple alternative?
You don't need a Z endstop if you have a Z probe. Delete your Z endstop in config.g and use just the Z probe. Make sure that your homing files use a G30 command to home Z, not a G1 H2 Z move.
-
@dc42 I'm not sure if this is a new problem or an old one....
If the X or Y axes are homed then you turn the ATX power off, if you issue a
G1 H1
against X or Y, the axis gets marked as homed even though the power is still off. If you then issue aG1 X5 H0
, for instance, you get the "Attempt to move motors..." message but the position reports that X has moved 5mm. -
@gtj0 said in RepRapFirmware 3.01-RC1 released:
If the X or Y axes are homed then you turn the ATX power off, if you issue a G1 H1 against X or Y, the axis gets marked as homed even though the power is still off.
That should happen if and only if the X or Y (as appropriate) endstop switch is triggered when you send that command. I agree that it would be better just to reject the command.
-
@dc42 said in RepRapFirmware 3.01-RC1 released:
@gtj0 said in RepRapFirmware 3.01-RC1 released:
If the X or Y axes are homed then you turn the ATX power off, if you issue a G1 H1 against X or Y, the axis gets marked as homed even though the power is still off.
That should happen if and only if the X or Y (as appropriate) endstop switch is triggered when you send that command. I agree that it would be better just to reject the command.
No worries. Not a big issue.
-
Heh, just as I said that... I just turned ATX on and tried to do a homeall and got ...
Push(): stack overflow Error: Homing failed
Had to reset but here's an M122 before the reset.
M122 === Diagnostics === RepRapFirmware for Duet 3 MB6HC v0.6 or 1.0 version 3.01-RC1+1 running on Duet 3 MB6HC Board ID: 08DGM-9T66A-G63SJ-6J9F4-3SD6S-1U03B Used output buffers: 1 of 40 (8 max) === RTOS === Static ram: 153808 Dynamic ram: 160628 of which 24 recycled Exception stack ram used: 520 Never used ram: 78236 Tasks: NETWORK(ready,1972) HEAT(blocked,1200) CanReceiv(suspended,3820) CanSender(suspended,1436) CanClock(blocked,1436) TMC(blocked,76) MAIN(running,4964) IDLE(ready,80) Owned mutexes: === Platform === Last reset 06:06:38 ago, cause: software Last software reset at 2020-02-09 17:47, reason: User, spinning module LinuxInterface, available RAM 78896 bytes (slot 0) Software reset code 0x0010 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x04432000 BFAR 0x00000000 SP 0xffffffff Task 0x4e49414d Error status: 0 Free file entries: 10 SD card 0 not detected, interface speed: 37.5MBytes/sec SD card longest block write time: 0.0ms, max retries 0 MCU temperature: min 28.5, current 31.5, max 34.8 Supply voltage: min 0.1, current 25.3, max 25.7, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 0.2, current 12.2, max 12.2, under voltage events: 3 Driver 0: standstill, reads 18529, writes 64 timeouts 0, SG min/max 0/239 Driver 1: standstill, reads 18529, writes 64 timeouts 0, SG min/max 0/225 Driver 2: standstill, reads 18547, writes 47 timeouts 0, SG min/max 0/0 Driver 3: standstill, reads 18534, writes 60 timeouts 0, SG min/max 0/201 Driver 4: standstill, reads 18535, writes 60 timeouts 0, SG min/max 0/212 Driver 5: standstill, reads 18535, writes 60 timeouts 0, SG min/max 0/205 Date/time: 2020-02-10 14:05:56 Slowest loop: 9.48ms; fastest: 0.04ms === Move === Hiccups: 0(0), FreeDm: 375, MinFreeDm: 372, MaxWait: 14364857ms Bed compensation in use: none, comp offset 0.000 === MainDDARing === Scheduled moves: 47, completed moves: 47, StepErrors: 0, LaErrors: 0, Underruns: 0, 0 === AuxDDARing === Scheduled moves: 0, completed moves: 0, StepErrors: 0, LaErrors: 0, Underruns: 0, 0 === Heat === Bed heaters = 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamberHeaters = -1 -1 -1 -1 === GCodes === Segments left: 0 Movement lock held by null http* is ready with "M122" in state(s) 0 0 0 0 0 0 telnet is idle in state(s) 0 file is idle in state(s) 0 serial is idle in state(s) 0 aux is assembling a command in state(s) 0 daemon* is idle in state(s) 0 queue is idle in state(s) 0 lcd is idle in state(s) 0 spi is idle in state(s) 0 autopause is idle in state(s) 0 Code queue is empty. === Network === Slowest loop: 1.34ms; fastest: 0.01ms Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0) HTTP sessions: 0 of 8 - Ethernet - State: 0 Error counts: 0 0 0 0 0 Socket states: 0 0 0 0 0 0 0 0 === CAN === Messages sent 88003, longest wait 0ms for type 0 === Linux interface === State: 0, failed transfers: 0 Last transfer: 16ms ago RX/TX seq numbers: 24365/36759 SPI underruns 0, overruns 0 Number of disconnects: 0 Buffer RX/TX: 0/0-0 === Duet Control Server === Duet Control Server v1.2.4.0 Code buffer space: 4096 Configured SPI speed: 2000000 Hz Full transfers per second: 34.39