news 2026/10/7 18:05:11

基于EsDA MPC-ZC1的工业IoT监测控制实战:Modbus RTU与RS485组态开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于EsDA MPC-ZC1的工业IoT监测控制实战:Modbus RTU与RS485组态开发

1. 项目缘起与整体方案拆解

1.1 为什么选 EsDA MPC-ZC1 做 IoT 监测控制

手头这个 IoT 监测控制系统,核心诉求其实很朴素:把现场几台设备的运行参数(温度、开关状态、电流)采集上来,再根据阈值做联动控制,同时把数据汇总到一个本地界面上看。听起来像是典型的工业物联网场景,但真正落地时,选型这一步就能卡住不少人。

我最初考虑过用树莓派加 Python 脚本的方案,灵活是灵活,但现场环境对稳定性和宽温有要求,消费级板子长期跑在配电柜旁边,夏天柜内温度轻松上 50 度,风扇一停就悬。后来也想过用 PLC,但一套下来成本高,而且做自定义的数据上报和界面展示很别扭,改个逻辑还得用厂商的专用软件。

最后落到 EsDA MPC-ZC1 上,主要是看中它把几件事揉在了一起:边缘计算能力、工业级接口、以及 EsDA 这套可视化组态开发环境。MPC-ZC1 本身带 RS485 接口,原生支持 Modbus RTU 主站/从站,这意味着现场那些电表、温控器、变频器只要走 Modbus RTU 协议,接线就能通。而 EsDA 环境让我不用从零写通信协议栈,拖拽配置就能把采集、逻辑、展示串起来,开发周期从"周"压缩到"天"。

这里要解释一下 EsDA 是什么。它是运行在 MPC-ZC1 上的一套嵌入式组态开发框架,你可以理解成一个"跑在设备里的低代码平台"。它把常用的工业通信协议、数据点管理、逻辑运算、HMI 画面都封装成了可配置的模块。对做自动化出身、但不擅长写底层代码的工程师来说,这个门槛降得很低。你不需要懂 Linux 驱动、不需要写 socket 通信,只要理解数据点怎么映射、逻辑怎么连线就行。

提示:EsDA 的组态逻辑和传统触摸屏组态(比如某些 HMI 软件)思路接近,如果你以前配过触摸屏的画面和变量,上手会非常快。区别在于 EsDA 更偏向"边缘计算节点",逻辑处理能力比普通 HMI 强不少。

1.2 系统整体架构与数据流向

整个系统的架构我画在脑子里是这样的:现场设备层 → RS485 总线 → MPC-ZC1 网关 → 本地 HMI 展示 + 逻辑联动。

现场设备层包括一台支持 Modbus RTU 的温湿度变送器、一台带 RS485 接口的智能电表、以及一个继电器输出模块(用来控制风机和照明)。这三类设备都挂在同一条 RS485 总线上,MPC-ZC1 作为 Modbus 主站轮询它们。

数据流向分两条线。第一条是采集线:MPC-ZC1 定时发送 Modbus 读指令,把从站的寄存器值读回来,映射到 EsDA 的数据点里。第二条是控制线:EsDA 里的逻辑模块判断数据点是否越限,如果温度超过设定值,就通过 Modbus 写指令让继电器模块闭合风机回路。

本地 HMI 展示这块,EsDA 支持做画面,我把实时温度、电流、设备状态做成仪表盘和指示灯,值班人员一眼就能看到。数据还可以存到本地,方便事后查历史曲线。

这个架构的好处是去中心化。不依赖云平台,断网也能跑;不依赖上位机,MPC-ZC1 自己就是大脑。对于中小型现场,这种"单机版边缘网关"的方案性价比很高,也省去了网络配置和平台对接的麻烦。

1.3 方案选型中的几个关键取舍

选型时我纠结过几个点,这里展开说说,因为很多新手会在这里踩坑。

第一个取舍:Modbus RTU 还是 Modbus TCP?现场设备大多是老设备,只支持 RTU。而且 RS485 总线布线简单,两根双绞线加屏蔽层就能拉几十米,成本低。TCP 虽然速率高,但需要每个设备支持网口,现场那台温湿度变送器根本没有网口。所以 RTU 是唯一现实选择。MPC-ZC1 同时支持两种,但本项目以 RTU 为主。

第二个取舍:轮询周期设多少?这个直接影响总线负载和响应速度。我一开始设了 100ms 轮询一次,结果发现总线冲突概率上升,偶尔丢包。后来改成 500ms,稳定多了。原因后面在实操部分详细算。

