将读取文件添加PLC的名字
This commit is contained in:
@ -30,6 +30,8 @@ class CacheManager:
|
||||
self.logger = logging.getLogger("CacheManager")
|
||||
self.init_cache()
|
||||
|
||||
|
||||
|
||||
def init_cache(self):
|
||||
"""初始化缓存结构"""
|
||||
for plc in self.config["plcs"]:
|
||||
@ -643,6 +645,8 @@ class CacheManager:
|
||||
plc_status = self.plc_connection_status.get(plc_name, "unknown")
|
||||
return None, "Area is read-only", plc_status, 0
|
||||
|
||||
cache_file = f"{plc_name}_area_{area_name}.log"
|
||||
|
||||
# 计算实际DB偏移
|
||||
db_offset = area["offset"] + offset
|
||||
|
||||
@ -669,7 +673,7 @@ class CacheManager:
|
||||
|
||||
try:
|
||||
# 使用Snap7Client的read_generic方法
|
||||
result = client.read_generic(area["db_number"], db_offset, data_type, count)
|
||||
result = client.read_generic(area["db_number"], db_offset, data_type, cache_file, count)
|
||||
if result is None:
|
||||
return None, "Read failed", plc_status, 0
|
||||
|
||||
@ -874,3 +878,4 @@ class CacheManager:
|
||||
"last_update": last_update,
|
||||
"last_update_formatted": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(last_update)) if last_update > 0 else "Never"
|
||||
}
|
||||
|
||||
|
||||
@ -89,9 +89,10 @@ class GatewayApp:
|
||||
# 创建并启动线程
|
||||
read_thread = PLCDataReaderThread(
|
||||
plc_client=plc_client,
|
||||
plc_name=plc_config["name"],
|
||||
area_config=area_config,
|
||||
update_interval=0.03,
|
||||
output_file_prefix="plc_area_"
|
||||
output_file_prefix="area_"
|
||||
)
|
||||
read_thread.start()
|
||||
# 存入线程列表,便于后续停止
|
||||
|
||||
@ -15,7 +15,7 @@ from snap7.util import get_real, get_int, get_bool, get_word, get_dint # 导入
|
||||
|
||||
|
||||
class PLCDataReaderThread(threading.Thread):
|
||||
def __init__(self, plc_client, area_config, update_interval=0.03, output_file_prefix="plc_area_"):
|
||||
def __init__(self, plc_client, plc_name, area_config, update_interval=0.03, output_file_prefix="area_"):
|
||||
"""
|
||||
初始化PLC数据读取线程(配置驱动,支持多区域)
|
||||
参数:
|
||||
@ -26,11 +26,12 @@ class PLCDataReaderThread(threading.Thread):
|
||||
output_file_prefix: 输出文件前缀,最终文件名为“前缀+区域名.log”
|
||||
"""
|
||||
# 线程名包含区域名,便于日志区分(如"PLCDataReader_DB100_Read")
|
||||
thread_name = f"PLCDataReader_{area_config['name']}"
|
||||
thread_name = f"{plc_name}_Reader_{area_config['name']}"
|
||||
super().__init__(name=thread_name, daemon=True)
|
||||
|
||||
# 1. 核心依赖(PLC客户端+区域配置)
|
||||
self.plc_client = plc_client
|
||||
self.plc_name = plc_name
|
||||
self.area_config = area_config # 动态区域配置,不再硬编码DB100
|
||||
self.area_name = area_config["name"]
|
||||
self.db_number = area_config["db_number"]
|
||||
@ -40,7 +41,7 @@ class PLCDataReaderThread(threading.Thread):
|
||||
|
||||
# 2. 线程与输出配置
|
||||
self.update_interval = update_interval
|
||||
self.output_file = f"{output_file_prefix}DB{self.db_number}.log" # 每个区域独立文件
|
||||
self.output_file = f"{self.plc_name}_{output_file_prefix}{self.area_name}.log" # 输出文件名}{output_file_prefix}DB{self.db_number}.log" # 每个区域独立文件
|
||||
|
||||
# 3. 数据缓存(新增结构化数据存储)
|
||||
self.running = False
|
||||
|
||||
@ -54,7 +54,7 @@ class Snap7Client:
|
||||
|
||||
self.last_connect_attempt = current_time
|
||||
try:
|
||||
with self.lock:
|
||||
with self.lock: # 进入锁,其他线程需等待
|
||||
self.client.connect(self.ip, self.rack, self.slot)
|
||||
|
||||
# 验证连接是否真正有效
|
||||
@ -94,7 +94,7 @@ class Snap7Client:
|
||||
return None # 返回None而不是零填充数据
|
||||
|
||||
try:
|
||||
with self.lock:
|
||||
with self.lock: # 进入锁,其他线程需等待
|
||||
data = self.client.db_read(db_number, offset, size)
|
||||
# 验证返回数据的有效性
|
||||
if data is None or len(data) != size:
|
||||
@ -456,7 +456,7 @@ class Snap7Client:
|
||||
self.logger.error(f"❌ 读取DB{db_number}缓存文件异常: {e}", exc_info=True)
|
||||
return None
|
||||
|
||||
def read_generic(self, db_number, offset, data_type, count=1):
|
||||
def read_generic(self, db_number, offset, data_type, cache_file, count=1):
|
||||
"""
|
||||
通用读取接口(改进):
|
||||
- DB100:优先从缓存文件读取 → 再内存缓存 → 最后PLC
|
||||
@ -465,7 +465,7 @@ class Snap7Client:
|
||||
# 1、处理DB数据块:优先从缓存文件读取
|
||||
raw_data = None
|
||||
if raw_data is None:
|
||||
cache_file = f"plc_area_DB{db_number}.log"
|
||||
cache_file = cache_file
|
||||
raw_data = self.read_db_from_file_cache(db_number, offset, count, cache_file)
|
||||
if raw_data is not None:
|
||||
print(f"从缓存文件中读取DB{db_number}的数据")
|
||||
|
||||
Reference in New Issue
Block a user