电话&微信

18600577194

设备交付现场后出了问题怎么排查?硬件和固件需要预留哪些诊断能力

标签: 嵌入式开发 智能硬件开发 2026-09-29 

设备在研发实验室里出现故障,通常并不可怕。

工程师就在旁边,可以接示波器、逻辑分析仪、调试器,重新烧录程序,也可以直接修改代码观察现象。

真正麻烦的是设备已经安装到客户现场以后,偶尔出现一句:

“昨天设备自己重启了一次。”

或者:

“有时候通信会断,但重新上电又正常。”

如果设备没有留下任何运行信息,研发人员能够得到的线索可能只有:

“当时好像出了问题。”

这时候即使硬件和软件本身并不复杂,故障定位也可能变得非常困难。

因为工程师不知道设备为什么复位、复位前在执行什么任务、通信错误出现过多少次、电源有没有异常、当前运行的到底是哪一个固件版本。

所以对需要长期现场运行的主控板、工业电子设备和IoT终端来说,诊断能力并不是产品出问题以后临时增加的功能。

它更适合在研发阶段就成为系统设计的一部分。

设备诊断能力分层图.jpeg


一个“偶发重启”为什么可能排查很多天

假设一台工业采集设备在客户现场运行了两个月。

客户反馈设备大约每隔几天会自动重新启动一次,但没有明显规律。

从现象来看,可能的原因很多:

程序异常触发看门狗;

输入电源瞬间跌落;

某个外设通信卡死;

电磁干扰影响MCU;

内存使用异常;

人工误操作;

远程升级或参数修改。

如果设备重启后所有状态都恢复默认,而系统也没有保留复位原因和关键日志,那么每一次故障都会把现场证据一起清掉。

研发人员最后往往只能尝试:

修改程序、换电源、换主板、增加延时,再等下一次问题出现。

这种方法成本很高,而且很容易把偶发问题“暂时掩盖”,却没有真正找到根因。

如果设备能够在重新启动后告诉系统:

上次复位原因:Watchdog
固件版本:V1.4.2
故障前任务:RS485采集
通信超时累计:37次
最近异常码:COMM_TIMEOUT

排查范围就会迅速缩小。

所以诊断设计真正的价值不是“记录更多数据”,而是:

让设备故障以后仍然能够保留足够的证据。

硬件需要先保证“有地方可以测”

诊断能力首先不是软件问题。

如果PCB上关键位置根本无法测量,再完整的日志也不能解决所有问题。

研发样机阶段通常建议保留基本的测试和调试条件,例如关键电源测试点、复位信号、重要通信线以及SWD/JTAG等调试接口。

这些接口不一定全部暴露给最终用户。

它们的主要价值是在:

样机联调、返修、试产和现场维修阶段,为工程人员提供直接观察硬件状态的入口。

例如设备出现周期性复位时,如果可以方便测量3.3V电源,就能够快速判断:

这是程序主动复位,还是供电瞬间跌落导致MCU重新启动。

如果没有测试点,只能在已经装配好的设备上临时飞线,故障排查本身就可能变成新的风险。

电源状态最好能够被设备自己感知一部分

很多现场故障最终都会回到电源问题。

但设备真正出问题时,工程师往往并不在现场。

所以对于电源敏感或者运行环境复杂的设备,可以评估是否需要让主控自身监测部分关键电压。

例如:

24V输入;

主控3.3V;

电池电压;

某个关键传感器供电。

并不是所有项目都需要做完整电源遥测。

但如果某一路电压直接决定设备稳定性,在硬件允许的情况下保留检测能力,会显著提高后续诊断效率。

例如设备日志记录:

复位前最低输入电压:18.7V

相比只有:

设备发生重启

显然能够提供更多工程判断依据。

MCU为什么应该保存“我是怎么重新启动的”

大多数MCU都能够提供一定的复位原因信息。

不同芯片实现不同,但通常可以区分部分情况,例如:

上电复位;

外部Reset;

看门狗;

Brown-out;

软件复位。

这个信息很容易被忽略。

程序一启动就初始化外设,把相关寄存器清掉,之后再也无法知道发生过什么。

更合理的做法是:

系统启动后的早期阶段先读取复位原因,并在需要时保存下来。

之后再进行正常初始化。

这样即使设备已经重新运行,后台或维护人员仍然可以看到:

“这次启动是由于看门狗,而不是正常掉电。”

对于偶发故障,这种信息非常有价值。

故障码比一句“系统异常”更有用

很多设备出现问题时只会显示:

ERROR

或者:

设备异常。

这种提示对用户可能已经足够,但对研发人员几乎没有诊断价值。

更好的做法是把故障按类型进行区分。

例如:

E101  温度传感器无响应
E203  RS485连续通信超时
E305  本地存储写入失败
E401  参数校验错误

故障码本身不需要设计得特别复杂。

关键是:

同一种故障在设备端、上位机和服务端应该具有一致含义。

这样客户说:

“设备提示E203。”

研发人员就可以直接进入通信链路排查,而不是重新询问大量现象。

故障码还可以与维修文档、测试程序和后台告警建立关联。

