Finalized format for gcode line containing remaining printing time

This commit is contained in:
Enrico Turri 2018-06-06 11:00:36 +02:00
parent e8b32fa1df
commit 4009fdcc18
2 changed files with 25 additions and 30 deletions

View file

@ -37,15 +37,7 @@ static const float PREVIOUS_FEEDRATE_THRESHOLD = 0.0001f;
static const std::string ELAPSED_TIME_TAG_DEFAULT = ";_ELAPSED_TIME_DEFAULT: "; static const std::string ELAPSED_TIME_TAG_DEFAULT = ";_ELAPSED_TIME_DEFAULT: ";
static const std::string ELAPSED_TIME_TAG_SILENT = ";_ELAPSED_TIME_SILENT: "; static const std::string ELAPSED_TIME_TAG_SILENT = ";_ELAPSED_TIME_SILENT: ";
#define REMAINING_TIME_USE_SINGLE_GCODE_COMMAND 1 static const std::string REMAINING_TIME_CMD = "M73";
#if REMAINING_TIME_USE_SINGLE_GCODE_COMMAND
static const std::string REMAINING_TIME_CMD = "M998";
#else
static const std::string REMAINING_TIME_CMD_DEFAULT = "M998";
static const std::string REMAINING_TIME_CMD_SILENT = "M999";
#endif // REMAINING_TIME_USE_SINGLE_GCODE_COMMAND
static const std::string REMAINING_TIME_COMMENT = " ; estimated remaining time";
#if ENABLE_MOVE_STATS #if ENABLE_MOVE_STATS
static const std::string MOVE_TYPE_STR[Slic3r::GCodeTimeEstimator::Block::Num_Types] = static const std::string MOVE_TYPE_STR[Slic3r::GCodeTimeEstimator::Block::Num_Types] =
@ -307,12 +299,14 @@ namespace Slic3r {
throw std::runtime_error(std::string("Remaining times estimation failed.\nError while reading from file.\n")); throw std::runtime_error(std::string("Remaining times estimation failed.\nError while reading from file.\n"));
} }
#if REMAINING_TIME_USE_SINGLE_GCODE_COMMAND
// this function expects elapsed time for default and silent mode to be into two consecutive lines inside the gcode // this function expects elapsed time for default and silent mode to be into two consecutive lines inside the gcode
if (boost::contains(line, ELAPSED_TIME_TAG_DEFAULT)) if (boost::contains(line, ELAPSED_TIME_TAG_DEFAULT))
{ {
std::string default_elapsed_time_str = line.substr(ELAPSED_TIME_TAG_DEFAULT.length()); std::string default_elapsed_time_str = line.substr(ELAPSED_TIME_TAG_DEFAULT.length());
line = REMAINING_TIME_CMD + " D:" + _get_time_dhms(default_time - (float)atof(default_elapsed_time_str.c_str())); float elapsed_time = (float)atof(default_elapsed_time_str.c_str());
float remaining_time = default_time - elapsed_time;
line = REMAINING_TIME_CMD + " P" + std::to_string((int)(100.0f * elapsed_time / default_time));
line += " R" + _get_time_minutes(remaining_time);
std::string next_line; std::string next_line;
std::getline(in, next_line); std::getline(in, next_line);
@ -325,7 +319,10 @@ namespace Slic3r {
if (boost::contains(next_line, ELAPSED_TIME_TAG_SILENT)) if (boost::contains(next_line, ELAPSED_TIME_TAG_SILENT))
{ {
std::string silent_elapsed_time_str = next_line.substr(ELAPSED_TIME_TAG_SILENT.length()); std::string silent_elapsed_time_str = next_line.substr(ELAPSED_TIME_TAG_SILENT.length());
line += " S:" + _get_time_dhms(silent_time - (float)atof(silent_elapsed_time_str.c_str())) + REMAINING_TIME_COMMENT; float elapsed_time = (float)atof(silent_elapsed_time_str.c_str());
float remaining_time = silent_time - elapsed_time;
line += " Q" + std::to_string((int)(100.0f * elapsed_time / silent_time));
line += " S" + _get_time_minutes(remaining_time);
} }
else else
// found horphaned default elapsed time, skip the remaining time line output // found horphaned default elapsed time, skip the remaining time line output
@ -334,24 +331,6 @@ namespace Slic3r {
else if (boost::contains(line, ELAPSED_TIME_TAG_SILENT)) else if (boost::contains(line, ELAPSED_TIME_TAG_SILENT))
// found horphaned silent elapsed time, skip the remaining time line output // found horphaned silent elapsed time, skip the remaining time line output
continue; continue;
#else
bool processed = false;
if (boost::contains(line, ELAPSED_TIME_TAG_DEFAULT))
{
std::string elapsed_time_str = line.substr(ELAPSED_TIME_TAG_DEFAULT.length());
line = REMAINING_TIME_CMD_DEFAULT + " " + _get_time_dhms(default_time - (float)atof(elapsed_time_str.c_str()));
processed = true;
}
else if (boost::contains(line, ELAPSED_TIME_TAG_SILENT))
{
std::string elapsed_time_str = line.substr(ELAPSED_TIME_TAG_SILENT.length());
line = REMAINING_TIME_CMD_SILENT + " " + _get_time_dhms(silent_time - (float)atof(elapsed_time_str.c_str()));
processed = true;
}
if (processed)
line += REMAINING_TIME_COMMENT;
#endif // REMAINING_TIME_USE_SINGLE_GCODE_COMMAND
line += "\n"; line += "\n";
fwrite((const void*)line.c_str(), 1, line.length(), out); fwrite((const void*)line.c_str(), 1, line.length(), out);
@ -573,6 +552,11 @@ namespace Slic3r {
return _get_time_dhms(get_time()); return _get_time_dhms(get_time());
} }
std::string GCodeTimeEstimator::get_time_minutes() const
{
return _get_time_minutes(get_time());
}
void GCodeTimeEstimator::_reset() void GCodeTimeEstimator::_reset()
{ {
_curr.reset(); _curr.reset();
@ -1339,6 +1323,11 @@ namespace Slic3r {
return buffer; return buffer;
} }
std::string GCodeTimeEstimator::_get_time_minutes(float time_in_secs)
{
return std::to_string((int)(::roundf(time_in_secs / 60.0f)));
}
#if ENABLE_MOVE_STATS #if ENABLE_MOVE_STATS
void GCodeTimeEstimator::_log_moves_stats() const void GCodeTimeEstimator::_log_moves_stats() const
{ {

View file

@ -297,6 +297,9 @@ namespace Slic3r {
// Returns the estimated time, in format DDd HHh MMm SSs // Returns the estimated time, in format DDd HHh MMm SSs
std::string get_time_dhms() const; std::string get_time_dhms() const;
// Returns the estimated time, in minutes (integer)
std::string get_time_minutes() const;
private: private:
void _reset(); void _reset();
void _reset_time(); void _reset_time();
@ -381,6 +384,9 @@ namespace Slic3r {
// Returns the given time is seconds in format DDd HHh MMm SSs // Returns the given time is seconds in format DDd HHh MMm SSs
static std::string _get_time_dhms(float time_in_secs); static std::string _get_time_dhms(float time_in_secs);
// Returns the given, in minutes (integer)
static std::string _get_time_minutes(float time_in_secs);
#if ENABLE_MOVE_STATS #if ENABLE_MOVE_STATS
void _log_moves_stats() const; void _log_moves_stats() const;
#endif // ENABLE_MOVE_STATS #endif // ENABLE_MOVE_STATS