尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
EsDA低代码实现Modbus RTU Master转UDP Client协议转换
1. 为什么要做Modbus RTU Master到UDP Client的转换先说一个我实际遇到的场景去年做一个产线数据采集项目现场十几台温控器、两台电能表全部走Modbus RTU协议挂在RS485总线上。设备端的数据采集其实不难真正麻烦的是数据怎么送出去——客户机房里的上位机系统只接受UDP报文而且报文格式还得按照他们自定义的规范来。这种传统工业串口设备对接现代以太网应用的需求在工厂数字化改造里太常见了。Modbus RTU是老工业现场的事实标准几乎每种PLC、仪表、变频器都支持而UDP因为简单、实时性好、没有TCP那样的连接维护开销在上位机通信、数据中继、视频监控联动这些场景里用得非常多。把两者打通本质上就是一个协议转换网关的活。我选择的方案是EsDA——一个面向边缘计算网关的低代码开发平台。它最大的特点是不需要写传统意义上的嵌入式C代码而是用流图Flow的方式把功能节点拖拽、连线、配置然后一键生成固件并部署到ARM网关或Linux主机上。对于Modbus RTU转UDP这种需求EsDA内置了Modbus Master节点和UDP Client节点整个流程搭下来核心工作从写几千行协议栈代码变成了配置几个节点的参数。这篇内容适合谁看如果你手里有RS485总线的Modbus设备想接入以太网系统或者你在评估EsDA这类低代码平台做协议转换的可行性又或者你只是想知道Modbus RTU和UDP这两个老熟人怎么在一个边缘网关上优雅地协作——这篇文章都能提供一份可以直接抄作业的参考。2. 搭建环境时的硬件连接与通信参数规划2.1 EsDA平台的基本工作原理动手之前先把EsDA的工作方式说清楚。EsDA的完整开发流程是在PC端用可视化编辑器称为Flow设计器拖拽节点 → 配置每个节点的参数 → 生成代码工程 → 交叉编译 → 把固件部署到目标设备通常是ARM架构的边缘网关→ 在设备上运行。它和Node-RED这类纯软件流编排工具的区别在于EsDA生成的是真正编译进设备的原生程序不依赖Node.js运行时实时性和资源占用都更接近传统嵌入式开发。同时它又保留了低代码的配置方式这让我这种不太想整天和寄存器地址、中断向量打交道的工程师轻松很多。针对Modbus RTU Master转UDP Client这个场景设计好的数据流向是这样的下行网关作为Modbus RTU主站Master通过串口通常是RS485周期性地向从站设备发送读保持寄存器功能码03请求内部读回来的寄存器数据在EsDA的流图中经过节点间传递组织成UDP的负载格式上行网关作为UDP客户端Client把数据打包成UDP数据报发送给远程的UDP服务器通常是上位机软件或云网关。2.2 硬件接线里最容易翻车的三个细节硬件部分大致分三块目标网关运行EsDA固件的设备、RS485总线的Modbus从站设备、以及一个能接收UDP报文的服务器开发调试时可以用PC上的网络调试工具模拟。RS485接线看着简单但恰恰是现场出问题最多的地方。我总结了三条经验第一A/B线不要接反。RS485的A对应DB对应D-很多国产设备的接线端子标注并不统一有的标A、B-有的标D1、D0。接反的典型症状是通信完全不通或者偶尔通一下又立刻报超时。如果你用示波器看波形接反时总线上的差分电平是反的主站发送的帧从站根本识别不了。第二接地问题。长距离传输超过100米时建议在总线末端并一个120欧姆终端电阻并且RS485的参考地GND最好和设备侧共地。不共地的话一旦两端电位差超过收发器的共模输入范围通常是-7V到12V通信会间歇性失败而且故障现象非常诡异——有时候连续几个小时正常有时候一分钟报十几次超时。第三波特率统一。Modbus RTU的波特率可配置9600、19200、38400等主站和所有从站必须一致。现场曾遇到一台设备出厂默认19200其他设备都是9600结果就那一台设备读取超时。排查了半天最后用串口助手抓包才发现它的回应报文速率明显不同。2.3 串口与网络参数的对照规划在EsDA里配置Modbus RTU Master节点时需要设置串口相关的参数配置UDP Client节点时需要设置网络相关参数。我在项目里常用的参数规划如下供参考参数类别参数项推荐值说明串口波特率9600 或 19200根据从站设备实际支持能力确定现场1200米距离内9600最稳串口数据位8Modbus RTU标准为8位串口校验位无校验N也可用偶校验E必须与从站一致串口停止位1标准配置个别老设备用2串口超时时间500 ms一次请求发出后等待从站回应的最长时间网络服务器地址按现场分配UDP服务器上位机的IP网络服务器端口按现场分配通常是5000-9000之间的自定义端口网络本地端口任意空闲端口如果不指定系统自动分配采集策略轮询周期100 ms - 1 s取决于从站数量和通信负载建议从500ms开始调有一点建议在做项目规划时就确认清楚UDP服务器地址是固定IP还是域名。EsDA的UDP Client节点通常支持IP和域名两种方式如果现场DNS环境不稳定直接填IP最省心。3. EsDA中Modbus RTU Master节点的配置思路与报文结构3.1 从站设备建模是先导工作在EsDA里拖入一个Modbus RTU Master节点之前必须先把手头的从站设备建模清楚。所谓建模就是把设备说明书里的寄存器表整理成一份清单每个寄存器地址对应什么物理量温度、压力、状态字、数据类型是什么16位无符号、32位浮点、保持寄存器还是输入寄存器、是否需要大小端转换。我通常会用Excel维护一张表字段包括设备名称、从站地址Slave ID、功能码、寄存器起始地址、寄存器数量、数据类型、缩放系数、单位、上报名称。这张表一方面是配置EsDA节点的依据另一方面也是后面排查问题的对照手册——万一某个数据读出来是负数或者千奇百怪的极大值90%是因为寄存器地址或数据类型理解错了。Modbus RTU的常见功能码里工程师最常用的是03读保持寄存器和04读输入寄存器。保持寄存器是可读可写的用于存放运行参数和累计值输入寄存器只读适合存放测量值。判断设备数据应该用哪个功能码唯一依据就是官方Modbus寄存器表不要猜。有的国产仪表文档写得糊里糊涂同一个参数在两个地址都有一个对应03一个对应04实际内容可能一样也可能一个是原始值一个是带倍率的工程值。3.2 节点配置里的关键字段与读写策略在EsDA的流图中添加Modbus Master节点后需要配置以下字段节点名称建议用有业务含义的名字比如Modbus_CT_Power或MB_Temp方便后续在流图里识别串口通道选择网关上的UART编号要和硬件接线对应起来从站ID目标设备的Modbus地址范围1-247一条总线上不能重复读周期节点发起读取请求的间隔时间。注意这里不是越快越好。RS485是半双工通信主站发完一帧后必须等从站回应超时未回应才能发下一帧。如果总线上挂了10个从站每个从站读5个寄存器一个轮询周期就是所有请求时间的总和设置太短的读周期反而会因为请求排队混乱导致大量超时。EsDA的Modbus Master节点大致支持两种读取模式一种是简单轮询——每个周期顺序读取所有配置的寄存器块另一种是条件触发——由流图中其他节点触发该节点执行一次读取。简单轮询适合周期性数据采集条件触发适合事件型读取比如收到UDP命令后才去读取某个从站的特定寄存器。我在做UDP转发时默认用简单轮询因为它省心、CPU占用低、数据实时性也够。关于寄存器数量建议把同一从站的连续寄存器合并成一条读取请求。Modbus RTU单帧最多可以读取125个保持寄存器但一次请求读太多从站处理时间长容易超时读太少总线占用率高。我个人的经验值常规仪表读5-20个寄存器一帧比较稳妥现场如果有变频器这种响应快的设备可以适当多一些但超过60个就得留意了。3.3 报文交互的基本原理虽然EsDA把Modbus的报文封装好了但要排查问题还是得理解底层帧格式。Modbus RTU的请求帧结构如下字段长度示例值说明从站地址1字节0x01目标从站ID功能码1字节0x03读保持寄存器起始地址2字节0x0000从0号寄存器开始寄存器数量2字节0x000A读10个寄存器CRC校验2字节0xC5 0xCDCRC16Modbus低字节在前从站正常回应帧字段长度示例值说明从站地址1字节0x01与请求一致功能码1字节0x03最高位置1表示异常字节数1字节0x14后续数据字节数寄存器数×2寄存器数据N字节高字节在前按大端格式存放CRC校验2字节——如果你收到的数据对不上——比如温度值应该是25.5读出来却是65345这种值——先不要怀疑CRC或者线路问题80%的情况是数据类型和大小端没配对。Modbus协议本身规定寄存器数据是大端高字节在前但很多PLC比如西门子默认的是高字在前、低字在后的字序和仪表厂家的数据排列方式不一定一致。EsDA节点里一般有大小端和字序的配置项挨个试就行。4. UDP Client节点的通信逻辑与报文组装4.1 UDP Client和TCP Client的本质区别UDP和TCP在概念上不需要我多讲但在EsDA里配置UDP Client节点时有几个点容易踩坑。先说UDP的无连接特性。TCP建立连接时需要三次握手断开时要四次挥手通信双方维持一条连接UDP则简单粗暴——不需要握手直接往目标IP:端口丢数据报。好处是延迟低、开销小坏处是不可靠发送端不知道报文到底有没有到达。在工业数据采集场景里如果上级系统对数据完整性要求极高通常会在应用层自己做确认重传机制或者干脆改用TCP。EsDA的UDP Client节点在设计上也是无连接的——你只需要配置目标服务器地址和端口节点就会在每次触发时把数据封装成UDP数据报发送出去。这里有个容易被忽略的细节UDP Client节点发送数据时需要明确指定服务器地址和服务器端口这两个参数可以静态配置也可以通过流图动态传入。静态配置适合服务器地址固定不变的场景动态传入适合多服务器切换或地址变化的场景。我个人在网关项目里通常用静态配置因为现场的上位机地址一般锁定不变静态配置出错概率低。4.2 UDP报文的负载格式怎么组织UDP报文的负载Payload完全由你决定这既是灵活之处也是麻烦之处——EsDA作为一个可视化编程工具不会强加给你一套协议规范但需要你把采集到的Modbus寄存器数据转换为目标服务器能识别的格式。常见的做法有三种第一种裸数据拼接。把Modbus寄存器读回来的原始字节按顺序拼接成UDP负载。这种方式实现最简单但可读性差接收方必须严格知道每个字节的含义。第二种JSON格式上报。把数据组织成JSON比如{temp:25.5,pressure:101.3}。这种方式可读性好、便于对接各类平台但数据量相对大对纯单片机网关来说解析JSON是个不小的负担。EsDA的网关卡通常性能足够支持JSON构造节点所以在对接云平台时我一般用JSON。第三种自定义二进制帧。在报文头加帧头、设备ID、数据长度、帧序号帧尾加校验中间放数据字段。这个方案传输效率高接收方解析也不复杂适合工业现场专有协议对接。我举个自定义二进制帧的例子这也是我个人比较推荐的做法字节偏移 字段 长度 说明 0 帧头 2字节 0xAA 0x55 2 设备ID 1字节 网关自身ID比如0x01 3 数据类型 1字节 0x01表示Modbus采集数据 4 数据长度 2字节 后续数据字节数含功能码与寄存器值 6 功能码 1字节 原样保留Modbus功能码 7 寄存器数据 N字节 按顺序排列的寄存器值 末尾 校验和 1字节 前面所有字节累加取低8位在EsDA中怎么实现用节点间的数据流操作即可Modbus Master节点读出的数据经过一个数据构造/编码节点把寄存器数组加上帧头、长度字段等固定内容输出为一份完整的字节数组然后交给UDP Client节点发送。整个过程不需要写代码只需在节点的字段映射里配置好。4.3 断线缓存与时间戳的考量虽然是UDP不存在真正的断线概念但现场网络交换机故障、网线松动、服务器重启这些情况一定会出现。UDP发送方不会报错因为内核把报文扔给网卡就认为发送成功了。所以设计上要做两件额外的事第一在发送给UDP服务器的报文里加上设备本地时间戳。服务器收到数据后可以根据时间戳判断数据是实时的还是延迟补发的也能在数据入库时作为时间基准。EsDA里一般有时间获取节点可以直接把格式化后的时间字符串插入报文。第二如果服务器要求数据不丢失网关侧需要构建一个简单的本地缓存队列。EsDA中通常有队列或缓存节点当服务器不可达时可以通过UDP应答或心跳机制判断先把数据暂存在本地文件或内存恢复后再补发。这一点往往被忽略——很多人认为UDP本来就不保证送达就不做可靠性设计但工业现场的数据是要进报表、做KPI的丢了数据就是事故。稳妥的作法是关键数据宁可延迟不能丢弃。5. 完整的数据通路从Modbus寄存器到UDP报文的流转过程5.1 流图中的节点编排逻辑下面我描述一下在EsDA Flow设计器中一个完整的Modbus RTU Master转UDP Client工程是怎么编排的。这不是唯一方案但这是经过现场验证的、非常清晰的一种。整个流图大概由这几类节点组成串口输入节点UART RX接收RS485总线上的原始字节流Modbus Master协议节点解析Modbus RTU报文提取寄存器值管理超时重试和从站状态数据处理节点Data Process负责把寄存器数组组装成目标格式自定义二进制帧或JSONUDP Client发送节点把处理后得到的字节数组通过Socket发送到UDP服务器日志/调试节点在控制台输出关键变量方便调试。节点的连接顺序大致是UART RX节点 → Modbus Master节点 → 数据处理节点 → UDP Client节点注意Modbus Master节点内部已经封装了发送请求帧和解析响应帧的逻辑所以你不需要自己构造Modbus请求只要配置好从站地址、寄存器地址、寄存器数量这些参数即可。UART RX节点在这里不是直通管道的角色它是Modbus Master节点底层的物理通道EsDA里通常是把串口通道绑定给Modbus Master节点用而不是简单地把数据流从一个节点导到另一个节点。5.2 数据处理节点的字段映射实操数据处理节点是整个链路的翻译官。它的输入是Modbus Master节点输出的寄存器数组输出是UDP发送节点需要的字节数组。以我做的电能表采集为例从站返回的寄存器值有电压2个寄存器32位浮点、电流2个寄存器32位浮点、有功功率2个寄存器32位浮点、电能累计4个寄存器64位浮点。一共10个寄存器20个字节。在数据处理节点里我建立了一个映射表序号数据项源寄存器数据类型偏移字节缩放1电压0x0000-0x0001float320-312电流0x0002-0x0003float324-713有功功率0x0004-0x0005float328-1114电能0x0006-0x0009float6412-191这个映射表直接对应到EsDA数据处理节点的字段定义里。每个定义包含字段名、数据类型、字节偏移、字节序。配置完之后这一节点会输出一个定长的二进制缓冲区这个缓冲区就是UDP报文的负载。这里有一个容易搞错的地方EsDA里有些版本的数据处理节点输出的是十进制数值数组不是原始字节数组。也就是说它会根据你定义的数据类型和偏移把寄存器值解析为实际的物理量25.5、380.2而不仅仅是把0x40 0xC4 0x00 0x00原样搬运。配置时一定要确认你选的是解析为物理量输出还是原始字节透传两种模式在报文长度和内容上截然不同混用会导致接收方解析失败。5.3 多从站轮询的处理方式如果一条RS485总线上挂了多个Modbus从站EsDA的Modbus Master节点通常支持配置多个从站设备表Device Table每个从站配置各自的从站ID、寄存器块、读取周期。节点会在一个调度循环里依次向每个从站发送请求并等待回应。这里有一个性能问题要提前考虑RS485总线上串行传输9600波特率下一个典型的读请求帧8字节加响应帧约25字节再加上帧间延时和从站处理时间单个从站的一个轮询周期大约需要40-60毫秒。如果总线上有10个从站一轮完整轮询就是400-600毫秒。如果你的UDP服务器希望每100毫秒收到一次全部设备的数据那串口侧根本满足不了。遇到这种情况有几种应对策略提高波特率到19200或38400轮询时间大约可以缩短一半以上减少每次读取的寄存器数量把高频数据比如温度和低频数据比如累计电能拆成不同的读取块分别用不同的周期读取多串口扩展把从站分布到不同的RS485总线上每个串口独立轮询。EsDA的好处是第三种方案做起来非常直观——直接在流图里添加第二个Modbus Master节点绑定不同的UART通道即可。两个节点并行运行互不干扰。6. 联调阶段我用过的排查工具与定位方法6.1 三层排查法串口层、协议层、网络层项目联调的时候如果数据没通第一件事不是怀疑EsDA工程配置而是按串口层 → 协议层 → 网络层的顺序逐层排查。这三层问题症状不同排查工具也不同顺序调换会浪费时间。串口层排查先确认串口参数配置是否和从站设备一致波特率、数据位、校验位、停止位。用EsDA自带的调试输出或者直接在流图里加一个串口监听节点把总线上的原始字节打印出来。如果总线完全没数据那就是发送侧的问题如果有发送数据但收不到回应那是接线、地址或者从站配置的问题。协议层排查抓取Modbus请求帧和响应帧人工解析帧内容。重点看从站地址对不对、功能码是否正确、寄存器地址是否越界、CRC是否正确。EsDA的调试日志里通常会把Modbus帧以十六进制形式打印出来用之前章节提到的帧格式对照即可。如果CRC计算出错日志里会有明显提示。网络层排查在PC上用网络调试工具比如Wireshark或SocketTool监听UDP端口看网关发过来的报文是否到达、内容是否符合预期格式化要求。这里特别注意Wireshark抓UDP时要选对网卡并且在过滤器里指定udp.port 目标端口否则抓包数据会非常杂。6.2 我踩过的一个典型坑从站地址写错导致的随机超时有一次调试时Modbus总线上有三个从站ID分别是1、2、3。配置完成后ID为2和3的设备读取一直正常但ID为1的设备偶尔会超时而且毫无规律。一开始我怀疑是ID为1的设备本身不稳定后来用调试日志把所有请求帧和响应帧都打出来才发现问题——EsDA的Modbus Master节点配置界面里除了从站地址之外还有一个轮询顺序相关的参数。我把ID为1的设备放到了轮询表的第三位而ID为3的设备因为响应慢占用了超时时间窗口导致排在后面的ID为1设备请求刚要发出ID为3的响应帧刚好回来两者在总线上发生了碰撞。这个问题的根因是RS485总线是半双工的任何时刻只能有一个节点在发送。主站调度如果处理不当可能会在上一帧响应还没完全收完时就发送下一帧请求造成总线冲突。排查了很长时间最后把轮询顺序调整了一下——把响应快的设备放前面响应慢的放后面并且给慢设备单独增加超时时间问题就消失了。这个经验说明一个通用原则当你怀疑协议转换配置不对时先把通信链路和调度策略的优先级提上来排查不要一上来就去翻寄存器地址表。6.3 用日志节点把上下游数据同时打出来联调时我习惯在流图里加两个调试日志节点一个接在Modbus Master节点后面打印读到原始寄存器数据另一个接在UDP Client节点前面打印准备发送的UDP报文十六进制。这样上下游数据都能在控制台里看到一步到位地判断问题是出在采集侧还是发送侧。日志内容建议分三行打第一行时间戳从站ID读取成功的寄存器数量第二行寄存器原始值十六进制数组第三行UDP报文的实际负载内容十六进制数组。打印这些日志不会对实时性造成明显影响因为EsDA的调试输出走的是独立的调试通道不影响正常数据流。但在正式部署给客户时务必把这些调试节点全部禁用或删除——一方面降低日志刷屏带来的IO开销另一方面避免在调试端口泄露现场数据。7. 从能通到好用稳定性与可维护性设计7.1 通信异常后的自动恢复机制一个合格的协议转换网关不能只在上电后正常工作还要能应对各种异常场景后自行恢复。我遇到过最多的情况是某个从站设备断电重启导致它在总线上短暂占用或响应异常此时如果Modbus Master节点没有做超时管理整个轮询可能被卡住后续所有从站的数据都送不出来。EsDA的Modbus Master节点一般会有超时重试机制——请求发出后在设定时间内未收到响应判定为超时跳过该从站继续轮询下一个。有的版本还支持连续N次超时后把该从站标记为离线并在后续轮询中跳过直到它恢复响应。我建议在配置时把超时时间设置得保守一点对于响应较慢的从站500ms比较稳妥对于较快的设备200ms就够。太短的超时时间会造成虚假超时太长的超时时间会导致整个轮询周期变慢。具体多少合适以现场实测为准。另外UDP发送侧要不要做发送失败处理由于UDP没有ACK机制EsDA的UDP Client节点发送时只要从Socket发出就认为成功即使对方根本不在线。所以建议在网关内维护一个服务器连通状态变量每隔一段时间发送一个心跳报文服务器收到后回一个心跳应答网关根据应答情况更新状态。如果连续多次没有收到心跳应答就在日志里告警并启动本地缓存模式。这个逻辑在EsDA里可以用定时器和变量节点搭出来不复杂但能省去很多后知后觉的麻烦。7.2 数据缓存与断点续传的实用做法前面提到要防止数据丢失这里给一个更具体的实现思路。EsDA中可以用文件节点把UDP报文按行追加写入本地存储比如SD卡或Flash文件系统每条记录包含时间戳、原始十六进制数据。当UDP恢复正常时再按顺序把文件里的记录一条条读出来补发给服务器发送成功后删除该记录或标记已发送。实现时要注意三点缓存文件要按天或按固定大小滚动避免无限增长占满存储空间。建议单文件不超过10MB超过就切换到新文件同时保留最近7天的文件补发数据时要在报文里标明是补发还是实时接收方才能正确去重或标记延迟数据。可以在自定义帧头里加一个标志位补发速度要可控不能一股脑把大量历史数据全部塞给服务器造成服务器处理不过来。建议补发间隔和实时上报间隔保持一致或略慢。这个本地缓存断点续传方案在EsDA里搭建起来难度不大但需要一点耐心去配置节点之间的时序关系。做得好它能让你的网关在弱网环境下依然保住关键数据这在工业项目里是很大的加分项。7.3 固件版本与配置管理的习惯最后一个我想强调的是工程管理层面的经验。EsDA工程本质上是一份可视化流图文件若干配置参数它比传统C代码工程更容易被随手改两下而忘记记录。我个人的习惯是每个现场项目单独建一个工程目录命名格式为项目名_日期_版本号每次修改流图前先导出一份备份文件修改完成后更新版本号并在工程说明里写清楚修改点关键参数比如Modbus寄存器表映射、UDP报文格式放在项目文档里不要只存在于流图配置中。因为流图只能看到配置了什么看不到为什么这样配部署固件后在网关本地保存一份当前运行的流图配置快照方便以后维护时快速定位版本差异。这些习惯看起来琐碎但在项目维护周期超过半年、现场不止一台网关的情况下能为你省下大把的排查时间。8. 按照这套方案做下来的实际效果与体会这套Modbus RTU Master转UDP Client的方案我在两个项目里完整落地过。第一个项目是设备数据采集上云12台注塑机的温控数据通过RS485总线接到网关网关以500ms为周期读取所有从站的温度、压力、开合模状态然后每1秒组装一条UDP报文上报到上位机。稳定运行半年没有出现过一次数据丢失事故偶尔有从站离线网关也能自动跳过并在它恢复后继续采集不需要人工干预。第二个项目是电能监测4台电能表的电压、电流、功率、电能数据通过Modbus RTU采集网关转换成自定义二进制帧通过UDP发送到机房的能耗管理服务器。因为服务器接收方的报文格式要求非常严格帧头、长度、CRC一个都不能错我在EsDA数据处理节点里花了比较多时间做字段映射和字节序调整。最终调通后服务器端解析完全正确连老旧的能耗管理软件都不用改一行代码就接上了新数据。我个人在这两个项目中最大的体会是EsDA这类低代码平台的价值不在于让你不用写代码而在于把协议转换这种重复性高、逻辑相对固定、但又容不得差错的嵌入式开发工作变成了一种可以标准化、可视化、快速交付的流程。以前做Modbus转UDP的活从看协议文档到写代码到调试一个熟练的工程师怎么也得一周现在用EsDA硬件环境准备好之后一个下午就能把基本流程跑通再用两天打磨细节和可靠性。这个效率差距在项目交付时间紧张的时候尤其宝贵。当然EsDA也不是万能的。它更适合逻辑相对固定的网关类应用如果你的需求是高度定制化的私有协议、对时序要求极苛刻的运动控制或者需要深度修改协议栈内部行为还是得回到传统嵌入式开发。但就Modbus RTU Master转UDP Client这个典型的协议转换场景来说EsDA是一个效率高、稳定性也不妥协的方案。如果你手头正好遇到类似的需求照着这篇文章的思路去搭应该能少走不少弯路。
RELATED

