news 2026/9/24 7:14:31

Modbus转MQTT数据采集全流程:从RS485到云端实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Modbus转MQTT数据采集全流程:从RS485到云端实战指南

上个月去一个老朋友负责的注塑车间帮他处理设备数据采集问题,车间里八成设备都在十岁以上,其中一台温控仪后面就留着一个RS485口。他要的是把这些老设备的Modbus数据变成可在公网上订阅的消息,整套链路走下来就是标准的Modbus转MQTT采集方案,覆盖设备侧、网关侧和平台侧三个环节。当时我在现场边调边记,踩了不少坑,也总结出一套可以复用的方法,这篇文章就把整个过程、选型逻辑、配置步骤和排错经验一次讲清楚。

如果你手头也有一批老设备,PLC、温控仪、变频器、电表都有485口但都没法上云,或者你正在纠结用硬件网关还是软件透传,那这篇应该能帮你省下不少试错时间。我会尽量把每个步骤为什么这么做也说明白,不光是给结论。

1. 老旧设备联网的底层矛盾:Modbus很好,但上不了云

1.1 为什么老设备数字化卡在“最后一公里”

很多工厂车间的设备并不是不能产生数据,而是数据出不了车间。十年前甚至二十年前的PLC、温控仪、智能电表,几乎标配Modbus RTU,走RS485总线,35年前Modbus协议就有了,Modicon公司提出,后来成为工业领域的事实标准。这些设备本身没有任何联网能力,没有网口,没有公网IP,更不可能自己发起HTTP或者MQTT请求。

传统做法是什么?一台工控机装组态软件或者用Modbus Poll这样的上位机工具去轮询,数据只存在本地,或者通过局域网让人看看。车间主任想看数据,得跑到中控室;总部想看数据,得让下面人导Excel;客户审计想看关键工艺参数,只能翻纸质记录。这就是典型的“数据孤岛”。

要打破这个孤岛,最直接的思路就是把设备侧的数据想办法送到云端。可是Modbus协议从设计之初就没考虑过互联网场景,它假设通讯双方在同一个串口总线上,主站一个一个点名,从站被动应答,这种一问一答的模式放到公网上根本行不通。而MQTT正好反过来,它是为弱网、低带宽、高延迟的物联网场景设计的,设备主动上报,服务器只管收,天然穿透防火墙和NAT。

所以工业现场加装采集方案的核心矛盾就是:Modbus设备有数据,但不会主动说话;MQTT平台能收数据,但不认识Modbus。中间缺一个翻译官,这就是整套方案要解决的问题。

1.2 Modbus和MQTT,本质上是两种“语言”

我习惯用一个不太严谨但好懂的类比:Modbus像车间里的小班长,站在产线上扯着嗓子喊“三号温控仪,报一下当前温度”,被点名的设备才回一句“25.3度”,其他设备不吭声。所有通信必须由主站发起,从站永远被动。MQTT则像快递柜,每个设备往自己的格子里放包裹,订阅的人自己去取,哪怕中间网络断了,包裹也会在柜子里等一段时间,双方不要求同时在线。

Modbus RTU的报文非常紧凑,一个典型读命令长这样:从站地址、功能码、起始寄存器地址高字节、起始寄存器地址低字节、寄存器数量高字节、寄存器数量低字节、CRC校验低字节、CRC校验高字节。整个报文就8个字节,非常省流量,这也是它在工业现场活了几十年的原因——当时的串口通讯速率只有9600bps,必须把每个字节都用到极致。

MQTT的报文头比Modbus灵活得多,它基于TCP长连接,客户端可以随时发布消息到指定主题,服务端再推送给所有订阅了这个主题的客户端。这种发布/订阅模型最大的好处是解耦,数据生产方不需要知道数据消费方是谁,平台扩展的时候不需要改任何设备端配置。

明白了这两者的差异,你就知道为什么不能直接拿一根网线把PLC连到云平台,中间必须有一个做协议转换的环节。这个环节可以是硬件网关,可以是装在工控机上的软件,也可以是一块很小的自研板卡。下一节就说怎么选。

2. 方案选型:硬件网关、纯软件、自研模块怎么选

2.1 三种可行路径的对比与取舍

我在现场见过三种主流做法,各有各的适用场景,没有绝对的优劣,只有合不合适。

