CreatBotKlipper/klippy/extras/print_stats.py
zkk a0f518c3c3 全系添加PRINT_START和PRINT_END宏支持,优化F430NX Y轴细分由128改为64细分 复制镜像模式 电流 静音阈值 热风 驱动散热 状态灯等参数
Squashed commit of the following:

commit 03d11a16b3edc1f440251420b1105d20872ebdd7
Merge: e052ab095 ba4f343e9
Author: zkk <1007518571@qq.com>
Date:   Tue Dec 31 17:28:20 2024 +0800

    Merge commit 'ba4f343e9430af5538610529dd400f1f954b0078' into release

commit ba4f343e9430af5538610529dd400f1f954b0078
Author: ruipeng <1041589370@qq.com>
Date:   Tue Dec 31 17:25:28 2024 +0800

    F430NX:Y驱动细分由128->64

commit e052ab0957f7991a78b90e9974ae07d60d266226
Merge: 25bc7c6d9 b2b98c057
Author: zkk <1007518571@qq.com>
Date:   Tue Dec 31 15:15:14 2024 +0800

    Merge commit 'b2b98c057a7d23f9c8b0aec4c14844f7c24d6bde' into release

commit b2b98c057a7d23f9c8b0aec4c14844f7c24d6bde
Author: ruipeng <1041589370@qq.com>
Date:   Tue Dec 31 10:56:18 2024 +0800

    F430NX状态灯功能

commit f3cdc1dd75d96f976502946e752e9f7831288469
Author: ruipeng <1041589370@qq.com>
Date:   Tue Dec 31 10:55:48 2024 +0800

    全系支持PRINT_START,PRINT_END宏

commit ecbde51331316e6c454c09d03d93c3337ae17d8a
Author: ruipeng <1041589370@qq.com>
Date:   Tue Dec 31 10:54:11 2024 +0800

    F430NX二喷头静音阈值由200->300

commit 40985b8d9a7a8e26fb3c448f0794dab82d866382
Author: ruipeng <1041589370@qq.com>
Date:   Tue Dec 31 10:53:55 2024 +0800

    f430NX增加驱动器散热风扇控制

commit 682e343d6176c1c0764a7befd12d7971374b2b29
Author: ruipeng <1041589370@qq.com>
Date:   Mon Dec 30 17:27:29 2024 +0800

    修复必须回零后才能取消打印的问题

commit e941884b8ec1d5aec058a6fdc2a2aa94f40bf8b5
Author: ruipeng <1041589370@qq.com>
Date:   Mon Dec 30 16:29:08 2024 +0800

    修复F430NX机型Y轴在零位时回零报错的问题

commit e2a9ff2bfe2f9d4971045ce6fbd6f9835cf6475a
Author: ruipeng <1041589370@qq.com>
Date:   Mon Dec 30 13:36:54 2024 +0800

    优化F430NX复制、镜像模式,解决坐标超范围问题

commit 4fe4b7f67dc4b09b67dfb930e3bae80a525e164f
Author: ruipeng <1041589370@qq.com>
Date:   Mon Dec 30 13:32:25 2024 +0800

    调整F430NX喷头二X电流,由1->1.5

commit f8f7aabbe226d987bea3ba9033569b12eb00f182
Author: zkk <1007518571@qq.com>
Date:   Fri Dec 27 17:15:17 2024 +0800

    关闭F430NX热风校验功能

commit 7f532dc1019ad4ade1992c835b925f162c80ba1a
Author: zkk <1007518571@qq.com>
Date:   Fri Dec 27 17:14:51 2024 +0800

    删除旧的设置offset宏定义

commit 34b6971b41e0b6a7bce978901404cec1e80b17a4
Author: ruipeng <1041589370@qq.com>
Date:   Fri Dec 27 15:29:04 2024 +0800

    修复自动切头开关逻辑,优化恢复打印弹窗内容

commit 765bc8dc22cad7f75f2d8d76f0add94dc0ab802a
Author: ruipeng <1041589370@qq.com>
Date:   Thu Dec 26 11:41:34 2024 +0800

    优化耗材检测弹窗内容及格式

commit 25bc7c6d9ee89e6cd4e326bb8497faf6a6256fcd
Merge: 588ea4402 9b487abec
Author: zkk <1007518571@qq.com>
Date:   Thu Dec 19 16:23:07 2024 +0800

    Merge commit '9b487abec3449dea3673618c1a8b9e88f16b4c40' into release

