Modbus地址规则详解:从PLC地址到协议地址的调试避坑指南
1. 从一次现场调试的翻车说起干了这么多年工控Modbus协议可以说是绕不开的一道坎。不管是PLC、变频器、温控仪表还是智能电表只要涉及到设备通讯十有八九会碰到Modbus。很多人第一次接触Modbus的时候觉得协议本身挺简单的——不就是读寄存器、写寄存器嘛功能码也就那几个。但真正到了现场调试的时候问题就来了明明手册上写的是40001为什么程序里要填0为什么有的设备地址从1开始有的从0开始为什么读回来的数据高低字节是反的这些问题看起来是小问题但在现场调试的时候一个地址偏移就能让你耗上一整天。我自己就经历过这种事一个简单的温控表通讯手册上写着温度值在40001寄存器我按照习惯在程序里填了40001结果读回来的数据完全不对。折腾了两个小时最后才发现应该填0。这种坑几乎每个工控人都踩过。所以这篇内容我想把Modbus地址规则这件事彻底讲清楚。不是照本宣科地念协议文档而是从实际使用的角度把地址的编号规则、不同设备之间的差异、常见误区以及排查方法都梳理一遍。不管你是刚入行的新手还是已经用过几年Modbus但总觉得地址这块有点模糊的老手应该都能从中找到有用的东西。2. Modbus地址的四种马甲为什么同一个寄存器有这么多写法2.1 协议地址与PLC地址的本质区别要理解Modbus地址规则首先得搞清楚一个核心概念协议地址和PLC地址是两回事。Modbus协议本身定义的地址是从0开始的。协议帧里面传输的地址字段是一个16位的值范围是0x0000到0xFFFF。也就是说协议层面根本不存在40001这种写法它只认0、1、2、3这些数字。那40001是从哪来的这就要追溯到Modbus协议早期的应用习惯了。在早期的PLC系统中为了方便工程师记忆和使用厂商给不同类型的寄存器分配了不同的编号区间用第一位数字来区分寄存器类型。这就是所谓的PLC地址或者逻辑地址。具体来说常见的编号规则是这样的寄存器类型PLC地址范围协议地址范围功能码数据区线圈Coil00001-099990x0000-0x270F01/05/15可读写位离散输入Discrete Input10001-199990x0000-0x270F02只读位输入寄存器Input Register30001-399990x0000-0x270F04只读字保持寄存器Holding Register40001-499990x0000-0x270F03/06/16可读写字这张表是理解Modbus地址的基石。你可以看到PLC地址的第一位数字0、1、3、4实际上是在标识寄存器的类型而后面的四位数字才是真正的地址偏移。比如40001表示的是保持寄存器区的第1个寄存器对应的协议地址是0。注意这里说的第1个是从1开始计数的而协议地址是从0开始计数的。这就是为什么40001对应协议地址040002对应协议地址1以此类推。2.2 五种常见地址写法的对照关系在实际工作中你可能会遇到至少五种不同的地址写法它们表达的是同一个东西但看起来完全不一样。我整理了一个对照表方便你快速换算PLC地址5位PLC地址6位协议地址十进制协议地址十六进制常见使用场景4000140000100x0000传统PLC编程软件4000240000210x0001传统PLC编程软件40100400100990x0063传统PLC编程软件--00x0000组态软件、通讯库--990x0063组态软件、通讯库这里有个很容易混淆的地方6位地址写法。有些厂商尤其是某些品牌的PLC使用6位编号比如400001。这种情况下第一位4仍然表示保持寄存器但后面的00001是5位偏移。换算成协议地址的时候需要把后5位减1。所以400001对应协议地址0400002对应协议地址1。而有些组态软件和通讯库则直接使用协议地址也就是从0开始的十进制数。这时候你填0就是第一个保持寄存器填99就是第100个保持寄存器。还有一种情况是直接使用十六进制地址比如0x0000、0x0063。这种写法在底层调试工具中比较常见比如Modbus Poll、QModMaster这类软件。2.3 为什么会有这么多写法你可能会问为什么不能统一用一种写法这不是故意折腾人吗说实话这确实是历史遗留问题。Modbus协议诞生于1979年那时候PLC还是新鲜事物各个厂商都在摸索自己的标准。Modbus作为一种开放的通讯协议被不同厂商以不同的方式实现地址编号规则也就跟着出现了差异。再加上后来Modbus从串口RTU/ASCII扩展到以太网TCP协议本身做了一些调整但地址编号的习惯并没有统一。有的设备厂商在手册里写PLC地址有的写协议地址有的两种都写但标注不清楚这就给现场调试带来了很多麻烦。我个人的经验是拿到一个新设备第一件事就是确认它的地址编号规则。不要假设所有设备都一样也不要凭经验直接填地址。花五分钟看手册能省下两小时的调试时间。3. 功能码与地址的绑定关系选错功能码地址对了也白搭3.1 四类寄存器对应的功能码Modbus的功能码和寄存器类型是严格绑定的。你不能用功能码03去读输入寄存器也不能用功能码04去读保持寄存器。虽然它们的协议地址范围看起来一样都是0x0000-0xFFFF但实际访问的是不同的数据区。功能码功能名称访问的寄存器类型读写属性数据单位01读线圈线圈只读位1 bit02读离散输入离散输入只读位1 bit03读保持寄存器保持寄存器只读字16 bit04读输入寄存器输入寄存器只读字16 bit05写单个线圈线圈读写位1 bit06写单个保持寄存器保持寄存器读写字16 bit15写多个线圈线圈读写位1 bit16写多个保持寄存器保持寄存器读写字16 bit这张表建议你保存下来调试的时候随时对照。我见过太多人因为功能码选错读回来的数据完全不对然后怀疑是地址问题结果折腾半天发现是功能码用错了。3.2 一个实际案例温度值的读取举个具体的例子。假设你有一个温控仪表手册上写着当前温度值保持寄存器地址40001设定温度值保持寄存器地址40002报警状态线圈地址00001那么你要读取当前温度值应该用功能码03协议地址0。要读取报警状态应该用功能码01协议地址0。如果你用功能码04去读温度值虽然地址填的是0但读回来的可能是输入寄存器区的数据而不是保持寄存器区的数据。这两个区域在协议层面是完全独立的设备厂商可以把不同的数据放在不同的区域。提示有些设备厂商会把所有数据都放在保持寄存器区这样只用功能码03和06/16就能搞定所有读写操作。但也有很多设备会严格按照协议规范把只读数据放在输入寄存器区把可读写数据放在保持寄存器区。所以拿到设备后一定要先确认数据区的分配。3.3 功能码与地址的常见组合错误在实际调试中以下几种错误组合出现的频率最高错误一用功能码03读线圈状态。线圈是位数据保持寄存器是字数据两者完全不兼容。用03读线圈要么返回异常码要么返回一堆无意义的数据。错误二用功能码01读保持寄存器。反过来也一样用01读保持寄存器读回来的每一位对应一个寄存器的状态完全不是你想要的数值。错误三读写功能码混用。比如用功能码04读保持寄存器或者用功能码03读输入寄存器。虽然地址范围看起来一样但访问的数据区不同结果自然不对。错误四用功能码05写多个线圈。功能码05只能写单个线圈要写多个线圈必须用功能码15。同样功能码06只能写单个保持寄存器写多个要用功能码16。这些错误看起来很低级但在现场调试的时候因为时间紧、压力大很容易犯。我的建议是在程序里把功能码和寄存器类型的对应关系做成常量或者枚举不要每次手写数字这样能减少很多低级错误。4. 地址偏移的坑从0开始还是从1开始4.1 设备手册的潜规则这是Modbus地址规则里最容易踩坑的地方没有之一。同一个地址有的设备手册写0有的写1有的写40001有的写400001。如果你不仔细看手册的说明直接凭经验填大概率会出错。我总结了一个规律虽然不能覆盖所有情况但能帮你快速判断如果手册写的是40001、40002这种5位PLC地址协议地址通常是后四位减1即0、1。如果手册写的是400001、400002这种6位PLC地址协议地址通常是后五位减1即0、1。如果手册直接写0、1、2这种纯数字并且标注了协议地址或Modbus地址那大概率就是从0开始的协议地址直接用。如果手册写1、2、3并且标注了寄存器编号那可能是从1开始的编号协议地址需要减1。但问题是很多手册的标注并不规范。有的手册写地址40001但实际协议地址是1而不是0。有的手册写地址0但实际协议地址是1而不是0。这种情况虽然少见但确实存在。4.2 一个真实的排查过程我之前遇到过一个案例某品牌的变频器手册上写着频率设定值地址40001功能码06。我按照常规理解在程序里填了协议地址0功能码06结果写进去的值完全不对变频器没有任何反应。排查过程是这样的第一步确认通讯参数。波特率、数据位、停止位、校验位都确认无误物理连接也正常。第二步用调试软件手动发报文。我用Modbus Poll直接发功能码06地址0数据写一个固定值。变频器返回了正常响应但频率没有变化。第三步尝试地址偏移。我把地址改成1再发一次。这次变频器有反应了频率开始变化。第四步确认手册说明。回头仔细看手册发现手册在附录里有一行小字本手册中所有Modbus地址均为寄存器编号实际协议地址需减1。这行字藏在附录的角落里不仔细看根本发现不了。这个案例告诉我们手册上的地址不一定就是协议地址一定要找到手册里关于地址编号规则的说明。如果找不到就用调试软件手动试从0和1分别试一次看哪个能正常工作。4.3 批量地址的偏移处理在实际项目中往往需要读写多个连续的寄存器。这时候地址偏移的处理就更加重要了。假设你要读取10个连续的保持寄存器手册上写的起始地址是40001。如果协议地址从0开始那么你要读的地址范围是0-9。如果协议地址从1开始那么你要读的地址范围是1-10。在程序里通常是这样处理的# 假设手册地址是PLC地址需要转换为协议地址 def plc_to_protocol(plc_address): 将5位PLC地址转换为协议地址 # 提取后四位 offset int(str(plc_address)[1:]) - 1 return offset # 读取10个保持寄存器 start_address plc_to_protocol(40001) # 结果为0 quantity 10 # 发送功能码03起始地址0数量10如果设备手册明确说明协议地址从1开始那么转换函数需要调整def register_to_protocol(register_number): 将寄存器编号从1开始转换为协议地址 return register_number - 1 # 如果手册写的是寄存器编号1-10 start_address register_to_protocol(1) # 结果为0 quantity 10注意批量读取的时候起始地址的偏移会影响所有后续地址。如果起始地址偏移错了后面所有数据都会错位。所以批量读取之前一定要先用单个读取验证地址是否正确。5. 数据格式的暗礁高低字节、字节序与数据类型5.1 寄存器内部的字节序Modbus协议规定每个保持寄存器是16位也就是2个字节。但在实际传输中这两个字节的顺序是有讲究的。Modbus协议本身采用的是大端模式Big-Endian也就是高字节在前低字节在后。比如一个16位的值0x1234在Modbus报文中传输的顺序是0x12、0x34。但问题是很多设备厂商在实现的时候并不严格遵守这个规定。有的设备采用小端模式传输顺序是0x34、0x12。这就导致你读回来的数据看起来不对劲。举个例子假设温度值是25.6度设备内部用整数表示放大10倍即256十六进制是0x0100。如果设备采用大端模式你读回来的两个字节是0x01、0x00组合起来是256除以10得到25.6。如果设备采用小端模式你读回来的两个字节是0x00、0x01组合起来是1除以10得到0.1完全不对。5.2 32位数据的寄存器组合对于32位数据比如浮点数、双字整数需要两个连续的保持寄存器来存储。这时候就涉及到四个字节的顺序问题。常见的组合方式有四种组合方式寄存器1寄存器2说明ABCD高16位低16位大端模式最常见CDAB低16位高16位字节交换BADC高16位字节交换低16位字节交换字交换DCBA低16位高16位全交换小端模式这四种方式在实际设备中都有出现。有的设备手册会明确说明有的则需要你自己试。我个人的经验是先按ABCD试如果不对再试CDAB再不对试BADC最后试DCBA。大部分设备用的是ABCD或CDAB。5.3 浮点数的处理浮点数在Modbus中的传输是最容易出问题的。因为浮点数本身就是32位需要两个寄存器再加上字节序的问题组合起来有四种可能。假设你要读取一个浮点数读回来的两个寄存器值是0x4248和0x0000。如果按ABCD组合得到0x42480000转换成浮点数是50.0。如果按CDAB组合得到0x00004248转换成浮点数是一个极小的数明显不对。在程序里处理浮点数的时候通常需要做字节重组import struct def modbus_to_float(registers, byte_orderABCD): 将两个Modbus寄存器转换为浮点数 if byte_order ABCD: # 大端模式直接组合 data struct.pack(HH, registers[0], registers[1]) elif byte_order CDAB: # 字节交换 data struct.pack(HH, registers[1], registers[0]) elif byte_order BADC: # 字交换 data struct.pack(HH, registers[0], registers[1]) elif byte_order DCBA: # 全交换 data struct.pack(HH, registers[1], registers[0]) return struct.unpack(f, data)[0]这段代码可以直接拿去用只需要根据设备的实际情况调整byte_order参数。提示如果你不确定设备的字节序可以写一个已知值比如50.0到设备然后读回来看哪个组合能得到50.0。这是最可靠的确认方法。6. 不同设备厂商的地址规则差异没有标准的标准6.1 常见设备的地址规则对比虽然Modbus协议有标准但不同厂商在实现的时候各有各的习惯。我整理了一些常见设备类型的地址规则特点设备类型常见地址写法协议地址起始功能码偏好注意事项传统PLC40001003/06/16手册通常写PLC地址智能仪表0或10或103/04需确认手册说明变频器40001或10或103/06/16部分品牌地址偏移特殊智能电表0003/04通常直接写协议地址远程IO模块0或10或101/02/03/04需确认位地址和字地址这张表只是一个大致的参考实际情况可能更复杂。比如同一个品牌的不同系列产品地址规则可能都不一样。6.2 如何快速确认设备的地址规则拿到一个新设备我通常按以下步骤确认地址规则第一步看手册的地址说明章节。不要只看数据表里的地址要找到手册里关于Modbus通讯的说明章节通常会有地址编号规则的详细说明。第二步找协议地址或Modbus地址的关键词。如果手册里明确写了协议地址或Modbus地址那大概率就是从0开始的。如果写的是寄存器编号或PLC地址那可能需要减1。第三步用调试软件验证。如果手册说明不清楚直接用Modbus Poll或类似工具从地址0开始试。读一个已知的寄存器比如设备型号、版本号看能不能读到正确的值。第四步试地址1。如果地址0读不到试地址1。如果地址1能读到说明协议地址从1开始。第五步记录结果。确认之后把地址规则记录下来写在项目文档里。下次再用这个设备的时候就不用重新试了。6.3 一个容易忽略的细节位地址和字地址对于线圈和离散输入地址是以位为单位的。但有些设备在手册里写的是位地址有些写的是字地址位偏移。比如一个设备有16个线圈手册上可能写线圈1-16地址00001-00016也可能写线圈1-16地址0位0-15这两种写法表达的是同一个东西但看起来完全不一样。第一种是直接的位地址第二种是字地址加位偏移。在程序里处理的时候第一种直接填地址0-15即可。第二种需要先读一个字16位然后通过位运算提取每一位的状态。# 读取一个字然后提取每一位 def read_coils_from_register(register_value, bit_offset): 从寄存器值中提取指定偏移的位 return (register_value bit_offset) 0x01 # 假设读回来的寄存器值是0x0005二进制0000000000000101 # 位0和位2为1其他为0 register_value 0x0005 for i in range(16): state read_coils_from_register(register_value, i) if state: print(f线圈{i1}ON)这种处理方式在读取多个线圈状态的时候特别有用一次读取就能拿到16个线圈的状态比逐个读取效率高很多。7. 调试实战从报文层面理解地址规则7.1 手动构造Modbus RTU报文理解Modbus地址规则最直接的方法就是手动构造报文看地址字段到底是怎么填的。以读取保持寄存器为例假设从站地址是1起始地址是0读取2个寄存器。Modbus RTU报文如下01 03 00 00 00 02 C4 0B逐字节解释01从站地址03功能码读保持寄存器00 00起始地址高字节在前0x000000 02寄存器数量读取2个C4 0BCRC校验如果起始地址是1报文变成01 03 00 01 00 02 D5 CB可以看到地址字段从00 00变成了00 01。这就是协议地址的直接体现。7.2 用调试软件观察报文如果你用Modbus Poll这类调试软件可以在软件里设置地址然后观察实际发出的报文。这是理解地址规则最快的方法。具体操作打开Modbus Poll设置通讯参数波特率、数据位等。在Setup里设置功能码03地址填0数量填2。打开通讯监视窗口Display - Communication。观察发出的报文确认地址字段是00 00。把地址改成1再观察报文确认地址字段变成00 01。通过这种方式你可以直观地看到地址字段的变化理解协议地址和软件界面地址的对应关系。7.3 异常码的解读当地址填错的时候设备通常会返回异常码。常见的异常码有异常码含义可能原因01非法功能码设备不支持该功能码02非法数据地址地址超出设备支持范围03非法数据值写入的值超出允许范围04从站设备故障设备内部错误如果你收到异常码02说明地址不对。这时候需要检查地址是否超出了设备支持的寄存器范围或者地址偏移是否正确。注意有些设备在地址错误的时候不会返回异常码而是直接不响应。这时候你会看到超时错误。遇到这种情况先检查物理连接和通讯参数确认无误后再检查地址。8. 避坑指南那些年我踩过的地址坑8.1 地址偏移的连环坑最常见的坑就是地址偏移。我遇到过好几次这样的情况手册上写的是40001我填了0读不到数据。改成1读到了但数据不对。再改成2数据对了。这种情况通常是因为设备手册的地址说明有歧义。有的手册写40001但实际协议地址是1而不是0。有的手册写寄存器1但实际协议地址是0而不是1。我的应对策略是从0开始逐个试直到读到正确的数据。虽然笨但有效。试的时候用一个已知的、不会变化的值比如设备型号、版本号作为参照这样能快速判断地址是否正确。8.2 数据类型不匹配的坑另一个常见的坑是数据类型不匹配。比如设备返回的是16位整数但你按32位浮点数去解析结果自然不对。我遇到过一个案例某压力传感器手册上写着压力值保持寄存器地址0单位0.1kPa。我读回来一个值比如0x00FA转换成十进制是250乘以0.1得到25.0kPa。这看起来没问题。但后来发现实际压力应该是2.5kPa。原来设备返回的是32位整数高16位在地址0低16位在地址1。我只读了地址0得到的是高16位低16位被丢弃了。正确的做法是同时读取地址0和地址1组合成32位整数再乘以0.1。这个案例告诉我们读寄存器之前一定要确认数据类型和寄存器数量。16位数据和32位数据的处理方式完全不同。8.3 字节序的坑字节序的问题在前面已经讲过了这里再强调一下不要假设所有设备都是大端模式。我遇到过一个小端模式的设备读回来的温度和实际温度差了256倍。排查了半天最后发现是字节序问题。把高低字节交换之后数据就对了。确认字节序的方法很简单写一个已知值到设备然后读回来看哪个字节序能得到正确的值。比如写25.6读回来如果是0x0100那就是大端如果是0x0001那就是小端。8.4 地址范围的坑有些设备的寄存器地址范围是有限的。比如只支持0-99你填100就会返回异常码02。这时候需要确认设备支持的地址范围不要超出。另外有些设备的地址是分段的。比如0-99是实时数据100-199是参数设置200-299是历史数据。不同段的地址可能对应不同的功能码或数据格式需要分别处理。9. 把地址规则内化成调试直觉说了这么多其实核心就几句话Modbus地址有PLC地址和协议地址两种写法PLC地址的第一位表示寄存器类型协议地址从0开始不同设备的地址偏移规则可能不同拿到新设备先确认功能码和寄存器类型严格绑定不能混用数据类型和字节序需要根据设备实际情况确认。但这些话如果只是看一遍下次调试的时候还是会踩坑。真正有用的做法是把地址规则内化成调试直觉。什么意思就是当你拿到一个新设备的时候不需要刻意去想这个地址是PLC地址还是协议地址而是能快速判断出应该怎么填。这种直觉来自于大量的实践和踩坑。我自己的经验是每次调试新设备的时候都记录下地址规则和调试过程。时间长了你就会发现一些规律。比如某个品牌的设备通常用协议地址某个品牌的设备通常用PLC地址。这些规律能帮你快速定位问题。另外我建议你在项目里维护一个设备地址规则库把用过的设备的地址规则都记录下来。下次再用同样的设备直接查库就行不用重新试。这个习惯能省下大量时间。最后再说一点Modbus地址规则虽然看起来繁琐但一旦理解了背后的逻辑其实并不复杂。关键是要搞清楚协议地址和PLC地址的区别以及不同设备的实现差异。把这两点搞明白了大部分地址问题都能迎刃而解。我在实际使用中发现很多所谓的地址问题其实不是地址本身的问题而是功能码选错、数据类型不匹配、字节序不对导致的。所以遇到通讯问题的时候不要一上来就怀疑地址先把功能码、数据类型、字节序都检查一遍往往能更快找到问题所在。

