储能 EMS 社招面试

54 阅读32分钟

储能 EMS 社招面试:从设备接入到系统控制,如何讲清一条完整链路

本文面向储能 EMS、嵌入式软件与设备集成岗位,围绕系统架构、控制策略、通信协议、实时性、稳定性和工程交付梳理常见面试问题。

文中架构、流程和公式用于解释通用工程原理,不对应任何特定公司的产品或内部实现。所有数值示例均为教学假设,不代表实际项目配置、现场测试结果或认证结论。

准备储能 EMS 面试时,我发现一个容易走偏的地方:把准备工作变成协议名词和控制算法的堆砌。

能说出 Modbus、CAN、IEC 104,并不等于能解释一条控制指令怎样从上级系统到达 PCS;知道 SOC 和防逆流,也不等于能回答“电表失联之后还能不能继续控制”。

真正有区分度的,是把这条链路讲完整:

设备产生数据 → EMS 理解状态与能力 → 策略形成目标 → 控制层校验和分配 → 设备执行 → 测量反馈 → 异常处理与恢复。

这篇文章以这条链路为主线,不把某一种实现当成“标准答案”,而是讨论每个环节为什么需要这样设计、有哪些边界,以及面试时怎样回答得经得起追问。


一、先把系统讲清楚:EMS 不是协议转换器

1. 项目介绍:讲职责和闭环,不要只报设备清单

“介绍一下你做的 EMS 项目”,通常是后续追问的入口。

一个有效的介绍应包含四个层次:

  1. 业务场景:工商业储能、站级储能、光储协同,还是微电网。
  2. 系统对象:接入哪些设备,服务哪些上级系统。
  3. 关键问题:解决功率协调、并网限制、经济运行,还是交付和可靠性问题。
  4. 个人职责:独立开发了什么,参与维护了什么,哪些只是了解。

设备接入不是“读到寄存器就结束”。完整工作往往还包括单位与符号统一、异常值处理、通信失联判断、控制能力建模,以及现场协议差异适配。

如果工作重点在 Linux 应用、通信和系统集成,就应沿这条线展开。没有必要为了显得全面,把团队支持的所有策略都说成自己独立设计。

**面试自检:**我能否挑出一个真实问题,讲清楚现象、证据、判断过程、改动范围和验证结果?

2. EMS 分层架构:关键是让变化各归其位

一个通用的 EMS 可以按职责拆成以下几层:

上级接口层:云平台、监控系统、站级控制与调度接口
                         ↕
策略与控制层:运行模式、目标生成、约束处理、功率分配
                         ↕
数据与业务层:统一设备模型、状态、告警、配置、事件
                         ↕
设备适配层:协议解析、点表映射、控制编码、能力描述
                         ↕
通信资源层:串口、CAN、网络、事务队列、连接管理
                         ↕
现场设备:BMS、PCS、电表、光伏逆变器、温控等

这不是规定所有产品都必须有五个模块,而是在回答一个架构问题:设备协议变化、业务策略变化和上级接口变化,能否尽量局部处理?

例如,同一个功率字段可能在不同设备中采用不同单位、不同倍率和相反符号。设备适配层应把这些差异转换成统一语义,策略层不应到处写厂商判断。

但“统一接口”也不等于完全消除差异。有些设备只支持有功设定,有些支持功率因数控制,还有些需要先切模式再写目标。设备能力必须被显式描述,不能被一个通用接口掩盖。

3. 插件化和配置化:扩展性需要边界

插件化、数据库配置和点表驱动,是 EMS 中常见的扩展手段。

适合配置化的通常包括:

  • 地址、倍率、单位、枚举映射;
  • 采集周期、超时、重试次数;
  • 告警门限、显示条件和部分控制权限。

复杂握手、设备特有状态机、升级流程以及安全联锁,往往仍需代码支持。不能笼统声称“新增任何设备都不需要改代码”。

同样,动态加载库只说明模块可以在运行时加载,不自动说明它可以安全热更新。卸载之前还需要处理线程退出、在途调用、资源释放、状态迁移与接口兼容。否则,旧模块中的函数仍被调用,就可能导致崩溃。

