调试完成了动力母线消息
This commit is contained in:
@@ -28,11 +28,18 @@ class PowerManagerApp:
|
||||
self.root.tk.call('tk', 'scaling', 1.5) # 适配高DPI显示
|
||||
|
||||
# UDP通信配置
|
||||
self.udp_ip = "127.0.0.1"
|
||||
self.udp_port = 5000
|
||||
# self.udp_ip = "127.0.0.1"
|
||||
self.udp_ip = "192.168.0.140"
|
||||
self.udp_port = 7000
|
||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
self.sock.bind((self.udp_ip, self.udp_port))
|
||||
|
||||
self.disSysPortC1 = 6000
|
||||
self.disSysHostC1 = '192.168.1.154'
|
||||
# self.disSysHostC1 = '192.168.0.140'
|
||||
self.disSysPortC2 = 6000
|
||||
self.disSysHostC2 = '192.168.1.158'
|
||||
|
||||
# 数据库配置
|
||||
self.db = DB('/home/zjk/project/H100/H100PowerManger/test/disSysTest/test.db')
|
||||
self.db.connect()
|
||||
@@ -86,7 +93,8 @@ class PowerManagerApp:
|
||||
"FB备用开关电流": 0.0,
|
||||
"备用电流3": 0.0
|
||||
},
|
||||
"cool_water_pressure": 0.0
|
||||
"cool_water_pressure": 0.0,
|
||||
"dcdc_temp":0
|
||||
},
|
||||
"high_a_vol_bus": {
|
||||
"breakers": {
|
||||
@@ -276,9 +284,9 @@ class PowerManagerApp:
|
||||
row = i // 3
|
||||
col = i % 3
|
||||
btn_frame = ttk.Frame(frame)
|
||||
btn_frame.grid(row=row, column=col, padx=5, pady=2, sticky=tk.W)
|
||||
btn_frame.grid(row=row, column=col, padx=10, pady=2, sticky=tk.W)
|
||||
|
||||
ttk.Label(btn_frame, text=name).pack(side=tk.LEFT)
|
||||
ttk.Label(btn_frame, text=name, width=20).pack(side=tk.LEFT)
|
||||
on_btn = ttk.Button(btn_frame, text="合", width=3,
|
||||
command=lambda n=name: self.send_hvb_cmd(n, 0x55))
|
||||
on_btn.pack(side=tk.LEFT, padx=2)
|
||||
@@ -301,14 +309,14 @@ class PowerManagerApp:
|
||||
row = i // 3
|
||||
col = i % 3
|
||||
btn_frame = ttk.Frame(frame)
|
||||
btn_frame.grid(row=row, column=col, padx=5, pady=2, sticky=tk.W)
|
||||
btn_frame.grid(row=row, column=col, padx=10, pady=2, sticky=tk.W)
|
||||
|
||||
ttk.Label(btn_frame, text=name).pack(side=tk.LEFT)
|
||||
ttk.Label(btn_frame, text=name, width=20).pack(side=tk.LEFT)
|
||||
on_btn = ttk.Button(btn_frame, text="合", width=3,
|
||||
command=lambda n=name: self.send_hvba_cmd(n, 1))
|
||||
command=lambda n=name: self.send_hvba_cmd(n, 0x55))
|
||||
on_btn.pack(side=tk.LEFT, padx=2)
|
||||
off_btn = ttk.Button(btn_frame, text="分", width=3,
|
||||
command=lambda n=name: self.send_hvba_cmd(n, 0))
|
||||
command=lambda n=name: self.send_hvba_cmd(n, 0xAA))
|
||||
off_btn.pack(side=tk.LEFT, padx=2)
|
||||
|
||||
def setup_lvmb_control(self, parent):
|
||||
@@ -327,9 +335,9 @@ class PowerManagerApp:
|
||||
row = i // 3
|
||||
col = i % 3
|
||||
btn_frame = ttk.Frame(frame)
|
||||
btn_frame.grid(row=row, column=col, padx=5, pady=2, sticky=tk.W)
|
||||
btn_frame.grid(row=row, column=col, padx=10, pady=2, sticky=tk.W)
|
||||
|
||||
ttk.Label(btn_frame, text=name).pack(side=tk.LEFT)
|
||||
ttk.Label(btn_frame, text=name, width=20).pack(side=tk.LEFT)
|
||||
on_btn = ttk.Button(btn_frame, text="合", width=3,
|
||||
command=lambda n=name: self.send_lvmb_cmd(n, 0x55))
|
||||
on_btn.pack(side=tk.LEFT, padx=2)
|
||||
@@ -353,9 +361,9 @@ class PowerManagerApp:
|
||||
row = i // 3
|
||||
col = i % 3
|
||||
btn_frame = ttk.Frame(frame)
|
||||
btn_frame.grid(row=row, column=col, padx=5, pady=2, sticky=tk.W)
|
||||
btn_frame.grid(row=row, column=col, padx=10, pady=2, sticky=tk.W)
|
||||
|
||||
ttk.Label(btn_frame, text=name).pack(side=tk.LEFT)
|
||||
ttk.Label(btn_frame, text=name, width=20).pack(side=tk.LEFT)
|
||||
on_btn = ttk.Button(btn_frame, text="合", width=3,
|
||||
command=lambda n=name: self.send_lvb_cmd(n, 0x55))
|
||||
on_btn.pack(side=tk.LEFT, padx=2)
|
||||
@@ -365,6 +373,7 @@ class PowerManagerApp:
|
||||
|
||||
def send_hvb_cmd(self, breaker_name, state):
|
||||
"""发送动力母线配电指令"""
|
||||
print(breaker_name,state)
|
||||
cmd = msg_disHVBCmdMsg()
|
||||
if breaker_name == "燃料电池断路器":
|
||||
cmd.fuelCellCircuitBreaker = state
|
||||
@@ -391,13 +400,18 @@ class PowerManagerApp:
|
||||
elif breaker_name == "备用断路器":
|
||||
cmd.reservedCircuitBreaker = state
|
||||
elif breaker_name == "DC/DC模块启动":
|
||||
cmd.dcDcModuleStart = state
|
||||
cmd.dcdc5Module = state
|
||||
elif breaker_name == "冷却系统启动":
|
||||
cmd.coolingSystemStart = state
|
||||
cmd.coolingSystem = state
|
||||
|
||||
self.send_udp_command(cmd.pack())
|
||||
# self.send_udp_command(cmd.pack())
|
||||
self.send_udp_command(cmd.pack(), self.disSysHostC1, self.disSysPortC1)
|
||||
self.db.insertHighVolBusCmd(cmd)
|
||||
self.log_message(f"发送动力母线配电指令: {breaker_name} {'合' if state else '分'}")
|
||||
if state==0x55:
|
||||
buntu=True
|
||||
else:
|
||||
buntu=False
|
||||
self.log_message(f"发送动力母线配电指令: {breaker_name} {'合' if buntu else '分'}")
|
||||
|
||||
def send_hvba_cmd(self, breaker_name, state):
|
||||
"""发送动力汇流排A配电指令"""
|
||||
@@ -415,10 +429,15 @@ class PowerManagerApp:
|
||||
cmd.bowRudderControlBoxCircuitBreaker = state
|
||||
elif breaker_name == "开盖启动气缸断路器":
|
||||
cmd.openWaterCoverStartCylinderCircuitBreaker = state
|
||||
|
||||
self.send_udp_command(cmd.pack())
|
||||
if state==0x55:
|
||||
buntu=True
|
||||
else:
|
||||
buntu=False
|
||||
self.log_message(f"发送动力汇流排A配电指令: {breaker_name} {'合' if buntu else '分'}")
|
||||
# self.send_udp_command(cmd.pack())
|
||||
self.send_udp_command(cmd.pack(), self.disSysHostC1, self.disSysPortC1)
|
||||
self.db.insertHighAVolBusCmd(cmd)
|
||||
self.log_message(f"发送动力汇流排A配电指令: {breaker_name} {'合' if state else '分'}")
|
||||
|
||||
|
||||
def send_lvmb_cmd(self, breaker_name, state):
|
||||
"""发送仪表母线配电指令"""
|
||||
@@ -438,9 +457,14 @@ class PowerManagerApp:
|
||||
elif breaker_name == "应急锂电池组2断路器":
|
||||
cmd.emergencyLithiumBatteryGroup2CircuitBreaker = state
|
||||
|
||||
self.send_udp_command(cmd.pack())
|
||||
# self.send_udp_command(cmd.pack())
|
||||
self.send_udp_command(cmd.pack(), self.disSysHostC2, self.disSysPortC2)
|
||||
self.db.insertLowMainBusCmd(cmd)
|
||||
self.log_message(f"发送仪表母线配电指令: {breaker_name} {'合' if state else '分'}")
|
||||
if state==0x55:
|
||||
buntu=True
|
||||
else:
|
||||
buntu=False
|
||||
self.log_message(f"发送仪表母线配电指令: {breaker_name} {'合' if buntu else '分'}")
|
||||
|
||||
def send_lvb_cmd(self, breaker_name, state):
|
||||
"""发送仪表汇流排配电指令"""
|
||||
@@ -462,9 +486,14 @@ class PowerManagerApp:
|
||||
elif breaker_name == "应急锂电池组1断路器":
|
||||
cmd.emergencyLithiumBatteryGroup1CircuitBreaker = state
|
||||
|
||||
self.send_udp_command(cmd.pack())
|
||||
# self.send_udp_command(cmd.pack())
|
||||
self.send_udp_command(cmd.pack(), self.disSysHostC2, self.disSysPortC2)
|
||||
self.db.insertLowBusCmd(cmd)
|
||||
self.log_message(f"发送仪表汇流排配电指令: {breaker_name} {'合' if state else '分'}")
|
||||
if state==0x55:
|
||||
buntu=True
|
||||
else:
|
||||
buntu=False
|
||||
self.log_message(f"发送仪表汇流排配电指令: {breaker_name} {'合' if buntu else '分'}")
|
||||
|
||||
def udp_receive_loop(self):
|
||||
"""UDP接收消息循环"""
|
||||
@@ -484,31 +513,23 @@ class PowerManagerApp:
|
||||
self.high_vol_dcdc_fault2_bits = []
|
||||
|
||||
frame = ttk.LabelFrame(parent, text="高压母线状态")
|
||||
frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
|
||||
frame.pack(fill=tk.BOTH, expand=True, padx=2, pady=2)
|
||||
|
||||
# 使用网格布局管理器
|
||||
frame.grid_columnconfigure(0, weight=1)
|
||||
frame.grid_columnconfigure(1, weight=1)
|
||||
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.0")
|
||||
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.0")
|
||||
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="动力母线电流(A):").grid(row=1, column=0, sticky=tk.W)
|
||||
self.high_vol_power_current = ttk.Label(frame, text="0.0")
|
||||
self.high_vol_power_current.grid(row=1, column=1, sticky=tk.W)
|
||||
|
||||
ttk.Label(frame, text="A母线电流(A):").grid(row=1, column=2, sticky=tk.W)
|
||||
self.high_vol_a_current = ttk.Label(frame, text="0.0")
|
||||
self.high_vol_a_current.grid(row=1, column=3, sticky=tk.W)
|
||||
|
||||
# 断路器状态
|
||||
ttk.Label(frame, text="断路器状态:").grid(row=2, column=0, columnspan=4, sticky=tk.W)
|
||||
self.high_vol_breakers = {}
|
||||
@@ -533,18 +554,22 @@ class PowerManagerApp:
|
||||
fault_labels1 = ["过温关机", "输出过流", "输出过压", "输出欠压", "输入过压", "输入欠压", "输出短路保护", "内部故障"]
|
||||
fault_labels2 = ["通信故障", "工作状态", "冷却泵1故障", "冷却泵2故障", "冷却水泄漏", "保留", "保留", "保留"]
|
||||
|
||||
ttk.Label(frame, text="DC/DC故障字1:").grid(row=10, column=0, sticky=tk.W)
|
||||
# DC/DC故障显示
|
||||
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)
|
||||
for i, label in enumerate(fault_labels1):
|
||||
ttk.Label(frame, text=label).grid(row=11+i//4, column=(i%4)*2, sticky=tk.W)
|
||||
canvas = tk.Canvas(frame, width=20, height=20, bg="white")
|
||||
canvas.grid(row=11+i//4, column=(i%4)*2+1, sticky=tk.W)
|
||||
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)
|
||||
self.high_vol_dcdc_fault1_bits.append(canvas)
|
||||
|
||||
ttk.Label(frame, text="DC/DC故障字2:").grid(row=13, column=0, sticky=tk.W)
|
||||
ttk.Label(fault_frame, text="DC/DC故障字2:").grid(row=3, column=0, sticky=tk.W)
|
||||
for i, label in enumerate(fault_labels2):
|
||||
ttk.Label(frame, text=label).grid(row=14+i//4, column=(i%4)*2, sticky=tk.W)
|
||||
canvas = tk.Canvas(frame, width=20, height=20, bg="white")
|
||||
canvas.grid(row=14+i//4, column=(i%4)*2+1, sticky=tk.W)
|
||||
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)
|
||||
self.high_vol_dcdc_fault2_bits.append(canvas)
|
||||
|
||||
# 绝缘状态 - 详细显示
|
||||
@@ -573,15 +598,20 @@ class PowerManagerApp:
|
||||
|
||||
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.0")
|
||||
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)
|
||||
|
||||
# 冷却水压力
|
||||
ttk.Label(frame, text="冷却水压力(MPa):").grid(row=23, column=0, sticky=tk.W)
|
||||
self.high_vol_cool_water_pressure = ttk.Label(frame, text="0.00")
|
||||
self.high_vol_cool_water_pressure = ttk.Label(frame, text="0.00KPa")
|
||||
self.high_vol_cool_water_pressure.grid(row=23, column=1, sticky=tk.W)
|
||||
|
||||
# 冷却水压力
|
||||
ttk.Label(frame, text="DC/DC温度:").grid(row=24, column=0, sticky=tk.W)
|
||||
self.high_vol_dcdc_temp = ttk.Label(frame, text="0.00摄氏度")
|
||||
self.high_vol_dcdc_temp.grid(row=24, column=1, sticky=tk.W)
|
||||
|
||||
def setup_high_a_vol_ui(self, parent):
|
||||
"""设置高压A母线状态界面"""
|
||||
frame = ttk.LabelFrame(parent, text="高压A母线状态")
|
||||
@@ -638,7 +668,7 @@ class PowerManagerApp:
|
||||
"""处理接收到的UDP消息"""
|
||||
try:
|
||||
msg_id = int.from_bytes(data[2:4], byteorder='little')
|
||||
|
||||
print('----------------------------',hex(msg_id))
|
||||
if msg_id == 0x0005: # 高压母线状态
|
||||
msg = msg_disHighVolBusFbMsg()
|
||||
if msg.unpack(data):
|
||||
@@ -662,6 +692,19 @@ class PowerManagerApp:
|
||||
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
|
||||
bus["breakers"]["推进电机断路器"] = msg.propulsionMotorCircuitBreaker
|
||||
@@ -669,11 +712,13 @@ class PowerManagerApp:
|
||||
bus["breakers"]["DC/DC模块断路器"] = msg.dcDc5ModuleCircuitBreaker
|
||||
bus["breakers"]["艏高压配电盒断路器"] = msg.bowHighVoltageDistributionBoxCircuitBreaker
|
||||
bus["breakers"]["艉FT设备45断路器"] = msg.sternFTDevice45CircuitBreaker
|
||||
bus["breakers"]["艉舵机开关1断路器"] = msg.sternRudderSwitch1CircuitBreaker
|
||||
bus["breakers"]["艉舵机开关1断路器"] = msg.sternRudderSwitch1CircuitBreaker
|
||||
bus["breakers"]["艉舵机开关2断路器"] = msg.sternRudderSwitch2CircuitBreaker
|
||||
bus["breakers"]["FB备用断路器"] = msg.fbReservedCircuitBreaker
|
||||
bus["breakers"]["TYZ备用断路器"] = msg.tyzReservedCircuitBreaker
|
||||
bus["breakers"]["TYZ备用断路器"] = msg.tyzReservedCircuitBreaker
|
||||
bus["breakers"]["备用断路器"] = msg.reservedCircuitBreaker
|
||||
|
||||
# print('----------------------------',bus["breakers"])
|
||||
|
||||
bus["faults"]["DC/DC故障1"] = msg.dcDcFaultWord1
|
||||
bus["faults"]["DC/DC故障2"] = msg.dcDcFaultWord2
|
||||
@@ -688,14 +733,21 @@ class PowerManagerApp:
|
||||
else:
|
||||
bus["insulation"]["A母线绝缘状态"] = 1
|
||||
|
||||
# bus["insulation"]["A母线绝缘状态"] = msg.aBusInsulationStatus
|
||||
bus["alarms"]["仪表电源丢失信号"] = msg.meterPowerLossSignal
|
||||
bus["alarms"]["应急电源丢失信号"] = msg.emergencyPowerLossSignal
|
||||
if msg.meterPowerLossSignal == 0x55:
|
||||
bus["alarms"]["仪表电源丢失信号"] = 0
|
||||
else:
|
||||
bus["alarms"]["仪表电源丢失信号"] = 1
|
||||
# bus["alarms"]["应急电源丢失信号"] = msg.emergencyPowerLossSignal
|
||||
if msg.emergencyPowerLossSignal == 0x55:
|
||||
bus["alarms"]["应急电源丢失信号"] = 0
|
||||
else:
|
||||
bus["alarms"]["应急电源丢失信号"] = 1
|
||||
bus["cool_water_pressure"] = msg.coolWaterPressure / 10.0
|
||||
bus["dcdc_temp"] = msg.dcdcTemperature-40
|
||||
|
||||
self.status_data["high_vol_bus"] = bus
|
||||
# 更新UI显示
|
||||
print(self.status_data)
|
||||
# print(self.status_data)
|
||||
|
||||
self.log_message("收到高压母线状态更新")
|
||||
elif msg_id == 0x0006: # 高压A母线状态
|
||||
@@ -712,15 +764,22 @@ 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
|
||||
bus["breakers"]["XCZ断路器"] = msg.xczCircuitBreaker
|
||||
bus["breakers"]["艏舵控制箱断路器"] = msg.bowRudderControlBoxCircuitBreaker
|
||||
bus["breakers"]["开盖启动气缸断路器"] = msg.openWaterCoverStartCylinderCircuitBreaker
|
||||
|
||||
|
||||
bus["alarms"]["仪表电源故障"] = msg.instrumentPowerFailureSignal
|
||||
bus["alarms"]["应急电源故障"] = msg.emergencyPowerFailureSignal
|
||||
bus["alarms"]["仪表电源丢失信号"] = msg.instrumentPowerFailureSignal
|
||||
bus["alarms"]["应急电源丢失信号"] = msg.emergencyPowerFailureSignal
|
||||
bus["alarms"]["进水报警"] = msg.waterIngressionAlarm
|
||||
|
||||
self.log_message("收到高压A母线状态更新")
|
||||
@@ -742,6 +801,13 @@ 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
|
||||
@@ -749,10 +815,24 @@ class PowerManagerApp:
|
||||
bus["breakers"]["备用断路器1"] = msg.reservedCircuitBreaker1
|
||||
bus["breakers"]["备用断路器2"] = msg.reservedCircuitBreaker2
|
||||
bus["breakers"]["应急锂电池组2断路器"] = msg.emergencyLithiumBatteryGroup2CircuitBreaker
|
||||
|
||||
bus["alarms"]["仪表电源故障"] = msg.instrumentPowerFailureSignal
|
||||
bus["alarms"]["应急电源故障"] = msg.emergencyPowerFailureSignal
|
||||
bus["insulation"] = msg.instrumentBusbarInsulationLow
|
||||
|
||||
# 0x55 正常
|
||||
# 0xaa 故障
|
||||
if msg.instrumentPowerFailureSignal == 0x55:
|
||||
bus["alarms"]["仪表电源故障"] = 0
|
||||
else:
|
||||
bus["alarms"]["仪表电源故障"] = 1
|
||||
# bus["alarms"]["仪表电源故障"] = msg.instrumentPowerFailureSignal
|
||||
if msg.emergencyPowerFailureSignal == 0x55:
|
||||
bus["alarms"]["应急电源故障"] = 0
|
||||
else:
|
||||
bus["alarms"]["应急电源故障"] = 1
|
||||
# bus["alarms"]["应急电源故障"] = msg.emergencyPowerFailureSignal
|
||||
# bus["insulation"] = msg.instrumentBusbarInsulationLow
|
||||
if msg.instrumentBusbarInsulationLow == 0x55:
|
||||
bus["insulation"] = 0
|
||||
else:
|
||||
bus["insulation"] = 1
|
||||
|
||||
self.log_message("收到仪表主母线状态更新")
|
||||
|
||||
@@ -771,17 +851,34 @@ class PowerManagerApp:
|
||||
bus["current"]["艏PZ设备电流"] = msg.bowPZDeviceCurrent / 10.0
|
||||
bus["current"]["应急锂电池组1电流"] = msg.emergencyLithiumBatteryGroup1Current / 10.0
|
||||
|
||||
# bus["breakers"]["单元1断路器"] = 1 if msg.unit1CircuitBreaker == 0x55 else 0
|
||||
# bus["breakers"]["单元2断路器"] = 1 if msg.unit2CircuitBreaker == 0x55 else 0
|
||||
# bus["breakers"]["单元3断路器"] = 1 if msg.unit3CircuitBreaker == 0x55 else 0
|
||||
# bus["breakers"]["单元5断路器"] = 1 if msg.unit5CircuitBreaker == 0x55 else 0
|
||||
# bus["breakers"]["艏PZ设备断路器"] = 1 if msg.bowPZDeviceCircuitBreaker == 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"]["应急锂电池组1断路器"] = 1 if msg.emergencyLithiumBatteryGroup1CircuitBreaker == 0x55 else 0
|
||||
|
||||
bus["breakers"]["单元1断路器"] = msg.unit1CircuitBreaker
|
||||
bus["breakers"]["单元2断路器"] = msg.unit2CircuitBreaker
|
||||
bus["breakers"]["单元3断路器"] = msg.unit3CircuitBreaker
|
||||
bus["breakers"]["单元5断路器"] = msg.unit5CircuitBreaker
|
||||
bus["breakers"]["艏PZ设备断路器"] = msg.bowPZDeviceCircuitBreaker
|
||||
bus["breakers"]["艏PZ设备断路器"] = msg.bowPZDeviceCircuitBreake
|
||||
bus["breakers"]["备用断路器1"] = msg.reservedCircuitBreaker1
|
||||
bus["breakers"]["备用断路器2"] = msg.reservedCircuitBreaker2
|
||||
bus["breakers"]["应急锂电池组1断路器"] = msg.emergencyLithiumBatteryGroup1CircuitBreaker
|
||||
|
||||
bus["alarms"]["电源故障信号"] = msg.powerFailureSignal
|
||||
bus["alarms"]["进水报警"] = msg.waterIngressionAlarm
|
||||
# bus["alarms"]["电源故障信号"] = msg.powerFailureSignal
|
||||
if msg.powerFailureSignal == 0x55:
|
||||
bus["alarms"]["电源故障信号"] = 0
|
||||
else:
|
||||
bus["alarms"]["电源故障信号"] = 1
|
||||
# bus["alarms"]["进水报警"] = msg.waterIngressionAlarm
|
||||
if msg.waterIngressionAlarm == 0x55:
|
||||
bus["alarms"]["进水报警"] = 0
|
||||
else:
|
||||
bus["alarms"]["进水报警"] = 1
|
||||
self.log_message("收到仪表母线状态更新")
|
||||
|
||||
else:
|
||||
@@ -794,7 +891,13 @@ class PowerManagerApp:
|
||||
def setup_low_main_ui(self, parent):
|
||||
"""设置仪表主母线状态界面"""
|
||||
frame = ttk.LabelFrame(parent, text="仪表主母线状态")
|
||||
frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
|
||||
frame.pack(fill=tk.BOTH, expand=True, padx=2, pady=2)
|
||||
|
||||
# 显式配置4列网格布局
|
||||
frame.grid_columnconfigure(0, weight=1)
|
||||
frame.grid_columnconfigure(1, weight=1)
|
||||
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)
|
||||
@@ -855,7 +958,13 @@ class PowerManagerApp:
|
||||
def setup_low_bus_ui(self, parent):
|
||||
"""设置仪表母线状态界面"""
|
||||
frame = ttk.LabelFrame(parent, text="仪表母线状态")
|
||||
frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
|
||||
frame.pack(fill=tk.BOTH, expand=True, padx=2, pady=2)
|
||||
|
||||
# 显式配置4列网格布局
|
||||
frame.grid_columnconfigure(0, weight=1)
|
||||
frame.grid_columnconfigure(1, weight=1)
|
||||
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)
|
||||
@@ -897,9 +1006,6 @@ class PowerManagerApp:
|
||||
self.low_bus_water_alarm = ttk.Label(frame, text="无")
|
||||
self.low_bus_water_alarm.grid(row=8, column=3, sticky=tk.W)
|
||||
|
||||
# 报警状态
|
||||
ttk.Label(frame, text="电源故障信号:").grid(row=8, column=0, sticky=tk.W)
|
||||
self.low_bus_power_fault = ttk.Label(frame, text="无")
|
||||
self.low_bus_power_fault.grid(row=8, column=1, sticky=tk.W)
|
||||
|
||||
ttk.Label(frame, text="进水报警:").grid(row=8, column=2, sticky=tk.W)
|
||||
@@ -908,22 +1014,24 @@ class PowerManagerApp:
|
||||
|
||||
return frame
|
||||
|
||||
def send_udp_command(self, data):
|
||||
def send_udp_command(self, data, ip, port):
|
||||
"""发送UDP命令"""
|
||||
try:
|
||||
self.sock.sendto(data, (self.udp_ip, self.udp_port + 1))
|
||||
# self.sock.sendto(data, (self.udp_ip, self.udp_port + 1))
|
||||
self.sock.sendto(data, (ip, port))
|
||||
print(f"发送命令到 {ip}:{port} ", data)
|
||||
except Exception as e:
|
||||
self.log_message(f"发送命令失败: {str(e)}")
|
||||
|
||||
def update_high_vol_ui(self, status):
|
||||
"""更新高压母线UI显示"""
|
||||
# 更新电压显示
|
||||
self.high_vol_power_voltage.config(text=f"{status['voltage']['动力母线电压']:.1f}")
|
||||
self.high_vol_a_voltage.config(text=f"{status['voltage']['A母线电压']:.1f}")
|
||||
self.high_vol_power_voltage.config(text=f"{status['voltage']['动力母线电压']:.1f} V")
|
||||
self.high_vol_a_voltage.config(text=f"{status['voltage']['A母线电压']:.1f} V")
|
||||
|
||||
# 更新电流显示
|
||||
self.high_vol_power_current.config(text=f"{status['current']['动力母线电流']:.1f}")
|
||||
self.high_vol_a_current.config(text=f"{status['current']['A母线电流']:.1f}")
|
||||
# # 更新电流显示
|
||||
# self.high_vol_power_current.config(text=f"{status['current']['动力母线电流']:.1f}")
|
||||
# self.high_vol_a_current.config(text=f"{status['current']['A母线电流']:.1f}")
|
||||
|
||||
# 更新所有电流值
|
||||
current_vars = [
|
||||
@@ -942,13 +1050,22 @@ class PowerManagerApp:
|
||||
|
||||
for var_name, data_key in current_vars:
|
||||
label = getattr(self, f"high_vol_{var_name}")
|
||||
label.config(text=f"{status['current'][data_key]:.1f}")
|
||||
label.config(text=f"{status['current'][data_key]:.1f} A")
|
||||
|
||||
# 更新断路器状态
|
||||
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 = 'green' if state else 'red'
|
||||
print(name, hex(state))
|
||||
if state == 0x55:
|
||||
color = "green"
|
||||
elif state == 0xAA:
|
||||
color = "black"
|
||||
elif state == 0x5A:
|
||||
color = "red"
|
||||
else:
|
||||
color = "white"
|
||||
canvas.delete("all")
|
||||
canvas.create_oval(2, 2, 18, 18, fill=color, outline="black")
|
||||
|
||||
@@ -973,7 +1090,10 @@ class PowerManagerApp:
|
||||
self.high_vol_a_insulation.config(text=a_text)
|
||||
|
||||
# 更新冷却水压力
|
||||
self.high_vol_cool_water_pressure.config(text=f"{status['cool_water_pressure']:.2f}")
|
||||
self.high_vol_cool_water_pressure.config(text=f"{status['cool_water_pressure']:.1f} Kpa")
|
||||
|
||||
# # 更新温度状态
|
||||
self.high_vol_dcdc_temp.config(text=f"{status['dcdc_temp']} 摄氏度")
|
||||
|
||||
def update_ui(self):
|
||||
"""更新界面状态"""
|
||||
@@ -989,31 +1109,55 @@ class PowerManagerApp:
|
||||
|
||||
for name, canvas in self.high_a_vol_breakers.items():
|
||||
state = high_a_vol["breakers"].get(name, 0)
|
||||
color = "green" if state else "red"
|
||||
if state == 0x55:
|
||||
color = "green"
|
||||
elif state == 0xAA:
|
||||
color = "black"
|
||||
elif state == 0x5A:
|
||||
color = "red"
|
||||
else:
|
||||
color = "white"
|
||||
# color = "green" 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 = "green" if state else "red"
|
||||
if state == 0x55:
|
||||
color = "green"
|
||||
elif state == 0xAA:
|
||||
color = "black"
|
||||
elif state == 0x5A:
|
||||
color = "red"
|
||||
else:
|
||||
color = "white"
|
||||
canvas.create_oval(2, 2, 18, 18, fill=color, outline="black")
|
||||
|
||||
# 更新仪表母线状态
|
||||
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 = "green" if state else "red"
|
||||
if state == 0x55:
|
||||
color = "green"
|
||||
elif state == 0xAA:
|
||||
color = "black"
|
||||
elif state == 0x5A:
|
||||
color = "red"
|
||||
else:
|
||||
color = "white"
|
||||
canvas.create_oval(2, 2, 18, 18, fill=color, outline="black")
|
||||
|
||||
self.high_a_vol_instrument_power_fault.config(
|
||||
text="无" if not high_a_vol["alarms"]["仪表电源故障"] else "有"
|
||||
text="正常" if not high_a_vol["alarms"]["仪表电源故障"] else "故障"
|
||||
)
|
||||
self.high_a_vol_emergency_power_fault.config(
|
||||
text="无" if not high_a_vol["alarms"]["应急电源故障"] else "有"
|
||||
text="正常" if not high_a_vol["alarms"]["应急电源故障"] else "故障"
|
||||
)
|
||||
self.high_a_vol_water_alarm.config(
|
||||
text="无" if not high_a_vol["alarms"]["进水报警"] else "有"
|
||||
text="正常" if not high_a_vol["alarms"]["进水报警"] else "故障"
|
||||
)
|
||||
|
||||
# 更新仪表主母线状态
|
||||
@@ -1026,17 +1170,25 @@ 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 = "green" if state else "red"
|
||||
if state == 0x55:
|
||||
color = "green"
|
||||
elif state == 0xAA:
|
||||
color = "black"
|
||||
elif state == 0x5A:
|
||||
color = "red"
|
||||
else:
|
||||
color = "white"
|
||||
canvas.create_oval(2, 2, 18, 18, fill=color, outline="black")
|
||||
|
||||
self.low_main_instrument_fault.config(
|
||||
text="无" if not low_main["alarms"]["仪表电源故障"] else "有"
|
||||
text="正常" if not low_main["alarms"]["仪表电源故障"] else "故障"
|
||||
)
|
||||
self.low_main_emergency_fault.config(
|
||||
text="无" if not low_main["alarms"]["应急电源故障"] else "有"
|
||||
text="正常" if not low_main["alarms"]["应急电源故障"] else "故障"
|
||||
)
|
||||
self.low_main_insulation.config(
|
||||
text="正常" if not low_main["insulation"] else "异常"
|
||||
text="正常" if not low_main["insulation"] else "故障"
|
||||
)
|
||||
|
||||
# 更新仪表母线状态
|
||||
@@ -1048,16 +1200,24 @@ 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 = "green" if state else "red"
|
||||
if state == 0x55:
|
||||
color = "green"
|
||||
elif state == 0xAA:
|
||||
color = "black"
|
||||
elif state == 0x5A:
|
||||
color = "red"
|
||||
else:
|
||||
color = "white"
|
||||
canvas.create_oval(2, 2, 18, 18, fill=color, outline="black")
|
||||
|
||||
self.low_bus_power_fault.config(
|
||||
text="无" if not low_bus["alarms"]["电源故障信号"] else "有"
|
||||
text="正常" if not low_bus["alarms"]["电源故障信号"] else "故障"
|
||||
)
|
||||
self.low_bus_water_alarm.config(
|
||||
text="无" if not low_bus["alarms"]["进水报警"] else "有"
|
||||
text="正常" if not low_bus["alarms"]["进水报警"] else "故障"
|
||||
)
|
||||
print('update_ui')
|
||||
# print('update_ui')
|
||||
# 每500ms更新一次
|
||||
self.root.after(1000, self.update_ui)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user