I was printing an object with PETG (bed temperature set to 80°C) and with PLA-support (bed temperature set to 60°C). The print started with bed temperature 80°C, but after the first layer bed temperature dropped to 60°C. That caused massive warping.
Made some investigation:
In the g-code print started with M140 S80 but after first layer i found M140 S65 ; set bed temperature
In original orca there is a feature to select which bed temperture type to choose

In original orca there is also implemented in src/libslic3r/GCode.cpp the code to choose highest temperture for first layer as well as for following layers:
first layer:
int GCode::get_bed_temperature(const int extruder_id, const bool is_first_layer, const BedType bed_type) const
{
std::string bed_temp_key = is_first_layer ? get_bed_temp_1st_layer_key(bed_type) : get_bed_temp_key(bed_type);
const ConfigOptionInts* bed_temp_opt = m_config.option<ConfigOptionInts>(bed_temp_key);
return bed_temp_opt->get_at(extruder_id);
}
int GCode::get_highest_bed_temperature(const bool is_first_layer, const Print& print) const
{
auto bed_type = m_config.curr_bed_type;
int bed_temp = 0;
for (auto fidx : print.get_slice_used_filaments(is_first_layer)) {
bed_temp = std::max(bed_temp, get_bed_temperature(fidx, is_first_layer, bed_type));
}
return bed_temp;
}
// Write 1st layer bed temperatures into the G-code.
// Only do that if the start G-code does not already contain any M-code controlling an extruder temperature.
// M140 - Set Extruder Temperature
// M190 - Set Extruder Temperature and Wait
void GCode::_print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
{
// Initial bed temperature based on the first extruder.
// BBS
std::vector<int> temps_per_bed;
int bed_temp = 0;
if (m_config.bed_temperature_formula.value == BedTempFormula::btfHighestTemp) {
bed_temp = get_highest_bed_temperature(true, print);
}
else {
bed_temp = get_bed_temperature(first_printing_extruder_id, true, print.config().curr_bed_type);
}
// Is the bed temperature set by the provided custom G-code?
int temp_by_gcode = -1;
bool temp_set_by_gcode = custom_gcode_sets_temperature(gcode, 140, 190, false, temp_by_gcode);
// BBS
#if 0
if (temp_set_by_gcode && temp_by_gcode >= 0 && temp_by_gcode < 1000)
temp = temp_by_gcode;
#endif
// Always call m_writer.set_bed_temperature() so it will set the internal "current" state of the bed temp as if
// the custom start G-code emited these.
std::string set_temp_gcode = m_writer.set_bed_temperature(bed_temp, wait);
if (! temp_set_by_gcode)
file.write(set_temp_gcode);
}
following layers:
LayerResult GCode::process_layer(
...
if (m_config.bed_temperature_formula == BedTempFormula::btfHighestTemp)
bed_temp = get_highest_bed_temperature(false,print);
else
bed_temp = get_bed_temperature(first_extruder_id, false, m_config.curr_bed_type);
gcode += m_writer.set_bed_temperature(bed_temp);
...
)
unfortunatly this change in code belongs to the 3902 commits, that is snorca behind the original orca.
I opened an issue (#552) in github.
Hoping the developers of snorca will have a look to the commits of orca and take the commits, which are compatible, from orca to snorca so the differnts between orca and the snorca fork becomes less and bugs, which are solved in orca become also fixed in snorca.
See: Commit dd3c63b and Commit 6f5ea72