第三个取舍:逻辑放在 MPC-ZC1 还是放上位机?我选择放在 MPC-ZC1。因为控制逻辑(比如温度超限开风机)需要快速响应,如果绕一圈到上位机再回来,延迟不可控。边缘侧做逻辑,响应时间在百毫秒级,而且断网不影响。

这几个取舍背后其实是一条原则:现场的事现场解决,能本地闭环就不要依赖外部。这也是工业物联网和消费物联网思路上的一个明显区别。

2. RS485 总线与 Modbus RTU 核心细节解析

2.1 RS485 硬件接线与上下拉电阻计算

RS485 总线看着简单,两根线一接就完事,但实际组网时问题最多的就是它。我见过太多现场因为接线不规范导致通信时好时坏,查半天查不出原因。

先说接线拓扑。RS485 必须手拉手菊花链,不能星型,不能树型。什么意思?就是总线从主站出发,依次串到设备 1、设备 2、设备 3,最后在末端设备结束。每个设备只有 A、B 两个接线端子,进线和出线接在同一个端子上。如果你从主站拉一根线到中间,再分叉到两个设备,那就是星型,信号反射会严重,短距离可能没事,长距离必出问题。

屏蔽层怎么处理?我的做法是单端接地,也就是只在主站侧把屏蔽层接到大地,设备侧悬空。两端都接地会形成地环路,反而引入干扰。这个细节很多文档不强调,但现场干扰大的时候,单端接地和双端接地的差别很明显。

接下来是上下拉电阻。RS485 总线在空闲状态时,如果没有上下拉,差分电压可能处于不确定的中间态,导致接收端误判为起始位,产生乱码。所以需要在总线的一端加上拉电阻(A 线到 VCC)和下拉电阻(B 线到 GND),把空闲态拉到确定的逻辑电平。

电阻值怎么算?这里给一个实操方法。假设总线供电 5V,收发器输入阻抗按标准 12kΩ 算,总线上挂 N 个设备,并联阻抗 R_parallel = 12kΩ / N。上下拉电阻 R_pull 和 R_parallel 分压,要保证空闲时 A-B 差分电压大于 200mV(标准要求)。

以 8 个设备为例:R_parallel = 12k / 8 = 1.5kΩ。如果上下拉各用 680Ω,那么分压后 A 点电压约 5V × 1.5k/(1.5k+0.68k) ≈ 3.44V,B 点约 1.56V,差分约 1.88V,远大于 200mV,没问题。但如果设备多到 32 个,R_parallel = 375Ω,再用 680Ω 上下拉,差分就掉到 5V × 375/(375+680) × 2 ≈ 3.55V... 等等,这里算的是单端,实际差分要重新算。总之设备越多,并联阻抗越低,上下拉电阻要相应减小,但太小会增加功耗、加重驱动器负担。

注意:上下拉电阻只在总线的一端加,通常是主站侧。两端都加会导致等效电阻减半,功耗翻倍,而且可能拉低差分电压。我见过有人在每个设备上都加,结果总线电流大得吓人,通信反而不稳。

实际工程中,如果设备不多(10 个以内),直接用 680Ω 或 1kΩ 上下拉基本都能跑。设备多或者距离长,建议用示波器看一下空闲态波形,确认差分电压足够。没有示波器的话,就遵循"宁大勿小"原则,先上 1kΩ,通信不稳再往下调。

2.2 终端电阻到底要不要加

终端电阻是另一个争议点。理论上,RS485 总线两端各加一个 120Ω 电阻,用来匹配电缆特性阻抗,消除信号反射。但实际现场,加不加、加几个,要看情况。

我的经验是:波特率高于 19200、线缆长度超过 50 米时,两端各加 120Ω。短距离、低波特率(9600 及以下),不加也能跑,加了反而增加总线负载。因为 120Ω 终端电阻并联在总线上,和上下拉电阻一起构成负载,驱动器要驱动更重的负载。

有个简单判断方法:如果通信距离短(10 米内)、设备少(3 个以内)、波特率 9600,先不加终端电阻试。如果出现偶发丢包、CRC 错误,再在两端加上。加了之后如果通信更差,说明总线负载过重,要检查是不是上下拉电阻太小或者设备太多。