配置化也必须考虑版本与验证。倍率误配、符号反转、地址偏移,对控制系统而言可能比显式报错更危险。

4. BMS、PCS、EMS:分工不是互相替代

可以先用一句话概括:

BMS 管电池状态与安全边界,PCS 管功率变换和底层控制,EMS 管系统级协调与运行目标。

再展开三者的边界:

系统主要职责EMS 需要关注的信息
BMS单体与温度监测、状态估计、能力评估、保护与联锁SOC、状态、允许充放电能力、禁充禁放、故障、数据有效性
PCS交直流变换、功率与电流控制、设备自保护工作模式、实际功率、可用能力、故障、指令执行状态
EMS设备协调、运行策略、指令仲裁、目标分配、上级反馈系统目标、约束、运行模式、执行偏差

SOC 算法并不是固定的“安时积分加卡尔曼滤波”。不同 BMS 可能采用不同的估计与修正方法,EMS 应理解其含义、更新周期和可信度,而不是默认某个算法一定存在。

也不应把均衡使能、保护阈值修改当作 EMS 的常规控制权。是否开放这些操作,要看设备接口、安全设计和授权范围。

5. EMS 与 SCADA:有重叠,但关注点不同

SCADA 通常侧重采集、监视、告警、历史数据和操作;EMS 更强调能量管理、预测、优化与设备协调。

实际产品中两者经常重叠:监控系统可能有控制功能,EMS 也需要画面和告警。区分时不宜说成“一个只能看,一个才能控”。

更有用的判断是:系统是否仅展示状态,还是会根据目标和约束,持续决定设备怎样运行。


二、控制策略:先定义符号,再讨论算法

6. 功率正负号为什么必须先讲

很多“控制算法问题”,实际起点是功率符号和测量位置没统一。

本文后续示例约定:

  • 并网点功率 P_grid > 0 表示从电网购电;
  • 储能交流侧功率 P_ess > 0 表示向站内放电,负值表示充电;
  • P_load 表示负载消耗功率;
  • P_pv 表示光伏发电功率。

在忽略损耗的简化模型下:

[ P_{grid}=P_{load}-P_{pv}-P_{ess} ]

因此,P_grid < 0 表示向电网送电。

现场使用时,还要说明电表装在哪里、CT 方向如何、数据是否同一时刻采集、辅助负载是否计入。相同的设备功率数值,在不同测量边界下不能直接相加。

7. EMS 常见策略:目标与约束要分开

常见功能包括定时充放电、削峰填谷、需量控制、防逆流、防过载、光储协同、SOC 管理和多单元分配。

它们不应被看作一组互不相干的开关。

一种清晰的理解方式是:

  • 目标层:按时段、调度或优化计划生成希望执行的功率。
  • 约束层:检查电池、PCS、并网、变压器和运行模式边界。
  • 执行层:分配、下发、反馈与修正。

例如,低电价时段希望充电,但变压器已经接近限制,此时计划必须让步。优化结果不能越过实时约束直接控制设备。

8. 防逆流:控制对象是并网点功率

防逆流通常利用并网点测量反馈,限制反送电达到允许范围。

若要求不向电网送电,可以让 P_grid 保持在一个小的正向裕量附近。但裕量不是越大越好:过大意味着多购电或不必要限发,过小则可能抵不过测量和响应延迟。

发现反送电趋势时,可能的动作包括:

  1. 减少储能放电;
  2. 在电池和 PCS 允许时增加储能充电;
  3. 在吸收能力不足时限制光伏;
  4. 按并网要求与系统设计采取其他处置。

顺序取决于经济目标、设备响应和安全条件,不能把“检测到逆流立即限光伏”当成唯一正确策略。

如果电池已满、被禁充,或 PCS 无法及时吸收功率,限发可能是必要动作。这里的权衡不是简单的“浪费或不浪费”,而是如何在约束之内尽量减少损失。

9. 防逆流为什么需要裕量、死区和迟滞

闭环链路中存在多种延迟:电表刷新、总线排队、协议收发、任务调度、策略计算、设备执行。

