power panic: Z axis is lowered in position where print starts (is recovered)

This commit is contained in:
PavelSindler 2017-07-04 20:58:44 +02:00
parent a8678cb2fd
commit ef7a302626
2 changed files with 39 additions and 52 deletions

View File

@ -1234,7 +1234,7 @@ void setup()
// so the next time the firmware gets updated, it will know from which version it has been updated. // so the next time the firmware gets updated, it will know from which version it has been updated.
update_current_firmware_version_to_eeprom(); update_current_firmware_version_to_eeprom();
if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 1) { //previous print was terminated by UVLO if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 1) { //previous print was terminated by UVLO
if (lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT)) recover_print(); if (lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT, false)) recover_print();
else { else {
eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0);
lcd_update_enable(true); lcd_update_enable(true);
@ -2685,6 +2685,11 @@ void process_commands()
homing_flag = false; homing_flag = false;
SERIAL_ECHOLNPGM("Homing happened");
SERIAL_ECHOPGM("Current position X AXIS:");
MYSERIAL.println(current_position[X_AXIS]);
SERIAL_ECHOPGM("Current position Y_AXIS:");
MYSERIAL.println(current_position[Y_AXIS]);
break; break;
#ifdef ENABLE_AUTO_BED_LEVELING #ifdef ENABLE_AUTO_BED_LEVELING
@ -6798,8 +6803,14 @@ void serialecho_temperatures() {
void uvlo_() { void uvlo_() {
//SERIAL_ECHOLNPGM("UVLO"); //SERIAL_ECHOLNPGM("UVLO");
save_print_to_eeprom(); save_print_to_eeprom();
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position[X_AXIS]); float current_position_bckp[2];
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position[Y_AXIS]);
current_position_bckp[X_AXIS] = st_get_position_mm(X_AXIS);
current_position_bckp[Y_AXIS] = st_get_position_mm(Y_AXIS);
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position_bckp[X_AXIS]);
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position_bckp[Y_AXIS]);
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]);
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND, target_temperature[active_extruder]); eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND, target_temperature[active_extruder]);
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_BED, target_temperature_bed); eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_BED, target_temperature_bed);
@ -6829,82 +6840,52 @@ void recover_print() {
lcd_update_enable(true); lcd_update_enable(true);
lcd_update(2); lcd_update(2);
lcd_setstatuspgm(WELCOME_MSG); lcd_setstatuspgm(WELCOME_MSG);
//char cmd1[30];
target_temperature[active_extruder] = eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND); target_temperature[active_extruder] = eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND);
target_temperature_bed = eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_BED); target_temperature_bed = eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_BED);
//x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0));
//y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4));
float z_pos = UVLO_Z_AXIS_SHIFT + eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z));
setTargetHotend0(210); //need to change to stored temperature setTargetHotend0(210); //need to change to stored temperature
setTargetBed(55); setTargetBed(55);
//SERIAL_ECHOPGM("Target temperature:"); //SERIAL_ECHOPGM("Target temperature:");
//MYSERIAL.println(target_temperature[0]); //MYSERIAL.println(target_temperature[0]);
//SERIAL_ECHOPGM("Target temp bed:"); //SERIAL_ECHOPGM("Target temp bed:");
//MYSERIAL.println(target_temperature_bed); //MYSERIAL.println(target_temperature_bed);
//homeaxis(X_AXIS);
//homeaxis(Y_AXIS);
//home_xy();
float z_pos = UVLO_Z_AXIS_SHIFT + eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z));
//plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
SERIAL_ECHOPGM("current_position[Z_AXIS]:");
MYSERIAL.println(current_position[Z_AXIS]);
SERIAL_ECHOPGM("z_pos");
MYSERIAL.println(z_pos);
enquecommand_P(PSTR("G28 X")); enquecommand_P(PSTR("G28 X"));
enquecommand_P(PSTR("G28 Y")); enquecommand_P(PSTR("G28 Y"));
strcpy(cmd, "G92 Z"); strcpy(cmd, "G92 Z");
strcat(cmd, ftostr43(z_pos)); strcat(cmd, ftostr43(z_pos));
//fprintf(cmd, PSTR("G92 Z3.3%f"), z_pos);
enquecommand(cmd); enquecommand(cmd);
//enquecommand_P(PSTR("G92 Z2.2"));
eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0);
while ((abs(degHotend(0)- target_temperature[0])>5) || (abs(degBed() -target_temperature_bed)>3)) { //wait for heater and bed to reach target temp while ((abs(degHotend(0)- target_temperature[0])>5) || (abs(degBed() -target_temperature_bed)>3)) { //wait for heater and bed to reach target temp
delay_keep_alive(1000); delay_keep_alive(1000);
} }
//enquecommand_P("G28 W");
/*float x_rec, y_rec;
x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0));
y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4));
strcpy(cmd1, "G1 X");
strcat(cmd1, ftostr32(x_rec));
strcat(cmd1, " Y");
strcat(cmd1, ftostr32(y_rec));
enquecommand(cmd1);
enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT)));
enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)));*/
//current_position[X_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0));
//current_position[Y_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4));
/*SERIAL_ECHOPGM("Current position [X_AXIS]:");
MYSERIAL.println(current_position[X_AXIS]);
SERIAL_ECHOPGM("Current position [Y_AXIS]:");
MYSERIAL.println(current_position[Y_AXIS]);*/
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
//st_synchronize();
/*current_position[Z_AXIS] -= UVLO_Z_AXIS_SHIFT;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
st_synchronize();
current_position[E_AXIS] += DEFAULT_RETRACTION; //unretract
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
st_synchronize();*/
//enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT)));
//enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)));
restore_print_from_eeprom(); restore_print_from_eeprom();
SERIAL_ECHOPGM("current_position[Z_AXIS]:"); SERIAL_ECHOPGM("current_position[Z_AXIS]:");
MYSERIAL.print(current_position[Z_AXIS]); MYSERIAL.print(current_position[Z_AXIS]);
} }
void restore_print_from_eeprom() { void restore_print_from_eeprom() {
float x_rec, y_rec;
char cmd[30]; char cmd[30];
char* c; char* c;
char filename[13]; char filename[13];
char str[5] = ".gco"; char str[5] = ".gco";
x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0));
y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4));
//SERIAL_ECHOPGM("X pos read from EEPROM:");
//MYSERIAL.println(x_rec);
//SERIAL_ECHOPGM("Y pos read from EEPROM:");
//MYSERIAL.println(y_rec);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i); filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i);
} }
filename[8] = '\0'; filename[8] = '\0';
MYSERIAL.print(filename); MYSERIAL.print(filename);
strcat(filename, str); strcat(filename, str);
sprintf_P(cmd, PSTR("M23 %s"), filename); sprintf_P(cmd, PSTR("M23 %s"), filename);
@ -6914,13 +6895,19 @@ void restore_print_from_eeprom() {
uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION)); uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION));
SERIAL_ECHOPGM("Position read from eeprom:"); SERIAL_ECHOPGM("Position read from eeprom:");
MYSERIAL.println(position); MYSERIAL.println(position);
sprintf_P(cmd, PSTR("M26 %lu"), position);
//card.setIndex(int32_t(position)); //set from which SD card byte we will start
//if (card.cardOK && code_seen('S')) {
// card.setIndex(code_value_long());
//}
card.setIndex(position); enquecommand_P(PSTR("M24")); //M24 - Start SD print
enquecommand_P(PSTR("M24")); enquecommand_P(PSTR("M83")); //E axis relative mode
sprintf_P(cmd, PSTR("M26 S%d"), position); strcpy(cmd, "G1 X");
strcat(cmd, ftostr32(x_rec));
strcat(cmd, " Y");
strcat(cmd, ftostr32(y_rec));
enquecommand(cmd); enquecommand(cmd);
enquecommand_P(PSTR("M83"));
//SERIAL_ECHO(cmdbuffer + bufindr + 1);
enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT))); enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT)));
enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)" F2000")); enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)" F2000"));
} }

View File

@ -499,7 +499,7 @@
#ifdef ULTRA_LCD #ifdef ULTRA_LCD
#define KILL_PIN 32 //#define KILL_PIN 32
#ifdef NEWPANEL #ifdef NEWPANEL