第一种是工业边缘网关,这是最省心的方案。这类网关一般有RS485/RS232串口,也有网口,内置Modbus主站功能,可以配置采集哪些寄存器,然后通过内置的MQTT客户端把数据推送到云平台。市面上常见的有有人物联网的USR-M100系列、映翰通IGT系列、钡铼BL110这些,价格从几百到两三千不等。好处是稳定、独立运行、不依赖工控机,坏处是要花钱,而且有些网关的配置界面做得不太友好,寄存器映射规则隐藏得深,需要耐心翻说明书。

第二种是纯软件方案,在现有工控机或者服务器上装Modbus主站软件,比如Modbus Poll、CAS Modbus Scanner这类调试工具,或者自己写脚本跑modbus-tk、pymodbus库,把轮询到的数据组织成JSON,再用Python的paho-mqtt或者Node.js的mqtt库发布到MQTT Broker。这种方案零硬件成本,灵活性最高,缺点是依赖工控机长期运行,如果工控机死机或者被员工关机,整个采集链路就断了。适合那种现场已经有稳定运行的工控机、设备数量又不太多的场景。

第三种是自己画一块转换板,用STM32或者ESP32做串口转WiFi/以太网,代码里同时跑FreeModbus从站和MQTT客户端。这种方案看起来最“硬核”,成本也最低,但开发周期长,稳定性需要自己保证,还要考虑外壳、供电、散热这些工程问题。量产上百台的时候有优势,只改造三五台设备的话完全不划算。

三种路径对比如下:

方案改造成本部署周期稳定性适用场景
工业边缘网关中等半天设备分散、无工控机、短期投产
纯软件方案2-3天依赖宿主机已有工控机、设备数量少
自研转换板低材料/高人工1-2周取决于设计批量改造、产品化

2.2 现场改造的“最少侵入”原则

不管是选哪种方案,有一条原则我强烈建议你坚持:对原有系统做最小改动。老设备能稳定运行这么多年不容易,你上去乱动,出了问题责任说不清楚。

具体来说有三件事尽量不做:第一,不动PLC里的程序。很多老PLC的程序早就没人能改了,原厂工程师都退休了,你不可能在梯形图里加通讯功能,所以方案设计上要默认PLC程序不动;第二,不拆掉原有的上位机链路。很多现场还有一套老的组态软件在跑,操作工每天都在用,你不能因为加数据采集就把人家吃饭的家伙拆了。用RS485总线并联的方式,让新网关和旧上位机同时挂在总线上,做好地址区分和轮询错峰就行;第三,设备能不断电就不断电。加装网关、接线路的时候,提前跟车间主任协商停机窗口,尽量安排在换班间隙操作。

还有一个容易被忽略的点:485总线是半双工的,同一个总线上如果既有老上位机在轮询,又有新网关在轮询,两个主站会互相冲突。解决办法有两个,要么把设备拆成两条总线,一条给老上位机,一条给新网关;要么让老上位机停止轮询,把采集职责完全交给新网关,旧系统只做显示。我在现场一般选后者,因为一大堆设备挂两条线会增加布线复杂度,而且很多老设备就一个485口,没法同时接两组A/B线。

3. Modbus采集侧配置实录:从RS485接线到轮询策略

3.1 接线、拨码与串口参数:第一步错后面全错

先说说接线。RS485用两根线,A和B,很多设备也叫D+和D-,或者叫正和负。这里有个很坑的地方:不同厂商对A/B的颜色定义不统一,有的把A做成绿色,有的把A做成黄色,你光看颜色判断十有八九会接反。最稳妥的办法是看设备手册上的端子图,或者用万用表量一下空闲电压,A线对地通常是正电压,B线是负电压。

布线的时候用屏蔽双绞线,屏蔽层单端接地。485总线两端各接一个120欧姆终端电阻,这个电阻的作用是吸收信号反射。如果车间里布线距离只有十几米,只有一个从站,不接电阻问题不大,但距离超过50米或者挂了很多设备,不接终端电阻就会出现一种很恶心的现象:用Modbus Poll读数据,大部分时候正常,偶尔报超时或者CRC错误,查来查去查不出原因。

串口通讯参数必须在网关和设备端保持一致。绝大多数老设备出厂默认是9600波特率、8个数据位、1个停止位、无校验,简写为9600 8N1。但总有些例外,比如某些温控仪默认是偶校验。判断方法是看设备铭牌上的通讯参数,或者直接连上去试几种常见组合,用Modbus工具的自动扫描功能去匹配。

