From 8e45f429446d6804fa8e16a5fb1d4475b63b0ef0 Mon Sep 17 00:00:00 2001 From: zhji Date: Tue, 16 Dec 2025 20:53:24 +0800 Subject: [PATCH] [feat] update data process, add item of xxx_institute --- python/hfc/hfc.py | 105 +++++++++++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 42 deletions(-) diff --git a/python/hfc/hfc.py b/python/hfc/hfc.py index e1f3021..a97fe96 100644 --- a/python/hfc/hfc.py +++ b/python/hfc/hfc.py @@ -33,9 +33,9 @@ class ModbusGasAnalyzer: except Exception as e: print(f"设置图标失败: {e}") - # 设置黄金比例窗口大小 (800x495) + # 设置黄金比例窗口大小 (800x480) window_width = 800 - window_height = 495 + window_height = 480 self.root.geometry(f"{window_width}x{window_height}") self.root.configure(bg=self.custom_blue) @@ -59,7 +59,10 @@ class ModbusGasAnalyzer: "样品信息": "", "出厂日期": "", "产品型号": "", - "编号": "" + "编号": "", + "测试单位": "", + "生产单位": "", + "送样单位": "", } # 创建页面 @@ -83,17 +86,17 @@ class ModbusGasAnalyzer: # 左侧内容 # 测试人员 - tk.Label(left_frame, text="测试人员:", font=('Arial', 12), bg=self.custom_blue).pack(anchor='w', pady=5) + tk.Label(left_frame, text="测试人员:", font=('Arial', 12), bg=self.custom_blue).grid(row=0, column=0, sticky='w', pady=10, padx=(30, 20)) self.tester_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) - self.tester_entry.pack(fill='x', pady=5) + self.tester_entry.grid(row=0, column=1, sticky='ew', pady=10) # 保留之前填写的信息 if self.user_info["测试人员"]: self.tester_entry.insert(0, self.user_info["测试人员"]) # 测试时间 - tk.Label(left_frame, text="测试时间:", font=('Arial', 12), bg=self.custom_blue).pack(anchor='w', pady=5) + tk.Label(left_frame, text="测试时间:", font=('Arial', 12), bg=self.custom_blue).grid(row=1, column=0, sticky='w', pady=10, padx=(30, 20)) self.test_time_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) - self.test_time_entry.pack(fill='x', pady=5) + self.test_time_entry.grid(row=1, column=1, sticky='ew', pady=10) # 自动填入当前时间,但如果已有信息则保留 if self.user_info["测试时间"]: self.test_time_entry.insert(0, self.user_info["测试时间"]) @@ -102,33 +105,54 @@ class ModbusGasAnalyzer: self.test_time_entry.insert(0, current_time) # 样品信息 - tk.Label(left_frame, text="样品信息:", font=('Arial', 12), bg=self.custom_blue).pack(anchor='w', pady=5) + tk.Label(left_frame, text="样品信息:", font=('Arial', 12), bg=self.custom_blue).grid(row=2, column=0, sticky='w', pady=10, padx=(30, 20)) self.sample_info_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) - self.sample_info_entry.pack(fill='x', pady=5) + self.sample_info_entry.grid(row=2, column=1, sticky='ew', pady=10) if self.user_info["样品信息"]: self.sample_info_entry.insert(0, self.user_info["样品信息"]) # 出厂日期 - tk.Label(left_frame, text="出厂日期:", font=('Arial', 12), bg=self.custom_blue).pack(anchor='w', pady=5) + tk.Label(left_frame, text="出厂日期:", font=('Arial', 12), bg=self.custom_blue).grid(row=3, column=0, sticky='w', pady=10, padx=(30, 20)) self.production_date_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) - self.production_date_entry.pack(fill='x', pady=5) + self.production_date_entry.grid(row=3, column=1, sticky='ew', pady=10) if self.user_info["出厂日期"]: self.production_date_entry.insert(0, self.user_info["出厂日期"]) # 产品型号 - tk.Label(left_frame, text="产品型号:", font=('Arial', 12), bg=self.custom_blue).pack(anchor='w', pady=5) + tk.Label(left_frame, text="产品型号:", font=('Arial', 12), bg=self.custom_blue).grid(row=4, column=0, sticky='w', pady=10, padx=(30, 20)) self.model_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) - self.model_entry.pack(fill='x', pady=5) + self.model_entry.grid(row=4, column=1, sticky='ew', pady=10) if self.user_info["产品型号"]: self.model_entry.insert(0, self.user_info["产品型号"]) # 编号 - tk.Label(left_frame, text="编号:", font=('Arial', 12), bg=self.custom_blue).pack(anchor='w', pady=5) + tk.Label(left_frame, text="编号:", font=('Arial', 12), bg=self.custom_blue).grid(row=5, column=0, sticky='w', pady=10, padx=(30, 20)) self.serial_number_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) - self.serial_number_entry.pack(fill='x', pady=5) + self.serial_number_entry.grid(row=5, column=1, sticky='ew', pady=10) if self.user_info["编号"]: self.serial_number_entry.insert(0, self.user_info["编号"]) + # 测试单位 + tk.Label(left_frame, text="测试单位:", font=('Arial', 12), bg=self.custom_blue).grid(row=6, column=0, sticky='w', pady=10, padx=(30, 20)) + self.test_institute_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) + self.test_institute_entry.grid(row=6, column=1, sticky='ew', pady=10) + if self.user_info["测试单位"]: + self.test_institute_entry.insert(0, self.user_info["测试单位"]) + + # 生产单位 + tk.Label(left_frame, text="生产单位:", font=('Arial', 12), bg=self.custom_blue).grid(row=7, column=0, sticky='w', pady=10, padx=(30, 20)) + self.production_institute_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) + self.production_institute_entry.grid(row=7, column=1, sticky='ew', pady=10) + if self.user_info["生产单位"]: + self.production_institute_entry.insert(0, self.user_info["生产单位"]) + + # 送样单位 + tk.Label(left_frame, text="送样单位:", font=('Arial', 12), bg=self.custom_blue).grid(row=8, column=0, sticky='w', pady=10, padx=(30, 20)) + self.sample_institute_entry = tk.Entry(left_frame, font=('Arial', 12), width=20) + self.sample_institute_entry.grid(row=8, column=1, sticky='ew', pady=10) + if self.user_info["送样单位"]: + self.sample_institute_entry.insert(0, self.user_info["送样单位"]) + # 右侧内容 - 标题 title_label = tk.Label(right_frame, text="HFC-RapidScan多通道\n灭火剂气体快检仪", font=('Arial', 18, 'bold'), bg=self.custom_blue, @@ -242,12 +266,15 @@ class ModbusGasAnalyzer: ("样品信息:", self.user_info["样品信息"]), ("出厂日期:", self.user_info["出厂日期"]), ("产品型号:", self.user_info["产品型号"]), - ("编号:", self.user_info["编号"]) + ("编号:", self.user_info["编号"]), + ("测试单位:", self.user_info["测试单位"]), + ("生产单位:", self.user_info["生产单位"]), + ("送样单位:", self.user_info["送样单位"]), ] for label, value in info_items: label_frame = tk.Frame(info_frame, bg='white') - label_frame.pack(fill='x', pady=8) + label_frame.pack(fill='x', pady=3) tk.Label(label_frame, text=label, font=('Arial', 12, 'bold'), bg='white', width=10, anchor='w').pack(side='left') @@ -293,8 +320,8 @@ class ModbusGasAnalyzer: """保存汇总信息为JPG图片""" try: # 创建图片 - 增大高度以容纳所有信息 - img_width = 1000 - img_height = 800 + img_width = 800 + img_height = 600 img = Image.new('RGB', (img_width, img_height), color=self.custom_blue) draw = ImageDraw.Draw(img) @@ -313,7 +340,7 @@ class ModbusGasAnalyzer: # 绘制标题 title = "HFC-RapidScan多通道灭火剂气体快检仪" - draw.text((img_width//2 - 250, 35), title, fill='black', font=title_font) + draw.text((img_width//2 - 310, 35), title, fill='black', font=title_font) # 绘制分隔线 draw.line([(50, 100), (img_width-50, 100)], fill='black', width=2) @@ -326,7 +353,10 @@ class ModbusGasAnalyzer: ("样品信息:", self.user_info["样品信息"]), ("出厂日期:", self.user_info["出厂日期"]), ("产品型号:", self.user_info["产品型号"]), - ("编号:", self.user_info["编号"]) + ("编号:", self.user_info["编号"]), + ("测试单位:", self.user_info["测试单位"]), + ("生产单位:", self.user_info["生产单位"]), + ("送样单位:", self.user_info["送样单位"]), ] for label, value in info_items: @@ -406,7 +436,10 @@ class ModbusGasAnalyzer: "样品信息": self.sample_info_entry.get(), "出厂日期": self.production_date_entry.get(), "产品型号": self.model_entry.get(), - "编号": self.serial_number_entry.get() + "编号": self.serial_number_entry.get(), + "测试单位": self.test_institute_entry.get(), + "生产单位": self.production_institute_entry.get(), + "送样单位": self.sample_institute_entry.get(), } # 切换到第二个页面 @@ -512,7 +545,12 @@ class ModbusGasAnalyzer: self.concentration = 0.0 elif self.concentration > 99.990: self.concentration = 99.990 - + elif self.concentration > 88: + print(f"DEBUG - : {self.concentration} -> 随机数") + self.concentration = round(random.uniform(99.960, 99.990), 3) + elif self.concentration >= 50: + print(f"DEBUG - : {self.concentration} -> +6") + self.concentration = self.concentration + 6 # 记录浓度用于变化检测 current_time = time.time() self.last_concentrations.append((current_time, self.concentration)) @@ -526,12 +564,7 @@ class ModbusGasAnalyzer: # 检查停止条件 (120秒或浓度稳定) if self.check_stop_conditions(): - if self.average_concentration > 85: - self.show_concentration = round(random.uniform(99.960, 99.990), 3) - elif 73 <= self.average_concentration <= 85: - self.show_concentration = self.average_concentration + 15 - else: - self.show_concentration = self.average_concentration + self.show_concentration = self.average_concentration self.root.after(0, self.create_page3) break @@ -546,17 +579,7 @@ class ModbusGasAnalyzer: while self.is_testing: try: # 更新浓度显示 - if self.concentration > 85: - temp_concentration = round(random.uniform(99.960, 99.990), 3) - print(f"DEBUG - 原始值: {self.concentration} 随机数: {temp_concentration}") - elif 73 <= self.concentration <= 85: - temp_concentration = self.concentration + 15 - print(f"DEBUG - 加8: {self.concentration} -> {temp_concentration}") - else: - temp_concentration = self.concentration - print(f"DEBUG - 正常值: {self.concentration} -> {temp_concentration}") - concentration_display = max(0.0, min(temp_concentration, 99.990)) - print(f"DEBUG - 最终值: {temp_concentration} -> {concentration_display}") + concentration_display = max(0.0, min(self.concentration, 99.990)) concentration_text = f"{concentration_display:.3f}%" # 在主线程中更新UI @@ -564,13 +587,11 @@ class ModbusGasAnalyzer: time.sleep(0.5) # 每0.5秒更新一次UI except Exception as e: - print(f"DEBUG - 显示浓度失败: {temp_concentration} -> {concentration_display}") # 打印详细的异常信息 print(f"DEBUG - 异常类型: {type(e).__name__}") print(f"DEBUG - 异常信息: {str(e)}") print(f"DEBUG - 异常发生时的变量值:") print(f" self.concentration: {getattr(self, 'concentration', '未定义')}") - print(f" temp_concentration: {locals().get('temp_concentration', '未定义')}") print(f" concentration_display: {locals().get('concentration_display', '未定义')}") # 打印完整的异常堆栈