news 2026/10/10 1:17:29

Zabbix 官方模板实战:使用 SNMP 全面监控 APC Smart-UPS SRT 8000 不间断电源

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zabbix 官方模板实战:使用 SNMP 全面监控 APC Smart-UPS SRT 8000 不间断电源
  • 指标监控
  • 可观测性
  • 告警
  • 运维

【免费下载链接】zabbix

Real-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.

项目地址:https://gitcode.com/gh_mirrors/zabbix2/zabbix
点击查看免费下载

本指南以 Zabbix 仓库内置的官方模板APC Smart-UPS SRT 8000 by SNMP为核心,系统讲解如何通过 SNMPv2 协议接入 APC Smart-UPS SRT 8000 的网络管理卡(NMC),采集市电输入、电池健康、输出负载、相位参数与外部传感器数据,并利用内置触发器实现电池低电量、高温、输入电压/频率越界、UPS 旁路/电池供电等关键告警。读完本文,你将掌握该模板的完整部署流程、全部宏与监控项含义、自动发现机制以及底层数据预处理原理,可直接落地到生产机房的 UPS 监控体系中。

模板概览与适用场景

APC Smart-UPS SRT 8000 是 APC 面向数据中心与关键负载的高端在线互动式(Smart-UPS)机型,通过 AP9640 / AP9641 等网络管理卡(NMC)提供 SNMP 管理能力。Zabbix 为其提供开箱即用的官方模板,位于仓库 templates/power/apc/apc_ups_smart_srt_8000_snmp/ 目录,核心定义文件为 template_power_apc_ups_smart_srt_8000_snmp.yaml。

该模板覆盖三类 MIB:

  • PowerNet-MIB:APC 私有 MIB(企业子树1.3.6.1.4.1.318),承载 UPS 身份、电池、输入输出等全部核心指标;
  • SNMPv2-MIB:提供sysUpTime、sysName、sysLocation、sysContact等系统基础信息;
  • HOST-RESOURCES-MIB:提供hrSystemUptime,用于区分“硬件启动时间”与“网络管理部分启动时间”。

模板 YAML 头部声明其由官方模板工具 "Templator" 生成,wizard_ready: 'YES',即支持通过 Zabbix 主机向导一键创建并自动链接。

注意:README 明确建议,为保证模板正常工作,请将 NMC 固件升级到最新版本。

前置要求与兼容性

项目要求
Zabbix 版本8.0 及以上
设备型号APC Smart-UPS SRT 8000(模板已在该机型上验证)
管理协议SNMPv2(需在设备 NMC 上启用并配置只读 community)
固件建议使用最新 NMC 固件

除本机型外,仓库 templates/power/apc/ 目录下还提供 Galaxy 3500、Smart 2200/3000、Smart RT 系列、Symmetra 系列等多个 APC 模板,结构完全一致,可参照本文思路复用。

快速部署:三步接入

1. 创建 SNMPv2 主机

在 Zabbix 前端进入Configuration → Hosts → Create host,填写主机名,并在 Interfaces 中添加类型为SNMP的接口:

  • SNMP version:选择SNMPv2
  • IP address / DNS:填写 APC Smart-UPS SRT 8000 的管理 IP(NMC 地址)
  • Port:默认161
  • Community:与 NMC 上配置的只读 community 一致

2. 链接模板

在主机配置页的Templates字段中链接模板APC Smart-UPS SRT 8000 by SNMP。链接后模板内的 20 余个监控项、触发器、自动发现规则及仪表盘会立即生效。

3. 按需定制宏

模板内置了 10 个用户宏,用于控制触发器的阈值与时间窗口。如果机房供电环境特殊(例如电压不稳、负载长期偏高),可在Macros选项卡中覆盖默认值,无需修改模板本身。

宏(Macros)详解

模板定义的宏如下(默认值直接取自模板定义,在 template_power_apc_ups_smart_srt_8000_snmp.yaml 的macros段落中可看到其分组、优先级与正则校验):