这会让后续维护从“依靠经验猜问题”逐渐转向“根据状态判断问题”。

日志不是越多越好

提到诊断,最容易想到的是增加日志。

但工业设备的日志设计不能简单理解成:

把所有程序运行过程都打印出来。

日志太少没有价值,日志太多同样会带来问题。

例如:

Flash写入次数增加;

存储空间快速增长;

重要信息被大量普通日志淹没;

高频日志影响实时任务。

所以现场设备的日志应该围绕“排查问题需要什么证据”来设计。

例如一台通信网关,真正值得长期记录的可能是:

首次上线时间;

网络断开;

重连结果;

关键配置修改;

设备异常;

固件升级;

连续通信失败。

而不是把每一帧正常数据永久保存成文本日志。

一条有价值的日志至少应该回答三个问题

例如:

2026-09-28 14:32:15
RS485 Channel 2 Timeout
Device Address: 07
Retry: 3

它至少包含:

什么时候发生;

发生了什么;

发生在哪个对象上。

如果能进一步关联固件版本、设备SN或任务状态,定位价值会更高。

相比之下:

通信失败

这样的日志即使保存1000条,实际帮助也很有限。

因此日志设计的重点不是数量,而是上下文。

设备版本信息为什么必须能查到

现场维护中一个非常常见的问题是:

“这台设备到底运行的是哪个版本?”

如果不同批次设备已经更新过多次固件,但现场又无法直接查看版本,工程人员很难判断:

某个问题是否已经在新版本中解决;

不同设备为什么表现不同;

这台设备是否应该升级。

所以长期维护设备通常建议能够读取:

硬件版本;

固件版本;

必要时包括Bootloader版本;

设备SN或Device ID。

如果平台已经存在,还可以由设备上线时主动上报这些信息。

这样工程人员不需要让客户拆机拍PCB,也不需要猜测现场使用了哪个软件版本。

通信问题应该记录“统计信息”,而不只是最后一次错误

工业现场的通信异常往往是间歇性的。

例如RS485一天出现一次CRC错误,设备自动重试后恢复。

如果系统只记录当前状态:

通信正常

那么研发人员完全看不到过去发生过什么。

更有价值的方式是保存一些累计统计。

例如:

RS485 Channel 1
RX Frames: 182354
Timeout: 17
CRC Error: 3
Reconnect: 2

这样即使设备当前运行正常,也可以判断:

这条通信链是不是长期处于边缘状态。

同样的思路也可以应用到:

CAN错误;

网络断线;

MQTT重连;

传感器读取失败。

这些统计信息特别适合用来判断:

“这是一次偶发事件,还是一个持续存在的系统问题。”

看门狗只能让设备恢复,不能替代问题定位

看门狗是嵌入式系统里很重要的可靠性机制。

程序失去正常运行状态后,看门狗可以让设备自动重新启动。

但如果系统设计只有:

程序卡死
↓
看门狗复位
↓
重新运行

而没有任何诊断记录,那么设备虽然恢复了,问题却被隐藏了。

客户可能只感觉设备“偶尔闪一下”。

研发团队却完全不知道:

为什么触发了Watchdog。

所以更加完整的设计是:

异常发生
↓
尽可能记录关键状态
↓
看门狗复位
↓
启动后读取复位原因
↓
保留/上传异常信息

当然,程序已经完全锁死时不一定有机会保存全部信息。

所以实际设计需要结合:

实时性、存储方式和MCU能力。

但原则应该明确:

恢复机制和诊断机制是两个不同问题。

现场没有工程师,远程诊断就开始有价值

如果设备部署地点较远,每一次故障都派工程师现场处理,成本会很高。

这时设备管理平台、上位机或IoT服务端可以承担一部分远程诊断能力。

平台不一定要直接访问设备底层调试接口。

更实际的是让设备主动上报经过设计的诊断信息,例如:

  • 当前软件版本;

  • 最近启动时间;

  • 最后在线时间;

  • 当前故障码;

  • 通信错误统计;

  • 关键运行状态;

  • OTA升级结果。

这样技术支持人员可以先判断问题属于:

网络、设备端、传感器、配置还是软件版本。

只有确实需要测量硬件信号时,才安排进一步现场处理。

远程日志也需要控制边界

远程诊断并不意味着设备要持续把所有内部日志上传云端。

这会增加:

流量、存储、服务器成本以及数据管理复杂度。

更合理的方式可能是分层。

正常运行时只上传:

状态和关键事件。

出现问题时,再根据需要启用更详细诊断。

例如设备收到一个维护指令后,在未来30分钟提高日志级别。

这样可以兼顾日常运行成本和故障分析能力。

对于没有云端系统的设备,也可以通过上位机导出诊断文件,由客户发送给工程人员分析。

参数导出为什么对售后很有价值

有些故障并不是硬件坏了,而是参数配置不同。

例如两台相同设备:

A现场运行正常;

B现场经常报警。

最后发现只是:

采样周期、报警阈值或者通信参数不同。

如果设备能够导出一份完整配置,研发人员就可以直接比较。