commit 9b487abec3449dea3673618c1a8b9e88f16b4c40
Author: ruipeng <1041589370@qq.com>
Date:   Thu Dec 19 16:03:04 2024 +0800

    F430NX更换为闭环Y电机

commit 641f767175387cacf9820affd616dcdb017590b9
Author: ruipeng <1041589370@qq.com>
Date:   Thu Dec 19 10:42:11 2024 +0800

    F430NX复制、镜像模式优化

commit ef148604da4f925305939e74cfb0edc7fbd261d1
Author: ruipeng <1041589370@qq.com>
Date:   Thu Dec 19 10:40:25 2024 +0800

    自动切头功能

commit fa74a82184caa6a914a32578b31aeb21f8299c7c
Merge: 9307b8957 93efb1abd
Author: zkk <1007518571@qq.com>
Date:   Wed Dec 18 15:53:46 2024 +0800

    Merge branch 'develop' of https://server.creatbot.com/Gitea/CreatBot/CreatBotKlipper into develop

commit 9307b89570a63040259b457ef7ff8969b394b527
Author: zkk <1007518571@qq.com>
Date:   Wed Dec 18 15:49:41 2024 +0800

    修复重启时候有概率出现温度数值异常的问题

commit 9925c7864471f1f9f7b1e22f45dc4d1421c1245a
Author: zkk <1007518571@qq.com>
Date:   Tue Dec 17 15:55:28 2024 +0800

    实现二喷头的偏移值校准功能

commit 93efb1abdea67a732b17351b8c31ae5387eaaf91
Author: ruipeng <1041589370@qq.com>
Date:   Fri Dec 13 09:55:41 2024 +0800

    配置网床调平淡出高度

commit 30b77165a7bdae2cd338c283fbab3c8baa37c694
Author: ruipeng <1041589370@qq.com>
Date:   Thu Dec 12 14:03:30 2024 +0800

    调整F430NX探测舵机角度,由90°->120°

commit 588ea4402812b09100b2417b040d7daa2d2fbfaa
Merge: 349f8f7a2 9be203c58
Author: zkk <1007518571@qq.com>
Date:   Thu Dec 12 10:39:56 2024 +0800

    Merge commit '9be203c58f7c88e4f6963a1079d2dcfaa5401dde' into release

commit 9be203c58f7c88e4f6963a1079d2dcfaa5401dde
Author: ruipeng <1041589370@qq.com>
Date:   Wed Dec 11 15:24:05 2024 +0800

    新增D600pro2、D1000的V0版机型

commit 349f8f7a249ac113700eed2b4a234473016d32c0
Merge: e554ddb83 401da556f
Author: zkk <1007518571@qq.com>
Date:   Fri Nov 29 10:21:01 2024 +0800

    Merge branch 'develop' into release

commit 401da556f58df5e917a379dd54565ef5775f7ed2
Merge: 508378825 52ea64cf8
Author: zkk <1007518571@qq.com>
Date:   Fri Nov 29 10:12:48 2024 +0800

    Merge branch 'develop' of https://server.creatbot.com/Gitea/CreatBot/CreatBotKlipper into develop

commit 52ea64cf83535c84c378239b43a7f0a6a362a517
Author: ruipeng <1041589370@qq.com>
Date:   Thu Nov 28 10:55:09 2024 +0800

    修复暂停掉温后,恢复时喷头温度不能恢复的问题

commit 508378825da2881043b88427a6df03230c9f66c0
Author: zkk <1007518571@qq.com>
Date:   Wed Nov 27 14:47:23 2024 +0800

    D1000 z轴最大速度设置成7

commit 41c2cd39275dfecafd85a0cbe504f2f5f1cdeec6
Author: zkk <1007518571@qq.com>
Date:   Mon Nov 25 17:12:23 2024 +0800

    优化热电偶最大报错次数

# Conflicts:
#	config/CreatBot_D1000/base.cfg
#	config/CreatBot_D1000_V0/base.cfg
#	config/CreatBot_D600Pro2/base.cfg   resolved by 03d11a16b3edc1f440251420b1105d20872ebdd7 version
#	config/CreatBot_D600Pro2_V0/base.cfg   resolved by 03d11a16b3edc1f440251420b1105d20872ebdd7 version
#	config/CreatBot_F430NX/base.cfg   resolved by 03d11a16b3edc1f440251420b1105d20872ebdd7 version
2024-12-31 17:32:30 +08:00