3.2 用Modbus Poll先把从站“问明白”

接好线之后,我习惯用Modbus Poll先把设备读通,再做网关配置。Modbus Poll是一款经典的Modbus主站模拟工具,可以把你电脑的串口变成一个主站,直接读取设备寄存器,看到最原始的报文收发过程。网上有人拿它的注册码说事,我建议有条件就用正版,或者用开源的QModMaster、CAS Modbus Scanner,功能差不多。

操作流程大概是这样的:新建一个连接,选择串口方式,选对COM口号,设置波特率、数据位、停止位、校验位,然后填从站地址。地址范围默认是1到247,大多数设备出厂地址是1,如果你不知道地址,可以在1到247之间扫一遍。功能码根据你要读什么来选择,读保持寄存器用03,读输入寄存器用04,读线圈用01,读离散输入用02。

从站地址和功能码填好之后,还需要填寄存器起始地址和长度。这里有个最经典的坑:很多设备手册上写的地址是40001、40002这种PLC风格的地址,或者直接写“AI1寄存器地址为0001H”,而Modbus Poll里填的起始地址往往是从0开始的。换算关系是:40001对应协议地址0,40002对应1,以此类推,而0001H是十六进制表示法,对应十进制1,也要换算成协议地址。如果你按手册地址原封不动填进去,读出来的数据要么全是0,要么完全不对。

3.3 功能码、寄存器地址与轮询周期

不同设备的数据存放方式不一样,功能码的选择要跟设备手册对号入座。03功能码读的是保持寄存器,PLC的保持寄存器一般是V区或者D区,可以读也可以写;04功能码读的是输入寄存器,通常是模拟量输入通道,比如温度、压力、流量的实时值。像温控仪E5CC这种,它的当前温度值就放在输入寄存器里,你用03读可能返回异常码,换04就通了。

数据读出来之后还有一道工序,就是数据类型解析。Modbus寄存器本身只有16位,一个16位无符号整数可以直接映射成0到65535,但温度这种带小数点的数据,一般是放大十倍或者百倍存储的,比如253表示25.3度。有些设备用32位浮点数表示,那就需要连续读两个寄存器,再按大端或者小端组合。具体的组合方式有ABCD、CDAB、BADC、DCBA四种字节序,设备手册里一般不直接写,而是用“浮点数存储格式”这种说法带过,你得实测对比哪一种是合理数值。

轮询周期也要规划。Modbus是串行通讯,一个主站挂10个从站,所有从站的查询加起来才是完整周期。假设你10个从站,每个从站读10个寄存器,波特率9600,一个读命令大约需要30毫秒,加上从站响应和处理时间,单站一轮大概80毫秒,10个站一轮就是800毫秒。所以网关的采集周期建议设置在1到2秒,不要低于500毫秒。设得太快没有实际意义,反而会让从站单片机忙于响应而影响正常工作,有些老设备甚至会直接不再响应,你必须重启设备才恢复。

4. MQTT消息设计与平台接入:数据上云的最后一跳

4.1 Broker怎么选、怎么部署

Modbus侧的数据采集通了之后,接下来要让数据“上云”。上云的第一步是有一个MQTT Broker,也就是消息服务器。根据项目规模不同,有三种选择:直接用云厂商的物联网平台、自己在服务器上部署开源Broker、在网关侧或者现场服务器上用轻量级Broker做本地中转。

前几年很多项目直接接阿里云物联网平台、OneNET、ThingsBoard,这些平台内部集成了MQTT Broker,也解决了设备管理、权限认证、数据存储的问题,适合从零开始、没有自建服务器的团队。而我自己更常遇到的情况是客户已经有自己的业务系统,数据要进他们自己的数据库,这时候就需要自建Broker。

开源Broker里用得最多的是EMQX和Mosquitto。EMQX功能强大,Web管理界面、规则引擎、数据集成都有,分布式部署也成熟,我见过不少工厂拿它的开源版做生产环境。Mosquitto则非常轻量,一个几百KB的二进制文件就能跑起来,适合边缘小站或者边缘网关。还有一点,如果用的是Windows服务器,有些工程团队不知道MQTT Broker怎么部署,其实非常简单,去官网下载Windows安装包或者解压zip包,配置好监听端口、用户名密码和权限规则,然后注册成Windows服务让它开机自启就行,具体网上很多教程。