而不是让客户:

逐个页面截图;

人工抄写参数。

对于配置项较多的工业设备,这种能力非常实用。

但参数导出时也要注意:

不应把不适合暴露的凭据、密钥等敏感信息直接输出。

“设备自检”适合解决哪些问题

部分设备还可以在启动或维护模式下执行一定程度的自检。

例如检查:

存储是否可读写;

某些传感器是否响应;

RTC是否正常;

关键电压是否在范围内;

通信外设能否初始化。

这类自检不能替代完整测试,但可以帮助快速判断:

设备是否存在明显硬件或外围故障。

特别是现场维护人员不具备深入电子调试能力时,一个明确的:

Sensor 2: FAIL
Storage: PASS
Network: PASS

比“设备异常”更容易采取下一步措施。

没有诊断能力和具备诊断能力的故障排查对比.jpeg

诊断能力也要防止过度设计

并不是所有控制板都需要:

完整日志系统、云端诊断、故障快照和远程维护平台。

如果产品非常简单,数量少、维护方便,而且故障后直接更换成本也很低,那么复杂诊断功能可能不划算。

是否需要增加诊断能力,可以考虑四个因素:

判断条件诊断能力的重要程度
设备安装地点远高
故障难以复现高
现场停机成本高高
使用周期多年高
设备结构简单且容易更换相对低
现场一直有专业维护人员视情况降低

因此目标不是让每台设备都变成“调试仪器”。

而是:

诊断成本应该与未来故障定位成本相匹配。

什么阶段应该开始考虑诊断能力

最佳时间通常不是项目快交付的时候。

一些诊断能力直接依赖硬件设计。

例如:

测试点;

调试接口;

电压检测;

状态指示;

存储空间。

如果PCB已经完全冻结,再想增加这些功能,可能需要重新改板。

因此更合理的节奏是:

方案阶段确定维护方式。

如果设备未来长期部署现场,就提前确定需要哪些基本诊断能力。

硬件阶段预留物理条件。

例如测试点、调试接口和必要监测。

固件阶段建立错误和日志框架。

不是最后出问题才临时加printf。

样机阶段验证异常是否能够被记录。

主动制造:

通信断开、传感器故障、看门狗复位等场景。

检查系统能不能留下有效证据。

这样诊断能力本身也经过验证,而不只是纸面功能。

一个可维护设备应该形成怎样的诊断链路

最终可以把诊断体系理解成四个层次:

故障发生
   ↓
设备发现异常
   ↓
记录故障码 / 状态 / 复位原因
   ↓
本地保存或上报
   ↓
上位机 / 平台展示
   ↓
工程人员定位问题范围

如果需要现场进一步分析,再进入:

测试点
调试接口
波形测量
固件调试

这两层并不是互相替代。

第一层用于:

快速缩小故障范围。

第二层用于:

最终确认根因。

北京心玥科技如何参与设备诊断和长期维护设计

北京心玥科技有限公司在主控板、嵌入式软硬件、工业电子设备、智能硬件及IoT项目中,可以根据设备实际使用环境和维护方式,在研发阶段考虑相应诊断需求。

硬件侧可根据项目需要考虑关键测试点、调试接口、状态检测以及相关可维护性设计。

嵌入式侧可以结合项目实际需求设计故障码、关键日志、复位原因记录、版本信息和异常恢复机制。

如果项目同时包含上位机、Web后台或者IoT平台,还可以根据系统架构设计设备状态、告警、版本和部分远程诊断信息的管理方式。

这些能力并不要求每个项目全部采用。

需要结合设备数量、部署环境、现场维护条件、故障后果和预算确定合理深度。

具体硬件资料、固件源码、诊断工具、协议或平台功能的交付范围,以双方项目约定为准。

设备真正交付以后,研发工作的一个重要衡量标准不只是:

正常情况下设备能不能运行。

还包括:

设备异常时,系统能不能留下足够的信息,让问题可以被定位、解释和修复。

这也是长期运行设备从“能工作”走向“可维护”的重要一步。

常见问题 FAQ

所有嵌入式设备都需要保存运行日志吗?

不一定。简单设备可以只保留关键故障和复位信息。长期现场运行、故障难以复现的设备更适合建立较完整的日志和状态记录。

看门狗已经能自动恢复设备,还需要记录故障吗?

需要考虑。看门狗解决的是恢复运行问题,并不能说明为什么发生异常。如果故障会反复出现,诊断信息仍然很重要。

调试接口会不会影响产品安全?

量产设备可以根据实际情况控制接口暴露方式,例如隐藏接口、权限控制或生产后关闭部分调试能力。可维护性和安全性需要结合项目具体要求平衡。

IoT设备一定需要远程日志吗?

不一定。很多设备只需要上报关键状态、故障码和版本即可。详细日志是否远程上传,要结合带宽、存储、安全和维护成本决定。

已经完成硬件的设备还能增加诊断能力吗?

可以增加一部分固件和软件诊断,例如故障码、日志和通信统计。但如果需要新增测试点、电源监测或硬件调试接口,可能涉及PCB修改。