控制器看到的“当前功率”,实际上可能已经是过去的状态。负载突然减少时,即使 EMS 立刻计算,也不能保证整个系统立即停止反送电。

常见设计手段有:

  • 裕量:预留应对延迟与波动的空间;
  • 死区:避免测量噪声触发频繁小幅调节;
  • 迟滞:进入和退出采用不同条件,减少来回切换;
  • 持续时间判据:区分瞬态扰动与持续越限;
  • 数据有效性检查:避免使用失联或陈旧测量。

这些手段会影响响应速度和经济性,需要根据现场扰动测试确定。仅凭增加迟滞,不能推出某个固定的稳态误差或超调指标。

三相系统还要确认监管或合同要求针对总有功,还是逐相功率。三相合计未反送,不代表每一相都未反送;具体要求不能从某个项目推广成所有地区的规定。

10. 功率爬坡:平滑调节不能压过紧急约束

常规功率目标可以通过变化率限制避免突变:

[ P_{cmd}(k)=\operatorname{clip}\left(P_{target}(k),;P_{cmd}(k-1)-r_{down}\Delta t,;P_{cmd}(k-1)+r_{up}\Delta t\right) ]

这里 clip 表示把目标裁剪到给定区间,r_up 与 r_down 分别为上升和下降速率。

工程上至少要注意:

  • 上升和下降是否使用不同速率;
  • 周期发生抖动时,是否仍按实际时间计算;
  • 控制模式切换时,历史值怎样初始化;
  • 限值突然收紧时,是否需要跳过常规缓慢爬坡。

例如,BMS 突然给出禁放,不能仅为了平滑而继续按原慢速率维持较大放电功率。保护动作和紧急降额路径应与普通目标变化分开设计。

功率平滑可能改善运行状态,但“降低某个比例的变化率就延长某个比例的寿命”,需要电池实验和工况证据,不能由限速器本身推出。

11. 防过载:不能只看变压器的有功余量

储能充电会增加站内用电需求。防过载因此常通过限制充电、必要时增加放电,降低并网点或变压器负荷。

但它并不只是防逆流的反向版本:负载自身就可能使系统过载,即使储能没有充电,也需要处置。

变压器和线路约束还可能涉及:

  • 视在功率与无功功率;
  • 各相电流及不平衡;
  • 温度、持续时间与允许过载曲线;
  • 设备和保护定值。

理想情况下:

[ S=\sqrt{P^2+Q^2} ]

因此,不能直接把额定 kVA 当成等值的可用 kW。EMS 的监督调节也不替代断路器、继电保护和设备自身保护。

12. 削峰填谷与需量控制:看似相近,目标不同

削峰填谷通常围绕分时电价,在低价时充电、高价时放电。需量控制则关注结算规则下的最大需量,尽量避免形成新的高峰。

需量可能按一个时间窗口的平均功率结算,不一定等于瞬时功率。因此,策略需要理解窗口长度、累计状态和负载变化,而不只是看到某个瞬时值就停止充电。

峰谷套利是否划算,也不能只看价差。还要计入往返效率、辅助用电、电池衰减成本、运维与合同约束。

储能收益来源随地区与市场机制变化,并不固定只有几种。面试中说明假设,比背一个通用盈利清单更可靠。

13. 多储能单元分配:SOC 权重只是其中一步

一个单元能否参与分配,应先由状态和能力决定,再讨论权重。

典型判断包括:通信与数据有效、设备就绪、没有方向性禁用、SOC 在允许范围、BMS 与 PCS 提供相应能力。

对参与单元,可在统一测量侧和单位之后评估可用功率。若 BMS 给出的是直流电流限值,还需结合电压、方向和变换效率转换,不能直接与 PCS 交流功率比较。

随后再考虑 SOC、可用容量、温度、效率或寿命等权重。放电时让 SOC 较高的单元多承担,充电时让 SOC 较低的单元多承担,是常见思路,但不是所有场景都最优。