宏名说明默认值
{$BATTERY.TEMP.MAX.WARN}电池最高温度告警阈值(℃)55
{$BATTERY.CAPACITY.MIN.WARN}电池最低剩余容量告警阈值(%)50
{$UPS.OUTPUT.MAX.WARN}输出负载最高告警阈值(%)80
{$UPS.INPUT_FREQ.MIN.WARN}输入频率下限(Hz)49.7
{$UPS.INPUT_FREQ.MAX.WARN}输入频率上限(Hz)50.3
{$UPS.INPUT_VOLT.MIN.WARN}输入电压下限(V)197
{$UPS.INPUT_VOLT.MAX.WARN}输入电压上限(V)243
{$TIME.PERIOD}触发器计算所用时间窗口15m
{$SNMP.TIMEOUT}SNMP 可用性判定时间间隔5m
{$SNMP.UPTIME.WARN}"主机已重启"问题自动恢复的 uptime 阈值10m

从 YAML 的宏定义还可看到细节:阈值类宏(如{$BATTERY.CAPACITY.MIN.WARN}、{$UPS.OUTPUT.MAX.WARN})声明了取值范围约束(0–100),并带有正则校验^-?([0-9]+|(([0-9]+)\.([0-9]+)))$,防止在主机向导中输入非法字符;宏按Thresholds(阈值)与Other(其他)两个分组组织,优先级编号决定了向导中的展示顺序。

监控项(Items)详解

模板通过 SNMP agent 类型监控项采集数据,并按主题分为几组。以下为完整清单(含 OID 与预处理信息,OID 均来自模板 YAML):

身份与资产信息

监控项说明Key / OID预处理
ModelUPS 型号名(如 'APC Smart-UPS 600'),MIB: PowerNet-MIBsystem.model[upsBasicIdentModel]/.1.1.1.1.1.1.0心跳去重 6h
Serial number内部微处理器序列号(8 字符,注意 ≠ 机身背面序列号)system.sn[upsAdvIdentSerialNumber]/.1.1.1.1.2.3.0心跳去重 6h
Battery last replace date电池最后更换日期(mm/dd/yy 或 yyyy;更换电池后应由管理员重置)battery.last_replace_date[upsBasicBatteryLastReplaceDate]/.1.1.1.2.1.3.0心跳去重 6h
External battery packs count外接电池包数量(非智能电池时返回 ERROR_NO_SUCH_NAME)battery.external_packs_count[upsAdvBatteryNumOfBattPacks]/.1.1.1.2.2.5.0心跳去重 6h

说明:上表 OID 省略了 PowerNet-MIB 企业前缀1.3.6.1.4.1.318,例如 Model 的完整 OID 为1.3.6.1.4.1.318.1.1.1.1.1.1.0,后续各表同理。

电池状态与健康

监控项说明Key / OID预处理
Battery status电池状态(unknown=1/normal=2/low=3/in fault condition=4)battery.status[upsBasicBatteryStatus]/.1.1.1.2.1.1.0值映射 + 心跳去重 6h
Battery capacity剩余容量(% of full capacity)battery.capacity[upsHighPrecBatteryCapacity]/.1.1.1.2.3.1.0乘数 0.1 + 心跳去重 6h
Battery runtime remaining电池耗尽前剩余运行时间(秒)battery.runtime_remaining[upsAdvBatteryRunTimeRemaining]/.1.1.1.2.2.3.0乘数 0.01 + 心跳去重 6h
Battery voltage电池母线实际电压(V)battery.voltage[upsHighPrecBatteryActualVoltage]/.1.1.1.2.3.4.0乘数 0.1 + 心跳去重 6h
Battery replace indicator电池是否需要更换(no=1/yes=2)battery.replace_indicator[upsAdvBatteryReplaceIndicator]/.1.1.1.2.2.4.0值映射 + 心跳去重 6h
Battery temperature电池内部温度(℃,低于 0 读为 0)battery.temperature[upsHighPrecBatteryTemperature]/.1.1.1.2.3.2.0乘数 0.1 + 心跳去重 6h

输入侧(市电)