相关新闻

小电流接地系统故障选线:基于MATLAB与Simulink的暂态分析实现

小电流接地系统故障选线:基于MATLAB与Simulink的暂态分析实现

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

2026/10/11 2:38:09 阅读更多 →
Claude Code连接Zotero MCP失败排查:从配置到环境变量的完整指南

Claude Code连接Zotero MCP失败排查:从配置到环境变量的完整指南

写这篇的起因很简单:我最近在整理一个跨平台文献综述项目,Zotero 里存了几百条带注释的文献,而日常写代码、写方案都泡在 Claude Code 里。这两边来回切换非常割裂,我第一想法就是通过 MCP 把 Zotero 直接接进 Claude Code&#x…

2026/10/11 2:37:09 阅读更多 →
大数据高性能计算优化:存储、调度与倾斜治理实战指南

大数据高性能计算优化:存储、调度与倾斜治理实战指南

大数据领域的高性能计算,听起来像是一个只能靠堆硬件、换集群、加节点才能解决的问题。我在这一行做了几年之后,最大的体会恰恰相反:大部分任务的性能瓶颈,根本不在机器不够快,而在于数据布局不合理、调度参数不对、引…

2026/10/11 2:37:09 阅读更多 →

最新新闻

2025年AI IDE实战测评榜:从个人开发到企业部署的完整选型攻略(TaoToken统一API接入篇)

