Files
Feeding_control_system/common/constant_config_manager.py

132 lines
4.5 KiB
Python
Raw Normal View History

# 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