Broker的连接参数最基础的有这些:Broker地址(域名或IP)、端口(默认1883,TLS加密用8883)、用户名密码、ClientID。1883端口是明文传输的,如果Broker部署在公网,强烈建议用TLS端口,或者限制IP白名单,后面会说安全的内容。

4.2 主题规划和JSON报文设计

MQTT的灵魂是主题,主题规划得好不好,直接影响后续的扩展性。我在工业项目里常用的主题规划是这样分层的:

  • 采集数据上报:things/{deviceId}/telemetry
  • 设备在线状态:things/{deviceId}/status
  • 下行控制命令:things/{deviceId}/command
  • 设备告警事件:things/{deviceId}/event

deviceId是网关或者采集器在平台侧的标识。很多厂家的设备还不止一个,我一般给网关一个统一ID,然后报文里带具体的子设备ID。

报文格式强烈建议用JSON,数据结构要固定,方便平台端做解析入库。一个比较通用的结构是这样:

{ "deviceId": "gateway-001", "timestamp": 1710000000, "values": { "temp_01": 25.3, "pressure_01": 0.85, "speed_01": 1200 } }

timestamp最好用Unix时间戳,秒级或者毫秒级都行,但全项目要统一。为什么不直接在网关侧生成“2025-03-20 14:30:00”这种字符串?因为平台端大概率要按时间做聚合、排序、告警判断,Unix时间戳在数据库里既能当索引又能直接做时间比较,字符串还得再解析一遍。

4.3 QoS、遗嘱、心跳与断线重连

配置MQTT参数的时候,有几个选项特别关键,QoS级别、遗嘱消息(Last Will and Testament,简称LWT)、心跳间隔和断线重连。

QoS有三个级别。QoS 0是尽力而为,消息可能丢;QoS 1保证送达,但可能重复;QoS 2保证不丢也不重。采集数据一般用QoS 0或者1就够了,因为下一条数据马上会来,丢一条影响不大,工程上更看重实时性而不是绝对可靠。但是下行控制指令、设备状态变化这种关键消息,建议用QoS 1,配合Broker端的持久化会话,防止网关刚好离线导致指令丢失。

遗嘱消息是个很实用的功能。网关正常在线时,定时向某个主题发心跳;意外掉线时,Broker会自动替它发一条预设的遗嘱消息,平台端收到这条消息就知道这台设备掉线了。这个机制比平台端自己做超时判断要准得多,因为TCP连接拔线之后要很久才能感知超时。

断线重连策略也值得花心思。默认的重连逻辑是固定间隔重试,但如果网络一直不稳定,这种固定频率的重试会把Broker的连接线程占满。我习惯让网关按照指数退避的方式重连,第一次5秒、第二次10秒、第三次20秒,最大间隔拉到5分钟,网络恢复之后能很快连上,网络没恢复也不至于把Broker压垮。

5. 现场排错记录:七个反复出现的坑

5.1 物理层的玄学:A/B接反与终端电阻

Modbus通讯一上电就完全不通,第一个怀疑对象永远是接线。我至少有三四次折腾半天,最后发现是A/B接反了。RS485总线只要A/B一接反,接收端就收不到任何有效数据。排查方法很简单,在Modbus Poll里如果连续超时,没有一丁点响应,大概率是物理层的问题,先检查A/B。

还有一个被忽略得比较多的是共地问题。RS485是靠A/B两线之间的电压差传数据的,但很多现场接线的时候忽略了设备之间的参考地,导致共模电压过高,通讯间歇性失败。解决办法是在某个节点把485总线的GND和设备的地连在一起,注意是单点接地。

终端电阻的问题前面说过,再强调一次:距离短可以不加,但距离长、波特率高的场合不加很容易出现数据偶发错误。Modbus Poll里能频繁看到CRC错误,能搜到从站但数据时好时坏,优先检查终端电阻。

5.2 数值“大得离谱”:字节序与数据类型错位

数据通了,但读回来的数值完全不对,比如温度显示成2.7e+12,或者湿度变成负数,这种情况十有八九是字节序和数据类型没对上。