**SOC 百分比不是绝对能量。**两个容量不同的电池,即使 SOC 相同,剩余能量也不同;容量和健康状态应进入能量管理模型。

14. 饱和后的二次分配:保证总目标有去处

教学例子:目标放电功率为 90 kW,三个单元的初始分配分别为 45、27、18 kW,但第一个单元当前最多只能输出 30 kW。

如果简单截断,实际只分配了 75 kW。剩余 15 kW 应继续分给仍有余量的单元,而不是无声丢失。

一个通用流程是:

  1. 按权重初分配;
  2. 对达到限制的单元固定其功率;
  3. 计算尚未分配的剩余目标;
  4. 在未饱和单元之间重新分配;
  5. 直到目标分完,或所有单元都无余量。

若仍有不足,应向上级反馈不可达目标及原因。节点选择还需要考虑最短运行时间、切换代价和效率曲线,不能默认固定的负载比例一定是“高效区”。


三、快速响应与调度:快不等于绕过安全

15. 快速功率响应:首先定义测试指标

“响应时间是多少”必须附带定义。

起点可能是上级发送、EMS 完整收包或控制线程收到事件;终点可能是 PCS 接受指令、实际功率达到某个比例,或并网点功率进入允许误差带并保持。

这些指标不是一回事。

还要说明阶跃大小、方向、初始状态、测量刷新周期、计时方式、负载情况,以及统计平均值、分位数还是最坏值。没有这些条件,一个响应数字很难比较。

优化时应拆解整条链路:

接收与解析
  → 事件排队与任务唤醒
  → 状态读取与约束计算
  → 通信排队与发送
  → PCS 接收和执行
  → 测量刷新与反馈

线程唤醒很快,不代表端到端很快。串口占用、设备刷新周期和 PCS 动态,可能才是主要延迟。

16. 信号量、队列与共享状态:通知机制不是完整方案

快速通道可以采用信号量、条件变量、消息队列或其他事件机制。选择取决于是否跨进程、是否需要传递数据、是否保留每条事件,以及多指令如何处理。

两个动态库如果运行在同一进程内,通常可以共享进程内同步对象,并不因为库不同就必须使用跨进程信号量。跨进程同步也有多种机制;在支持的环境中,互斥锁还可以配置为进程共享,但需要共享内存与正确初始化。

更重要的是说明事件语义:

  • 每条指令都必须执行,还是只保留最新目标?
  • 新指令能否覆盖旧指令?
  • 状态和事件如何保证一致?
  • 工作线程读取的是完整快照,还是更新到一半的数据?
  • 队列过载后如何处置?

通知本身一般不等于数据传递,也不自动提供所有共享数据的一致性保证。事件驱动可以减少轮询等待,但实时性仍需测量。

17. 控制权仲裁:不要让多个来源直接写设备

云端、调度、本地计划、手动操作和快速控制,都可能产生目标。如果各自直接下发 PCS,容易发生后写覆盖、模式反复切换和目标竞争。

较清晰的结构是:

各来源提交请求 → 统一仲裁 → 安全约束检查 → 统一执行出口。

仲裁至少要处理:

  • 请求来源、权限、时间戳和有效期;
  • 当前运行模式和控制权归属;
  • 优先级与冲突处置;
  • 来源失联后的退出条件;
  • 模式切换时的平滑接管;
  • 保护触发后的闭锁与恢复条件。

一个“快速模式标志”可能参与实现,但它本身不等于完整仲裁状态机。快速路径也不能跳过权限、数据有效性和安全边界检查。

18. AGC 与一次调频:不能混为一谈

AGC,即自动发电控制,是调度与区域控制体系中的有功调节机制。储能站可能由 EMS、站级控制器或专门的电站控制器接收目标,再协调各单元执行。

一次调频通常根据本地频率偏差作出快速响应;AGC 通常与二次调频或调度有功控制相关。两者可能共用功率执行设备,但输入、控制层级、考核口径和时间尺度不同。

因此:

  • AGC 不是一个 PID 算法的别名;
  • 具备快速功率跟踪,不自动等于具备一次调频功能;
  • 实现有功设定接口,不自动证明完成 AGC 全流程或通过考核。