相关推荐

大文件分片上传实战:Blob切片、秒传与断点续传五层追问

大文件分片上传实战:Blob切片、秒传与断点续传五层追问

1. 大文件分片上传到底在解决什么问题1.1 从一个真实场景说起去年帮一个做在线教育的朋友处理课件上传的问题,他们平台允许老师上传录播视频,单个文件动辄两三个G。最开始用的是最朴素的方式——一个FormData把整个文件塞进去,axios发一个 PO…

📅 2026/9/19 18:23:42
C# HttpClient跳过HTTPS证书验证的三种写法与踩坑指南

C# HttpClient跳过HTTPS证书验证的三种写法与踩坑指南

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

📅 2026/9/19 18:18:42
EG2153反激电源设计:自举供电与驱动电路调试技巧

EG2153反激电源设计:自举供电与驱动电路调试技巧

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

📅 2026/9/19 18:18:42
MORE NEWS

更多资讯

📰

ASTM A640标准文件识别与工程应用核验指南

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

📰

FPGA新手入门:从点亮LED开始掌握Vivado与Verilog开发全流程

1. 为什么我建议每个FPGA新手都从点亮LED开始如果你刚拿到一块FPGA开发板,打开Vivado或者Quartus,面对满屏幕的选项和陌生的术语,大概率会有点懵。我见过太多人卡在第一步——软件装好了,板子插上了,然后呢&#xff1f…