监控项说明Key / OID预处理
Input voltage市电线路电压(VAC)input.voltage[upsHighPrecInputLineVoltage]/.1.1.1.3.3.1.0乘数 0.1 + 心跳去重 6h
Input frequencyUPS 输入频率(Hz)input.frequency[upsHighPrecInputFrequency]/.1.1.1.3.3.4.0乘数 0.1 + 心跳去重 6h
Input fail cause上次切换到电池供电的原因,取值:noTransfer(1)、highLineVoltage(2)、brownout(3)、blackout(4)、smallMomentarySag(5)、deepMomentarySag(6)、smallMomentarySpike(7)、largeMomentarySpike(8)、selfTest(9)、rateOfVoltageChange(10)input.fail[upsAdvInputLineFailCause]/.1.1.1.3.2.5.0值映射 + 心跳去重 6h

输出侧(负载)

监控项说明Key / OID预处理
Output voltageUPS 输出电压(VAC)output.voltage[upsHighPrecOutputVoltage]/.1.1.1.4.3.1.0乘数 0.1 + 心跳去重 6h
Output load当前负载(占额定容量百分比)output.load[upsHighPrecOutputLoad]/.1.1.1.4.3.3.0乘数 0.1 + 心跳去重 6h
Output current负载电流(A)output.current[upsHighPrecOutputCurrent]/.1.1.1.4.3.4.0乘数 0.1 + 心跳去重 6h
Output statusUPS 当前状态(unknown=1…charger only=26,详见下文值映射)output.status[upsBasicOutputStatus]/.1.1.1.4.1.1.0值映射 + 心跳去重 6h

系统基础信息(SNMPv2-MIB / HOST-RESOURCES-MIB)

监控项说明Key / OID预处理
System location节点物理位置system.location[sysLocation.0]/1.3.6.1.2.1.1.6.0心跳去重 6h,写入资产位置
System contact details节点联系人信息system.contact[sysContact.0]/1.3.6.1.2.1.1.4.0心跳去重 12h,写入资产联系人
System object ID厂商权威标识(SMI enterprises 子树)system.objectid[sysObjectID.0]/1.3.6.1.2.1.1.2.0心跳去重 6h
System name节点管理名(惯例为 FQDN)system.name[sysName.0]/1.3.6.1.2.1.1.5.0心跳去重 6h,写入资产名称
System description硬件/系统/软件版本描述system.descr[sysDescr.0]/1.3.6.1.2.1.1.1.0心跳去重 12h
Uptime (network)网络管理部分自上次重新初始化以来的时间(百分之一秒)system.net.uptime[sysUpTime.0]/1.3.6.1.2.1.1.3.0乘数 0.01,单位 uptime
Uptime (hardware)主机自上次初始化以来的时间(区别于 sysUpTime)system.hw.uptime[hrSystemUptime.0]/1.3.6.1.2.1.25.1.1.0支持性检查 + 失败置 0 + 乘数 0.01
SNMP agent availabilitySNMP 轮询可用性(0=不可用/1=可用/2=未知)zabbix[host,snmp,available]内部监控项
SNMP traps (fallback)收集未被其他 snmptrap 项匹配的 SNMP 陷阱snmptrap.fallbackSNMP trap 类型

值得注意的细节:system.hw.uptime设置了CHECK_NOT_SUPPORTED预处理,当设备不支持该 OID(返回any error)时将值置为0并继续采集,避免整条链路因单个 OID 不支持而失败;snmptrap.fallback使用日志格式hh:mm:sszyyyy/MM/dd,用于兜底接收未匹配的陷阱报文。资产类监控项(名称、位置、联系人)通过inventory_link自动回填主机资产字段。

触发器(Triggers)与告警策略

模板内置触发器分为“固定监控项触发器”与“LLD 原型触发器”两类,完整清单如下:

固定触发器