面试中应说明自己接触的是指令接入、目标分配、闭环控制,还是测试联调。

19. AVC 与 P–Q 能力边界

AVC,即自动电压控制,通常涉及电压、无功或功率因数目标。站级控制根据测量和设备能力,协调无功资源。

在理想化的视在功率边界下:

[ P^2+Q^2\leq S_{max}^2 ]

当有功提高时,可用无功空间可能减少。但实际 PCS 能力还受交流电压、电流、温度、直流条件和运行模式影响,应使用设备实际能力曲线。

BMS 的能量和充放电限制主要作用于电池有功链路;不能简单把无功上限直接等同于 BMS 的有功限值。与此同时,无功运行也有损耗及设备条件,并非完全不受直流侧状态影响。

20. 上级指令不可达:限幅之外还要说明原因

假设上级要求放电功率为 120 kW,但当前系统交流侧最多可提供 85 kW。正确行为不是强行追踪,也不是只把目标改为 85 kW 后不解释。

完整处理包括:

  1. 校验权限、模式、指令时效与取值;
  2. 确认设备状态和数据有效;
  3. 计算当前可行能力;
  4. 限制目标并分配到单元;
  5. 采集实际执行结果;
  6. 反馈能力不足及限制来源。

限制可能来自 BMS、PCS、线路、变压器、并网要求、爬坡或单元退出。

注意区分三个量:原始请求、限幅后目标、实际测量功率。设备尚未跟上目标时,实际功率还可能低于限幅值。

有符号功率不宜笼统写成“取所有数值的最小值”。更合适的是构造允许区间:

[ -P_{chg,max}\leq P_{cmd}\leq P_{dis,max} ]

再结合当前状态和变化率限制处理。


四、通信协议:答出数据怎样到达,而不是只列名词

21. Modbus TCP:面对的是字节流

Modbus TCP 使用 MBAP 头和 PDU。MBAP 头包含事务标识符、协议标识符、长度和单元标识符,其中长度字段计入后续的单元标识符与 PDU。

TCP 不保留应用报文边界。因此,接收程序需要累积数据、解析长度、确认完整报文,再处理可能紧随其后的下一帧。

只会讨论“粘包和拆包”还不够,还应检查:

  • 长度和功能码是否合法;
  • 事务标识是否匹配;
  • 异常响应怎样处理;
  • 超时、重连和重复请求怎样处置;
  • 16 位寄存器拼接 32 位整数或浮点数时,字序怎样定义。

**Modbus TCP 的多字节头字段及单个 16 位寄存器按高字节在前传输,但跨寄存器数值的字序并不统一。**跨寄存器的排列需要查设备点表,不能默认所有 32 位数值都采用同一种排列;Modbus RTU 的 CRC 线序则另有规定。

22. Modbus RTU 与 RS485:协议和物理层要分开

RS485 是电气接口规范,Modbus RTU 是可运行在其上的一种协议。常见两线 RS485 采用半双工,但 RS485 本身不规定所有应用必须是主从轮询。

对常见 Modbus RTU 系统,需要理解:

  • 地址、功能码、数据和 CRC 的结构;
  • CRC 在帧中的低字节先发送;
  • 帧间静默、发送方向控制、超时和重试;
  • 广播请求与无响应行为;
  • 地址范围与实际总线负载能力。

“最多 32 台设备”不是普遍上限。传统 RS485 的单位负载能力、现代收发器负载特性、终端与拓扑,以及 Modbus 地址范围,是不同问题。

23. RS485 控制请求慢:线程优先级不是总线优先级

提升线程优先级可能缩短 CPU 调度等待,但不能抢占已经在物理总线上发送的半个报文。

更可靠的办法是让采集和控制共用事务调度器:

  • 统一请求队列;
  • 控制与普通采集设置不同优先级;
  • 当前事务完整结束后再切换;
  • 对失联设备限制重试占用;
  • 设置等待上限,避免低优先级长期饥饿。

对于请求—响应协议,同一时间通常只有一个在途事务。控制超时后还要处理迟到响应,防止它被当成下一条请求的回复。