MPC-ZC1 这边,如果它作为总线的一端,通常需要加终端电阻。具体看它的 RS485 接口电路设计,有些板子已经板载了可跳线的终端电阻,用跳线帽选择即可。这个要查 MPC-ZC1 的硬件手册确认,别想当然。

2.3 Modbus RTU 报文结构与寄存器映射

Modbus RTU 的报文结构不复杂,但新手容易在寄存器地址和功能码上绕晕。这里用大白话拆一遍。

一帧 Modbus RTU 报文长这样:从站地址(1 字节)+ 功能码(1 字节)+ 数据(N 字节)+ CRC 校验(2 字节)。帧与帧之间靠 3.5 个字符时间的静默间隔来分隔,这个间隔由波特率决定。9600 波特率下,一个字符约 1.04ms,3.5 个字符约 3.6ms。所以主站发完一帧后,至少等 3.6ms 才能发下一帧,否则从站会认为是同一帧。

功能码常用的就几个:03 读保持寄存器、04 读输入寄存器、06 写单个寄存器、16 写多个寄存器。读温湿度变送器通常用 03 或 04,写继电器用 06 或 16。

寄存器地址这块有个坑:协议文档里的地址和实际发送的地址可能差 1。比如文档写"温度值在 40001 寄存器",实际发送时地址要填 0(40001 - 40001 = 0)。如果文档写"地址 0x0000",那就直接填 0。这个"偏移 1"的问题坑过无数人,调试时如果读不到数据,先检查地址是不是差 1。

在 EsDA 里配置 Modbus 从站时,一般会让你填从站地址、功能码、起始寄存器、寄存器数量。填完之后,EsDA 会把读回来的数据映射到数据点。这里要注意数据类型:温度可能是 16 位有符号整数,除以 10 才是实际温度;电流可能是 32 位浮点数,占两个寄存器。数据类型选错,读出来的值就是乱的。

我一般会先用 Modbus 调试工具(比如 Modbus Poll 之类的通用工具)单独测通一个设备,确认地址、功能码、数据类型都对,再往 EsDA 里配。这样能把问题隔离在通信层,不会和组态逻辑混在一起排查。

3. EsDA 组态开发与实操过程

3.1 开发环境搭建与工程创建

EsDA 的开发环境是运行在 PC 上的组态软件,通过网口或者串口和 MPC-ZC1 连接。我这边用的是网口连接,因为传输快,下载工程方便。

第一步是装 EsDA 软件。安装过程没什么好说的,一路下一步。装完之后打开,新建工程,选择设备型号 MPC-ZC1。这里要注意固件版本匹配,如果 PC 端软件版本比设备固件新太多,可能连不上或者功能异常。我一般会把设备固件和软件版本对齐,避免兼容性问题。

第二步是配置通信连接。在软件里添加设备,填 MPC-ZC1 的 IP 地址(如果是网口连接)。设备默认 IP 通常在手册里,连上之后可以改。连上之后,软件会读取设备信息,确认型号和固件版本。

第三步是建数据点。数据点是整个组态的核心,相当于变量表。每个数据点有名字、类型、地址、读写权限。比如我建了这些点:

数据点名称类型对应 Modbus 地址说明
Temp_Value16位整数40001温度值,除以10
Humidity_Value16位整数40002湿度值,除以10
Current_A32位浮点40003-40004A相电流
Relay_Status位00001继电器状态
Fan_Control位00001风机控制

建点的时候,命名要规范,别用"点1""点2"这种。现场调试时,你看着一堆点1点2会崩溃。用有意义的英文名或者拼音,配合注释,后期维护省心。

3.2 Modbus 主站配置与轮询策略

数据点建好后,接下来配 Modbus 主站。在 EsDA 里添加 Modbus RTU 主站,配置串口参数:波特率 9600、数据位 8、停止位 1、无校验(8N1)。这些参数必须和从站设备完全一致,一个不对就通信不上。

然后添加从站设备,每个从站填从站地址、功能码、寄存器映射。这里有个技巧:把连续地址的寄存器合并成一次读取。比如温度在 40001、湿度在 40002,这两个可以一次读 2 个寄存器,而不是分两次读。合并读取能减少总线报文数量,提高效率。

轮询策略我前面提过,周期设 500ms。为什么是 500ms 而不是更快?算一下:总线上有 3 个从站,每个从站一次读 2 个寄存器,一帧报文大约 8 字节,加上帧间隔,一帧耗时约 10ms。3 个从站轮一遍 30ms。如果轮询周期 100ms,那么 30ms 通信 + 70ms 空闲,看似没问题,但实际总线有抖动,加上从站响应时间(有些老设备响应慢,要 20-50ms),100ms 周期会很紧张,容易冲突。500ms 周期下,通信占 30ms,空闲 470ms,余量充足,稳定得多。