触发器名称表达式要点严重级别
Battery has an internal error conditionlast(battery.status)=4Average
Battery is Lowlast(battery.status)=3Average
Battery has low capacitylast(battery.capacity) < {$BATTERY.CAPACITY.MIN.WARN}High
Battery needs replacementlast(battery.replace_indicator)=2High
Battery has high temperaturemin(battery.temperature,{$TIME.PERIOD}) > {$BATTERY.TEMP.MAX.WARN}High
Unacceptable input voltagemin(input.voltage)>0 and (min > {$UPS.INPUT_VOLT.MAX.WARN} or max < {$UPS.INPUT_VOLT.MIN.WARN})High
Unacceptable input frequencymin(input.frequency)>0 and (min > {$UPS.INPUT_FREQ.MAX.WARN} or max < {$UPS.INPUT_FREQ.MIN.WARN})High
Output load is highmin(output.load,{$TIME.PERIOD}) > {$UPS.OUTPUT.MAX.WARN}High
UPS is Timed Sleepinglast(output.status)=5Average
UPS is Switched Bypasslast(output.status)=9Average
UPS is Software Bypasslast(output.status)=6Average
UPS is Sleeping Until Power Returnlast(output.status)=11Average
UPS is Rebootinglast(output.status)=8Average
UPS is On Smart Trimlast(output.status)=12Average
UPS is on Smart Boostlast(output.status)=4Average
UPS is on batterylast(output.status)=3Average
UPS is Offlast(output.status)=7Average
UPS is Emergency Static Bypasslast(output.status)=16Average
UPS is Hardware Failure Bypasslast(output.status)=10Average
Host has been restarted硬件或网络 uptime 计数回退(含 32 位计数器回绕判断),重启后 uptime 超过 {$SNMP.UPTIME.WARN} 自动恢复Warning
System name has changed前后两次 sysName 不同且非空Info(需手动确认)
No SNMP data collectionmax(zabbix[host,snmp,available],{$SNMP.TIMEOUT})=0Warning

几个关键设计点:

  • 电压/频率触发器采用“先排除 0 值再比较”的模式(min(...)>0 and (...)),避免设备在初始化瞬间上报 0 值造成误报;同时用min/max在{$TIME.PERIOD}(默认 15 分钟)窗口内分别捕捉越上界与越下界两种情形。
  • "Host has been restarted"触发器是模板中最复杂的表达式:它同时检测硬件 uptime 与网络 uptime,当探测到计数回退且前一值未接近 32 位计数器上限(约 497 天)时触发,并设置了恢复表达式——uptime 超过{$SNMP.UPTIME.WARN}即自动关闭。它还依赖 "No SNMP data collection"(依赖关系防止 SNMP 中断时误判重启)。
  • 部分触发器设置了event_name与opdata,事件名与操作数据中直接携带当前值与阈值(如Current temperature: {ITEM.LASTVALUE1}),便于告警通知中直接看到实测数据。

自动发现(LLD)与原型监控

针对可插拔、数量可变的组件,模板使用 6 条 LLD 规则动态生成监控项,轮询周期均为 1 小时:

输入/输出相位发现