**CPU 调度和总线调度是两种资源问题。**面试中能把它们拆开,通常比笼统回答“提高实时线程优先级”更有价值。

24. CAN:仲裁解决竞争,但不保证所有报文及时到达

CAN 使用无破坏位仲裁,在仲裁字段的竞争中,显性位压过隐性位,失去仲裁的节点停止本次发送。

对可直接比较的同类数据帧,较低标识符通常具有更高优先级。但混合标准帧、扩展帧以及不同帧类型时,不能只把数字大小当成全部规则,需要考虑完整仲裁字段。

CAN 仲裁与应用层命令确认也不是一回事。链路层 ACK 不说明设备业务已经执行。

使用 Linux SocketCAN 时,应进一步关注过滤、错误状态、bus-off 恢复、发送排队、总线利用率和心跳超时。CAN 自身的 CRC 校验与设备应用协议额外校验也应分开说明。

25. IEC 104 与 IEC 101:链路确认不等于控制完成

IEC 60870-5-104 常用于远动通信,基于 TCP/IP,典型内容包括遥信、遥测、控制、设定值、总召和时钟同步。

三种帧的职责可以概括为:

  • I 帧:承载编号的信息传输,并包含收发序号机制;
  • S 帧:确认已接收的信息帧;
  • U 帧:处理启动、停止和测试等控制过程。

收到帧确认,只能说明相应链路信息被接收,不能直接解释为“PCS 已达到目标功率”。应用层的激活确认、终止,以及现场执行反馈,需要分别建模。

IEC 101 与 IEC 104 属于相关远动体系,前者采用串行链路。它们与 Modbus 的数据组织和控制语义不同,也不是“因为都能走串口就一样”。时标和品质是否出现,还取决于具体类型与配置,不是每条数据都具备。

26. IEC 61850:先理解模型,再谈报文

IEC 61850 不只是一个传输协议名,它包含信息模型、服务、通信映射及配置体系。

初步学习可围绕:

  • 逻辑节点、数据对象和数据属性;
  • MMS 客户端/服务器服务;
  • GOOSE 事件发布与订阅;
  • 采样值传输;
  • SCL 配置描述。

例如,测量和断路器功能可以通过标准化模型表达。它的价值不仅是“消息发得快”,也在于跨设备语义和配置的可理解性。

MMS 不宜简单标成“非实时协议”;不同服务有不同性能要求。GOOSE 的快速传输也需要网络、订阅端和应用处理共同满足条件,不能仅凭协议名称保证固定延迟。

了解概念、调通某项服务、完成系统集成,是不同层次。面试应说明自己处在哪个层次。

27. 云平台接口:协议送达不等于现场生效

MQTT、WebSocket 和自定义网络协议,都可能用于 EMS 上报和控制。

关键不是“支持哪一种”,而是是否具备:

  • 身份认证、加密和权限管理;
  • 命令标识、时效检查和去重;
  • 重连、补报及缓存上限;
  • 控制审计和执行反馈;
  • 云端失联后的本地运行策略。

MQTT QoS 描述相应传输阶段的消息交付语义,不自动保证现场动作“恰好执行一次”。涉及充放电或升级时,仍需业务层幂等和状态核对。

远程控制始终要经过本地模式与安全检查,不能因为来源是云平台就获得无限控制权。


五、Linux 与实时控制器:选择架构要说清代价

28. 为什么 EMS 常使用嵌入式 Linux

EMS 需要多设备通信、数据库、网络服务、日志、远程维护和升级,Linux 的生态适合这些系统级应用。

PCS 的电流环、调制及快速保护,则通常由专用 MCU、DSP 或其他控制单元承担。

这是一种职责分工,不是“Linux 绝对不能实时”。实时内核、CPU 隔离和调度策略可以改善确定性,但能否满足某项要求,仍取决于整个平台、驱动、负载和验证。

回答平台问题时,与其猜一个芯片型号,不如讲清自己真正掌握的处理器架构、接口、内存资源、系统版本和工具链。准确比具体更重要。