提示:轮询周期不是越短越好。工业现场讲究稳定,不是追求极致实时。500ms 对于温度、电流这种缓变量完全够用。如果是快速变化的量(比如位置反馈),才需要更短的周期,但那时候要考虑换更快的通信方式。

3.3 逻辑联动配置与阈值设定

逻辑联动是这套系统的"大脑"。我在 EsDA 里用逻辑模块配置了这几条规则:

规则一:温度超限开风机。当 Temp_Value > 350(即 35.0℃)时,Fan_Control 置 1;当 Temp_Value < 300(即 30.0℃)时,Fan_Control 置 0。这里用了回差,避免温度在 35 度附近抖动导致风机频繁启停。回差设 5 度,是经验值,太小会频繁动作,太大温度波动范围大。

规则二:电流超限报警。当 Current_A > 10.0A 时,触发报警标志位,HMI 上红灯闪烁。这个只报警不控制,因为电流超限原因复杂,直接切设备可能造成生产事故,让人工介入更稳妥。

规则三:定时上报。每 5 分钟把温度、湿度、电流存一次历史记录,方便查曲线。

配置逻辑时,EsDA 用的是图形化连线或者表达式。我习惯用表达式,因为直观。比如规则一写成:IF Temp_Value > 350 THEN Fan_Control = 1; IF Temp_Value < 300 THEN Fan_Control = 0。注意这里两个 IF 是独立的,不是 IF-ELSE,因为回差逻辑需要两个独立判断。

逻辑配置完,一定要在软件里仿真测试。EsDA 支持离线仿真,你可以手动改数据点的值,看逻辑输出对不对。我测试时把 Temp_Value 手动改成 400,看 Fan_Control 是不是变 1;改成 200,看是不是变 0。仿真通过再下载到设备,省得在现场反复改。

3.4 HMI 画面制作与数据绑定

HMI 画面是给值班人员看的,要直观。我做了三个画面:主监控画面、历史曲线画面、报警记录画面。

主监控画面放了一个温度仪表盘、一个湿度仪表盘、一个电流数字显示、两个指示灯(风机状态、报警状态)。仪表盘绑定 Temp_Value 和 Humidity_Value,指示灯绑定 Fan_Control 和报警标志位。绑定的时候注意数据点的缩放,比如 Temp_Value 是 350,仪表盘要显示 35.0,就要在绑定里设缩放系数 0.1。

历史曲线画面用趋势图控件,绑定温度、湿度、电流三个点,时间轴设 24 小时。这样值班人员能看到一天的变化趋势。

报警记录画面用表格控件,绑定报警标志位,记录每次报警的时间和值。

画面制作有个经验:颜色要克制。我见过有人把画面做得花里胡哨,红绿蓝黄全上,结果值班人员看久了眼睛累,反而忽略关键信息。我的做法是正常状态用绿色或灰色,报警用红色,其他颜色尽量少用。字体要大,现场屏幕可能不大,字小了看不清。

4. 常见问题与排查技巧实录

4.1 通信类问题速查

通信问题是这套系统最常见的故障,我整理了一个速查表:

现象可能原因排查方法解决
完全通信不上接线反了(A/B 接反)万用表测 A-B 电压对调 A/B
完全通信不上波特率/校验位不匹配核对从站参数改成一致
偶发丢包终端电阻缺失或过多检查两端电阻按规则增减
偶发丢包上下拉电阻不当测空闲态差分电压调整电阻值
读到的值乱码数据类型选错核对寄存器定义改数据类型
读到的值差 1寄存器地址偏移核对文档地址地址减 1 或加 1
部分从站不响应从站地址冲突逐个断开测试改地址
通信时好时坏屏蔽层双端接地检查接地改单端接地

这个表是我踩坑踩出来的。特别是"读到的值差 1"这条,我第一次配 Modbus 时,文档写 40001,我填 40001,死活读不到,后来才知道要填 0。这种坑,文档不会明说,得靠经验。

4.2 逻辑不生效的排查思路

逻辑配好了但设备不动作,这种问题也常见。排查顺序我一般是:

第一步,看数据点有没有更新。如果数据点一直是初始值,说明通信没通,先解决通信问题。逻辑再对,数据不进来也没用。

