Files
H100PowerManger/src/pPowerManger/httpserver/data.h
T

1631 lines
75 KiB
C++

#ifndef HTTP_SERVER_DATA_H
#define HTTP_SERVER_DATA_H
#include <string>
const std::string DATA_HTML = R"(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Power Manager</title>
<link rel="stylesheet" href="/static/style.css">
<style>
.data-item {
margin: 10px 0;
padding: 8px;
background: #f5f5f5;
border-radius: 4px;
}
.data-label {
font-weight: bold;
margin-right: 10px;
}
.collapsible {
background-color: #eee;
color: #444;
cursor: pointer;
padding: 10px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
margin-top: 10px;
}
.active, .collapsible:hover {
background-color: #ccc;
}
.content {
padding: 0 18px;
display: none;
overflow: hidden;
background-color: #f9f9f9;
}
</style>
</head>
<body>
<h1>Power Manager System</h1>
<button class="collapsible">燃料电池系统状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">FC模式:</span>
<span class="data-value" id="fc-mode">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC状态:</span>
<span class="data-value" id="fc-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">故障等级:</span>
<span class="data-value" id="fc-fault-level">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">输出功率限制:</span>
<span class="data-value" id="output-power-limit">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">累计发电时间:</span>
<span class="data-value" id="total-generation-time">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">累计发电功率:</span>
<span class="data-value" id="total-generation-power">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级1:</span>
<span class="data-value" id="fc-fault-level-1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级2:</span>
<span class="data-value" id="fc-fault-level-2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级3:</span>
<span class="data-value" id="fc-fault-level-3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级4:</span>
<span class="data-value" id="fc-fault-level-4">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">燃料和容量</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">氢容量:</span>
<span class="data-value" id="hydrogen-capacity">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">液氧容量:</span>
<span class="data-value" id="liquid-oxygen-capacity">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">燃料电池温度压力参数</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">钯膜温度:</span>
<span class="data-value" id="palladium-temp">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">主水路压力:</span>
<span class="data-value" id="main-pipe-pressure">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">辅水路压力:</span>
<span class="data-value" id="aux-pipe-pressure">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">锂电池舱室环境</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">仪表舱室压力:</span>
<span class="data-value" id="cabin-pressure1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力舱室压力:</span>
<span class="data-value" id="cabin-pressure2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表舱室温度:</span>
<span class="data-value" id="cabin-temp1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力舱室温度:</span>
<span class="data-value" id="cabin-temp2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表舱室湿度:</span>
<span class="data-value" id="cabin-humidity1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力舱室湿度:</span>
<span class="data-value" id="cabin-humidity2">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">燃料电池气体浓度</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">H2浓度1:</span>
<span class="data-value" id="h2-concentration1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">H2浓度2:</span>
<span class="data-value" id="h2-concentration2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">H2浓度3:</span>
<span class="data-value" id="h2-concentration3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">O2浓度1:</span>
<span class="data-value" id="o2-concentration1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">O2浓度2:</span>
<span class="data-value" id="o2-concentration2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">甲醇浓度1:</span>
<span class="data-value" id="ch3oh-concentration1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">甲醇浓度2:</span>
<span class="data-value" id="ch3oh-concentration2">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">电池系统</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">仪表电池SOC:</span>
<span class="data-value" id="ins-soc">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池SOC:</span>
<span class="data-value" id="dyn-soc">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池电压:</span>
<span class="data-value" id="ins-voltage-link">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池电压:</span>
<span class="data-value" id="dyn-voltage-link">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池电流:</span>
<span class="data-value" id="ins-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池电流:</span>
<span class="data-value" id="dyn-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池能量:</span>
<span class="data-value" id="ins-total-energy">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池能量:</span>
<span class="data-value" id="dyn-total-energy">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池输入功率:</span>
<span class="data-value" id="ins-power-input">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池输入功率:</span>
<span class="data-value" id="dyn-power-input">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">继电器状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">仪表继电器1:</span>
<span class="data-value" id="ins-relay-status1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表继电器2:</span>
<span class="data-value" id="ins-relay-status2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力继电器1:</span>
<span class="data-value" id="dyn-relay-status1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力继电器2:</span>
<span class="data-value" id="dyn-relay-status2">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">锂电池报警标志</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">动力报警标志1:</span>
<span class="data-value" id="dyn-alarm-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志2:</span>
<span class="data-value" id="dyn-alarm-flag2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志3:</span>
<span class="data-value" id="dyn-alarm-flag3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志4:</span>
<span class="data-value" id="dyn-alarm-flag4">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志5:</span>
<span class="data-value" id="dyn-alarm-flag5">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志6:</span>
<span class="data-value" id="dyn-alarm-flag6">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志1:</span>
<span class="data-value" id="ins-alarm-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志2:</span>
<span class="data-value" id="ins-alarm-flag2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志3:</span>
<span class="data-value" id="ins-alarm-flag3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志4:</span>
<span class="data-value" id="ins-alarm-flag4">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志5:</span>
<span class="data-value" id="ins-alarm-flag5">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志6:</span>
<span class="data-value" id="ins-alarm-flag6">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">设备在线状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">设备在线标志1:</span>
<span class="data-value" id="device-online-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">设备在线标志2:</span>
<span class="data-value" id="device-online-flag2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表锂电在线状态:</span>
<span class="data-value" id="ins-online-state">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力锂电在线状态:</span>
<span class="data-value" id="dyn-online-state">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">燃电锂电在线状态:</span>
<span class="data-value" id="fuel-online-state">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">高压配电板在线状态:</span>
<span class="data-value" id="high-voltage-online-state">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">低压配电板在线状态:</span>
<span class="data-value" id="low-voltage-online-state">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">复合管控主机在线状态:</span>
<span class="data-value" id="composite-online-state">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">复合管控备机在线状态:</span>
<span class="data-value" id="composite-backup-online-state">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">通信状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">CCU状态-超时:</span>
<span class="data-value" id="ccu-status-timeout">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">CCU状态-最后更新时间:</span>
<span class="data-value" id="ccu-status-last-update">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">高压配电1-超时:</span>
<span class="data-value" id="dis-hv-c1-timeout">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">高压配电1-最后更新时间:</span>
<span class="data-value" id="dis-hv-c1-last-update">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">高压配电2-超时:</span>
<span class="data-value" id="dis-hv-c2-timeout">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">高压配电2-最后更新时间:</span>
<span class="data-value" id="dis-hv-c2-last-update">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">低压配电1-超时:</span>
<span class="data-value" id="dis-lv-c1-timeout">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">低压配电1-最后更新时间:</span>
<span class="data-value" id="dis-lv-c1-last-update">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">低压配电2-超时:</span>
<span class="data-value" id="dis-lv-c2-timeout">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">低压配电2-最后更新时间:</span>
<span class="data-value" id="dis-lv-c2-last-update">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">动力母线状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">燃料电池断路器:</span>
<span class="data-value" id="power-bus-fuel-cell-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力锂电池断路器:</span>
<span class="data-value" id="power-bus-power-lithium-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">推进电机断路器:</span>
<span class="data-value" id="power-bus-propulsion-motor-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">锂电池组仪表断路器:</span>
<span class="data-value" id="power-bus-lithium-meter-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DC/DC5模块断路器:</span>
<span class="data-value" id="power-bus-dcdc5-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部高压配电箱断路器:</span>
<span class="data-value" id="power-bus-bow-high-voltage-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艉部FT装置4/5断路器:</span>
<span class="data-value" id="power-bus-stern-ft-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艉舵开关1断路器:</span>
<span class="data-value" id="power-bus-stern-rudder1-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艉舵开关2断路器:</span>
<span class="data-value" id="power-bus-stern-rudder2-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FB预留断路器:</span>
<span class="data-value" id="power-bus-fb-reserved-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">TYZ预留断路器:</span>
<span class="data-value" id="power-bus-tyz-reserved-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留断路器:</span>
<span class="data-value" id="power-bus-reserved-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DC/DC5模块状态:</span>
<span class="data-value" id="power-bus-dcdc-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">冷却系统状态:</span>
<span class="data-value" id="power-bus-cooling-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力母排绝缘状态:</span>
<span class="data-value" id="power-bus-insulation-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">A汇流排绝缘状态:</span>
<span class="data-value" id="power-bus-a-insulation-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电源状态:</span>
<span class="data-value" id="power-bus-meter-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急电源状态:</span>
<span class="data-value" id="power-bus-emergency-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DC/DC温度:</span>
<span class="data-value" id="power-bus-dcdc-temperature">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力汇流排电压:</span>
<span class="data-value" id="power-bus-voltage">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DC/DC5模块电流:</span>
<span class="data-value" id="power-bus-dcdc-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力汇流排电流:</span>
<span class="data-value" id="power-bus-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">A汇流排电压:</span>
<span class="data-value" id="power-bus-a-voltage">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">推进电机控制箱电流:</span>
<span class="data-value" id="power-bus-propulsion-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">A汇流排电流:</span>
<span class="data-value" id="power-bus-a-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">锂电池组(仪表)电流:</span>
<span class="data-value" id="power-bus-lithium-meter-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部高压配电箱电流:</span>
<span class="data-value" id="power-bus-bow-high-voltage-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艉部FT装置4/5电流:</span>
<span class="data-value" id="power-bus-stern-ft-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">TYZ预留开关电流:</span>
<span class="data-value" id="power-bus-tyz-reserved-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艉舵开关1电流:</span>
<span class="data-value" id="power-bus-stern-rudder1-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艉舵开关2电流:</span>
<span class="data-value" id="power-bus-stern-rudder2-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留电流1:</span>
<span class="data-value" id="power-bus-reserved-current1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FB预留电流:</span>
<span class="data-value" id="power-bus-fb-reserved-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留电流2:</span>
<span class="data-value" id="power-bus-reserved-current2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留电流3:</span>
<span class="data-value" id="power-bus-reserved-current3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">冷却水压力:</span>
<span class="data-value" id="power-bus-cool-water-pressure">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">仪表主母线状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">锂电池组(仪表)断路器:</span>
<span class="data-value" id="instrument-main-bus-lithium-meter-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部低压配电箱断路器:</span>
<span class="data-value" id="instrument-main-bus-bow-low-voltage-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT4仪表DC48V断路器:</span>
<span class="data-value" id="instrument-main-bus-unit4-dc48v-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DC-C1直流配电板断路器:</span>
<span class="data-value" id="instrument-main-bus-dc-c1-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留断路器1:</span>
<span class="data-value" id="instrument-main-bus-reserved-circuit-breaker1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留断路器2:</span>
<span class="data-value" id="instrument-main-bus-reserved-circuit-breaker2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急锂电池组2断路器:</span>
<span class="data-value" id="instrument-main-bus-emergency-lithium-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电源状态:</span>
<span class="data-value" id="instrument-main-bus-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急电源状态:</span>
<span class="data-value" id="instrument-main-bus-emergency-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表母线排绝缘状态:</span>
<span class="data-value" id="instrument-main-bus-insulation-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表母排电压:</span>
<span class="data-value" id="instrument-main-bus-voltage">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部低压配电箱电流:</span>
<span class="data-value" id="instrument-main-bus-bow-low-voltage-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DC-C1仪表DC48V电流:</span>
<span class="data-value" id="instrument-main-bus-dc-c1-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留电流1:</span>
<span class="data-value" id="instrument-main-bus-reserved-current1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急锂电池组2电流:</span>
<span class="data-value" id="instrument-main-bus-emergency-lithium-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">锂电池组(仪表)电流:</span>
<span class="data-value" id="instrument-main-bus-lithium-meter-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT4仪表DC48V电流:</span>
<span class="data-value" id="instrument-main-bus-unit4-dc48v-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留电流2:</span>
<span class="data-value" id="instrument-main-bus-reserved-current2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急2汇流排电压:</span>
<span class="data-value" id="instrument-main-bus-emergency2-voltage">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">复合能源管控系统应急DC48V电流:</span>
<span class="data-value" id="instrument-main-bus-composite-energy-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">燃料电池安全系统应急DC48V电流:</span>
<span class="data-value" id="instrument-main-bus-fuel-cell-security-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">PLC控制电源电流:</span>
<span class="data-value" id="instrument-main-bus-plc-current">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">仪表母线状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">UNIT1断路器:</span>
<span class="data-value" id="instrument-bus-unit1-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT2断路器:</span>
<span class="data-value" id="instrument-bus-unit2-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT3断路器:</span>
<span class="data-value" id="instrument-bus-unit3-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT5断路器:</span>
<span class="data-value" id="instrument-bus-unit5-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部PZ装置断路器:</span>
<span class="data-value" id="instrument-bus-bow-pz-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留断路器1:</span>
<span class="data-value" id="instrument-bus-reserved-circuit-breaker1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">预留断路器2:</span>
<span class="data-value" id="instrument-bus-reserved-circuit-breaker2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急锂电池组1断路器:</span>
<span class="data-value" id="instrument-bus-emergency-lithium1-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电源状态:</span>
<span class="data-value" id="instrument-bus-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急电源状态:</span>
<span class="data-value" id="instrument-bus-emergency-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">浸水报警:</span>
<span class="data-value" id="instrument-bus-water-alarm">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表母排电压:</span>
<span class="data-value" id="instrument-bus-voltage">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表母排电流:</span>
<span class="data-value" id="instrument-bus-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT1电流:</span>
<span class="data-value" id="instrument-bus-unit1-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT2电流:</span>
<span class="data-value" id="instrument-bus-unit2-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT3电流:</span>
<span class="data-value" id="instrument-bus-unit3-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">UNIT5电流:</span>
<span class="data-value" id="instrument-bus-unit5-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部PZ装置电流:</span>
<span class="data-value" id="instrument-bus-bow-pz-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急锂电池组1电流:</span>
<span class="data-value" id="instrument-bus-emergency-lithium1-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急1汇流排电压:</span>
<span class="data-value" id="instrument-bus-emergency1-voltage">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">动力母线A状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">艏部FT装置1/2/3断路器:</span>
<span class="data-value" id="power-a-bus-bow-ft-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">启闭机构断路器:</span>
<span class="data-value" id="power-a-bus-actuator-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">桅杆舵机控制箱断路器:</span>
<span class="data-value" id="power-a-bus-mast-steering-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">XCZ断路器:</span>
<span class="data-value" id="power-a-bus-xcz-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏舵控制箱断路器:</span>
<span class="data-value" id="power-a-bus-bow-rudder-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">敞水盖启动电缸断路器:</span>
<span class="data-value" id="power-a-bus-water-cover-circuit-breaker">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电源状态:</span>
<span class="data-value" id="power-a-bus-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">应急电源状态:</span>
<span class="data-value" id="power-a-bus-emergency-power-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">浸水报警:</span>
<span class="data-value" id="power-a-bus-water-alarm">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">汇流排B电压:</span>
<span class="data-value" id="power-a-bus-b-voltage">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">汇流排B电流:</span>
<span class="data-value" id="power-a-bus-b-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏部FT装置1/2/3电流:</span>
<span class="data-value" id="power-a-bus-bow-ft-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">启闭机构电流:</span>
<span class="data-value" id="power-a-bus-actuator-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">桅杆舵机控制箱电流:</span>
<span class="data-value" id="power-a-bus-mast-steering-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">XCZ电流:</span>
<span class="data-value" id="power-a-bus-xcz-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">艏舵控制箱电流:</span>
<span class="data-value" id="power-a-bus-bow-rudder-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">敞水盖启动电缸电流:</span>
<span class="data-value" id="power-a-bus-water-cover-current">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">其他系统参数</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">心跳计数器:</span>
<span class="data-value" id="heartbeat">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">时间戳:</span>
<span class="data-value" id="timestamp">正在加载...</span>
</div>
</div>
</div>
<script>
// WebSocket连接
let ws = null;
// 初始化WebSocket连接
function initWebSocket() {
ws = new WebSocket('ws://' + window.location.host + '/ws');
ws.onopen = () => {
console.log('WebSocket连接已建立');
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
updateSystemData(data);
};
ws.onclose = () => {
console.log('WebSocket连接已关闭');
setTimeout(initWebSocket, 5000); // 5秒后重连
};
ws.onerror = (error) => {
console.error('WebSocket错误:', error);
};
}
// 更新系统数据
function updateSystemData(data) {
// 燃料电池数据
if (data.fc_mode !== undefined) {
document.getElementById('fc-mode').textContent = getFCModeText(data.fc_mode);
}
if (data.fc_status !== undefined) {
document.getElementById('fc-status').textContent = getFCStatusText(data.fc_status);
}
if (data.fc_fault_level !== undefined) {
document.getElementById('fc-fault-level').textContent = data.fc_fault_level;
}
if (data.output_power_limit !== undefined) {
document.getElementById('output-power-limit').textContent = data.output_power_limit + ' W';
}
if (data.total_generation_time !== undefined) {
document.getElementById('total-generation-time').textContent = (data.total_generation_time).toFixed(1) + ' 小时';
}
if (data.total_generation_power !== undefined) {
document.getElementById('total-generation-power').textContent = data.total_generation_power + ' W';
}
if (data.fc_fault_level_1 !== undefined) {
document.getElementById('fc-fault-level-1').textContent = data.fc_fault_level_1;
}
if (data.fc_fault_level_2 !== undefined) {
document.getElementById('fc-fault-level-2').textContent = data.fc_fault_level_2;
}
if (data.fc_fault_level_3 !== undefined) {
document.getElementById('fc-fault-level-3').textContent = data.fc_fault_level_3;
}
if (data.fc_fault_level_4 !== undefined) {
document.getElementById('fc-fault-level-4').textContent = data.fc_fault_level_4;
}
// 燃料容量
if (data.hydrogen_capacity !== undefined) {
document.getElementById('hydrogen-capacity').textContent = data.hydrogen_capacity + '%';
}
if (data.liquid_oxygen_capacity !== undefined) {
document.getElementById('liquid-oxygen-capacity').textContent = data.liquid_oxygen_capacity + '%';
}
// 温度压力参数
if (data.palladium_temp !== undefined) {
document.getElementById('palladium-temp').textContent = data.palladium_temp + ' ℃';
}
if (data.main_pipe_pressure !== undefined) {
document.getElementById('main-pipe-pressure').textContent = (data.main_pipe_pressure).toFixed(2) + ' kPa';
}
if (data.aux_pipe_pressure !== undefined) {
document.getElementById('aux-pipe-pressure').textContent = (data.aux_pipe_pressure).toFixed(2) + ' kPa';
}
// 舱室环境
if (data.cabin_pressure1 !== undefined) {
document.getElementById('cabin-pressure1').textContent = (data.cabin_pressure1).toFixed(2) + ' kPa';
}
if (data.cabin_pressure2 !== undefined) {
document.getElementById('cabin-pressure2').textContent = (data.cabin_pressure2).toFixed(2) + ' kPa';
}
if (data.cabin_temp1 !== undefined) {
document.getElementById('cabin-temp1').textContent = data.cabin_temp1 + ' ℃';
}
if (data.cabin_temp2 !== undefined) {
document.getElementById('cabin-temp2').textContent = data.cabin_temp2 + ' ℃';
}
if (data.cabin_humidity1 !== undefined) {
document.getElementById('cabin-humidity1').textContent = data.cabin_humidity1 + '%';
}
if (data.cabin_humidity2 !== undefined) {
document.getElementById('cabin-humidity2').textContent = data.cabin_humidity2 + '%';
}
// 气体浓度
if (data.h2_concentration1 !== undefined) {
document.getElementById('h2-concentration1').textContent = data.h2_concentration1 + ' ppm';
}
if (data.h2_concentration2 !== undefined) {
document.getElementById('h2-concentration2').textContent = data.h2_concentration2 + ' ppm';
}
if (data.h2_concentration3 !== undefined) {
document.getElementById('h2-concentration3').textContent = data.h2_concentration3 + ' ppm';
}
if (data.o2_concentration1 !== undefined) {
document.getElementById('o2-concentration1').textContent = data.o2_concentration1 + ' ppm';
}
if (data.o2_concentration2 !== undefined) {
document.getElementById('o2-concentration2').textContent = data.o2_concentration2 + ' ppm';
}
if (data.ch3oh_concentration1 !== undefined) {
document.getElementById('ch3oh-concentration1').textContent = data.ch3oh_concentration1 + ' ppm';
}
if (data.ch3oh_concentration2 !== undefined) {
document.getElementById('ch3oh-concentration2').textContent = data.ch3oh_concentration2 + ' ppm';
}
// 电池系统
if (data.ins_soc !== undefined) {
document.getElementById('ins-soc').textContent = (data.ins_soc).toFixed(1) + '%';
}
if (data.dyn_soc !== undefined) {
document.getElementById('dyn-soc').textContent = (data.dyn_soc).toFixed(1) + '%';
}
if (data.ins_voltage_link !== undefined) {
document.getElementById('ins-voltage-link').textContent = (data.ins_voltage_link ).toFixed(2) + ' V';
}
if (data.dyn_voltage_link !== undefined) {
document.getElementById('dyn-voltage-link').textContent = (data.dyn_voltage_link ).toFixed(2) + ' V';
}
if (data.ins_current !== undefined) {
document.getElementById('ins-current').textContent = (data.ins_current).toFixed(2) + ' A';
}
if (data.dyn_current !== undefined) {
document.getElementById('dyn-current').textContent = (data.dyn_current).toFixed(2) + ' A';
}
if (data.ins_total_energy !== undefined) {
document.getElementById('ins-total-energy').textContent = data.ins_total_energy + ' Wh';
}
if (data.dyn_total_energy !== undefined) {
document.getElementById('dyn-total-energy').textContent = data.dyn_total_energy + ' Wh';
}
if (data.ins_power_input !== undefined) {
document.getElementById('ins-power-input').textContent = data.ins_power_input + ' W';
}
if (data.dyn_power_input !== undefined) {
document.getElementById('dyn-power-input').textContent = data.dyn_power_input + ' W';
}
// 继电器状态
if (data.ins_relay_status1 !== undefined) {
document.getElementById('ins-relay-status1').textContent = getRelayStatusText(data.ins_relay_status1);
}
if (data.ins_relay_status2 !== undefined) {
document.getElementById('ins-relay-status2').textContent = getRelayStatusText(data.ins_relay_status2);
}
if (data.dyn_relay_status1 !== undefined) {
document.getElementById('dyn-relay-status1').textContent = getRelayStatusText(data.dyn_relay_status1);
}
if (data.dyn_relay_status2 !== undefined) {
document.getElementById('dyn-relay-status2').textContent = getRelayStatusText(data.dyn_relay_status2);
}
// 报警标志
if (data.dyn_alarm_flag1 !== undefined) {
document.getElementById('dyn-alarm-flag1').textContent = data.dyn_alarm_flag1;
}
if (data.dyn_alarm_flag2 !== undefined) {
document.getElementById('dyn-alarm-flag2').textContent = data.dyn_alarm_flag2;
}
if (data.dyn_alarm_flag3 !== undefined) {
document.getElementById('dyn-alarm-flag3').textContent = data.dyn_alarm_flag3;
}
if (data.dyn_alarm_flag4 !== undefined) {
document.getElementById('dyn-alarm-flag4').textContent = data.dyn_alarm_flag4;
}
if (data.dyn_alarm_flag5 !== undefined) {
document.getElementById('dyn-alarm-flag5').textContent = data.dyn_alarm_flag5;
}
if (data.dyn_alarm_flag6 !== undefined) {
document.getElementById('dyn-alarm-flag6').textContent = data.dyn_alarm_flag6;
}
if (data.ins_alarm_flag1 !== undefined) {
document.getElementById('ins-alarm-flag1').textContent = data.ins_alarm_flag1;
}
if (data.ins_alarm_flag2 !== undefined) {
document.getElementById('ins-alarm-flag2').textContent = data.ins_alarm_flag2;
}
if (data.ins_alarm_flag3 !== undefined) {
document.getElementById('ins-alarm-flag3').textContent = data.ins_alarm_flag3;
}
if (data.ins_alarm_flag4 !== undefined) {
document.getElementById('ins-alarm-flag4').textContent = data.ins_alarm_flag4;
}
if (data.ins_alarm_flag5 !== undefined) {
document.getElementById('ins-alarm-flag5').textContent = data.ins_alarm_flag5;
}
if (data.ins_alarm_flag6 !== undefined) {
document.getElementById('ins-alarm-flag6').textContent = data.ins_alarm_flag6;
}
// 动力母线状态
if (data.power_bus_status) {
const bus = data.power_bus_status;
if (bus.fuelCellCircuitBreaker !== undefined) {
document.getElementById('power-bus-fuel-cell-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.fuelCellCircuitBreaker);
}
if (bus.powerLithiumBatteryCircuitBreaker !== undefined) {
document.getElementById('power-bus-power-lithium-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.powerLithiumBatteryCircuitBreaker);
}
if (bus.propulsionMotorCircuitBreaker !== undefined) {
document.getElementById('power-bus-propulsion-motor-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.propulsionMotorCircuitBreaker);
}
if (bus.lithiumBatteryGroupInstrumentCircuitBreaker !== undefined) {
document.getElementById('power-bus-lithium-meter-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.lithiumBatteryGroupInstrumentCircuitBreaker);
}
if (bus.dcDc5ModuleCircuitBreaker !== undefined) {
document.getElementById('power-bus-dcdc5-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.dcDc5ModuleCircuitBreaker);
}
if (bus.bowHighVoltageDistributionBoxCircuitBreaker !== undefined) {
document.getElementById('power-bus-bow-high-voltage-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.bowHighVoltageDistributionBoxCircuitBreaker);
}
if (bus.sternFTDevice45CircuitBreaker !== undefined) {
document.getElementById('power-bus-stern-ft-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.sternFTDevice45CircuitBreaker);
}
if (bus.sternRudderSwitch1CircuitBreaker !== undefined) {
document.getElementById('power-bus-stern-rudder1-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.sternRudderSwitch1CircuitBreaker);
}
if (bus.sternRudderSwitch2CircuitBreaker !== undefined) {
document.getElementById('power-bus-stern-rudder2-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.sternRudderSwitch2CircuitBreaker);
}
if (bus.fbReservedCircuitBreaker !== undefined) {
document.getElementById('power-bus-fb-reserved-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.fbReservedCircuitBreaker);
}
if (bus.tyzReservedCircuitBreaker !== undefined) {
document.getElementById('power-bus-tyz-reserved-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.tyzReservedCircuitBreaker);
}
if (bus.reservedCircuitBreaker !== undefined) {
document.getElementById('power-bus-reserved-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.reservedCircuitBreaker);
}
if (bus.dcDcModuleStatus !== undefined) {
document.getElementById('power-bus-dcdc-status').textContent =
getDCDcStatusText(bus.dcDcModuleStatus);
}
if (bus.coolingSystemStatus !== undefined) {
document.getElementById('power-bus-cooling-status').textContent =
getCoolingStatusText(bus.coolingSystemStatus);
}
if (bus.powerBusInsulationStatus !== undefined) {
document.getElementById('power-bus-insulation-status').textContent =
bus.powerBusInsulationStatus === 0 ? '正常' : '绝缘低';
}
if (bus.aBusInsulationStatus !== undefined) {
document.getElementById('power-bus-a-insulation-status').textContent =
bus.aBusInsulationStatus === 0 ? '正常' : '绝缘低';
}
if (bus.meterPowerLossSignal !== undefined) {
document.getElementById('power-bus-meter-power-status').textContent =
bus.meterPowerLossSignal === 0 ? '正常' : '故障';
}
if (bus.emergencyPowerLossSignal !== undefined) {
document.getElementById('power-bus-emergency-power-status').textContent =
bus.emergencyPowerLossSignal === 0 ? '正常' : '故障';
}
if (bus.dcDcTemperature !== undefined) {
document.getElementById('power-bus-dcdc-temperature').textContent =
bus.dcDcTemperature.toFixed(1) + ' ℃';
}
if (bus.powerBusVoltage !== undefined) {
document.getElementById('power-bus-voltage').textContent =
bus.powerBusVoltage.toFixed(2) + ' V';
}
if (bus.dcDc5ModuleCurrent !== undefined) {
document.getElementById('power-bus-dcdc-current').textContent =
bus.dcDc5ModuleCurrent.toFixed(2) + ' A';
}
if (bus.powerBusCurrent !== undefined) {
document.getElementById('power-bus-current').textContent =
bus.powerBusCurrent.toFixed(2) + ' A';
}
if (bus.busbarAVoltage !== undefined) {
document.getElementById('power-bus-a-voltage').textContent =
bus.busbarAVoltage.toFixed(2) + ' V';
}
if (bus.propulsionMotorControlBoxCurrent !== undefined) {
document.getElementById('power-bus-propulsion-current').textContent =
bus.propulsionMotorControlBoxCurrent.toFixed(2) + ' A';
}
if (bus.busbarACurrent !== undefined) {
document.getElementById('power-bus-a-current').textContent =
bus.busbarACurrent.toFixed(2) + ' A';
}
if (bus.lithiumBatteryGroupMeterCurrent !== undefined && bus.lithiumBatteryGroupMeterCurrent !== null) {
document.getElementById('power-bus-lithium-meter-current').textContent =
bus.lithiumBatteryGroupMeterCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-lithium-meter-current').textContent = '无数据';
}
if (bus.bowHighVoltageDistributionBoxCurrent !== undefined && bus.bowHighVoltageDistributionBoxCurrent !== null) {
document.getElementById('power-bus-bow-high-voltage-current').textContent =
bus.bowHighVoltageDistributionBoxCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-bow-high-voltage-current').textContent = '无数据';
}
if (bus.sternFTDevice45Current !== undefined && bus.sternFTDevice45Current !== null) {
document.getElementById('power-bus-stern-ft-current').textContent =
bus.sternFTDevice45Current.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-stern-ft-current').textContent = '无数据';
}
if (bus.tyzReservedSwitchCurrent !== undefined && bus.tyzReservedSwitchCurrent !== null) {
document.getElementById('power-bus-tyz-reserved-current').textContent =
bus.tyzReservedSwitchCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-tyz-reserved-current').textContent = '无数据';
}
if (bus.sternRudderSwitch1Current !== undefined && bus.sternRudderSwitch1Current !== null) {
document.getElementById('power-bus-stern-rudder1-current').textContent =
bus.sternRudderSwitch1Current.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-stern-rudder1-current').textContent = '无数据';
}
if (bus.sternRudderSwitch2Current !== undefined && bus.sternRudderSwitch2Current !== null) {
document.getElementById('power-bus-stern-rudder2-current').textContent =
bus.sternRudderSwitch2Current.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-stern-rudder2-current').textContent = '无数据';
}
if (bus.reservedCurrent1 !== undefined && bus.reservedCurrent1 !== null) {
document.getElementById('power-bus-reserved-current1').textContent =
bus.reservedCurrent1.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-reserved-current1').textContent = '无数据';
}
if (bus.fbReservedSwitchCurrent !== undefined && bus.fbReservedSwitchCurrent !== null) {
document.getElementById('power-bus-fb-reserved-current').textContent =
bus.fbReservedSwitchCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-fb-reserved-current').textContent = '无数据';
}
if (bus.reservedCurrent2 !== undefined && bus.reservedCurrent2 !== null) {
document.getElementById('power-bus-reserved-current2').textContent =
bus.reservedCurrent2.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-reserved-current2').textContent = '无数据';
}
if (bus.reservedCurrent3 !== undefined && bus.reservedCurrent3 !== null) {
document.getElementById('power-bus-reserved-current3').textContent =
bus.reservedCurrent3.toFixed(2) + ' A';
} else {
document.getElementById('power-bus-reserved-current3').textContent = '无数据';
}
if (bus.coolWaterPressure !== undefined && bus.coolWaterPressure !== null) {
document.getElementById('power-bus-cool-water-pressure').textContent =
bus.coolWaterPressure.toFixed(2) + ' kPa';
} else {
document.getElementById('power-bus-cool-water-pressure').textContent = '无数据';
}
}
// 仪表主母线状态
if (data.instrument_main_bus_status) {
const bus = data.instrument_main_bus_status;
if (bus.lithiumBatteryGroupInstrumentCircuitBreaker !== undefined) {
document.getElementById('instrument-main-bus-lithium-meter-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.lithiumBatteryGroupInstrumentCircuitBreaker);
}
if (bus.bowLowVoltageDistributionBoxCircuitBreaker !== undefined) {
document.getElementById('instrument-main-bus-bow-low-voltage-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.bowLowVoltageDistributionBoxCircuitBreaker);
}
if (bus.unit4InstrumentDC48VCircuitBreaker !== undefined) {
document.getElementById('instrument-main-bus-unit4-dc48v-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.unit4InstrumentDC48VCircuitBreaker);
}
if (bus.dcC1DCDistributionPanelCircuitBreaker !== undefined) {
document.getElementById('instrument-main-bus-dc-c1-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.dcC1DCDistributionPanelCircuitBreaker);
}
if (bus.reservedCircuitBreaker1 !== undefined) {
document.getElementById('instrument-main-bus-reserved-circuit-breaker1').textContent =
getCircuitBreakerStatusText(bus.reservedCircuitBreaker1);
}
if (bus.reservedCircuitBreaker2 !== undefined) {
document.getElementById('instrument-main-bus-reserved-circuit-breaker2').textContent =
getCircuitBreakerStatusText(bus.reservedCircuitBreaker2);
}
if (bus.emergencyLithiumBatteryGroup2CircuitBreaker !== undefined) {
document.getElementById('instrument-main-bus-emergency-lithium-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.emergencyLithiumBatteryGroup2CircuitBreaker);
}
if (bus.instrumentPowerFailureSignal !== undefined) {
document.getElementById('instrument-main-bus-power-status').textContent =
bus.instrumentPowerFailureSignal === 0 ? '正常' : '故障';
}
if (bus.emergencyPowerFailureSignal !== undefined) {
document.getElementById('instrument-main-bus-emergency-power-status').textContent =
bus.emergencyPowerFailureSignal === 0 ? '正常' : '故障';
}
if (bus.instrumentBusbarInsulationLow !== undefined) {
document.getElementById('instrument-main-bus-insulation-status').textContent =
bus.instrumentBusbarInsulationLow === 0 ? '正常' : '绝缘低';
}
if (bus.instrumentBusbarVoltage !== undefined && bus.instrumentBusbarVoltage !== null) {
document.getElementById('instrument-main-bus-voltage').textContent =
bus.instrumentBusbarVoltage.toFixed(2) + ' V';
} else {
document.getElementById('instrument-main-bus-voltage').textContent = '无数据';
}
if (bus.bowLowVoltageDistributionBoxCurrent !== undefined && bus.bowLowVoltageDistributionBoxCurrent !== null) {
document.getElementById('instrument-main-bus-bow-low-voltage-current').textContent =
bus.bowLowVoltageDistributionBoxCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-bow-low-voltage-current').textContent = '无数据';
}
if (bus.dcC1InstrumentDC48VCurrent !== undefined && bus.dcC1InstrumentDC48VCurrent !== null) {
document.getElementById('instrument-main-bus-dc-c1-current').textContent =
bus.dcC1InstrumentDC48VCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-dc-c1-current').textContent = '无数据';
}
if (bus.reservedCurrent1 !== undefined && bus.reservedCurrent1 !== null) {
document.getElementById('instrument-main-bus-reserved-current1').textContent =
bus.reservedCurrent1.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-reserved-current1').textContent = '无数据';
}
if (bus.emergencyLithiumBatteryGroup2Current !== undefined && bus.emergencyLithiumBatteryGroup2Current !== null) {
document.getElementById('instrument-main-bus-emergency-lithium-current').textContent =
bus.emergencyLithiumBatteryGroup2Current.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-emergency-lithium-current').textContent = '无数据';
}
if (bus.lithiumBatteryGroupInstrumentCurrent !== undefined && bus.lithiumBatteryGroupInstrumentCurrent !== null) {
document.getElementById('instrument-main-bus-lithium-meter-current').textContent =
bus.lithiumBatteryGroupInstrumentCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-lithium-meter-current').textContent = '无数据';
}
if (bus.unit4InstrumentDC48VCurrent !== undefined && bus.unit4InstrumentDC48VCurrent !== null) {
document.getElementById('instrument-main-bus-unit4-dc48v-current').textContent =
bus.unit4InstrumentDC48VCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-unit4-dc48v-current').textContent = '无数据';
}
if (bus.reservedCurrent2 !== undefined && bus.reservedCurrent2 !== null) {
document.getElementById('instrument-main-bus-reserved-current2').textContent =
bus.reservedCurrent2.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-reserved-current2').textContent = '无数据';
}
if (bus.emergency2BusbarVoltage !== undefined && bus.emergency2BusbarVoltage !== null) {
document.getElementById('instrument-main-bus-emergency2-voltage').textContent =
bus.emergency2BusbarVoltage.toFixed(2) + ' V';
} else {
document.getElementById('instrument-main-bus-emergency2-voltage').textContent = '无数据';
}
if (bus.compositeEnergyManagementSystemEmergencyDC48VCurrent !== undefined && bus.compositeEnergyManagementSystemEmergencyDC48VCurrent !== null) {
document.getElementById('instrument-main-bus-composite-energy-current').textContent =
bus.compositeEnergyManagementSystemEmergencyDC48VCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-composite-energy-current').textContent = '无数据';
}
if (bus.fuelCellSecuritySystemEmergencyDC48VCurrent !== undefined && bus.fuelCellSecuritySystemEmergencyDC48VCurrent !== null) {
document.getElementById('instrument-main-bus-fuel-cell-security-current').textContent =
bus.fuelCellSecuritySystemEmergencyDC48VCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-fuel-cell-security-current').textContent = '无数据';
}
if (bus.plcControlPowerCurrent !== undefined && bus.plcControlPowerCurrent !== null) {
document.getElementById('instrument-main-bus-plc-current').textContent =
bus.plcControlPowerCurrent.toFixed(2) + ' A';
} else {
document.getElementById('instrument-main-bus-plc-current').textContent = '无数据';
}
}
// 仪表母线状态
if (data.instrument_bus_status) {
const bus = data.instrument_bus_status;
if (bus.unit1CircuitBreaker !== undefined) {
document.getElementById('instrument-bus-unit1-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.unit1CircuitBreaker);
}
if (bus.unit2CircuitBreaker !== undefined) {
document.getElementById('instrument-bus-unit2-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.unit2CircuitBreaker);
}
if (bus.unit3CircuitBreaker !== undefined) {
document.getElementById('instrument-bus-unit3-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.unit3CircuitBreaker);
}
if (bus.unit5CircuitBreaker !== undefined) {
document.getElementById('instrument-bus-unit5-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.unit5CircuitBreaker);
}
if (bus.bowPZDeviceCircuitBreaker !== undefined) {
document.getElementById('instrument-bus-bow-pz-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.bowPZDeviceCircuitBreaker);
}
if (bus.reservedCircuitBreaker1 !== undefined) {
document.getElementById('instrument-bus-reserved-circuit-breaker1').textContent =
getCircuitBreakerStatusText(bus.reservedCircuitBreaker1);
}
if (bus.reservedCircuitBreaker2 !== undefined) {
document.getElementById('instrument-bus-reserved-circuit-breaker2').textContent =
getCircuitBreakerStatusText(bus.reservedCircuitBreaker2);
}
if (bus.emergencyLithiumBatteryGroup1CircuitBreaker !== undefined) {
document.getElementById('instrument-bus-emergency-lithium1-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.emergencyLithiumBatteryGroup1CircuitBreaker);
}
if (bus.powerFailureSignal !== undefined) {
document.getElementById('instrument-bus-power-status').textContent =
bus.powerFailureSignal === 0 ? '正常' : '故障';
}
if (bus.emergencyPowerFailureSignal !== undefined) {
document.getElementById('instrument-bus-emergency-power-status').textContent =
bus.emergencyPowerFailureSignal === 0 ? '正常' : '故障';
}
if (bus.waterIngressionAlarm !== undefined) {
document.getElementById('instrument-bus-water-alarm').textContent =
bus.waterIngressionAlarm === 0 ? '无' : '有';
}
if (bus.instrumentBusbarVoltage !== undefined) {
document.getElementById('instrument-bus-voltage').textContent =
bus.instrumentBusbarVoltage.toFixed(2) + ' V';
}
if (bus.instrumentBusbarCurrent !== undefined) {
document.getElementById('instrument-bus-current').textContent =
bus.instrumentBusbarCurrent.toFixed(2) + ' A';
}
if (bus.unit1Current !== undefined) {
document.getElementById('instrument-bus-unit1-current').textContent =
bus.unit1Current.toFixed(2) + ' A';
}
if (bus.unit2Current !== undefined) {
document.getElementById('instrument-bus-unit2-current').textContent =
bus.unit2Current.toFixed(2) + ' A';
}
if (bus.unit3Current !== undefined) {
document.getElementById('instrument-bus-unit3-current').textContent =
bus.unit3Current.toFixed(2) + ' A';
}
if (bus.unit5Current !== undefined) {
document.getElementById('instrument-bus-unit5-current').textContent =
bus.unit5Current.toFixed(2) + ' A';
}
if (bus.bowPZDeviceCurrent !== undefined) {
document.getElementById('instrument-bus-bow-pz-current').textContent =
bus.bowPZDeviceCurrent.toFixed(2) + ' A';
}
if (bus.emergencyLithiumBatteryGroup1Current !== undefined) {
document.getElementById('instrument-bus-emergency-lithium1-current').textContent =
bus.emergencyLithiumBatteryGroup1Current.toFixed(2) + ' A';
}
if (bus.emergency1BusbarVoltage !== undefined) {
document.getElementById('instrument-bus-emergency1-voltage').textContent =
bus.emergency1BusbarVoltage.toFixed(2) + ' V';
}
}
// 动力母线A状态
if (data.power_a_bus_status) {
const bus = data.power_a_bus_status;
if (bus.bowFTDevice123CircuitBreaker !== undefined) {
document.getElementById('power-a-bus-bow-ft-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.bowFTDevice123CircuitBreaker);
}
if (bus.actuatorCircuitBreaker !== undefined) {
document.getElementById('power-a-bus-actuator-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.actuatorCircuitBreaker);
}
if (bus.mastSteeringGearControlBoxCircuitBreaker !== undefined) {
document.getElementById('power-a-bus-mast-steering-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.mastSteeringGearControlBoxCircuitBreaker);
}
if (bus.xczCircuitBreaker !== undefined) {
document.getElementById('power-a-bus-xcz-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.xczCircuitBreaker);
}
if (bus.bowRudderControlBoxCircuitBreaker !== undefined) {
document.getElementById('power-a-bus-bow-rudder-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.bowRudderControlBoxCircuitBreaker);
}
if (bus.openWaterCoverStartCylinderCircuitBreaker !== undefined) {
document.getElementById('power-a-bus-water-cover-circuit-breaker').textContent =
getCircuitBreakerStatusText(bus.openWaterCoverStartCylinderCircuitBreaker);
}
if (bus.instrumentPowerFailureSignal !== undefined) {
document.getElementById('power-a-bus-power-status').textContent =
bus.instrumentPowerFailureSignal === 0 ? '正常' : '故障';
}
if (bus.emergencyPowerFailureSignal !== undefined) {
document.getElementById('power-a-bus-emergency-power-status').textContent =
bus.emergencyPowerFailureSignal === 0 ? '正常' : '故障';
}
if (bus.waterIngressionAlarm !== undefined) {
document.getElementById('power-a-bus-water-alarm').textContent =
bus.waterIngressionAlarm === 0 ? '无' : '有';
}
if (bus.busbarBVoltage !== undefined && bus.busbarBVoltage !== null) {
document.getElementById('power-a-bus-b-voltage').textContent =
bus.busbarBVoltage.toFixed(2) + ' V';
} else {
document.getElementById('power-a-bus-b-voltage').textContent = '无数据';
}
if (bus.busbarBCurrent !== undefined && bus.busbarBCurrent !== null) {
document.getElementById('power-a-bus-b-current').textContent =
bus.busbarBCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-b-current').textContent = '无数据';
}
if (bus.bowFTDevice123Current !== undefined && bus.bowFTDevice123Current !== null) {
document.getElementById('power-a-bus-bow-ft-current').textContent =
bus.bowFTDevice123Current.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-bow-ft-current').textContent = '无数据';
}
if (bus.actuatorCurrent !== undefined && bus.actuatorCurrent !== null) {
document.getElementById('power-a-bus-actuator-current').textContent =
bus.actuatorCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-actuator-current').textContent = '无数据';
}
if (bus.mastSteeringGearControlBoxCurrent !== undefined && bus.mastSteeringGearControlBoxCurrent !== null) {
document.getElementById('power-a-bus-mast-steering-current').textContent =
bus.mastSteeringGearControlBoxCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-mast-steering-current').textContent = '无数据';
}
if (bus.xczCurrent !== undefined && bus.xczCurrent !== null) {
document.getElementById('power-a-bus-xcz-current').textContent =
bus.xczCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-xcz-current').textContent = '无数据';
}
if (bus.bowRudderControlBoxCurrent !== undefined && bus.bowRudderControlBoxCurrent !== null) {
document.getElementById('power-a-bus-bow-rudder-current').textContent =
bus.bowRudderControlBoxCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-bow-rudder-current').textContent = '无数据';
}
if (bus.openWaterCoverStartCylinderCurrent !== undefined && bus.openWaterCoverStartCylinderCurrent !== null) {
document.getElementById('power-a-bus-water-cover-current').textContent =
bus.openWaterCoverStartCylinderCurrent.toFixed(2) + ' A';
} else {
document.getElementById('power-a-bus-water-cover-current').textContent = '无数据';
}
}
// 其他系统参数
// 设备在线状态
if (data.device_online_status) {
const status = data.device_online_status;
document.getElementById('ins-online-state').textContent = getOnlineStateText(status.ins_online_state);
document.getElementById('dyn-online-state').textContent = getOnlineStateText(status.dyn_online_state);
document.getElementById('fuel-online-state').textContent = getOnlineStateText(status.fuel_online_state);
document.getElementById('high-voltage-online-state').textContent = getOnlineStateText(status.high_voltage_online_state);
document.getElementById('low-voltage-online-state').textContent = getOnlineStateText(status.low_voltage_online_state);
document.getElementById('composite-online-state').textContent = getOnlineStateText(status.composite_online_state);
document.getElementById('composite-backup-online-state').textContent = getOnlineStateText(status.composite_backup_online_state);
}
// 通信状态
if (data.comm_state) {
const comm = data.comm_state;
document.getElementById('ccu-status-timeout').textContent = getTimeoutText(comm.ccu_status.isTimeout);
document.getElementById('ccu-status-last-update').textContent = new Date(comm.ccu_status.lastUpdateTime * 1000).toLocaleString();
document.getElementById('dis-hv-c1-timeout').textContent = getTimeoutText(comm.dis_hv_c1.isTimeout);
document.getElementById('dis-hv-c1-last-update').textContent = new Date(comm.dis_hv_c1.lastUpdateTime * 1000).toLocaleString();
document.getElementById('dis-hv-c2-timeout').textContent = getTimeoutText(comm.dis_hv_c2.isTimeout);
document.getElementById('dis-hv-c2-last-update').textContent = new Date(comm.dis_hv_c2.lastUpdateTime * 1000).toLocaleString();
document.getElementById('dis-lv-c1-timeout').textContent = getTimeoutText(comm.dis_lv_c1.isTimeout);
document.getElementById('dis-lv-c1-last-update').textContent = new Date(comm.dis_lv_c1.lastUpdateTime * 1000).toLocaleString();
document.getElementById('dis-lv-c2-timeout').textContent = getTimeoutText(comm.dis_lv_c2.isTimeout);
document.getElementById('dis-lv-c2-last-update').textContent = new Date(comm.dis_lv_c2.lastUpdateTime * 1000).toLocaleString();
}
if (data.heartbeat !== undefined) {
document.getElementById('heartbeat').textContent = data.heartbeat;
}
if (data.timestamp !== undefined) {
document.getElementById('timestamp').textContent = new Date(data.timestamp).toLocaleString();
}
}
// 在线状态文本转换
function getOnlineStateText(state) {
const states = {
"0": "未上线",
"1": "在线",
"2": "上线后掉线"
};
return states[state] || "未知状态";
}
// 超时状态文本转换
function getTimeoutText(isTimeout) {
return isTimeout ? "已超时" : "正常";
}
// FC模式文本转换
function getFCModeText(mode) {
const modes = {
0: '无效',
1: '调试',
2: '自动',
3: '补给'
};
return modes[mode] || '未知模式';
}
// FC状态文本转换
function getFCStatusText(status) {
const statuses = {
0: '无效',
1: '初始化',
2: '待机',
3: '启动中',
4: '运行',
5: '关机中',
6: '故障',
7: '维护',
8: '校准',
9: '测试',
10: '紧急停止',
11: '重启',
12: '升级',
13: '维护完成'
};
return statuses[status] || '未知状态';
}
// 断路器状态文本转换
function getCircuitBreakerStatusText(status) {
const statuses = {
0: '断开',
1: '闭合',
2: '故障'
};
return statuses[status] || '未知状态';
}
// DC/DC模块状态文本转换
function getDCDcStatusText(status) {
const statuses = {
0: '关闭',
1: '启动中',
2: '运行',
3: '故障',
4: '维护'
};
return statuses[status] || '未知状态';
}
// 冷却系统状态文本转换
function getCoolingStatusText(status) {
const statuses = {
0: '关闭',
1: '启动中',
2: '运行',
3: '故障',
4: '维护'
};
return statuses[status] || '未知状态';
}
// 继电器状态文本转换
function getRelayStatusText(status) {
return status === 1 ? '闭合' : '断开';
}
// 折叠面板功能
const coll = document.getElementsByClassName("collapsible");
for (let i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
const content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
// 初始化WebSocket连接
window.addEventListener('load', initWebSocket);
</script>
</body>
</html>
)";
#endif // HTTP_SERVER_INDEX_H