29. Linux 与 RTOS 怎样通信,中间控制器要不要保留

常见架构包括:单 Linux 控制器直接接设备、Linux 加独立实时控制器、异构多核内部共享内存或消息通信。

通信方式可能是以太网、串口、CAN、共享内存或核间消息。无论哪一种,都需要定义版本、序号、超时、心跳、状态同步和复位后的恢复。

减少中间控制器,可能缩短链路、降低硬件与维护成本;但也可能失去故障隔离、实时执行或已有接口能力。

核间通信也不能天然保证低延迟:中断、调度、缓存维护和排队仍然存在。

评估架构时,应问:**哪一项职责必须保留在独立单元中,它为系统承担了什么风险?**而不是只数处理器数量。

30. Watchdog:应监控业务进展,而不只是“还在喂狗”

看门狗可按职责理解为进程/线程健康监控、系统硬件看门狗,以及独立外部监控等层次。

如果喂狗线程正常运行,但控制线程卡住,系统仍可能持续喂狗。因此健康条件应尽量关联关键业务进展,例如采集周期推进、控制循环完成和必要资源可用。

硬件看门狗通常不依赖正常业务任务继续执行,但也不能自动恢复所有故障。仍需确认时钟、电源域、复位覆盖范围、启动阶段和调试配置。

排查“没有复位”时,应沿着链路取证:看门狗是否开启、是否超时、是否被其他路径喂狗、复位信号是否产生、复位后是否再次卡在启动,以及启动原因是否被记录。

31. NAND 与重启异常:先分层定位,不要先下结论

更换存储器后发生异常,可能涉及时序、电压、页与块几何、ECC、坏块标记、启动布局、驱动、分区或文件系统。

定位时可以依次观察:

  1. Bootloader 是否识别并完成启动;
  2. 内核是否报告读写或校验异常;
  3. 文件系统是否能挂载、读写和卸载;
  4. 关机时是否有进程退出或 I/O 阻塞;
  5. 复位链路是否正常。

应用退出、资源释放和文件系统同步,是有价值的排查方向,但不能把它们当成所有底层问题的根因。

日志型文件系统也不能保证任意掉电情况下所有应用数据都一致。数据库事务、文件原子替换、必要的持久化调用及掉电测试,需要一起设计。

32. Linux 启停流程:不要把发行版习惯当成统一规则

传统 SysV init 中,运行级别 0 通常用于关机,1 为单用户,6 为重启,2~5 的具体用途依发行版而定。

现代系统可能使用 systemd,也可能使用简化 init。停止顺序应以实际依赖、脚本和配置为准,不能笼统断言重启时一定按启动顺序完全反向执行。

对 EMS 来说,更重要的是停止业务的顺序:停止接收新任务、处置在途控制与升级、停止线程、持久化必要状态、关闭连接与存储资源。

正常停机、应用崩溃、看门狗复位和突然掉电,应分别设计恢复行为。“停止服务”也不应未经定义就等同于“立即断开所有设备”。


六、工程交付与优化:功能之外,系统怎样长期可用

33. OTA:一次成功升级不等于可靠升级体系

EMS 自身升级与现场子设备升级,是不同对象,通常使用不同的版本、传输和恢复机制。

一个完整升级流程至少包括:

  • 包来源、完整性、真实性和目标兼容性校验;
  • 操作授权及安全状态检查;
  • 稳定标识、传输与超时处理;
  • 分阶段进度反馈;
  • 写入后的版本和健康检查;
  • 失败恢复或回滚;
  • 审计及异常处理。

A/B 分区能帮助保留可启动版本,但数据格式迁移可能影响回滚。文件完整性检测也不等同于发行者身份认证,需要签名与可信密钥机制配合。

对子设备升级,还要确认中断后设备是否可恢复,以及升级时业务怎样退出。不能把某一种升级协议当成所有 BMS 或 PCS 的默认选择。

软件包交付的价值则在于依赖、安装、服务管理、配置迁移与回退都可重复,而不只是生成一个可执行文件。

34. MILP 与微电网:计划层必须接得住实时变化