规则Key发现 OID生成的原型监控项
Input phases discoveryinput.phases.discovery1.3.6.1.4.1.318.1.1.1.9.2.3.1.2.1.1{#PHASEINDEX}: Phase input voltage(V)、{#PHASEINDEX}: Phase input current(乘数 0.1,A)
Output phases discoveryoutput.phases.discovery1.3.6.1.4.1.318.1.1.1.9.3.3.1.2.1.1{#PHASEINDEX}: Phase output voltage(V)、Phase output current(乘数 0.1,A)、Phase output load, %

相位电压均附带原型触发器"Unacceptable phase {#PHASEINDEX} input/output voltage"(High 级别),复用{$UPS.INPUT_VOLT.MIN.WARN}/{$UPS.INPUT_VOLT.MAX.WARN}阈值,对三相输入的每一相独立告警。

外部电池包发现

规则Key说明
External battery packs discoverybattery.packs.discovery遍历1.3.6.1.4.1.318.1.1.1.2.3.10.2.1表,过滤空状态,生成{#BATTERY_PACK}.{#CARTRIDGE_INDEX}系列
External bad battery packs discoverybattery.packs.bad.discovery发现缺陷电池包数量(1.3.6.1.4.1.318.1.1.1.2.2.6,过滤值-1)

每个电池包/电池芯原型生成 5 个监控项:Battery status、Battery temperature(乘数 0.1)、Serial number、Battery estimated replace date、Battery pack cartridge health。其中两个状态型监控项以 16 位比特串形式上报,原型触发器用正则判断:

  • find(...,"regexp","^(0{16})$")=0→Battery status is not okay(Warning):只要 16 位状态串非全 0 即告警。比特位含义:bit 0 Disconnected、bit 1 Overvoltage、bit 2 NeedsReplacement、bit 3 OvertemperatureCritical、bit 4 Charger、bit 5 TemperatureSensor、bit 6 BusSoftStart、bit 7 OvertemperatureWarning、bit 8 GeneralError、bit 9 Communication、bit 10 DisconnectedFrame、bit 11 FirmwareMismatch。
  • find(...,"regexp","^(0)[0|1]{15}$")=1→Battery lifetime is not okay(Warning):当健康度首比特为 0 且后续 15 位存在置位(即寿命异常位被标记)时告警。健康位含义:bit 0 寿命正常、bit 1 寿命接近终点请订购、bit 2 寿命已超期请更换、bit 3/4 已确认的对应状态、bit 5/6 实测寿命相关状态。

另有Battery has high temperature原型触发器(High 级别),复用{$BATTERY.TEMP.MAX.WARN}。

外部传感器发现

规则Key说明
External sensor port 1 discoveryexternal.sensor1.discovery遍历1.3.6.1.4.1.318.1.1.25.1.2.1表(uioSensorStatusTable)
External sensor port 2 discoveryexternal.sensor2.discovery遍历1.3.6.1.4.1.318.1.1.25.1.2.2表

每个已发现的外部传感器(如温湿度探头)生成 3 个监控项:

  • {#EXTERNAL_SENSORx_NAME}: Temperature sensor(℃,-1 表示通信丢失导致的无效读数)
  • {#EXTERNAL_SENSORx_NAME}: Humidity sensor(相对湿度 %,-1 表示不支持湿度或通信丢失)
  • {#EXTERNAL_SENSORx_NAME}: Sensor alarm status(Normal=1/Warning=2/Critical=3/Not applicable=4)

对应 3 个原型触发器:Sensor has status Critical(High)、Warning(Average)、Not Applicable(Info,表示传感器未工作或未连接)。模板还针对传感器端口设置了 LLD override:当发现宏{#EXTERNAL_SENSORx_NAME}包含 "Temp" 时,跳过名称含 "Humidity" 的项(NO_DISCOVER),避免纯温度探头产生无意义的湿度监控项。

数据预处理原理

模板大量使用两种预处理步骤,理解其原理有助于调优:

  • Custom multiplier(自定义倍数):PowerNet-MIB 中upsHighPrec*系列 OID 为保留一位小数的定点数(如电压上报2428表示 242.8V),因此乘数0.1;upsAdvBatteryRunTimeRemaining以百分之一秒计,乘数0.01换算为秒。该步骤在 Zabbix Server 端预处理流水线中由ZBX_PREPROC_MULTIPLIER分支执行(见 src/libs/zbxpreproc/pp_execute.c),经过宏展开后调用乘法实现,得到真实物理量后按监控项声明的单位(V/Hz/A/%/℃/s)展示。
  • Discard unchanged with heartbeat(心跳去重):对变化缓慢的指标(如型号、序列号、位置、输出状态)设置6h/12h心跳,值不变时不写入历史数据库,显著降低存储开销;而快速变化的电压、频率、负载等指标不启用该步骤,保证曲线完整。

此外,Uptime (hardware)使用Check for not supported value(失败时自定义值为0)预处理,将不支持的 OID 优雅降级为 0,这是模板健壮性的体现。

值映射与可读性

模板在 YAML 的valuemaps段定义了 6 张值映射表,把原始数字转换为可读文本:

  • PowerNet-MIB::upsBasicBatteryStatus:1=Unknown、2=Normal、3=Low、4=In Fault Condition
  • PowerNet-MIB::upsBasicOutputStatus:1=Unknown、2=Online、3=On Battery、4=On Smart Boost、5=Timed Sleeping、6=Software Bypass、7=Off、8=Rebooting、9=Switched Bypass、10=Hardware Failure Bypass、11=Sleeping Until Power Return、12=On Smart Trim、13=Eco Mode、14=Hot Standby、15=On Battery Test、16=Emergency Static Bypass、17=Static Bypass Standby、18=Power Saving Mode、19=Spot Mode、20=E-Conversion、21=Charger Spotmode、22=Inverter Spotmode、23=Active Load、24=Battery Discharge Spotmode、25=Inverter Standby、26=Charger Only
  • PowerNet-MIB::upsAdvBatteryReplaceIndicator:1=no Battery Needs Replacing、2=battery Needs Replacing
  • PowerNet-MIB::upsAdvInputLineFailCause:no Transfer / High Line Voltage / Brownout / Blackout / Small/Deep Momentary Sag / Small/Large Momentary Spike / Self Test / Rate of Voltage Change
  • PowerNet-MIB::uioSensorStatusAlarmStatus:Normal / Warning / Critical / Not applicable
  • zabbix.host.available:not available / available / unknown

正是由于值映射的存在,input.fail这类枚举型监控项才能直接看到 "Blackout"、"Brownout" 等语义化结果,配合 "Host has been restarted"、"No SNMP data collection" 触发器,可以快速还原市电跌落事件的全貌。

内置仪表盘与图形

模板附带一个名为APC Smart-UPS SRT 8000: General的仪表盘(YAMLdashboards段),包含三张预定义图形:

  • Voltage(电压):叠加input.voltage与output.voltage两条线,直观对比市电输入与 UPS 稳压输出;
  • Capacity of the UPS batteries(电池容量):饼图展示battery.capacity当前占比;
  • Output(输出):叠加output.current与output.load,观察负载电流与负载百分比的关系。

链接模板后,这些图形会自动出现在主机的 Dashboards 中,无需手工创建。

部署验证与排障

接入完成后建议按以下顺序验证:

  1. 打开Latest data,确认Model、Serial number、Battery status等资产/状态项已返回非空值;若出现 "Not supported",先用snmpwalk -v2c -c <community> <IP> 1.3.6.1.4.1.318.1.1.1在命令行验证 OID 可达性。
  2. 观察Uptime (hardware)与Uptime (network)是否持续增长;若硬件 uptime 不支持(被预处理置 0),不影响其余指标。
  3. 检查Problems中是否出现 "No SNMP data collection",该触发器由内部监控项zabbix[host,snmp,available]驱动,在{$SNMP.TIMEOUT}(默认 5 分钟)内连续不可用即告警。
  4. 人为断开市电测试:应依次看到 "UPS is on battery"(Average)→ 若持续停电则 "Battery is Low"(Average)→ 容量跌破阈值触发 "Battery has low capacity"(High),同时Input fail cause值映射显示为 Blackout 或 Brownout。
  5. 确认相位发现是否生效:进入Discovery rules,查看 Input/Output phases discovery 的执行结果,三相设备应生成 3 组{#PHASEINDEX}原型项。

若模板行为与预期不符,优先核对 NMC 固件版本(README 明确要求使用最新固件)与 SNMP community 权限。同时,仓库中的同族模板(如 apc_ups_smart_srt_5000_snmp)可作为对比参考,帮助定位是设备能力差异还是配置问题。

  • 指标监控
  • 可观测性
  • 告警
  • 运维

【免费下载链接】zabbix

Real-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.

项目地址:https://gitcode.com/gh_mirrors/zabbix2/zabbix
点击查看免费下载
上一篇:Browsersync文件监听机制揭秘:实时刷新和CSS注入的终极指南
下一篇:推荐开源项目:Docup - 简单易用的Markdown文档渲染工具

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 1:16:21

PaddleX 海光 DCU 产线支持指南:基础产线、模型与部署实战

人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG 【免费下载链接】PaddleX All-in-One Development Tool based on PaddlePaddle 项目地址&#xff1a; https://gitcode.com/paddlepaddle/PaddleX 点击查看 免费下载 本文以仓库文档 docs/support_list/pipelines_l…

作者头像 李华
网站建设 2026/10/10 1:15:05

机器学习天气预测作业全流程:数据清洗到随机森林调参实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/10 1:14:11

2024电工杯B题微电网储能优化配置:建模主线与求解代码避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/10 1:13:38

PCA9422+ATmega1280构建硬件级电源管理闭环系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/10 1:13:29

海湾消防主机图形显示器4.0:从报警定位到平面图联动的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华