第二步,看逻辑条件是否满足。在 EsDA 的调试界面里,实时看数据点的值和逻辑的输出。有时候是阈值设错了,比如温度 35 度,你设成 3500,那永远触发不了。

第三步,看输出有没有写下去。逻辑输出 Fan_Control = 1,但继电器没动,可能是 Modbus 写指令没发出去,或者从站地址、寄存器地址错了。用调试工具单独测写指令。

第四步,看硬件。如果 Modbus 写成功了,继电器模块也收到了,但风机不转,那就是继电器到风机的强电回路问题,跟通信无关了。

这个排查顺序是从软到硬、从内到外,能快速定位问题在哪一层。

4.3 现场干扰与稳定性优化

工业现场电磁干扰大,RS485 通信容易受影响。我遇到过几次通信不稳,最后都是干扰问题。优化措施有这么几条:

线缆选型:用双绞屏蔽线,屏蔽层单端接地。别用普通平行线,抗干扰能力差很多。

走线分离:RS485 线不要和动力线(220V/380V)走同一个线槽。如果必须交叉,垂直交叉,不要平行走。平行走线会耦合干扰。

加磁环:在 RS485 线靠近 MPC-ZC1 的一端套一个铁氧体磁环,能抑制高频干扰。这个成本低,效果明显,我一般都会加。

电源隔离:如果现场干扰特别严重,考虑给 RS485 收发器加隔离电源。MPC-ZC1 如果自带隔离接口最好,没有的话外接隔离模块。

软件容错:EsDA 里可以设通信超时重试次数。我一般设 3 次重试,超时时间 200ms。这样偶发干扰导致的丢包,重试就能恢复,不会直接报故障。

注意:干扰问题往往不是单一原因,而是多个因素叠加。优化的时候要系统性地做,别指望加一个磁环就解决所有问题。我一般是先保证接线规范,再考虑加磁环、隔离这些措施。

4.4 调试工具与实用技巧

调试 Modbus 有几个工具很好用,这里分享一下。

Modbus 调试助手:PC 端软件,可以模拟主站或从站。我一般用它模拟从站,测试 MPC-ZC1 的主站配置对不对。或者模拟主站,测试现场从站设备好不好。这个工具能直接看到报文,排查问题很直观。

串口监听工具:接在 RS485 总线上,监听主站和从站的通信报文。能看到实际发出去的帧和收到的帧,对比一下就知道是发送问题还是接收问题。

万用表:测 A-B 差分电压,判断空闲态是否正常。正常空闲态差分电压应该在 200mV 以上,如果接近 0,说明上下拉有问题。

示波器:如果有条件,用示波器看波形最直接。能看到信号质量、反射、干扰。不过示波器贵,一般现场不一定有,万用表加调试工具基本够用。

一个实用技巧:调试时先单独测一个从站。把其他从站都断开,只留一个,通信通了再加下一个。这样能快速定位是哪个从站有问题。我见过有人一上来就全接上,结果通信不通,不知道是哪个设备的问题,一个个拆很麻烦。

5. 系统联调与长期运行体会

5.1 联调阶段的检查清单

所有配置做完,下载到 MPC-ZC1 之后,别急着走人,按这个清单过一遍:

  • 通信检查:所有从站数据点是否都在更新,值是否合理(温度不会是 65535 这种离谱值)。
  • 逻辑检查:手动触发条件(比如加热传感器或者改仿真值),看输出动作是否正确。
  • 控制检查:继电器动作时,对应的风机/照明是否真的启停。
  • 画面检查:HMI 上显示的值和实际值是否一致,报警是否正常触发。
  • 历史检查:历史记录是否在存,曲线是否能查。
  • 断电重启检查:断电再上电,系统是否能自动恢复运行,数据点是否正常。

这个清单我每次项目都会走一遍,能避免 90% 的"交付后才发现"的问题。

5.2 长期运行的稳定性观察

系统跑起来之后,我观察了一段时间,有几个体会。

MPC-ZC1 的稳定性不错,连续跑了一个月没重启,内存占用稳定。EsDA 的组态逻辑也没出过死机。这比用通用 Linux 板子自己写程序省心,不用担心内存泄漏、进程崩溃这些事。

RS485 总线在加了磁环和规范接线后,通信很稳,基本没有丢包。之前偶发的丢包,优化接线后就消失了。说明大部分通信问题都是硬件层面的,软件容错只是兜底。