Modbus协议规定寄存器是大端传输,也就是高位字节在前。但很多设备在内部存储32位数据的时候使用小端模式,这样读出来之后如果直接拼接两个16位寄存器,得到的就是一个乱的32位数。我常用的排查思路是这样的:先按16位无符号整数读出来,看每个寄存器单独的值是否在合理范围,如果单个16位值看起来合理,说明是32位数据的组合问题;如果单个值都不合理,可能是寄存器地址错了,也可能是数据本身做了标度变换。

字节序有ABCD、CDAB、BADC、DCBA四种排列。实际操作的时候不要试运气,先看设备手册里有没有提到“word swap”或者“byte swap”,没有的话就按合理值的那个尝试去对齐。像温度这种物理量,你心里大概有数应该在负十度到六十度之间,哪个字节排列出来的值落在这个区间,就选哪个。

5.3 地址对不上:PLC五位数地址≠Modbus协议地址

这是个超级经典的坑:Modbus协议地址和PLC编程软件里的地址不是一回事。最简单的例子:西门子S7-200的Modbus地址表,保持寄存器地址从40001开始,但Modbus协议报文里的寄存器地址是从0开始编号的,所以在Modbus工具或网关里读40001对应的寄存器,填的地址是0,读40002填1,以此类推。如果你直接把40001当成协议地址填进去,实际访问的是40002,差了一位。

三菱FX系列的地址映射更绕。FX3U的D寄存器从D0到D199,映射到Modbus保持寄存器地址是40001到40200,也就是说D0对应的是40001。如果你在网关配置里直接把保持寄存器地址写成D0的编号0,那读的其实是D0,但有些时候你会发现0x0000在FX的映射表里是特殊寄存器,根本不是D区。

解决这个问题没有捷径,必须去查设备的Modbus地址映射表。好在主流PLC和仪表的映射表网上都能找到,把设备型号加“Modbus address map”搜一下基本都有。

5.4 轮询太快被打爆:从站无响应的真相

有个现象非常典型:单台设备用Modbus Poll轮询一切正常,把数据接到网关之后开始跑,前几个小时稳定,半天之后某些从站开始不回复,网关报超时,重启网关又恢复。

原因大概率是轮询周期设得太激进,把从站打爆了。老设备的主控芯片性能弱,Modbus协议栈处理速度有限,如果网关按照200毫秒的周期去轮询,从站一直在忙于响应,别的程序逻辑就没时间跑了。有些仪表更脆弱,连续收到大量请求会直接进入保护状态,不再响应总线。

我的经验是:读取周期不要低于500毫秒,如果是性能特别老的设备,1秒到2秒更稳。还有一点,同一个网关下不要对同一个从站发起并发读请求,有些网关支持多线程采集,但Modbus从站本身是逐条处理的,并发没有意义,反而增加出错概率。

5.5 MQTT层面的坑:消息重复、乱序、丢包

上了MQTT之后也有坑,最常见的是QoS 1导致的消息重复。QoS 1的语义是“至少一次”,Broker可能在确认丢失的情况下重复投递同一条消息,如果平台端做了消息计数或者累加统计,这些重复数据会导致统计偏高。解决办法是平台端按消息里的timestamp和deviceId做去重,或者干脆采集数据用QoS 0,业务数据另做保障。

消息乱序出现在网络不稳定的时候。网关采集线程一边轮询Modbus,一边发布MQTT,如果两条消息在TCP层面因为重传机制导致到达顺序不一致,平台端拿到的最后一条数据可能不是最新时间戳的数据。如果要严格按时间处理,平台端应该按timestamp排序而不是按到达顺序处理。

丢包一般是QoS 0场景下网络抖动造成的,牟取丢失的都是一两条瞬时数据。如果业务上不能接受丢数据,就升级到QoS 1,同时在网关侧做本地缓存,断线期间的采集数据先存到内存或SD卡,等网络恢复之后按顺序补发,这里的要点是补发消息要带原始时间戳,并且保证发送顺序不乱。

6. 运维与安全:采集链路接上之后的事

6.1 网关状态监测:不能接上就不管

很多项目交付的时候是通的,运行三个月之后数据就断了,原因往往是某个环节没人维护。所以我做项目的时候一定会跟客户强调:网关本身也是设备,它也需要被监控。

网关侧至少要做三件事:第一,网关自身的心跳消息要按照设定周期持续上报,平台端如果连续N个周期没收到心跳,就触发告警;第二,网关的CPU和内存占用率要能远程查看,有些网关跑着跑着内存泄漏,不重启就一直恶化,最后彻底假死;第三,固件要有远程升级能力,不然每次版本更新都得抱着笔记本去现场刷,维护成本太高。

