Files
Feeding_control_system/common/constant_config_manager.py

132 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# common/config_manager.py
import os
import configparser
from PySide6.QtCore import QTimer, QMutex, Signal, QObject
class ConfigManager(QObject):
_instance = None
_mutex = QMutex()
_initialized = False # 是否已完成初始化
# 方量调节控制器的参数变化 (新的最小值、新的最大值、新的初始值)
adjuster_params_changed = Signal(float, float, float)
# 消息清理间隔变化(新时间间隔 单位:秒)
msg_clean_interval_changed = Signal(int)
def __new__(cls):
cls._mutex.lock()
try:
if not cls._instance:
cls._instance = super().__new__(cls)
finally:
cls._mutex.unlock()
return cls._instance
def __init__(self):
# __init__ 只执行一次
if self._initialized:
return
super().__init__()
# 执行初始化逻辑
self._init_config()
self._start_refresh_timer()
self._initialized = True
def _init_config(self):
"""初始化配置(加载默认值或配置文件)"""
self.config_path = "config/constant_config.ini"
# 默认配置
# 系统状态消息 和 预警消息相关的默认配置
self.MSG_KEEP_DAYS = 14 # 消息保留天数 单位: 天
self.CLEAN_INTERVAL = 7 * 24 * 3600 # 清理周期(秒) 单位: 秒
# 方量调节控件ValueAdjuster默认值
self.ADJUSTER_MIN = 0.0 # 最小值
self.ADJUSTER_MAX = 99.0 # 最大值
self.ADJUSTER_INITIAL = 2.5 # 初始值
# 首次加载配置文件
self._load_config()
def _load_config(self):
"""从配置文件加载参数(覆盖默认值)"""
if os.path.exists(self.config_path):
config = configparser.ConfigParser()
config.read(self.config_path, encoding='utf-8')
# 消息相关的参数
# 读取消息保留天数
self.MSG_KEEP_DAYS = config.getint(
"message_clean",
"keep_days",
fallback=self.MSG_KEEP_DAYS
)
# 读取清理周期(天→秒)
self.CLEAN_INTERVAL = config.getint(
"message_clean",
"interval_days",
fallback=self.CLEAN_INTERVAL // (24 * 3600)
) * 24 * 3600
self.msg_clean_interval_changed.emit(self.CLEAN_INTERVAL)
# 方量调节控件ValueAdjuster参数
# 读取最小值fallback为当前默认值
min_value = config.getfloat(
"adjuster_value",
"min",
fallback=self.ADJUSTER_MIN
)
# 读取最大值
max_value = config.getfloat(
"adjuster_value",
"max",
fallback=self.ADJUSTER_MAX
)
# 读取初始值
initial_value = config.getfloat(
"adjuster_value",
"initial",
fallback=self.ADJUSTER_INITIAL
)
# 验证配置的值的有效性
if min_value <= max_value and min_value <= initial_value <= max_value:
self.ADJUSTER_MIN = min_value
self.ADJUSTER_MAX = max_value
self.ADJUSTER_INITIAL = initial_value
self.adjuster_params_changed.emit(self.ADJUSTER_MIN, self.ADJUSTER_MAX, self.ADJUSTER_INITIAL)
def _start_refresh_timer(self):
"""启动定时刷新, 每5分钟刷新一次配置"""
self.refresh_timer = QTimer()
self.refresh_timer.timeout.connect(self._load_config) # 定时重新加载
self.refresh_timer.start(5 * 60 * 1000) # 5分钟毫秒
# 测试 30秒刷新一次
# self.refresh_timer.start(30 * 1000)
def manual_refresh(self):
"""手动刷新配置: 供立即生效使用"""
# print("手动刷新配置...")
self._load_config()
# 获取消息保存天数
def get_msg_keep_days(self):
return self.MSG_KEEP_DAYS
# 获取消息清理间隔
def get_clean_interval(self):
return self.CLEAN_INTERVAL
# 获取方量调节器的最小值
def get_adjuster_min(self):
return self.ADJUSTER_MIN
# 获取方量调节器的最大值
def get_adjuster_max(self):
return self.ADJUSTER_MAX
# 获取方量调节器的初始值
def get_adjuster_initial(self):
return self.ADJUSTER_INITIAL