设备在研发实验室里出现故障,通常并不可怕。
工程师就在旁边,可以接示波器、逻辑分析仪、调试器,重新烧录程序,也可以直接修改代码观察现象。
真正麻烦的是设备已经安装到客户现场以后,偶尔出现一句:
“昨天设备自己重启了一次。”
或者:
“有时候通信会断,但重新上电又正常。”
如果设备没有留下任何运行信息,研发人员能够得到的线索可能只有:
“当时好像出了问题。”
这时候即使硬件和软件本身并不复杂,故障定位也可能变得非常困难。
因为工程师不知道设备为什么复位、复位前在执行什么任务、通信错误出现过多少次、电源有没有异常、当前运行的到底是哪一个固件版本。
所以对需要长期现场运行的主控板、工业电子设备和IoT终端来说,诊断能力并不是产品出问题以后临时增加的功能。
它更适合在研发阶段就成为系统设计的一部分。

假设一台工业采集设备在客户现场运行了两个月。
客户反馈设备大约每隔几天会自动重新启动一次,但没有明显规律。
从现象来看,可能的原因很多:
程序异常触发看门狗;
输入电源瞬间跌落;
某个外设通信卡死;
电磁干扰影响MCU;
内存使用异常;
人工误操作;
远程升级或参数修改。
如果设备重启后所有状态都恢复默认,而系统也没有保留复位原因和关键日志,那么每一次故障都会把现场证据一起清掉。
研发人员最后往往只能尝试:
修改程序、换电源、换主板、增加延时,再等下一次问题出现。
这种方法成本很高,而且很容易把偶发问题“暂时掩盖”,却没有真正找到根因。
如果设备能够在重新启动后告诉系统:
上次复位原因:Watchdog 固件版本:V1.4.2 故障前任务:RS485采集 通信超时累计:37次 最近异常码:COMM_TIMEOUT
排查范围就会迅速缩小。
所以诊断设计真正的价值不是“记录更多数据”,而是:
让设备故障以后仍然能够保留足够的证据。
诊断能力首先不是软件问题。
如果PCB上关键位置根本无法测量,再完整的日志也不能解决所有问题。
研发样机阶段通常建议保留基本的测试和调试条件,例如关键电源测试点、复位信号、重要通信线以及SWD/JTAG等调试接口。
这些接口不一定全部暴露给最终用户。
它们的主要价值是在:
样机联调、返修、试产和现场维修阶段,为工程人员提供直接观察硬件状态的入口。
例如设备出现周期性复位时,如果可以方便测量3.3V电源,就能够快速判断:
这是程序主动复位,还是供电瞬间跌落导致MCU重新启动。
如果没有测试点,只能在已经装配好的设备上临时飞线,故障排查本身就可能变成新的风险。
很多现场故障最终都会回到电源问题。
但设备真正出问题时,工程师往往并不在现场。
所以对于电源敏感或者运行环境复杂的设备,可以评估是否需要让主控自身监测部分关键电压。
例如:
24V输入;
主控3.3V;
电池电压;
某个关键传感器供电。
并不是所有项目都需要做完整电源遥测。
但如果某一路电压直接决定设备稳定性,在硬件允许的情况下保留检测能力,会显著提高后续诊断效率。
例如设备日志记录:
复位前最低输入电压:18.7V
相比只有:
设备发生重启
显然能够提供更多工程判断依据。
大多数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
比“设备异常”更容易采取下一步措施。

并不是所有控制板都需要:
完整日志系统、云端诊断、故障快照和远程维护平台。
如果产品非常简单,数量少、维护方便,而且故障后直接更换成本也很低,那么复杂诊断功能可能不划算。
是否需要增加诊断能力,可以考虑四个因素:
| 判断条件 | 诊断能力的重要程度 |
|---|---|
| 设备安装地点远 | 高 |
| 故障难以复现 | 高 |
| 现场停机成本高 | 高 |
| 使用周期多年 | 高 |
| 设备结构简单且容易更换 | 相对低 |
| 现场一直有专业维护人员 | 视情况降低 |
因此目标不是让每台设备都变成“调试仪器”。
而是:
诊断成本应该与未来故障定位成本相匹配。
最佳时间通常不是项目快交付的时候。
一些诊断能力直接依赖硬件设计。
例如:
测试点;
调试接口;
电压检测;
状态指示;
存储空间。
如果PCB已经完全冻结,再想增加这些功能,可能需要重新改板。
因此更合理的节奏是:
方案阶段确定维护方式。
如果设备未来长期部署现场,就提前确定需要哪些基本诊断能力。
硬件阶段预留物理条件。
例如测试点、调试接口和必要监测。
固件阶段建立错误和日志框架。
不是最后出问题才临时加printf。
样机阶段验证异常是否能够被记录。
主动制造:
通信断开、传感器故障、看门狗复位等场景。
检查系统能不能留下有效证据。
这样诊断能力本身也经过验证,而不只是纸面功能。
最终可以把诊断体系理解成四个层次:
故障发生 ↓ 设备发现异常 ↓ 记录故障码 / 状态 / 复位原因 ↓ 本地保存或上报 ↓ 上位机 / 平台展示 ↓ 工程人员定位问题范围
如果需要现场进一步分析,再进入:
测试点 调试接口 波形测量 固件调试
这两层并不是互相替代。
第一层用于:
快速缩小故障范围。
第二层用于:
最终确认根因。
北京心玥科技有限公司在主控板、嵌入式软硬件、工业电子设备、智能硬件及IoT项目中,可以根据设备实际使用环境和维护方式,在研发阶段考虑相应诊断需求。
硬件侧可根据项目需要考虑关键测试点、调试接口、状态检测以及相关可维护性设计。
嵌入式侧可以结合项目实际需求设计故障码、关键日志、复位原因记录、版本信息和异常恢复机制。
如果项目同时包含上位机、Web后台或者IoT平台,还可以根据系统架构设计设备状态、告警、版本和部分远程诊断信息的管理方式。
这些能力并不要求每个项目全部采用。
需要结合设备数量、部署环境、现场维护条件、故障后果和预算确定合理深度。
具体硬件资料、固件源码、诊断工具、协议或平台功能的交付范围,以双方项目约定为准。
设备真正交付以后,研发工作的一个重要衡量标准不只是:
正常情况下设备能不能运行。
还包括:
设备异常时,系统能不能留下足够的信息,让问题可以被定位、解释和修复。
这也是长期运行设备从“能工作”走向“可维护”的重要一步。
不一定。简单设备可以只保留关键故障和复位信息。长期现场运行、故障难以复现的设备更适合建立较完整的日志和状态记录。
需要考虑。看门狗解决的是恢复运行问题,并不能说明为什么发生异常。如果故障会反复出现,诊断信息仍然很重要。
量产设备可以根据实际情况控制接口暴露方式,例如隐藏接口、权限控制或生产后关闭部分调试能力。可维护性和安全性需要结合项目具体要求平衡。
不一定。很多设备只需要上报关键状态、故障码和版本即可。详细日志是否远程上传,要结合带宽、存储、安全和维护成本决定。
可以增加一部分固件和软件诊断,例如故障码、日志和通信统计。但如果需要新增测试点、电源监测或硬件调试接口,可能涉及PCB修改。