2025年AI IDE实战测评榜:从个人开发到企业部署的完整选型攻略(TaoToken统一API接入篇)

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

2026/10/11 10:24:10 阅读更多 →
付了GPT-5的钱,用的是开源模型?用TaoToken统一Key看清每次调用

付了GPT-5的钱,用的是开源模型?用TaoToken统一Key看清每次调用

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

2026/10/11 10:24:10 阅读更多 →
装完这16个Skills,我的OpenClaw终于会自己查文档了:TaoToken统一Key接入实录

装完这16个Skills,我的OpenClaw终于会自己查文档了:TaoToken统一Key接入实录

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

2026/10/11 10:24:10 阅读更多 →
用 Java 5 分钟写一个 MCP Server:基于开源 MCP Java SDK 接入 TaoToken 统一 Key

用 Java 5 分钟写一个 MCP Server:基于开源 MCP Java SDK 接入 TaoToken 统一 Key

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

2026/10/11 10:24:10 阅读更多 →
免越狱批量控制iPhone:基于Accessibility API的合规自动化方案

免越狱批量控制iPhone:基于Accessibility API的合规自动化方案

1. 为什么“免越狱批量控制iPhone”这件事,过去十年几乎没人真正做成?“不用越狱也能批量控制 iPhone”——这句话放在2024年之前,对绝大多数iOS开发者、自动化测试工程师甚至企业IT管理员来说,都像一句带点讽刺意味的行业黑话。不…

2026/10/11 10:24:10 阅读更多 →
从“impeccable”到工程实践:代码格式化、静态检查与CI流水线

从“impeccable”到工程实践:代码格式化、静态检查与CI流水线

“impeccable”这个词,按读音是 /ɪmˈpɛkəbəl/,意思是“无可挑剔、毫无瑕疵”。我见过不少人把它当成代码注释里的形容词,写“keep the code impeccable”。说实话,第一次看到某公司前端代码仓库的提交规范里,用这…

2026/10/11 10:23:09 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/10 10:38:42 阅读更多 →