121 lines
5.1 KiB
Python

# Virtual SDCard print stat tracking
#
# Copyright (C) 2020 Eric Callahan <arksine.code@gmail.com>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
class PrintStats:
def __init__(self, config):
printer = config.get_printer()
self.gcode_move = printer.load_object(config, 'gcode_move')
self.reactor = printer.get_reactor()
self.reset()
# Register commands
self.gcode = printer.lookup_object('gcode')
self.gcode.register_command(
"SET_PRINT_STATS_INFO", self.cmd_SET_PRINT_STATS_INFO,
desc=self.cmd_SET_PRINT_STATS_INFO_help)
def _update_filament_usage(self, eventtime):
gc_status = self.gcode_move.get_status(eventtime)
cur_epos = gc_status['position'].e
self.filament_used += (cur_epos - self.last_epos) \
/ gc_status['extrude_factor']
self.last_epos = cur_epos
def set_current_file(self, filename):
self.reset()
self.filename = filename
def note_start(self):
curtime = self.reactor.monotonic()
if self.print_start_time is None:
self.print_start_time = curtime
elif self.last_pause_time is not None:
# Update pause time duration
pause_duration = curtime - self.last_pause_time
self.prev_pause_duration += pause_duration
self.last_pause_time = None
# Reset last e-position
gc_status = self.gcode_move.get_status(curtime)
self.last_epos = gc_status['position'].e
self.state = "printing"
self.error_message = ""
def note_pause(self):
if self.last_pause_time is None:
curtime = self.reactor.monotonic()
self.last_pause_time = curtime
# update filament usage
self._update_filament_usage(curtime)
if self.state != "error":
self.state = "paused"
def note_complete(self):
self._note_finish("complete")
def note_error(self, message):
self._note_finish("error", message)
def note_cancel(self):
self._note_finish("cancelled")
def _note_finish(self, state, error_message = ""):
self.error_message = error_message
if self.print_start_time is None:
return
self.state = state
eventtime = self.reactor.monotonic()
self.total_duration = eventtime - self.print_start_time
if self.filament_used < 0.0000001:
# No positive extusion detected during print
self.init_duration = self.total_duration - \
self.prev_pause_duration
self.print_start_time = None
cmd_SET_PRINT_STATS_INFO_help = "Pass slicer info like layer act and " \
"total to klipper"
def cmd_SET_PRINT_STATS_INFO(self, gcmd):
total_layer = gcmd.get_int("TOTAL_LAYER", self.info_total_layer, \
minval=0)
current_layer = gcmd.get_int("CURRENT_LAYER", self.info_current_layer, \
minval=0)
if total_layer == 0:
self.info_total_layer = None
self.info_current_layer = None
elif total_layer != self.info_total_layer:
self.info_total_layer = total_layer
self.info_current_layer = 0
if self.info_total_layer is not None and \
current_layer is not None and \
current_layer != self.info_current_layer:
self.info_current_layer = min(current_layer, self.info_total_layer)
def reset(self):
self.filename = self.error_message = ""
self.state = "standby"
self.prev_pause_duration = self.last_epos = 0.
self.filament_used = self.total_duration = 0.
self.print_start_time = self.last_pause_time = None
self.init_duration = 0.
self.info_total_layer = None
self.info_current_layer = None
def get_status(self, eventtime):
time_paused = self.prev_pause_duration
if self.print_start_time is not None:
if self.last_pause_time is not None:
# Calculate the total time spent paused during the print
time_paused += eventtime - self.last_pause_time
else:
# Accumulate filament if not paused
self._update_filament_usage(eventtime)
self.total_duration = eventtime - self.print_start_time
if self.filament_used < 0.0000001:
# Track duration prior to extrusion
self.init_duration = self.total_duration - time_paused
print_duration = self.total_duration - self.init_duration - time_paused
return {
'filename': self.filename,
'total_duration': self.total_duration,
'print_duration': print_duration,
'filament_used': self.filament_used,
'state': self.state,
'message': self.error_message,
'info': {'total_layer': self.info_total_layer,
'current_layer': self.info_current_layer}
}
def load_config(config):
return PrintStats(config)