Pārlūkot izejas kodu

1:测试bug 逻辑,涉及到控制字 26

wmy 4 dienas atpakaļ
vecāks
revīzija
854ce2e373
2 mainītis faili ar 30 papildinājumiem un 15 dzēšanām
  1. 9 7
      device_states.json
  2. 21 8
      loop_main.py

+ 9 - 7
device_states.json

@@ -1,24 +1,26 @@
 {
     "_comment": "此文件用于存储每个设备的运行时状态。时间格式为 YYYY-MM-DD HH:MM:SS",
     "UF1": {
-        "model_prev_L_s": 4340.0,
-        "model_prev_t_bw_s": 84.0,
-        "last_cycle_end_time": "2025-11-06 11:47:26",
+        "model_prev_L_s": 4400.0,
+        "model_prev_t_bw_s": 82.0,
+        "last_cycle_end_time": "2025-11-11 18:52:17",
         "recent_tmp_values": [
             0.0248,
             0.0242,
-            0.0235
+            0.0235,
+            0.0222
         ]
     },
     "UF2": {
         "model_prev_L_s": 4340.0,
-        "model_prev_t_bw_s": 80.0,
-        "last_cycle_end_time": "2025-11-09 02:33:18",
+        "model_prev_t_bw_s": 78.0,
+        "last_cycle_end_time": "2025-11-11 17:46:22",
         "recent_tmp_values": [
             0.0215,
             0.0302,
             0.0225,
-            0.0233
+            0.0233,
+            0.0202
         ]
     },
     "UF3": {

+ 21 - 8
loop_main.py

@@ -272,27 +272,40 @@ def get_tmp_extremes(item_name, start_time, end_time, word_control):
         # 从第二次调用结果中提取'UF1控制字'为26的数据点,并进行时间匹配
         if data2.get("code") == 200 and data2.get("data"):
             control_26_values = []
+            control_data_count = 0
+            matched_count = 0
             for item in data2["data"]:
-                if item.get("name") == word_control and item.get("val") == '26':
-                    time = item.get("htime_at")
-                    # 如果在第一次数据中找到了对应的跨膜压差值
-                    if time in item_values:
-                        control_26_values.append(item_values[time])
+                if item.get("name") == word_control:
+                    control_data_count += 1
+                    val = item.get("val")
+                    # 兼容字符串和数字类型,支持22-26范围
+                    try:
+                        val_int = int(float(val)) if val is not None else None
+                        if val_int is not None and 22 <= val_int <= 26:
+                            time = item.get("htime_at")
+                            # 如果在第一次数据中找到了对应的跨膜压差值
+                            if time in item_values:
+                                control_26_values.append(item_values[time])
+                                matched_count += 1
+                    except (ValueError, TypeError):
+                        pass
+
+            logger.info(f"第二次API查询成功,控制字数据点数量:{control_data_count},22-26范围内匹配数量:{matched_count}")
 
             if control_26_values:
-                logger.info(f"找到控制字为26的数据点,合并跨膜压差数据")
+                logger.info(f"找到控制字为22-26范围的数据点,合并跨膜压差数据")
                 max_val = max(control_26_values)
                 min_val = min(control_26_values)
                 # 增加最小跨膜压差的下限值
                 if min_val < 0.01:
                     min_val = 0.01
-                logger.info(f"控制字为26时的最大跨膜压差值={max_val},最小跨膜压差值={min_val}")
+                logger.info(f"控制字为22-26时的最大跨膜压差值={max_val},最小跨膜压差值={min_val}")
 
         if max_val is not None and min_val is not None:
             logger.info(f"API查询成功 最大跨膜压差值={max_val} 最小跨膜压差值={min_val}")
             return max_val, min_val
         else:
-            logger.warning("未找到有效的控制字为26时的跨膜压差数据")
+            logger.warning(f"未找到有效的控制字为22-26时的跨膜压差数据 (跨膜压差数据点:{len(item_values)}, 控制字数据点:{control_data_count if 'control_data_count' in locals() else 0}, 匹配数量:{matched_count if 'matched_count' in locals() else 0})")
             return None, None
             
     except requests.exceptions.RequestException as e: