ACC AC一体柜专题


系统架构图
电气一次接线图
系统拓扑图
平面布置图
电缆走向图
PCS-BESS电气原理图
参考设计图(大庆管业5MWh项目)
系统会: ① 调用 /api/schemagen 生成 v1.1 UEM ② 并行渲染 3 张 SVG 图 (SLD / Arch / Comm)
设计遵循规范:系统级《GB/T 36558-2023》电气接线设计层《GB 50055》并网层《GB/T 34120》《GB/T 34131》储能电站层《GB/T 42288》AIDC《GB 50174》充电《GB/T 18487》| 设计人:卢继雄 | 联系电话:15026953905



#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
EMS 能量管理系统 - 电力交易调度主程序
功能: 15min遥测上报 / 接收调度指令 / 充放电策略执行
协议: IEC104(调度层) + Modbus TCP(设备层)
标准: GB/T 36558-2023 / DL/T 634.5104
"""
import time, json, struct, logging
from datetime import datetime, timedelta
from pymodbus.client import ModbusTcpClient
from pymodbus.payload import BinaryPayloadDecoder, BinaryPayloadBuilder
from pymodbus.constants import Endian
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
log = logging.getLogger("EMS")
class EMS:
"""EMS 能量管理系统"""
# Modbus地址表 (PCS: 192.168.1.10:502)
REG_POWER_SET = 0x0200 # 功率设定 kW
REG_REACTIVE = 0x0201 # 无功设定 kVar
REG_ENABLE = 0x0202 # 使能 1=充 2=放 0=停
REG_STATUS = 0x0100 # 状态只读
REG_SOC = 0x0104 # SOC
REG_DC_VOLT = 0x0106 # DC母线电压
REG_AC_POWER = 0x0108 # 实际交流功率
# BMS地址表 (CAN→Modbus网关: 192.168.1.20:502)
BMS_SOC = 0x0300 # SOC%
BMS_VMIN = 0x0301 # 最低单体电压 mV
BMS_VMAX = 0x0302 # 最高单体电压 mV
BMS_TMAX = 0x0303 # 最高温度 0.1°C
BMS_STATUS = 0x0310 # 告警字
def __init__(self, pcs_ip="192.168.1.10", bms_ip="192.168.1.20"):
self.pcs = ModbusTcpClient(pcs_ip, port=502, timeout=3)
self.bms = ModbusTcpClient(bms_ip, port=502, timeout=3)
self.soc = 50.0
self.mode = "idle" # idle/charge/discharge
self.target_power = 0
self.running = True
log.info("EMS初始化完成 PCS=%s BMS=%s", pcs_ip, bms_ip)
def read_bms(self):
"""读取BMS数据"""
try:
r = self.bms.read_holding_registers(self.BMS_SOC, 12, unit=1)
if r.isError(): return None
d = r.registers
return {
"soc": d[0]/10, "vmin": d[1]/1000, "vmax": d[2]/1000,
"tmax": d[3]/10-40, "alarm": d[6]
}
except Exception as e:
log.error("BMS读取失败: %s", e)
return None
def read_pcs_status(self):
"""读取PCS状态"""
try:
r = self.pcs.read_holding_registers(self.REG_STATUS, 12, unit=1)
if r.isError(): return None
d = r.registers
return {
"status": d[0], "power": struct.unpack(">h", struct.pack(">H", d[4]))[0],
"soc": d[6]/10, "dc_v": d[8]/10, "ac_p": struct.unpack(">h", struct.pack(">H", d[10]))[0]
}
except Exception as e:
log.error("PCS读取失败: %s", e)
return None
def set_power(self, kw, mode="discharge"):
"""设置PCS功率
mode: charge=1, discharge=2, idle=0
"""
mode_map = {"charge": 1, "discharge": 2, "idle": 0}
builder = BinaryPayloadBuilder(byteorder=Endian.BIG, wordorder=Endian.BIG)
builder.add_16bit_int(abs(kw))
builder.add_16bit_int(0)
builder.add_16bit_int(mode_map.get(mode, 0))
payload = builder.build()
self.pcs.write_registers(self.REG_POWER_SET, payload, unit=1)
self.mode = mode
self.target_power = kw
log.info("PCS功率设定: %dkW mode=%s", kw, mode)
def emergency_stop(self):
"""紧急停机"""
self.set_power(0, "idle")
log.warning("紧急停机!")
def strategy_peak_valley(self, hour, price_peak, price_valley):
"""峰谷套利策略"""
is_peak = (9 <= hour <= 12) or (14 <= hour <= 19)
is_valley = hour >= 23 or hour <= 7
if is_valley and self.soc < 90:
self.set_power(2500, "charge")
elif is_peak and self.soc > 20:
self.set_power(2500, "discharge")
else:
self.set_power(0, "idle")
def run_15min_cycle(self):
"""15分钟调度周期"""
while self.running:
now = datetime.now()
hour = now.hour + now.minute/60
# 1. 读取BMS
bms = self.read_bms()
if bms:
self.soc = bms["soc"]
log.info("BMS: SOC=%.1f%% Vmin=%.3fV Tmax=%.1f°C",
bms["soc"], bms["vmin"], bms["tmax"])
if bms["alarm"] & 0xFF:
log.warning("BMS告警: 0x%04X", bms["alarm"])
self.emergency_stop()
return
# 2. 执行策略
self.strategy_peak_valley(hour, 1.08, 0.35)
# 3. 读取PCS
pcs = self.read_pcs_status()
if pcs:
log.info("PCS: P=%dkW SOC=%.1f%% DC=%.1fV",
pcs["ac_p"], pcs["soc"], pcs["dc_v"])
# 4. 上报数据(每15分钟) - 实际由IEC104模块完成
# iec104_report(soc, power, voltage, temperature, alarms)
time.sleep(60)
def stop(self):
self.running = False
self.set_power(0, "idle")
log.info("EMS停止")
if __name__ == "__main__":
ems = EMS()
try:
ems.run_15min_cycle()
except KeyboardInterrupt:
ems.stop()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
IEC104 调度通信模块
功能: 15min遥测上报 / 遥信变位 / 接收遥控遥调
标准: DL/T 634.5104-2009
数据类型:
TI=1 遥信 (单点)
TI=13 遥测 (归一化值)
TI=45 遥控 (单点)
TI=50 遥调 (归一化值)
传输原因:
COT=1 周期
COT=2 扫查
COT=3 突发
COT=5 初始化
COT=6 重启
COT=20 一般命令
"""
import time, struct, socket, logging
from datetime import datetime
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("IEC104")
class IEC104Client:
"""IEC104客户端 - 向调度中心上报数据"""
# ASDU类型标识
TI_ME_NA = 13 # 遥测 归一化值
TI_PS_NA = 1 # 遥信 单点
TI_CRO_NA = 45 # 遥控
TI_CSE_NA = 50 # 遥调
# 传输原因
COT_PERIODIC = 1
COT_SCAN = 2
COT_SPONT = 3
COT_INIT = 5
COT_RESET = 6
COT_CMD = 20
def __init__(self, host, port=2404, common_addr=1, ioa_offset=0):
self.host = host
self.port = port
self.common_addr = common_addr
self.ioa_offset = ioa_offset
self.sock = None
self.txCnt = 0
self.rxCnt = 0
self.connected = False
def connect(self):
try:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.settimeout(10)
self.sock.connect((self.host, self.port))
self.connected = True
log.info("IEC104连接成功: %s:%d", self.host, self.port)
return True
except Exception as e:
log.error("IEC104连接失败: %s", e)
return False
def _build_apdu(self, asdu):
apdu = bytes([0x68]) + struct.pack(">H", len(asdu)+4) + struct.pack(">HH", self.txCnt, self.rxCnt) + asdu
self.txCnt = (self.txCnt + 1) % 32768
return apdu
def _build_asdu(self, ti, cot, ioa, values):
asdu = struct.pack(">BBH", ti, 0x01, cot)
asdu += struct.pack(">BH", self.common_addr, 0)
for i, v in enumerate(values):
asdu += struct.pack(">BH", ioa+i, 0)
if isinstance(v, float):
nv = int(v * 32767)
asdu += struct.pack(">h", nv)
elif isinstance(v, int):
asdu += struct.pack(">h", v)
else:
asdu += struct.pack(">B", 1 if v else 0)
return asdu
def send_measurements(self, soc, power, voltage, temperature, alarms):
"""发送遥测数据 (TI=13, 每15分钟)"""
soc_n = soc / 100.0
power_n = power / 5000.0
voltage_n = (voltage - 600) / 200.0
temp_n = (temperature - 20) / 60.0
ioa = self.ioa_offset + 100
values = [soc_n, power_n, voltage_n, temp_n, alarms/255.0]
asdu = self._build_asdu(self.TI_ME_NA, self.COT_PERIODIC, ioa, values)
apdu = self._build_apdu(asdu)
if self.sock:
self.sock.send(apdu)
log.info("IEC104遥测上报: SOC=%.1f%% P=%dkW V=%.1fV T=%.1f°C",
soc, power, voltage, temperature)
def send_status(self, breaker, pcs_run, bms_alarm):
"""发送遥信 (TI=1, 变位即发)"""
ioa = self.ioa_offset + 200
values = [breaker, pcs_run, bms_alarm]
asdu = self._build_asdu(self.TI_PS_NA, self.COT_SPONT, ioa, values)
apdu = self._build_apdu(asdu)
if self.sock:
self.sock.send(apdu)
log.info("IEC104遥信: 断路器=%d PCS=%d BMS告警=%d", breaker, pcs_run, bms_alarm)
def receive_command(self):
"""接收调度指令 (遥控TI=45 / 遥调TI=50)"""
if not self.sock: return None
try:
data = self.sock.recv(1024)
if len(data) < 6: return None
length = struct.unpack(">H", data[1:3])[0]
asdu = data[6:6+length-4]
ti = asdu[0]
cot = struct.unpack(">H", asdu[2:4])[0]
if ti == self.TI_CRO_NA and cot == self.COT_CMD:
ioa = struct.unpack(">BH", asdu[6:9])[0]
val = asdu[9]
log.info("IEC104遥控: IOA=%d Value=%d", ioa, val)
return {"type": "switch", "ioa": ioa, "value": val}
elif ti == self.TI_CSE_NA and cot == self.COT_CMD:
ioa = struct.unpack(">BH", asdu[6:9])[0]
val = struct.unpack(">h", asdu[9:11])[0] / 32767.0 * 5000.0
log.info("IEC104遥调: IOA=%d Power=%.0fkW", ioa, val)
return {"type": "setpoint", "ioa": ioa, "value": val}
except socket.timeout:
pass
except Exception as e:
log.error("IEC104接收错误: %s", e)
return None
def disconnect(self):
if self.sock:
self.sock.close()
self.connected = False
log.info("IEC104断开")
if __name__ == "__main__":
client = IEC104Client("192.168.100.1", port=2404)
if client.connect():
while True:
client.send_measurements(soc=85.2, power=2500, voltage=750, temperature=32, alarms=0)
time.sleep(900) # 15分钟
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PPC 电力交易引擎
功能: 电价预测 / 充放电策略优化 / 报价生成 / 偏差考核
对接: 电力交易中心API + EMS调度
"""
import json, requests, logging
from datetime import datetime, timedelta
from typing import List, Dict
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("PPC")
class PPCTrader:
"""电力交易引擎"""
def __init__(self, center_url, ess_id="ESS-001"):
self.url = center_url
self.ess_id = ess_id
self.session = requests.Session()
self.session.headers.update({"Content-Type": "application/json"})
def fetch_price_forecast(self) -> List[Dict]:
"""获取未来24h电价预测"""
try:
resp = self.session.get(f"{self.url}/api/price/forecast", timeout=10)
data = resp.json()
return data.get("prices", [])
except Exception as e:
log.error("电价获取失败: %s", e)
return [{"hour": h, "price": 1.08 if (9<=h<=12 or 14<=h<=19) else 0.35 if (h>=23 or h<=7) else 0.66,
"type": "peak" if (9<=h<=12 or 14<=h<=19) else "valley" if (h>=23 or h<=7) else "flat"}
for h in range(24)]
def optimize_schedule(self, bess_kwh, soc, prices) -> List[Dict]:
"""生成24h充放电计划"""
schedule = []
current_soc = soc
power_max = bess_kwh * 0.5
for p in prices:
hour = p["hour"]
price = p["price"]
if price <= 0.40 and current_soc < 90:
charge_kwh = min(power_max, (90 - current_soc) / 100 * bess_kwh)
schedule.append({"hour": hour, "action": "charge", "power": charge_kwh, "soc_before": current_soc})
current_soc += charge_kwh / bess_kwh * 100
elif price >= 0.80 and current_soc > 20:
discharge_kwh = min(power_max, (current_soc - 20) / 100 * bess_kwh)
schedule.append({"hour": hour, "action": "discharge", "power": discharge_kwh, "soc_before": current_soc})
current_soc -= discharge_kwh / bess_kwh * 100
else:
schedule.append({"hour": hour, "action": "idle", "power": 0, "soc_before": current_soc})
return schedule
def generate_bid(self, schedule) -> Dict:
"""生成报价单 (日前市场)"""
today = datetime.now().strftime("%Y-%m-%d")
bid = {"ess_id": self.ess_id, "date": today, "plan": []}
for s in schedule:
bid["plan"].append({
"hour": s["hour"],
"power_kw": s["power"],
"direction": 1 if s["action"] == "discharge" else (-1 if s["action"] == "charge" else 0)
})
return bid
def submit_bid(self, bid) -> Dict:
"""向交易中心提交报价"""
try:
resp = self.session.post(f"{self.url}/api/bid/submit", json=bid, timeout=10)
result = resp.json()
log.info("报价提交成功: %s", result.get("bid_id"))
return result
except Exception as e:
log.error("报价提交失败: %s", e)
return {"error": str(e)}
def calc_deviation(self, planned_kw, actual_kw) -> Dict:
"""偏差考核计算"""
if planned_kw == 0:
return {"deviation_pct": 0, "penalty": 0}
dev = abs(actual_kw - planned_kw) / abs(planned_kw) * 100
penalty = 0
if dev > 5:
penalty = (dev - 5) * 0.1
return {"deviation_pct": round(dev, 2), "penalty": round(penalty, 2)}
def run_daily(self, bess_kwh, soc):
"""每日交易流程"""
prices = self.fetch_price_forecast()
log.info("获取电价: 峰=%.2f 谷=%.2f", max(p["price"] for p in prices), min(p["price"] for p in prices))
schedule = self.optimize_schedule(bess_kwh, soc, prices)
bid = self.generate_bid(schedule)
result = self.submit_bid(bid)
return {"schedule": schedule, "bid": bid, "result": result}
if __name__ == "__main__":
ppc = PPCTrader("http://grid-center.example.com")
result = ppc.run_daily(bess_kwh=5000, soc=85)
print(json.dumps(result, indent=2, ensure_ascii=False))
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
BMS 电池数据采集程序
功能: CAN J1939解析 / SOC/SOH估算 / 告警管理 / Modbus转发
硬件: STM32F407 + CAN2.0B + RS485
"""
import struct, time, logging
from collections import deque
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("BMS")
# J1939 PGN定义
PGN_MAP = {
0xE001: {"name": "电芯电压温度", "fields": ["V_min", "V_max", "T_min", "T_max", "V_avg"]},
0x1806: {"name": "充电参数", "fields": ["I_charge", "V_charge", "SOC", "SOH"]},
0x1807: {"name": "放电参数", "fields": ["I_discharge", "V_discharge", "P_discharge", "T_batt"]},
0x1808: {"name": "告警状态", "fields": ["alarm_word", "protect_word", "fault_code", "reserve"]},
0x1809: {"name": "均衡状态", "fields": ["balance_flag", "V_diff", "cycle_count", "capacity_ah"]},
0x1810: {"name": "绝缘检测", "fields": ["R_iso_pos", "R_iso_neg", "status", "reserve"]},
}
class BMSCollector:
"""BMS数据采集与解析"""
def __init__(self):
self.data = {
"soc": 50.0, "soh": 100.0,
"v_min": 3.20, "v_max": 3.35, "v_avg": 3.28,
"t_min": 25.0, "t_max": 35.0,
"i_charge": 0, "i_discharge": 0,
"p_charge": 0, "p_discharge": 0,
"alarm": 0, "protect": 0, "fault": 0,
"cycle_count": 0, "capacity_ah": 100,
"r_iso_pos": 1000, "r_iso_neg": 1000
}
self.history = deque(maxlen=8640)
self.alarms = []
def parse_can_frame(self, can_id, data):
"""解析CAN帧"""
pgn = (can_id >> 8) & 0x3FFFF
source = can_id & 0xFF
if pgn not in PGN_MAP:
return
if pgn == 0xE001 and len(data) >= 8:
self.data["v_min"] = struct.unpack(">H", data[0:2])[0] / 1000
self.data["v_max"] = struct.unpack(">H", data[2:4])[0] / 1000
self.data["t_min"] = data[4] / 2 - 40
self.data["t_max"] = data[5] / 2 - 40
self.data["v_avg"] = (self.data["v_min"] + self.data["v_max"]) / 2
elif pgn == 0x1806 and len(data) >= 8:
self.data["i_charge"] = struct.unpack(">H", data[0:2])[0] / 10
self.data["v_charge"] = struct.unpack(">H", data[2:4])[0] / 10
self.data["soc"] = data[4] / 2
self.data["soh"] = data[5] / 2
elif pgn == 0x1807 and len(data) >= 8:
self.data["i_discharge"] = struct.unpack(">H", data[0:2])[0] / 10
self.data["p_discharge"] = struct.unpack(">H", data[4:6])[0]
elif pgn == 0x1808 and len(data) >= 4:
self.data["alarm"] = data[0]
self.data["protect"] = data[1]
self.data["fault"] = data[2]
elif pgn == 0x1809 and len(data) >= 8:
self.data["cycle_count"] = struct.unpack(">H", data[4:6])[0]
self.data["capacity_ah"] = struct.unpack(">H", data[6:8])[0] / 10
elif pgn == 0x1810 and len(data) >= 6:
self.data["r_iso_pos"] = struct.unpack(">H", data[0:2])[0]
self.data["r_iso_neg"] = struct.unpack(">H", data[2:4])[0]
def check_alarms(self):
"""告警检测"""
alarms = []
if self.data["v_max"] > 3.65:
alarms.append("OVERVOLT_MAX")
if self.data["v_min"] < 2.80:
alarms.append("UNDERVOLT_MIN")
if self.data["t_max"] > 55:
alarms.append("OVERTEMP")
if self.data["t_min"] < 0:
alarms.append("UNDERTEMP")
if self.data["soc"] < 10:
alarms.append("SOC_LOW")
if self.data["soc"] > 95:
alarms.append("SOC_HIGH")
if self.data["r_iso_pos"] < 500 or self.data["r_iso_neg"] < 500:
alarms.append("ISO_LOW")
self.alarms = alarms
return alarms
def to_modbus_registers(self):
"""转换为Modbus寄存器 (供EMS读取)"""
regs = [
int(self.data["soc"] * 10),
int(self.data["v_min"] * 1000),
int(self.data["v_max"] * 1000),
int((self.data["t_max"] + 40) * 2),
int(self.data["i_charge"] * 10),
int(self.data["i_discharge"] * 10),
self.data["alarm"],
self.data["protect"],
self.data["cycle_count"],
int(self.data["capacity_ah"] * 10),
self.data["r_iso_pos"],
self.data["r_iso_neg"],
]
return regs
def get_status(self):
"""获取BMS状态摘要"""
return {
"soc": self.data["soc"],
"soh": self.data["soh"],
"v_range": "{:.3f}~{:.3f}V".format(self.data["v_min"], self.data["v_max"]),
"t_range": "{:.1f}~{:.1f}C".format(self.data["t_min"], self.data["t_max"]),
"alarms": self.alarms,
"cycles": self.data["cycle_count"]
}
if __name__ == "__main__":
bms = BMSCollector()
bms.parse_can_frame(0x18FE0001, bytes([0x41,0x83,0x43,0x87,0x3C,0x46,0,0]))
bms.parse_can_frame(0x18060001, bytes([0x01,0xF4,0x01,0x2C,0xA2,0xC8,0,0]))
alarms = bms.check_alarms()
print("BMS状态:", bms.get_status())
print("告警:", alarms)
print("Modbus寄存器:", bms.to_modbus_registers())
⚡ 大电网 → 🔌 PCC并网开关柜(断路器QF01) + 双向关口表(0.2S级) → 🔽 主变压器 10kV/0.4kV 2000kVA Dyn11 → 🔹 AC 400V母线(三相四线+PE)
☀️ 光伏系统: 550Wp组件阵列 → 组串式逆变器(MPPT) → AC 400V并网
🔋 储能BESS: 10MW/20MWh eBlock能量块 → PCS组(100kW×N) → AC 400V
🛢️ 柴发: 500kW备用 → ATS切换 → AC 400V
💡 负荷: 关键负荷(数据中心/核心产线/消防) + 可调节负荷(空调/照明/非核心产线)
🛡️ 保护: 综保继电器(过流/速断/零序) + 防孤岛AFD + 电能质量监测
市电侧 → 10kV电网 → 主变 → PCC开关 → AC 400V子网(电机/照明等交流负荷)
DC 750V直流子网: 光伏→DC/DC升压(1100→750V) + 储能直挂DC(768V↔750V) + 充电桩/数据中心
🔄 AC/DC互联变换器: 双向400V↔750V 功率路由器,能量互通
| 方案 | 拓扑 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| A: 交流微网 | 电网→变压器→AC Bus→负荷 | 技术成熟、设备可选多 | 多次AC/DC变换损耗 | 最常见,工商业 |
| B: 直流微网 | 电网→AC/DC→DC Bus→负荷 | 光伏/储能直挂效率高 | DC保护技术不成熟 | 数据中心/充电站 |
| C: 交直流混合 ★ | AC Bus↔DC Bus双向 | 兼顾AC/DC优势 | 系统复杂度较高 | 光储充综合园区 |
| D: 多微网集群 | 微网间联络线互联 | 高可靠性、能量互助 | 协调控制最复杂 | 工业园区/校园 |
并网运行(PQ控制): 削峰填谷 + 需量管理 + 光伏MPPT
↓ 检修/调度指令 或 电网故障/电能质量越限
离网运行(V/f控制): 储能承担主电源 + 柴发后备 + 切除非关键负荷
→ 并离网切换 <20ms (关键负荷不断电)
→ 电网恢复 → 同期检测(幅值/频率/相位匹配) → 重新并网
| 类别 | 参数 | 典型值 | 说明 |
|---|---|---|---|
| 电网侧 | 并网电压 | 10kV/35kV | 视项目容量 |
| 关口表精度 | 0.2S级 | 双向计量 | |
| 变压器 | 容量/接线 | 2000kVA Dyn11 | 按最大负荷+储能充电 |
| 储能 | 额定容量 | 10MW/20MWh | 0.5C充放电倍率 |
| SOC范围 | 10%~90% | 保护电池寿命 | |
| 保护 | 孤岛检测 | <2s | IEEE 1547 |
| 并离网切换 | <20ms | 关键负荷不断电 |
☁️ 云平台层: 数据中台 + AI引擎(LSTM预测/异常检测) + 运维管理 + 电力交易(现货/辅助服务/碳交易) + 大屏可视化
🏭 站控层: SCADA Server(双机热备) + 优化调度引擎(MILP/MPC) + AGC/AVC + 策略下发&并离网切换 + 本地HMI
🔗 边缘控制层: ARM/x86边缘网关 + 协议转换池 + 本地自治(削峰填谷/防逆流) + 数据缓存&断点续传 + 看门狗
⚡ 设备层: eBlock能量块(PACK+BMS+PCS)×N + 光伏逆变器 + 变压器&关口表 + 柴发 + 充电桩群 + 环境传感器
| 连接 | 协议 | 物理介质 | 实时性 | 用途 |
|---|---|---|---|---|
| 云↔站控 | MQTT/HTTPs | 光纤/4G | 秒级 | 数据上报/指令下发 |
| 站控↔边缘 | IEC 104 | 千兆以太网 | 1~5s | 电力通信标准 |
| 边缘↔PCS | Modbus TCP | RJ45 | 1~5s | 功率/模式控制 |
| 边缘↔BMS | CAN 2.0B | 屏蔽双绞线 | 100ms | SOC/故障/保护 |
| 边缘↔电表 | Modbus RTU | RS485 | 1s~15min | 关口功率/电量 |
| 边缘↔保护 | IEC 61850 GOOSE | 以太网 | <4ms | 快速保护联跳 |
| 边缘↔充电桩 | OCPP 1.6J | 以太网 | 1~5s | 充电调度/计费 |
🔋 电池PACK: LFP 280Ah, 1P240S, 额定768V/215kWh → BMS从控(电压/温度采集/被动均衡) → BMS主控(SOC/SOH卡尔曼滤波/故障诊断)
⚡ PCS功率模块: 三相全桥IGBT 100kW DC/AC双向 ≥98.5% → PCS控制器(TI TMS320F28379D双核, PQ/VF/Droop策略, SPWM调制)
🔧 热管理: 液冷机组 + 水温/流量监测 + CAN通信
正常调度: 云→站控(MQTT日前计划15min) → 边缘(IEC104 5s) → PCS(Modbus TCP写入功率) → 回读 → 上送 ≈ 秒级
急停/故障: BMS→CAN故障帧 → 边缘→PCS紧急停机 → 站控告警 → 云推送 ≈ 毫秒级 (PCS本地DSP硬件保护PWM闭锁<10μs)
并离网切换: 站控→边缘→PCS模式切换(VF→PQ) DSP切换<20ms → BMS解除联锁
min Σ
其中: C_grid=电网电价, P_grid=购电功率, C_diesel=柴发成本, C_deg=电池退化成本
| 约束 | 公式 | 说明 |
|---|---|---|
| 功率平衡 | P_grid+P_pv+P_bess+P_diesel = P_load | 供需实时平衡 |
| SOC限制 | SOC_min ≤ SOC(t) ≤ SOC_max | 10% ≤ SOC ≤ 90% |
| 储能功率 | -P_charge_max ≤ P_bess(t) ≤ P_discharge_max | 充放电功率限制 |
| 并网功率 | 0 ≤ P_grid(t) ≤ P_grid_max | 不允许向电网倒送(防逆流) |
| 柴发约束 | P_diesel_min ≤ P_diesel(t) ≤ P_diesel_max | ≥30%额定防积碳 |
| 联络线 | |P_tie(t)| ≤ P_tie_max | 多微网间功率交换限制 |
Layer 1 - 日前调度(MILP): 24h经济调度计划,15min粒度,考虑负荷/光伏预测
Layer 2 - 日内滚动(MPC): 1~4h滚动优化,修正预测偏差,5min粒度
Layer 3 - 实时控制(AGC): 秒级功率跟踪,频率/电压调节,紧急功率分配
Layer 4 - 本地自治: 边缘网关就地逻辑,通信中断时独立运行,削峰填谷/防逆流
| 场景 | 策略 | 储能动作 | 柴发 |
|---|---|---|---|
| 白天峰段+光伏充足 | 光伏优先+储能放电 | 放电削峰 | 停机 |
| 夜间谷段 | 谷电充电 | 充电填谷 | 停机 |
| 并网→离网切换 | 储能转V/f主电源 | 放电承担全部负荷 | 15s后启动备用 |
| 离网运行 | 光储协调+柴发补充 | 按SOC调整出力 | ≥30%额定 |
| 电网恢复 | 同期检测→重新并网 | VF→PQ模式切换 | 逐步退出 |
面向微网项目的5大核心软件子平台配置:SCADA监控、EMS能量管理、调度优化、电力交易和数据中台。每个子平台包含技术栈选型、核心功能模块、部署架构和交付清单,支持一键生成项目级配置文件。
SCADA(Supervisory Control And Data Acquisition)是微网系统的实时监控中枢,负责数据采集、设备监控、遥控操作、告警管理和画面展示。支持IEC 61850/104/Modbus RTU/TCP多协议接入。
| 层 | 技术 | 用途 |
|---|---|---|
| 前端 | React 18 + Ant Design 5 | 监控画面、实时曲线 |
| 实时 | WebSocket + MQTT | 遥测遥信推送 |
| 后端 | Go 1.22 + Gin | API网关、协议解析 |
| 协议 | lib60870 + lib61850 | IEC 104/61850通信 |
| 时序库 | TDengine 3.x | 遥测历史存储 |
| 缓存 | Redis 7.x | 实时数据缓存、告警 |
| 部署 | Docker + K3s | 容器编排 |
IEC 104/61850/Modbus多协议采集,1s遥测刷新,变化上送+定时全扫
SVG接线图、棒图、实时曲线、列表,支持自定义组态
断路器分合、PCS启停、档位调节,操作防误闭锁
越限/突变/通信中断/SOE,分级推送到APP/短信/邮件
TDengine时序查询,1s粒度365天,趋势对比+导出
RBAC角色权限,操作审计,双因子认证
| 序号 | 交付物 | 格式 | 备注 |
|---|---|---|---|
| 1 | SCADA安装包 | Docker Image | x86+ARM64 |
| 2 | 画面配置文件 | SVG+JSON | 含接线图/趋势/列表 |
| 3 | 协议点表映射 | Excel | IEC104→内部点号 |
| 4 | 告警配置表 | Excel | 限值/延时/级别 |
| 5 | 权限配置 | JSON | 角色/用户/操作 |
| 6 | 部署文档 | Markdown | 环境要求+步骤 |
EMS(Energy Management System)是微网的大脑,负责储能SOC管理、充放电策略、防逆流控制、削峰填谷、光伏消纳优化和并离网无缝切换。基于eBlock能量块架构,支持多PCS协调控制。
| 层 | 技术 | 用途 |
|---|---|---|
| 策略引擎 | Go + 规则引擎(Drools) | 充放电策略执行 |
| 优化求解 | Pyomo + CBC/Gurobi | MILP日前调度 |
| 预测 | Prophet + LSTM | 负荷/光伏预测 |
| 实时控制 | Go + gRPC | PCS指令下发<1s |
| 事件总线 | NATS JetStream | 策略触发/联动 |
| 持久化 | PostgreSQL 16 | 策略/计划/日志 |
峰谷套利、需量管理、防逆流、SOC保护,策略优先级可配
10%~90%区间保护,均充/浮充自动切换,簇间均衡
实时负荷跟踪,动态调整充放电功率,需量控制
三重保障:策略层+PCS功率限制+逆流保护装置
PCC检测→PCS V/f建压→负荷转移→同期并网,<200ms
PV消纳优先,弃光最小化,储能吸收余量
| 序号 | 交付物 | 格式 | 备注 |
|---|---|---|---|
| 1 | EMS安装包 | Docker Image | 含策略引擎+优化器 |
| 2 | 策略配置文件 | YAML | 充放电/防逆流/SOC |
| 3 | 预测模型 | ONNX | 负荷+光伏预测 |
| 4 | PCS通信点表 | Excel | Modbus寄存器映射 |
| 5 | 并离网逻辑 | 流程图+代码 | V/f和PQ切换 |
| 6 | FAT测试用例 | Excel | 策略场景覆盖 |
调度优化平台实现微网的多时间尺度优化调度:日前MILP经济调度→日内MPC滚动修正→实时AGC功率跟踪→本地边缘自治。支持需求响应(DR)和虚拟电厂(VPP)接口。
| 层 | 技术 | 用途 |
|---|---|---|
| 日前优化 | Pyomo + CBC | MILP 24h经济调度 |
| 滚动优化 | CasADi + IPOPT | MPC 1-4h滚动 |
| 实时调度 | Go + C | AGC秒级跟踪 |
| 预测服务 | Prophet + LightGBM | 负荷/光伏/电价 |
| 消息队列 | NATS + Redis Stream | 调度指令下发 |
| 可视化 | React + ECharts | 甘特图/计划对比 |
MILP求解24h最优计划,15min粒度,考虑电价/负荷/光伏预测
MPC 1-4h滚动修正,5min粒度,修正预测偏差
秒级功率跟踪,频率/电压调节,紧急功率分配
通信中断时就地运行,削峰填谷+防逆流保底
DR信号接收→负荷削减→储能放电→补偿结算
聚合多微网上报容量,响应调度指令(预留)
| 序号 | 交付物 | 格式 | 备注 |
|---|---|---|---|
| 1 | 调度服务安装包 | Docker Image | 日前+日内+实时 |
| 2 | 优化模型配置 | YAML | 目标函数/约束/参数 |
| 3 | 预测模型 | ONNX+Pickle | 负荷/光伏/电价 |
| 4 | 调度计划模板 | JSON | 典型日/季节/节假日 |
| 5 | DR/VPP接口 | OpenAPI 3.0 | 对接电网调度 |
电力交易平台对接省级/区域电力交易中心,支持现货市场报量报价、辅助服务市场参与、绿证交易和需求响应补偿结算。适用于已获取售电资质或通过聚合商接入的微网项目。
| 层 | 技术 | 用途 |
|---|---|---|
| 报价引擎 | Go + 规则引擎 | 自动报量报价 |
| 结算 | Go + PostgreSQL | 出清结算/偏差考核 |
| 风控 | Python + Pandas | 价格预测/风险量化 |
| 接口 | REST + IEC 61850 | 交易中心对接 |
| 前端 | React + AntV L7 | 地图/曲线/报表 |
日频/实时市场报量报价,基于边际成本自动决策
调频/调峰/备用容量申报,AGC跟踪性能评分
绿电核发→绿证出售,对接GEC系统
计划vs实际偏差监控,考核费用预估
日出清结果,月度结算单,收益归因分析
| 市场 | 准入条件 | 微网适用性 | 备注 |
|---|---|---|---|
| 现货市场 | ≥10MW并网,售电资质 | 多数微网不满足 | 可通过聚合商 |
| 辅助服务 | ≥5MW,AGC性能≥0.7 | 大微网可能满足 | 调频收益较高 |
| 需求响应 | ≥1MW可削减 | 大多微网满足 | 入门门槛最低 |
| 绿证交易 | 有光伏/风电等绿电 | 光储微网满足 | 额外收益来源 |
数据中台是微网软件平台的数据底座,统一汇聚SCADA遥测、EMS策略日志、调度计划、交易结算等多源数据,提供数据治理、指标计算、报表服务和开放API,支撑上层应用和BI分析。
| 层 | 技术 | 用途 |
|---|---|---|
| 采集 | Debezium + Kafka | CDC实时数据同步 |
| 存储 | TDengine + PostgreSQL | 时序+关系混合 |
| 计算 | Apache Flink | 实时指标/聚合 |
| 分析 | DuckDB + Metabase | 即席查询/BI |
| API | Go + GraphQL | 统一数据服务 |
| 治理 | Apache Atlas | 元数据/数据血缘 |
Kafka多Topic接入,SCADA/EMS/调度/交易数据统一汇聚
Flink流计算:SOC均值/功率总和/收益累计/效率
数据质量校验、缺失补值、异常标记、血缘追踪
日报/月报/年报自动生成,PDF/Excel导出
GraphQL统一查询,第三方系统对接
Metabase仪表盘,趋势/对比/归因可视化
| 序号 | 交付物 | 格式 | 备注 |
|---|---|---|---|
| 1 | 数据中台安装包 | Docker Compose | Kafka+Flink+TDengine |
| 2 | 数据模型 | DDL + ER图 | 时序+关系表结构 |
| 3 | Flink作业 | JAR | 实时指标计算 |
| 4 | 报表模板 | JSON | 日/月/年报 |
| 5 | API文档 | GraphQL Schema | 开放数据接口 |
| 类别 | 选型 | 理由 |
|---|---|---|
| 后端语言 | Go 1.22 | 高并发、低延迟、单二进制部署,适合站端 |
| 前端框架 | React 18 + TypeScript | 生态成熟、组件丰富、Ant Design 5 |
| 时序数据库 | TDengine 3.x | 10倍InfluxDB写入性能,储能遥测首选 |
| 关系数据库 | PostgreSQL 16 | 策略/计划/结算,JSONB+GIS |
| 消息中间件 | NATS JetStream | 轻量、Go原生、适合边缘 |
| 容器编排 | K3s (轻量K8s) | 单节点/3节点,资源占用低 |
| CI/CD | GitLab CI + Ansible | 站端自动部署 |