数据存储要注意容量。我设的 5 分钟存一次,一天 288 条,一个月 8640 条。如果存一年,数据量不小。EsDA 一般支持循环存储或者导出,要提前规划好,别存满了导致系统异常。

5.3 后续可扩展的方向

这套系统目前是单机版,后续如果要扩展,有几个方向。

加远程访问:MPC-ZC1 如果支持 4G 模块或者以太网,可以把数据推到远程服务器,实现手机查看。但这个要考虑网络安全,别把工业数据裸奔在公网上。

加更多从站:RS485 总线理论上能挂 32 个从站,目前只用了 3 个,还有很大余量。后续加设备,只要地址不冲突、总线负载够,直接挂上去就行。

逻辑复杂化:目前逻辑比较简单,EsDA 支持更复杂的运算,比如 PID 控制、多条件联动。如果现场有更复杂的控制需求,可以在 EsDA 里实现。

数据对接:如果企业有 MES 或者 SCADA 系统,可以通过 Modbus TCP 或者 OPC 把数据对接上去,实现车间级的数据汇总。

我个人在实际操作中的体会是,这套方案最大的价值在于平衡:成本不高,开发不慢,稳定性够用,扩展有余地。对于中小型工业现场,比上不足比下有余,是个很务实的选择。踩过的坑主要集中在 RS485 硬件和 Modbus 地址这两块,把这两块搞明白,后面就顺了。

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

DeerFlow长期记忆全链路解析:从提取到注入的工程实践

1. 先理清楚&#xff1a;DeerFlow的长期记忆&#xff0c;到底在解决什么问题 如果你做过AI Agent的应用&#xff0c;一定见过这类场景&#xff1a;用户上午跟智能体说"我喜欢简洁的回复风格&#xff0c;不要铺垫"&#xff0c;下午再问"帮我写个晨会纪要"&a…

作者头像 李华
网站建设 2026/10/7 18:03:55

基于Spring Boot的社区居民健康管理系统设计与实现

很多同学在选毕设题目的时候&#xff0c;最怕的不是题目难&#xff0c;而是“做完了不知道怎么讲”。社区居民健康管理系统这个题&#xff0c;恰好避开了这个尴尬&#xff1a;业务场景大家都能理解&#xff0c;功能边界清晰&#xff0c;技术栈用Spring Boot加MySQL就能打通&…

作者头像 李华
网站建设 2026/10/7 18:03:54

ArkUI列表性能优化:LazyForEach从卡顿到60帧

做鸿蒙应用开发这几年&#xff0c;我有个越来越深的体会&#xff1a;长列表页面的性能&#xff0c;基本决定了一个 App 在用户心里的"丝滑感"。HarmonyOS 6 的 ArkUI 提供了 LazyForEach 作为官方推荐的惰性加载方案&#xff0c;很多新入坑的开发者把它当成万能钥匙—…

作者头像 李华
网站建设 2026/10/7 18:02:31

Linux串口编程从入门到工程实践:open_serial函数设计全解析

干嵌入式这些年&#xff0c;打交道最多的就是串口。调试工装、采集PLC数据、升级固件、连扫码枪&#xff0c;哪一样都绕不开UART。今天想聊的这份“工业开启串口”自用无bug版本&#xff0c;是我在Linux环境下沉淀下来的一个串口封装函数——别看只是把串口打开&#xff0c;这里…

作者头像 李华
网站建设 2026/10/7 18:02:30

前端上传文件后页面底部空白?COS直传DOM挂载Bug排查与修复

20260306&#xff0c;这个编号被我记在工作日志里。那一天&#xff0c;我们内部素材系统后台的页面上&#xff0c;只要一用cos上传文件&#xff0c;页面底部就会莫名多出一大片空白&#xff0c;而且文件传得越多&#xff0c;空白区域也越高。这个项目前端用的是jQuery加Bootstr…

作者头像 李华
网站建设 2026/10/7 18:01:29

端侧AI部署实战:张量与NPU底层执行逻辑解析

1. 端侧 AI 到底在跑什么&#xff1a;从一次模型部署翻车说起 去年帮一个做智能门锁的团队看问题&#xff0c;他们的活体检测模型在 PC 上跑得好好的&#xff0c;量化成 int8 塞进设备之后&#xff0c;误识率直接飙到没法用。代码没改&#xff0c;权重没改&#xff0c;唯一变的…

作者头像 李华