📰

SPSS多元线性回归实例:从截图到语法复现与结果解读

简介:这份PDF面向备考统计类考试、需要掌握多元线性回归实操的读者,以SPSS软件为工具,通过完整实例演示从数据输入到结果解释的全流程。资源共1个PDF文件,压缩包约7.91MB,内容以操作截图为主,直观呈现SPSS界…

📰

OneUptime Runbook 代理(Agent)完全指南:在自建基础设施内安全执行 Bash 与 JavaScript 步骤

OneUptime Runbook 代理(Agent)完全指南:在自建基础设施内安全执行 Bash 与 JavaScript 步骤 【免费下载链接】oneuptime Complete open-source monitoring and observability platform. 项目地址: https://gitcode.com/GitHub_Trending/on…

📰

Glances MPP 插件详解:监控 Rockchip 平台硬件视频编解码引擎(RKVENC / RKVDEC / RKJPEGD)

指标监控监控大盘CLI告警MCP 服务 【免费下载链接】glances Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems. 项目地址: https://gitcode.com/gh_mirrors/gl/glances 点击查看 免费下载 导读 本…

📰

Taro H5 端路由系统解析:从 `@tarojs/router` 看小程序路由规范在 Web 端的落地

Taro H5 端路由系统解析:从 tarojs/router 看小程序路由规范在 Web 端的落地 【免费下载链接】taro 开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