0712提交

This commit is contained in:
zjk
2025-07-12 15:39:28 +08:00
parent 4116397f3e
commit 2ef5fd92ac
32 changed files with 3601 additions and 458 deletions
File diff suppressed because it is too large Load Diff
+200 -149
View File
@@ -79,7 +79,6 @@ class PowerManagerApp:
# self.disSysHostC2 = '192.168.0.140'
# 数据库配置
# self.db = DB('/home/zjk/project/H100/H100PowerManger/test/disSysTest/test.db')
self.db = DB(os.path.join(os.path.dirname(__file__), 'test.db'))
self.db.connect()
@@ -248,8 +247,15 @@ class PowerManagerApp:
options_menu.add_checkbutton(label="转发反馈", variable=self.menu_checkbox_vars['Forward_Feedback'])
options_menu.add_checkbutton(label="透传指令", variable=self.menu_checkbox_vars['Transparent_Command'])
options_menu.add_checkbutton(label="模拟模式", variable=self.menu_checkbox_vars['Simulation_Mode'])
menubar.add_cascade(label="选项", menu=options_menu)
menubar.add_cascade(label="通信选项", menu=options_menu)
dis_options_menu = tk.Menu(menubar, tearoff=0)
# 为每个按钮添加对应的命令,点击时调用相应的弹出窗口方法
dis_options_menu.add_command(label="动力母线操作", command=lambda: self.show_popup_window("动力母线操作"))
dis_options_menu.add_command(label="艏部高压操作", command=lambda: self.show_popup_window("艏部高压操作"))
dis_options_menu.add_command(label="仪表母线操作", command=lambda: self.show_popup_window("仪表母线操作"))
dis_options_menu.add_command(label="艏部低压操作", command=lambda: self.show_popup_window("艏部低压操作"))
menubar.add_cascade(label="配电操作", menu=dis_options_menu)
# 配置菜单栏
self.root.config(menu=menubar)
@@ -269,76 +275,76 @@ class PowerManagerApp:
# 高压母线状态页
high_vol_frame = ttk.Frame(self.notebook)
self.notebook.add(high_vol_frame, text="高压母线")
self.notebook.add(high_vol_frame, text="动力母线状态")
self.setup_high_vol_ui(high_vol_frame)
# 高压A母线状态页
high_a_vol_frame = ttk.Frame(self.notebook)
self.notebook.add(high_a_vol_frame, text="高压A母线")
self.notebook.add(high_a_vol_frame, text="艏部高压状态")
self.setup_high_a_vol_ui(high_a_vol_frame)
# 仪表主母线状态页
low_main_frame = ttk.Frame(self.notebook)
self.notebook.add(low_main_frame, text="仪表主母线")
self.notebook.add(low_main_frame, text="仪表母线状态")
self.setup_low_main_ui(low_main_frame)
# 仪表母线状态页
low_bus_frame = ttk.Frame(self.notebook)
self.notebook.add(low_bus_frame, text="仪表母线")
self.notebook.add(low_bus_frame, text="艏部低压状态")
self.setup_low_bus_ui(low_bus_frame)
# 控制区
control_frame = ttk.LabelFrame(main_frame, text="控制面板", padding="10")
control_frame.pack(fill=tk.BOTH, expand=True, pady=5)
control_frame.grid_rowconfigure(0, weight=1)
control_frame.grid_columnconfigure(0, weight=1)
# # 控制区
# control_frame = ttk.LabelFrame(main_frame, text="控制面板", padding="10")
# control_frame.pack(fill=tk.BOTH, expand=True, pady=5)
# control_frame.grid_rowconfigure(0, weight=1)
# control_frame.grid_columnconfigure(0, weight=1)
# 创建Canvas和Scrollbar
canvas = tk.Canvas(control_frame)
scrollbar = ttk.Scrollbar(control_frame, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
# # 创建Canvas和Scrollbar
# canvas = tk.Canvas(control_frame)
# scrollbar = ttk.Scrollbar(control_frame, orient="vertical", command=canvas.yview)
# canvas.configure(yscrollcommand=scrollbar.set)
# 将Canvas和Scrollbar放入控制区
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
# # 将Canvas和Scrollbar放入控制区
# canvas.pack(side="left", fill="both", expand=True)
# scrollbar.pack(side="right", fill="y")
# 创建内部Frame用于放置Notebook
inner_frame = ttk.Frame(canvas)
self.inner_frame_id = canvas.create_window((0, 0), window=inner_frame, anchor="nw")
# # 创建内部Frame用于放置Notebook
# inner_frame = ttk.Frame(canvas)
# self.inner_frame_id = canvas.create_window((0, 0), window=inner_frame, anchor="nw")
# 配置Canvas滚动区域
def configure_canvas(event):
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.itemconfig(self.inner_frame_id, width=event.width)
# # 配置Canvas滚动区域
# def configure_canvas(event):
# canvas.configure(scrollregion=canvas.bbox("all"))
# canvas.itemconfig(self.inner_frame_id, width=event.width)
inner_frame.bind("<Configure>", configure_canvas)
canvas.bind("<Configure>", configure_canvas)
# inner_frame.bind("<Configure>", configure_canvas)
# canvas.bind("<Configure>", configure_canvas)
# 绑定鼠标滚轮事件
def on_mousewheel(event):
canvas.yview_scroll(int(-1*(event.delta/120)), "units")
# # 绑定鼠标滚轮事件
# def on_mousewheel(event):
# canvas.yview_scroll(int(-1*(event.delta/120)), "units")
canvas.bind_all("<MouseWheel>", on_mousewheel)
# canvas.bind_all("<MouseWheel>", on_mousewheel)
# 状态显示区 - 使用Notebook组织不同母线状态
self.notebook_c = ttk.Notebook(inner_frame)
self.notebook_c.pack(fill="both", expand=True, padx=5, pady=5)
# # 状态显示区 - 使用Notebook组织不同母线状态
# self.notebook_c = ttk.Notebook(inner_frame)
# self.notebook_c.pack(fill="both", expand=True, padx=5, pady=5)
high_vol_control_frame = ttk.Frame(self.notebook_c)
self.notebook_c.add(high_vol_control_frame, text="高压母线")
self.setup_hvb_control(high_vol_control_frame)
# high_vol_control_frame = ttk.Frame(self.notebook_c)
# self.notebook_c.add(high_vol_control_frame, text="高压母线操作")
# self.setup_hvb_control(high_vol_control_frame)
high_a_vol_control_frame = ttk.Frame(self.notebook_c)
self.notebook_c.add(high_a_vol_control_frame, text="高压A母线")
self.setup_hvba_control(high_a_vol_control_frame)
# high_a_vol_control_frame = ttk.Frame(self.notebook_c)
# self.notebook_c.add(high_a_vol_control_frame, text="艏部高压操作")
# self.setup_hvba_control(high_a_vol_control_frame)
low_main_control_frame = ttk.Frame(self.notebook_c)
self.notebook_c.add(low_main_control_frame, text="仪表主母线")
self.setup_lvmb_control(low_main_control_frame)
# low_main_control_frame = ttk.Frame(self.notebook_c)
# self.notebook_c.add(low_main_control_frame, text="仪表母线操作")
# self.setup_lvmb_control(low_main_control_frame)
low_bus_control_frame = ttk.Frame(self.notebook_c)
self.notebook_c.add(low_bus_control_frame, text="仪表母线")
self.setup_lvb_control(low_bus_control_frame)
# low_bus_control_frame = ttk.Frame(self.notebook_c)
# self.notebook_c.add(low_bus_control_frame, text="艏部低压操作")
# self.setup_lvb_control(low_bus_control_frame)
# 日志区
log_frame = ttk.LabelFrame(main_frame, text="系统日志", padding="10")
@@ -705,34 +711,51 @@ class PowerManagerApp:
frame.grid_columnconfigure(2, weight=1)
frame.grid_columnconfigure(3, weight=1)
# 电压显示
ttk.Label(frame, text="动力母线电压(V):").grid(row=0, column=0, sticky=tk.W)
self.high_vol_power_voltage = ttk.Label(frame, text="0.0V")
self.high_vol_power_voltage.grid(row=0, column=1, sticky=tk.W)
ttk.Label(frame, text="A母线电压(V):").grid(row=0, column=2, sticky=tk.W)
self.high_vol_a_voltage = ttk.Label(frame, text="0.0V")
self.high_vol_a_voltage.grid(row=0, column=3, sticky=tk.W)
# 断路器状态
ttk.Label(frame, text="断路器状态:").grid(row=2, column=0, columnspan=4, sticky=tk.W)
# 电压与断路器统一显示区域
status_frame = ttk.LabelFrame(frame, text="电压与断路器状态", padding=8)
status_frame.grid(row=0, column=0, columnspan=6, sticky=tk.W + tk.E, padx=8, pady=8)
# 电压显示(横向布局)
voltage_items = [
("动力母线电压(V):", "power_voltage"),
("艏部高压电压(V):", "a_voltage")
]
for i, (label_text, varname) in enumerate(voltage_items):
sub_frame = ttk.Frame(status_frame)
sub_frame.grid(row=0, column=i, padx=10, pady=4, sticky=tk.W)
ttk.Label(sub_frame, text=label_text, width=20, anchor="w").pack(side=tk.LEFT)
label_var = ttk.Label(sub_frame, text="0.0V", width=10, anchor="e", relief="groove")
label_var.pack(side=tk.RIGHT)
setattr(self, f"high_vol_{varname}", label_var)
# 断路器状态标签
ttk.Label(status_frame, text="断路器状态:", font=("Arial", 10, "bold")).grid(row=1, column=0, columnspan=6, sticky=tk.W, pady=(10, 4))
# 断路器状态显示区域
self.high_vol_breakers = {}
breaker_names = list(self.status_data["high_vol_bus"]["breakers"].keys())
columns_per_row = 4 # 每行 4 个断路器显示块
for i, name in enumerate(breaker_names):
ttk.Label(frame, text=name).grid(row=3+i//3, column=(i%3)*2, sticky=tk.W)
canvas = tk.Canvas(frame, width=20, height=20, bg="white")
canvas.grid(row=3+i//3, column=(i%3)*2+1, sticky=tk.W)
row = 2 + i // columns_per_row
col = i % columns_per_row
# 每个断路器显示块:使用 Frame 带边框
breaker_frame = tk.Frame(status_frame, relief="solid", borderwidth=1, padx=6, pady=2)
breaker_frame.grid(row=row, column=col, padx=6, pady=4, sticky=tk.W)
# 名称标签
ttk.Label(breaker_frame, text=name, width=20, anchor="w").pack(side=tk.LEFT)
# 圆形指示灯
canvas = tk.Canvas(breaker_frame, width=18, height=18, bg="white", highlightthickness=0)
canvas.create_oval(2, 2, 16, 16, fill="white", outline="gray")
canvas.pack(side=tk.RIGHT)
self.high_vol_breakers[name] = canvas
# 绝缘状态
ttk.Label(frame, text="动力母线绝缘:").grid(row=9, column=0, sticky=tk.W)
self.high_vol_power_insulation = ttk.Label(frame, text="正常")
self.high_vol_power_insulation.grid(row=9, column=1, sticky=tk.W)
ttk.Label(frame, text="A母线绝缘:").grid(row=9, column=2, sticky=tk.W)
self.high_vol_a_insulation = ttk.Label(frame, text="正常")
self.high_vol_a_insulation.grid(row=9, column=3, sticky=tk.W)
# 故障状态 - 扩展显示所有故障位
fault_labels1 = ["过温关机", "输出过流", "输出过压", "输出欠压", "输入过压", "输入欠压", "输出短路保护", "内部故障"]
@@ -742,31 +765,56 @@ class PowerManagerApp:
fault_frame = ttk.Frame(frame)
fault_frame.grid(row=10, column=0, columnspan=4, sticky=tk.W, pady=2)
ttk.Label(fault_frame, text="DC/DC故障字1:").grid(row=0, column=0, sticky=tk.W)
# 定义样式
style = ttk.Style()
style.configure("FaultTitle.TLabel", font=("Microsoft YaHei", 10, "bold"), background="#f0f0f0", padding=5)
style.configure("FaultLabel.TLabel", font=("Microsoft YaHei", 9))
# DC/DC故障字1
ttk.Label(fault_frame, text="DC/DC故障字1:", style="FaultTitle.TLabel").grid(row=0, column=0, columnspan=4, sticky=tk.W, pady=5)
for i, label in enumerate(fault_labels1):
ttk.Label(fault_frame, text=label).grid(row=1+i//4, column=(i%4)*2, sticky=tk.W, padx=2)
canvas = tk.Canvas(fault_frame, width=16, height=16, bg="white", highlightthickness=1)
canvas.grid(row=1+i//4, column=(i%4)*2+1, sticky=tk.W, padx=2)
pair_frame = tk.Frame(fault_frame, borderwidth=1, relief="solid", padx=4, pady=2)
pair_frame.grid(row=1+i//4, column=i%4, padx=5, pady=5, sticky=tk.W)
ttk.Label(pair_frame, text=label, style="FaultLabel.TLabel").pack(side=tk.LEFT, padx=(0, 5))
canvas = tk.Canvas(pair_frame, width=20, height=20, bg="white", highlightthickness=0)
canvas.create_oval(2, 2, 18, 18, fill="white", outline="gray")
canvas.pack(side=tk.RIGHT)
self.high_vol_dcdc_fault1_bits.append(canvas)
ttk.Label(fault_frame, text="DC/DC故障字2:").grid(row=3, column=0, sticky=tk.W)
# DC/DC故障字2
ttk.Label(fault_frame, text="DC/DC故障字2:", style="FaultTitle.TLabel").grid(row=3, column=0, columnspan=4, sticky=tk.W, pady=5)
for i, label in enumerate(fault_labels2):
ttk.Label(fault_frame, text=label).grid(row=4+i//4, column=(i%4)*2, sticky=tk.W, padx=2)
canvas = tk.Canvas(fault_frame, width=16, height=16, bg="white", highlightthickness=1)
canvas.grid(row=4+i//4, column=(i%4)*2+1, sticky=tk.W, padx=2)
pair_frame = tk.Frame(fault_frame, borderwidth=1, relief="solid", padx=4, pady=2)
pair_frame.grid(row=4+i//4, column=i%4, padx=5, pady=5, sticky=tk.W)
ttk.Label(pair_frame, text=label, style="FaultLabel.TLabel").pack(side=tk.LEFT, padx=(0, 5))
canvas = tk.Canvas(pair_frame, width=20, height=20, bg="white", highlightthickness=0)
canvas.create_oval(2, 2, 18, 18, fill="white", outline="gray")
canvas.pack(side=tk.RIGHT)
self.high_vol_dcdc_fault2_bits.append(canvas)
# # 绝缘状态 - 详细显示
# ttk.Label(frame, text="动力母线绝缘:").grid(row=16, column=0, sticky=tk.W)
# self.high_vol_power_insulation = ttk.Label(frame, text="正常")
# self.high_vol_power_insulation.grid(row=16, column=1, sticky=tk.W)
# 绝缘状态 - 详细显示
ttk.Label(frame, text="动力母线绝缘:").grid(row=16, column=0, sticky=tk.W)
self.high_vol_power_insulation = ttk.Label(frame, text="正常")
self.high_vol_power_insulation.grid(row=16, column=1, sticky=tk.W)
# ttk.Label(frame, text="A母线绝缘:").grid(row=16, column=2, sticky=tk.W)
# self.high_vol_a_insulation = ttk.Label(frame, text="正常")
# self.high_vol_a_insulation.grid(row=16, column=3, sticky=tk.W)
ttk.Label(frame, text="A母线绝缘:").grid(row=16, column=2, sticky=tk.W)
self.high_vol_a_insulation = ttk.Label(frame, text="正常")
self.high_vol_a_insulation.grid(row=16, column=3, sticky=tk.W)
# 电流值显示分组框
current_group = ttk.LabelFrame(frame, text="电流值显示", padding=10)
current_group.grid(row=16, column=0, columnspan=6, sticky=tk.W+tk.E, padx=10, pady=10)
# 电流值显示
current_labels = [
# 创建统一的显示区域(LabelFrame)
status_group = ttk.LabelFrame(frame, text="高压电系统状态", padding=10)
status_group.grid(row=16, column=0, columnspan=6, sticky=tk.W + tk.E, padx=10, pady=10)
# 所有参数标签及属性名
status_items = [
("动力母线电流(A):", "powerBusCurrent"),
("A汇流排电流(A):", "busbarACurrent"),
("DC/DC5模块电流(A):", "dcDc5ModuleCurrent"),
@@ -780,32 +828,35 @@ class PowerManagerApp:
("FB预留开关电流(A):", "fbReservedSwitchCurrent"),
("备用电流1(A):", "reservedCurrent1"),
("备用电流2(A):", "reservedCurrent2"),
("备用电流3(A):", "reservedCurrent3")
("备用电流3(A):", "reservedCurrent3"),
("冷却水压力(MPa):", "cool_water_pressure"),
("DC/DC温度(℃):", "dcdc_temp"),
("仪表失电信号:", "losspower_insulation"),
("应急失电信号:", "loss_emerpower_insulation"),
("动力母线绝缘:", "power_insulation"),
("艏高压绝缘:", "a_insulation")
]
for i, (label, _) in enumerate(current_labels):
ttk.Label(frame, text=label).grid(row=17+i//2, column=(i%2)*2, sticky=tk.W)
label_var = ttk.Label(frame, text="0.0A")
label_var.grid(row=17+i//2, column=(i%2)*2+1, sticky=tk.W)
setattr(self, f"high_vol_{current_labels[i][1]}", label_var)
# 每行显示几列(可根据实际界面宽度调整)
columns_per_row = 3
# 冷却水压力
ttk.Label(frame, text="冷却水压力(MPa):").grid(row=24, column=0, sticky=tk.W)
self.high_vol_cool_water_pressure = ttk.Label(frame, text="0.00KPa")
self.high_vol_cool_water_pressure.grid(row=24, column=1, sticky=tk.W)
# 布局显示
for i, (label_text, varname) in enumerate(status_items):
row = i // columns_per_row
col = i % columns_per_row
# 冷却水压力
ttk.Label(frame, text="DC/DC温度:").grid(row=24, column=3, sticky=tk.W)
self.high_vol_dcdc_temp = ttk.Label(frame, text="0.00摄氏度")
self.high_vol_dcdc_temp.grid(row=24, column=4, sticky=tk.W)
# 每个参数一个子 Frame(横向排列)
item_frame = ttk.Frame(status_group)
item_frame.grid(row=row, column=col, sticky=tk.W, padx=8, pady=3)
ttk.Label(item_frame, text=label_text, width=26, anchor="w").pack(side=tk.LEFT)
label_var = ttk.Label(item_frame, text="0.0", width=10, anchor="e", relief="groove")
label_var.pack(side=tk.RIGHT)
# 保存变量引用
setattr(self, f"high_vol_{varname}", label_var)
ttk.Label(frame, text="仪表失电信号:").grid(row=25, column=0, sticky=tk.W)
self.high_vol_losspower_insulation = ttk.Label(frame, text="正常")
self.high_vol_losspower_insulation.grid(row=25, column=1, sticky=tk.W)
ttk.Label(frame, text="应急失电信号").grid(row=25, column=2, sticky=tk.W)
self.high_vol_loss_emerpower_insulation = ttk.Label(frame, text="正常")
self.high_vol_loss_emerpower_insulation.grid(row=25, column=3, sticky=tk.W)
def setup_high_a_vol_ui(self, parent):
"""设置高压A母线状态界面"""
@@ -903,19 +954,6 @@ class PowerManagerApp:
bus["current"]["备用电流2"] = msg.reservedCurrent2 / 10.0
bus["current"]["FB备用开关电流"] = msg.fbReservedSwitchCurrent / 10.0
bus["current"]["备用电流3"] = msg.reservedCurrent3 / 10.0
# bus["breakers"]["燃料电池断路器"] = 1 if msg.fuelCellCircuitBreaker == 0x55 else 0
# bus["breakers"]["动力锂电池断路器"] = 1 if msg.powerLithiumBatteryCircuitBreaker == 0x55 else 0
# bus["breakers"]["推进电机断路器"] = 1 if msg.propulsionMotorCircuitBreaker == 0x55 else 0
# bus["breakers"]["锂电池组仪表断路器"] = 1 if msg.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 else 0
# bus["breakers"]["DC/DC模块断路器"] = 1 if msg.dcDc5ModuleCircuitBreaker == 0x55 else 0
# bus["breakers"]["艏高压配电盒断路器"] = 1 if msg.bowHighVoltageDistributionBoxCircuitBreaker == 0x55 else 0
# bus["breakers"]["艉FT设备45断路器"] = 1 if msg.sternFTDevice45CircuitBreaker == 0x55 else 0
# bus["breakers"]["艉舵机开关1断路器"] = 1 if msg.sternRudderSwitch1CircuitBreaker == 0x55 else 0
# bus["breakers"]["艉舵机开关2断路器"] = 1 if msg.sternRudderSwitch2CircuitBreaker == 0x55 else 0
# bus["breakers"]["FB备用断路器"] = 1 if msg.fbReservedCircuitBreaker == 0x55 else 0
# bus["breakers"]["TYZ备用断路器"] = 1 if msg.tyzReservedCircuitBreaker == 0x55 else 0
# bus["breakers"]["备用断路器"] = 1 if msg.reservedCircuitBreaker == 0x55 else 0
bus["breakers"]["燃料电池断路器"] = msg.fuelCellCircuitBreaker
bus["breakers"]["动力锂电池断路器"] = msg.powerLithiumBatteryCircuitBreaker
@@ -977,12 +1015,6 @@ class PowerManagerApp:
bus["current"]["艏舵控制箱电流"] = msg.bowRudderControlBoxCurrent / 10.0
bus["current"]["开盖启动气缸电流"] = msg.openWaterCoverStartCylinderCurrent / 10.0
# bus["breakers"]["艏FT设备123断路器"] = 1 if msg.bowFTDevice123CircuitBreaker == 0x55 else 0
# bus["breakers"]["执行机构断路器"] = 1 if msg.actuatorCircuitBreaker == 0x55 else 0
# bus["breakers"]["桅舵机控制箱断路器"] = 1 if msg.mastSteeringGearControlBoxCircuitBreaker == 0x55 else 0
# bus["breakers"]["XCZ断路器"] = 1 if msg.xczCircuitBreaker == 0x55 else 0
# bus["breakers"]["艏舵控制箱断路器"] = 1 if msg.bowRudderControlBoxCircuitBreaker == 0x55 else 0
# bus["breakers"]["开盖启动气缸断路器"] = 1 if msg.openWaterCoverStartCylinderCircuitBreaker == 0x55 else 0
bus["breakers"]["艏FT设备123断路器"] = msg.bowFTDevice123CircuitBreaker
bus["breakers"]["执行机构断路器"] = msg.actuatorCircuitBreaker
bus["breakers"]["桅舵机控制箱断路器"] = msg.mastSteeringGearControlBoxCircuitBreaker
@@ -1014,13 +1046,6 @@ class PowerManagerApp:
bus["current"]["燃料电池安全系统应急DC48V电流"] = msg.fuelCellSecuritySystemEmergencyDC48VCurrent / 10.0
bus["current"]["PLC控制电源电流"] = msg.plcControlPowerCurrent / 10.0
# bus["breakers"]["锂电池组仪表断路器"] = 1 if msg.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 else 0
# bus["breakers"]["艏低压配电盒断路器"] = 1 if msg.bowLowVoltageDistributionBoxCircuitBreaker == 0x55 else 0
# bus["breakers"]["单元4仪表48V断路器"] = 1 if msg.unit4InstrumentDC48VCircuitBreaker == 0x55 else 0
# bus["breakers"]["DC/C1直流配电板断路器"] = 1 if msg.dcC1DCDistributionPanelCircuitBreaker == 0x55 else 0
# bus["breakers"]["备用断路器1"] = 1 if msg.reservedCircuitBreaker1 == 0x55 else 0
# bus["breakers"]["备用断路器2"] = 1 if msg.reservedCircuitBreaker2 == 0x55 else 0
# bus["breakers"]["应急锂电池组2断路器"] = 1 if msg.emergencyLithiumBatteryGroup2CircuitBreaker == 0x55 else 0
bus["breakers"]["锂电池组仪表断路器"] = msg.lithiumBatteryGroupInstrumentCircuitBreaker
bus["breakers"]["艏低压配电盒断路器"] = msg.bowLowVoltageDistributionBoxCircuitBreaker
bus["breakers"]["单元4仪表48V断路器"] = msg.unit4InstrumentDC48VCircuitBreaker
@@ -1316,10 +1341,10 @@ class PowerManagerApp:
for name, state in status['breakers'].items():
if name in self.high_vol_breakers:
canvas = self.high_vol_breakers[name]
# color = 'green' if state else 'red'
# color = '' if state else 'red'
# print(name, hex(state))
if state == 0x55:
color = "green"
color = "yellow"
elif state == 0xAA:
color = "black"
elif state == 0x5A:
@@ -1334,8 +1359,8 @@ class PowerManagerApp:
dcdc_fault2 = status['faults']['DC/DC故障2']
for i in range(8):
color1 = 'red' if (dcdc_fault1 & (1 << i)) else 'green'
color2 = 'red' if (dcdc_fault2 & (1 << i)) else 'green'
color1 = 'red' if (dcdc_fault1 & (1 << i)) else 'yellow'
color2 = 'red' if (dcdc_fault2 & (1 << i)) else 'yellow'
self.high_vol_dcdc_fault1_bits[i].config(bg=color1)
self.high_vol_dcdc_fault2_bits[i].config(bg=color2)
@@ -1354,8 +1379,8 @@ class PowerManagerApp:
# # 更新温度状态
self.high_vol_dcdc_temp.config(text=f"{status['dcdc_temp']} 摄氏度")
# "仪表电源丢失信号": 0,
# "应急电源丢失信号": 0
# "仪表电源丢失信号": 0,
# "应急电源丢失信号": 0
# 更新失电故障显示
self.high_vol_losspower_insulation.config(text="正常" if status['alarms']['仪表电源丢失信号'] == 0x55 else "故障")
self.high_vol_loss_emerpower_insulation.config(text="正常" if status['alarms']['应急电源丢失信号'] == 0x55 else "故障")
@@ -1381,23 +1406,23 @@ class PowerManagerApp:
for name, canvas in self.high_a_vol_breakers.items():
state = high_a_vol["breakers"].get(name, 0)
if state == 0x55:
color = "green"
color = "yellow"
elif state == 0xAA:
color = "black"
elif state == 0x5A:
color = "red"
else:
color = "white"
# color = "green" if state else "red"
# color = "yellow" if state else "red"
canvas.create_oval(2, 2, 18, 18, fill=color, outline="black")
# 更新仪表主母线状态
low_main = self.status_data["low_main_bus"]
for name, canvas in self.low_main_breakers.items():
state = low_main["breakers"].get(name, 0)
# color = "green" if state else "red"
# color = "yellow" if state else "red"
if state == 0x55:
color = "green"
color = "yellow"
elif state == 0xAA:
color = "black"
elif state == 0x5A:
@@ -1410,9 +1435,9 @@ class PowerManagerApp:
low_bus = self.status_data["low_bus"]
for name, canvas in self.low_bus_breakers.items():
state = low_bus["breakers"].get(name, 0)
# color = "green" if state else "red"
# color = "yellow" if state else "red"
if state == 0x55:
color = "green"
color = "yellow"
elif state == 0xAA:
color = "black"
elif state == 0x5A:
@@ -1451,9 +1476,9 @@ class PowerManagerApp:
for name, canvas in self.low_main_breakers.items():
state = low_main["breakers"].get(name, 0)
# color = "green" if state else "red"
# color = "yellow" if state else "red"
if state == 0x55:
color = "green"
color = "yellow"
elif state == 0xAA:
color = "black"
elif state == 0x5A:
@@ -1489,9 +1514,9 @@ class PowerManagerApp:
for name, canvas in self.low_bus_breakers.items():
state = low_bus["breakers"].get(name, 0)
# color = "green" if state else "red"
# color = "yellow" if state else "red"
if state == 0x55:
color = "green"
color = "yellow"
elif state == 0xAA:
color = "black"
elif state == 0x5A:
@@ -1608,6 +1633,32 @@ class PowerManagerApp:
self.stop_simulation()
self.sock.close()
self.root.destroy()
def show_popup_window(self, title):
"""创建并显示弹出窗口"""
popup = tk.Toplevel(self.root)
popup.title(title)
# 根据不同的标题创建对应的操作面板
if title == "动力母线操作":
frame = ttk.Frame(popup)
frame.pack(fill="both", expand=True, padx=5, pady=5)
self.setup_hvb_control(frame)
elif title == "艏部高压操作":
frame = ttk.Frame(popup)
frame.pack(fill="both", expand=True, padx=5, pady=5)
self.setup_hvba_control(frame)
elif title == "仪表母线操作":
frame = ttk.Frame(popup)
frame.pack(fill="both", expand=True, padx=5, pady=5)
self.setup_lvmb_control(frame)
elif title == "艏部低压操作":
frame = ttk.Frame(popup)
frame.pack(fill="both", expand=True, padx=5, pady=5)
self.setup_lvb_control(frame)
close_button = ttk.Button(popup, text="关闭", command=popup.destroy)
close_button.pack(pady=10)
if __name__ == "__main__":
root = tk.Tk()
app = PowerManagerApp(root)