混合整数线性规划可用于储能计划,把充放电功率等连续量,与充/放模式、设备启用等离散决策一起建模。

以储能能量 E 为状态,简化更新式为:

[ E_{k+1}=E_k+\eta_{chg}P_{chg,k}\Delta t-\frac{P_{dis,k}\Delta t}{\eta_{dis}} ]

其中充放电功率均取非负值;若功率为 kW、时间为小时,则能量为 kWh。还需增加能量范围、功率、设备状态和充放电互斥等约束。

目标可以考虑电费、需量和损耗,但电池衰减不天然是线性的。使用线性近似,应知道适用范围。

MILP 常用于计划和滚动优化,不意味着任何 MILP 都不可能实时求解;可行性取决于规模、求解器、硬件和时限。工程上通常仍由确定性的执行层,负责快速约束和异常降级。MPC 也不是天然适合任意短周期,同样需要验证求解时间。

微电网进一步涉及分布式能源协调、功率平衡、并离网管理和构网资源。离网描述不依赖主网的运行状态;孤岛描述与主网断开后局部网络继续带电,可能是计划或非计划的。

计划孤岛需要相应控制和保护,非计划孤岛需要按适用要求处置。恢复并网不仅是“锁相后合闸”,还涉及电压、频率、相位、同期检查、保护与开关协调。

35. 面试怎样体现工程能力:用证据说明边界

面试不必把每个问题都讲成自己已经完整做过。

更可信的表述分为三类:

  • 独立承担:能说明设计、实现、验证和交付责任;
  • 参与维护或联调:能说明改动范围、定位过程和与其他模块的关系;
  • 学习理解:能解释原理与适用边界,但不宣称实际落地。

描述故障时,可以沿着“现象 → 证据 → 假设 → 验证 → 修复 → 回归”展开。描述性能时,要说明测试条件;描述标准时,要区分理解、实现和符合性验证。

软件工程师往储能系统控制方向发展,也不是必须立即转去写全部底层驱动。更实用的路线是:在通信和交付能力之上,补齐电气测量边界、功率与能量关系、控制延迟、设备能力和系统约束,再根据职责深入实时系统、优化或底层平台。


七、面试前的系统自检清单

数据链路

  • 每个功率、电流字段的正负方向是否统一?
  • 单位、倍率和测量侧是否明确?
  • 是否保留时间戳、品质和有效性?
  • 通信正常但数据不更新,能否检测?
  • 多设备数据是否需要一致快照?

控制链路

  • 哪些来源有权提交目标,谁拥有当前控制权?
  • 禁充禁放和动态降额怎样进入执行路径?
  • 饱和后是否二次分配?
  • 紧急约束是否会被普通爬坡拖慢?
  • 能否区分请求、限幅目标、下发确认和实际结果?

通信与实时性

  • CPU 等待、队列等待、总线占用和设备响应各占多少时间?
  • 如何处理迟到、重复和失序指令?
  • 快速请求会不会被低优先级事务长期阻塞?
  • 响应测试的起点、终点和统计口径是什么?
  • 不达标时,是否能定位到具体阶段?

稳定性与交付

  • 主进程活着但关键业务停滞,能否发现?
  • 软件失效后,硬件复位链路是否经过验证?
  • 数据配置更新、掉电和升级是否有恢复方案?
  • 网络断开后,本地策略如何继续或退出?
  • 日志是否可追踪命令,又不会拖慢关键链路?

结语:能讲清闭环,比能背出名词更重要

储能 EMS 面试考察的,不只是 Linux 编程,也不只是电力术语。

更值得反复准备的是这几个问题:

  • 数据是否可信?
  • 目标是否合理?
  • 约束是否完整?
  • 指令是否真正执行?
  • 异常是否能被发现和处置?
  • 系统是否能稳定交付与恢复?

把设备、通信、控制、反馈和故障处理连成一条清晰链路,再如实说明自己承担的部分,才能让技术回答不止停留在名词层面。

EMS 的工程能力,最终体现在:用可信数据做决策,在约束内执行目标,并让每一次异常都有解释和处置路径。