平台端可以针对这些指标配置告警规则,比如设备离线超过5分钟就推送到运维群。很多边缘网关的MQTT客户端支持在status主题上报自身的运行状态,一定要把这个配置打开,别只上报设备数据。

6.2 设备认证与链路加密

工业数据里很多涉及工艺参数,比如温度曲线、压力值、能耗数据,这些数据虽然不像财务数据那样敏感,但也是企业的核心资产,不能随便被别人拿走。

MQTT Broker端最低限度要开启用户名密码认证,密码不要用默认的。进一步是ClientID白名单,只允许指定ClientID连接,这样即使别人拿到了用户名密码,也没法用其他设备接入。再往上走是TLS/SSL加密,用证书验证客户端和服务端,防止数据在公网传输中被截获。

TLS部署确实会麻烦一点,很多网关厂商的配置界面里有TLS开关,把CA证书填进去就行。但如果你的部署场景是Broker和网关都在内网,中间没有经过公网,那TLS不弄问题也不大,内网本身相对可控。

6.3 数据质量校验、告警与远程维护

光把数据采上来还不够,平台端还要做数据质量校验。我在实际项目里常用的校验规则有这么几种:值域范围检查,比如温度正常范围在0到200度之间,采到250度说明传感器或者通讯可能出问题了;变化率检查,上一秒是25度下一秒跳到150度,大概率是通讯干扰导致的数据跳变;心跳超时检查,设备超过预期时间不上报数据,触发通信链路告警。

告警一般分两级:设备离线告警和数据异常告警。设备离线告警针对网关本身,只要心跳断了就触发;数据异常告警针对具体的业务点位,比如温度超限。这两类的处理流程不一样,前者是运维组处理,后者是工艺组处理,告警消息要推给不同的人。

再提远程维护。工业现场的设备往往分布在不同城市甚至不同国家,如果每次改配置都要跑到现场,成本太高了。所以要优先选择支持远程配置下发和远程固件升级的网关,平台端直接修改采集点配置、调整轮询周期,下发到网关之后实时生效。多花几十块钱买这个能力,后期省下的差旅费是几倍的回报。

最后说一个我自己的小习惯:现场排查Modbus通讯问题,如果设备端始终无响应,我会先用Modbus Slave在电脑上模拟一个从站,把故障设备替换出总线,测试通讯链路本身有没有问题。如果模拟从站能正常被读到,那问题大概率在设备侧配置;如果模拟从站也读不到,那就要查线缆、查USB转485模块、查串口参数。这招在好几个现场帮我快速定位了问题,比盲目调设备的各个参数高效得多。这套Modbus转MQTT的链路,看似只是两个协议之间的翻译,实际上牵扯到串口通讯、数据映射、消息架构、设备安全一整条知识链,但只要把几个关键环节想清楚,它就是一套可以反复复用的数字化基建能力。

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

在 CI/CD 流水线中使用 Regal 对 Rego 策略进行代码检查

后端认证鉴权云原生 【免费下载链接】opa Open Policy Agent (OPA) is an open source, general-purpose policy engine. 项目地址: https://gitcode.com/gh_mirrors/op/opa 点击查看 免费下载 Regal 是 Open Policy Agent 生态中专门用于 Rego 策略代码的 linter …

作者头像 李华
网站建设 2026/9/24 7:05:18

Qt工程打包为exe全流程:从windeployqt到安装包制作

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

作者头像 李华
网站建设 2026/9/24 6:58:06

代理IP团队化管理与选型实战:从API批量配IP到子账户权限

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

作者头像 李华
网站建设 2026/9/24 6:50:35

Qwen3.8-Flash 限时免费:9 月 30 日前在 Qoder 零 Credits 畅用

Qwen3.8-Flash 限时免费:9 月 30 日前在 Qoder 零 Credits 畅用 9 月 18 日,阿里 Agentic 编码平台 Qoder 官方宣布:Qwen3.8-Flash 模型限时免费开放,活动期为 2026 年 9 月 18 日 10:00 至 9 月 30 日 23:59:59。活动期间该模型…

作者头像 李华
网站建设 2026/9/24 6:46:05

西门子车辆PLM一期方案拆解:NX集成与BOM管理落地实践

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

作者头像 李华