| 序号 | 分类 | 物料名称 | 规格型号 | 数量 | 单价(元) | 小计(元) |
|---|---|---|---|---|---|---|
| 1 | 电芯 | LFP电芯 280Ah | CATL 174×72×207mm | 16 | 280 | 4,480 |
| 2 | 电芯 | 电芯绝缘套 | PET膜 0.2mm | 16 | 2 | 32 |
| 3 | 模组 | 铜排 T2紫铜 | 8×3mm 长100mm | 15 | 15 | 225 |
| 4 | 模组 | 模组端板 | 铝合金6063 阳极氧化 | 8 | 35 | 280 |
| 5 | 模组 | 压缩板 | 铝板 2mm 预紧300kPa | 8 | 28 | 224 |
| 6 | 模组 | 绝缘片 | 云母片+PI膜 0.3mm | 16 | 5 | 80 |
| 7 | 模组 | 采样线束 | AWG24 端子压接 | 4 | 18 | 72 |
| 8 | 热管理 | 液冷板 | 铝合金6063 400×200×3.5mm | 1 | 350 | 350 |
| 9 | 热管理 | 导热硅胶垫 | 3W/mK 1mm | 16 | 12 | 192 |
| 10 | 热管理 | 进出水接头 | Φ16宝塔头 不锈钢 | 2 | 15 | 30 |
| 11 | 热管理 | 硅胶管 | 内径Φ16 耐温120°C | 2 | 8 | 16 |
| 12 | BMS | BMS主控板 | ARM M4 + CAN-FD | 1 | 180 | 180 |
| 13 | BMS | BMS从控板 | BQ76952 AFE | 4 | 85 | 340 |
| 14 | BMS | NTC热敏电阻 | 10kΩ B3950 | 8 | 3 | 24 |
| 15 | BMS | BMS连接器 | Amphenol 24pin | 5 | 12 | 60 |
| 16 | BMS | 均衡电阻 | 100Ω 1% 1206 | 64 | 0.5 | 32 |
| 17 | HV Box | 主保险丝 | 350A 60VDC | 1 | 45 | 45 |
| 18 | HV Box | 主接触器 | TE EV200AA | 2 | 120 | 240 |
| 19 | HV Box | 预充继电器 | OMRON G8N 12VDC | 1 | 35 | 35 |
| 20 | HV Box | 预充电阻 | 20Ω 50W 铝壳 | 1 | 8 | 8 |
| 21 | HV Box | 霍尔电流传感器 | ±400A 精度±1% | 1 | 65 | 65 |
| 22 | HV Box | 绝缘检测模块 IMD | ≥500Ω/V IEC 61557 | 1 | 85 | 85 |
| 23 | HV Box | HVIL互锁连接器 | 低压信号回路 拔插检测 | 2 | 18 | 36 |
| 24 | HV Box | 高压线束 | 35mm² 硅橡胶 耐温150°C | 4 | 25 | 100 |
| 25 | 结构件 | 壳体(上盖+下壳) | 铝合金型材 IP67 | 1 | 600 | 600 |
| 26 | 结构件 | 密封圈 | EPDM 50° 异型 | 1 | 35 | 35 |
| 27 | 结构件 | 泄压阀 | 0.8MPa 防爆 | 1 | 25 | 25 |
| 28 | 结构件 | 防爆阀 | IP67透气防水 | 2 | 12 | 24 |
| 29 | 结构件 | 安装吊耳 | 不锈钢304 M10 | 4 | 8 | 32 |
| 30 | 结构件 | 紧固件(螺栓/螺母) | M6/M8 不锈钢304 | 60 | 0.5 | 30 |
| 31 | 结构件 | FPC柔性排线 | 0.5mm间距 16pin | 4 | 6 | 24 |
| 32 | 结构件 | 标签/铭牌 | 激光打标 铭牌+警告标 | 1 | 5 | 5 |
| 合计 | ¥8,824 | |||||
| 地址 | 参数 | 类型 | 说明 |
|---|---|---|---|
| 40001 | 充电状态 | UINT16 | 1=待机 2=充电 3=故障 4=离线 |
| 40002 | 输出电压 | UINT16 | V × 10 |
| 40003 | 输出电流 | UINT16 | A × 10 |
| 40004 | 累计电量 | UINT32 | kWh × 100 |
| 40006 | SOC | UINT16 | % × 10 |
| 40007 | 枪温 | INT16 | ℃ × 10 |
| 40008 | 告警码 | UINT16 | 0=正常 |
从10kV电网到车辆电池的完整MW级闪充系统研发平台 · 覆盖配电/高压/液冷/BMS/EMS/功率调度全链路
| 位号 | 功能描述 | 供应商 / 型号 | 关键参数 | 数量 | 系统作用 | 备选型号 | 备注 |
|---|---|---|---|---|---|---|---|
| QF1 | 主进线空气断路器 | Schneider / Masterpact MTZ2 16 | 4P 1600A · AC1000V · Icu 65kA | 1 | 10kV侧总保护 | ABB Emax2 | 框架断路器 |
| KM1~KM4 | DC 主接触器 | TE Connectivity / KILOVAC EV200AAANA | 900VDC 500A · 线圈12V | 4 | 功率回路通断 | Panasonic AM | 预充并联 |
| FU1/FU2 | DC 熔断器 | Bussmann / 170M6810 | 1250A / 1000VDC · aR | 2 | 短路保护 | Ferraz | gPV 特性 |
| SPD1 | 浪涌保护器 | Phoenix Contact / VAL-MS-T1/T2 | 1000VDC · Type I+II | 2 | 防雷过压保护 | DEHN | 双极 |
| IMD1 | 绝缘监测仪 | Bender / Iso685-D | 0~1000VDC · 50kΩ | 1 | 直流绝缘监测 | Schoeffner | 符合IEC61557 |
| 位号 | 功能描述 | 供应商 / 型号 | 关键参数 | 数量 | 系统作用 | 备选型号 | 备注 |
|---|---|---|---|---|---|---|---|
| PFC-M1~16 | 图腾柱 PFC 模块 | Infy Power / IPM-62.5K-1000 | 62.5kW · AC400V→DC1000V | 16 | AC/DC 整流 | UUC Power | 多模块并联 |
| U1 | SiC MOSFET | Wolfspeed / CAB450M12XM3 | 1200V · 450A | 32 | 高频开关 | ST SiC | 每模块2颗 |
| L1 | Boost 电感 | 定制件 / Sendust Core | 220µH · 150A | 16 | 功率因数校正 | 铁硅铝 | 非标定制 |
| Cbus | DC Link 电容 | TDK EPCOS / B25690A | 1000V · 6800µF | 16 | 母线稳压 | KEMET | 薄膜电容 |
| 位号 | 功能描述 | 供应商 / 型号 | 关键参数 | 数量 | 系统作用 | 备选型号 | 备注 |
|---|---|---|---|---|---|---|---|
| DAB-M1~16 | 双向 DAB 模块 | StarCharge / DAB-62.5K | 62.5kW · 1000V↔200~1000V | 16 | 电压匹配/隔离 | Sinexcel | 双有源桥 |
| T1 | 高频变压器 | 定制 / 纳米晶磁芯 | 100kHz · 70kW | 16 | 隔离传能 | 铁氧体 | 非标定制 |
| U2 | SiC 功率模块 | Rohm / BSM600D12P3G001 | 1200V · 600A | 32 | 高频开关 | Wolfspeed | 每模块2颗 |
| 位号 | 功能描述 | 供应商 / 型号 | 关键参数 | 数量 | 系统作用 | 备选型号 | 备注 |
|---|---|---|---|---|---|---|---|
| P1 | 冷却循环泵 | Grundfos / CRN 15-10 | 25m³/h · H=20m | 2 | 冷却液循环 | Wilo | 一用一备 |
| HX1 | 板式换热器 | Alfa Laval / CB110 | 500kW · SS316 | 1 | 热量交换 | SWEP | 不锈钢 |
| GUN1/GUN2 | 液冷充电枪 | Phoenix Contact / CHARX connect pro | 1000A · 1000VDC | 4 | 车辆接口 | thermal management | 带液冷 |
| FT1 | 流量传感器 | Krohne / OPTIFLUX 1300 | 0~30m³/h · 4~20mA | 2 | 流量监测 | Endress | 电磁式 |
| 位号 | 功能描述 | 供应商 / 型号 | 关键参数 | 数量 | 系统作用 | 备选型号 | 备注 |
|---|---|---|---|---|---|---|---|
| CELL | LFP 电芯 | EVE / LF280K | 3.2V · 280Ah | 320 | 能量存储 | CATL | 磷酸铁锂 |
| MOD1~20 | 电池模组 | 定制 / 1P16S | 51.2V · 280Ah | 20 | 串并联单元 | — | 非标定制 |
| HVJB1 | 高压盒 | 定制 / HVJB-1000 | 1000V · 1000A | 1 | 高压配电 | — | 含熔断器 |
| BMU1 | BMS 主控 | NXP / S32K344 | CAN FD · Ethernet | 1 | 电池管理 | TI | 车规级 |
| 位号 | 功能描述 | 供应商 / 型号 | 关键参数 | 数量 | 系统作用 | 备选型号 | 备注 |
|---|---|---|---|---|---|---|---|
| BUS1 | DC 主母排 | 定制 / T2 铜排 镀锡 | 100×10mm | 若干 | PFC↔DC Bus | — | 非标定制 |
| CAB1 | 高压电缆 | Prysmian / EV Cable | 240mm² · 1500VDC | 若干 | DC/DC↔充电枪 | Leoni | 液冷兼容 |
| PE1 | PE 接地线 | 远东电缆 / 国标 | 95mm² · 黄绿双色 | 若干 | 保护接地 | 上上 | — |
| CAN1 | CAN FD 总线 | Belden / 9841 | 2×0.75mm² 屏蔽双绞 | 若干 | BMS 通信 | LAPP | — |
| 类别 | 设备名称 | 型号参考 | 推荐厂家 | 关键参数 | 数量 | 说明 | 手册下载 |
|---|---|---|---|---|---|---|---|
| 功率变换 | AC/DC PFC整流模块 | HCP-40K-SiC | 优优绿能/英飞源/通合 | 40kW, 380Vac→DC700-1000V | 按功率配 | SiC高频PFC, 功率因数≥0.99 | 📄 产品页 |
| DC/DC隔离模块 | HCD-40K-DC-SiC | 英飞源/优优绿能/华为 | 40kW, DC→DC 200-1000V | 按功率配 | 电气隔离, 宽电压输出 | 📄 产品页 | |
| 功率路由单元(PRU) | PRU-360K/720K | 自研/TE Connectivity | 多枪矩阵分配, 热插拔 | 1 | 功率池虚拟化, 动态分配 | — | |
| 功率模块散热基板 | 定制铝基板 | 飞荣达/中石科技 | 导热系数≥200W/mK | 按模块配 | 液冷散热基板 | — | |
| IGBT/SiC驱动板 | 2SP0115T | 英飞凌/三菱 | 门极驱动, 退饱和保护 | 按模块配 | 功率模块驱动 | 📄 PDF手册 | |
| 直流母线电容 | B43504/B43505 | EPCOS/TDK | 1000VDC, 1000-4700μF | 按模块配 | 直流支撑电容 | 📄 PDF手册 | |
| 配电保护 | 主进线断路器(ACB) | ABB Emax2/施耐德 MTZ | ABB/施耐德/正泰 | 1000-2000A, 4P, 10kV | 1 | 箱变低压侧总保护 | 📄 PDF手册 |
| 塑壳断路器(MCCB) | 施耐德 NSX/ABB TMax | 施耐德/ABB/德力西 | 250-630A, 3P | 按回路 | 充电回路分路保护 | 📄 选型指南 | |
| 直流熔断器 | BNFc 1000VDC | Bussmann(伊顿)/Mersen | 200-2000A/1000VDC | 每枪1 | 输出回路过流保护 | 📄 PDF手册 | |
| 直流接触器 | EVS/GV系列 | ABB/施耐德/EVCO | 200-1000A/1000VDC | 每枪2 | 充电回路通断控制 | — | |
| 浪涌保护器(SPD) | DEHNshield 3P+N | DEHN/菲尼克斯/欧姆龙 | T2+T3, 40kA | 1 | AC侧防雷保护 | 📄 PDF手册 | |
| 绝缘监测(IMD) | Bender ISOMETER | Bender/国产定制 | DC 0-1000V, 报警 | 1 | DC侧对地绝缘监测 | 📄 PDF手册 | |
| 充电控制 | VCU整车控制器 | 定制ARM/STM32 | 自研/均胜/德赛西威 | CAN/ETH, 充电协议栈 | 每枪1 | 车辆端充电控制, BMS通信 | — |
| EVCC电动车充电控制 | DIN 70121/ISO 15118 | 自研/Vector/EB | PLC+SLAC, DIN70121/OCPP | 每枪1 | 车端通信控制器 | 📄 规格书V3.1 | |
| SECC供电设备控制 | IEC 61851/OCPP 2.0.1 | 自研/Vector/ETAS | PLC+CP信号, PWM控制 | 每枪1 | 桩端通信控制器 | 📄 规格书 | |
| 充电主控板(MCU/DSP) | TMS320F2838x/STM32H7 | TI/ST/国产替代 | 功率分配, 泵阀PID, 故障联锁 | 1 | 站级主控, 全局调度 | 📄 产品页 | |
| BCU电池控制单元 | CAN2.0B/ISO 15118 | 自研/欣旺达/宁德 | BMS通信, SOC/SOH采集 | 每枪1 | 电池端控制接口 | — | |
| 通信计量 | 直流电能表 | DJSF1352-DC | 安科瑞/林洋/许继 | 1000VDC, 0.5级 | 每枪1 | 直流侧计量计费 | 📄 产品页 |
| 交流电能表 | APM810/DTSD341 | 安科瑞/威胜/林洋 | 3×220/380V, 0.5级 | 1 | 交流侧总计量 | 📄 下载中心 | |
| 4G/5G工业路由器 | TR321/TR341 | 移远/华为/研华 | 4G LTE, OPC/MQTT | 1 | OCPP上传云平台 | 📄 PDF手册 | |
| OCPP通信网关 | WebBox/自研网关 | 自研/ChargePoint/ABB | OCPP 1.6J/2.0.1 | 1 | 协议转换, 本地缓存 | 📄 规格书 | |
| 液冷散热 | 液冷源CDU | CRP-25/32/50 | 格兰富/定制/盾安 | 25-50kW换热, 12-24L/min | 1 | 循环冷却液, 温控±2℃ | — |
| 板式换热器HEX | BPHE-25/60 | Alfa Laval/SWEP/丹佛斯 | 不锈钢钎焊板换 | 1 | 一次/二次侧热交换 | 📄 PDF手册 | |
| 循环水泵 | MAGNA3/UPS系列 | 格兰富/威乐/南方泵业 | 变频离心泵, N+1冗余 | 2 | 冷却液循环驱动 | 📄 PDF手册 | |
| 液冷冷却液 | 50%乙二醇水溶液 | 陶氏/3M/国产 | -40℃防冻, 导热增强 | 按系统 | 初次充注+年度补充 | — | |
| 膨胀水箱 | 24L/36L不锈钢 | 自研/格兰富 | 压力补偿, 排气 | 1 | 系统压力平衡 | — | |
| 枪线连接 | 液冷充电枪(CCS2) | CCS2 200-500A | 菲尼克斯/永贵/H+S | 液冷枪线, 温升闭环 | 按枪数 | 欧标CCS2, 支持液冷 | 📄 产品页 |
| 液冷充电枪(国标) | GB/T 250A/200A | 永贵/中航光电/巴斯巴 | 国标直流枪, 液冷 | 按枪数 | 国标充电接口 | — | |
| 充电线缆 | 液冷电缆 95-185mm² | 莱尼/耐克森/远东 | DC液冷线, IP55 | 按枪数 | 液冷循环通道内置 | — | |
| 充电连接器端子 | CCS2/GB/T公母端 | 菲尼克斯/TE/中航光电 | 镀银铜合金, ≥10000次 | 按枪数 | 高寿命插拔端子 | 📄 产品页 | |
| 电池储能(可选) | 磷酸铁锂电芯 | 280Ah/314Ah方形 | 宁德时代/比亚迪/亿纬 | 3.2V, 循环6000+ | 按容量 | 储能削峰/光储充一体 | 📄 PDF手册 |
| BMS电池管理系统 | 从控+主控架构 | 科工电子/高特/协能 | SOC/SOH/均衡/热管理 | 1套 | 电池组监控保护 | — | |
| PCS储能变流器 | 50-100kW组串式 | 阳光电源/科华/上能 | DC→AC, 充放电双向 | 按容量 | 储能充放电控制 | — | |
| 土建辅材 | 配电柜体(GGD/GCS) | GGD低压柜/GCS抽屉柜 | 正泰/德力西/良信 | IP31-IP54 | 按方案 | 站内配电安装 | — |
| 电缆(YJV/YJV22) | 3×240+1×120mm² | 远东/宝胜/中天 | 铜芯交联, 0.6/1kV | 按距离 | 主回路电力电缆 | — | |
| 接地系统 | 镀锌扁钢/铜排 | 国内标准件 | 接地电阻≤4Ω | 1套 | 防雷接地+保护接地 | — | |
| 预制舱体(可选) | 6m/9m/12m集装箱 | 中集/富士康/定制 | IP55, 隔音保温 | 按方案 | 户外站设备舱 | — | |
| 消防安防 | 烟感/温感探测器 | JTY-GD/DISS451 | 海湾/青鸟/利达 | 烟温复合探测 | 按面积 | 站内火灾探测 | — |
| 气体灭火系统 | 七氟丙烷/全氟己酮 | 海湾/青鸟/国泰 | 柜式/管网, 洁净灭火 | 1套 | 电气设备间灭火 | — |