NModbus Tools 实战:Modbus RTU/TCP 调试与自动化验证指南
简介NModbus Tools 是一套基于 NModbus4 开源库构建的 Modbus 协议工具集面向工业自动化领域的开发者、测试工程师与教学人员用于串行链路、TCP 网络及协议报文数值的处理。它可帮助使用者完成 Modbus RTU 与 Modbus TCP 的数据读写、通信诊断、报文解析与虚拟设备模拟降低 PLC 与从站设备联调的门槛。资源包共 104 个文件以 72 个 C# 源码文件为核心辅以 xaml 界面文件、csproj 工程文件、config 与 settings 配置、resx 资源及 png 图示整体约 90KB结构紧凑便于直接编译与二次开发。已有 112 人学习下载。借助其中的串口与 TCP 通信模块、报文构造解析逻辑、诊断调试与日志记录功能读者可快速搭建测试环境验证设备间通信是否正常并在此基础上扩展自己的 Modbus 应用。1. NModbus Tools把 Modbus 调试从“玄学”拉回可复现的工程现场第一次接触 NModbus Tools 的人多半是被现场逼出来的。PLC 侧寄存器地址对不上、串口助手能收到字节但解析全是乱码、TCP 连上了却读回一堆异常码这类问题靠猜是猜不出来的。NModbus Tools 本质上是围绕 NModbus 这个 .NET 生态里的 Modbus 协议库做出来的一套调试与验证工具集它把主站请求构造、从站模拟、报文抓取、寄存器读写这几件事收进一个可复现的流程里。它适合两类人一类是要在产线或实验室里快速验证一台 Modbus 设备到底通不通的现场工程师另一类是要在代码里集成 Modbus 通信、需要先拿工具把协议行为摸清楚的 .NET 开发者。这一章先把边界划清楚后面几章再落到具体怎么跑、参数怎么设、坑在哪。2. 先搞懂 NModbus Tools 在协议栈里的位置它到底替你做了什么很多人把 NModbus Tools 当成一个“串口助手升级版”这个理解会直接导致后面调试时抓瞎。串口助手只负责收发原始字节而 NModbus Tools 站在应用层它替你完成了功能码封装、CRC 校验、事务标识匹配、异常码解析这几件事。理解这个分层才能明白为什么有些问题在串口助手里看是正常的到了 NModbus Tools 里却报异常。2.1 Modbus RTU 与 Modbus TCP 在工具里的两条独立路径Modbus 有两个最常见的传输形态RTU 跑在串口上TCP 跑在以太网上。NModbus Tools 对这两条路径的处理逻辑差别很大不能混着理解。RTU 模式下一帧报文的边界靠 3.5 个字符时间的静默间隔来界定帧内用 CRC16 校验。工具在 RTU 模式下会替你算 CRC也会在接收时按静默间隔切帧。这意味着如果你用虚拟串口或者 USB 转串口线质量差静默间隔被拉长或打乱工具就会切出半截帧报出来的错看着像协议错实际是物理层问题。TCP 模式下报文靠 MBAP 头里的长度字段切帧事务标识用来匹配请求和响应。工具在 TCP 模式下会维护一个事务标识计数器每次请求自增。如果你用多个客户端连同一个从站事务标识冲突就会导致响应串台读回来的数据张冠李戴。对比项Modbus RTUModbus TCP传输层串口RS485/RS232以太网帧边界3.5 字符静默间隔MBAP 长度字段校验CRC16无靠 TCP 校验寻址从站地址 1 字节单元标识 1 字节工具侧关键参数波特率、数据位、校验位、停止位IP、端口、单元标识这张表建议在配置前先过一遍尤其是从站地址和单元标识这两个字段在 RTU 里叫从站地址在 TCP 里叫单元标识功能类似但填错的位置不一样。2.2 功能码与寄存器地址的映射关系NModbus Tools 里最容易被误用的就是寄存器地址。Modbus 协议本身用 0 基地址但很多设备手册用 1 基地址还有的用 40001 这种“Modicon 风格”的 5 位编号。工具在界面上通常会让你选地址基准选错了就会整体偏移一位。常见功能码和寄存器区的对应关系是这样的功能码 01 读线圈地址区是 0x0000 起功能码 02 读离散输入同样 0x0000 起功能码 03 读保持寄存器0x0000 起功能码 04 读输入寄存器0x0000 起。注意这四个区的地址空间是独立的同一个地址 0x0010 在 01 和 03 里指向的是完全不同的数据。// 以 NModbus 库为例读保持寄存器的典型调用 // slaveId: 从站地址RTU 下是 1-247TCP 下是单元标识 // startAddress: 0 基起始地址注意和手册里的 1 基地址差 1 // numRegisters: 要读的寄存器数量单次不宜超过 125 ushort[] registers master.ReadHoldingRegisters( slaveId: 1, startAddress: 0, numRegisters: 10); // 读回来的 ushort 数组每个元素是一个 16 位寄存器 // 如果设备是 32 位浮点需要两个寄存器拼注意字节序 for (int i 0; i registers.Length; i) { Console.WriteLine($Reg[{i}]: {registers[i]}); }这段代码里三个参数最容易出错。slaveId在 RTU 下必须和从站拨码一致在 TCP 下要和网关配置的单元标识一致。startAddress是 0 基的如果手册写“40001”那对应的是功能码 03、地址 0。numRegisters单次读取有上限读保持寄存器最多 125 个读线圈最多 2000 个超了从站会回异常码 03。提示地址基准这个问题没有统一标准唯一可靠的办法是拿工具从地址 0 开始连续读一小段对照手册看数据对不对对不上就整体加 1 再试。3. 用 NModbus Tools 跑通第一条链路从串口参数到第一次成功读取这一章落到具体操作。目标很明确让工具和一台 Modbus 从站设备完成一次成功的保持寄存器读取。整个过程分四步每一步都有明确的验证点哪一步没过就停在哪一步排查不要跳。3.1 串口参数配置与物理层确认RTU 模式下第一步是配串口。参数有五个端口号、波特率、数据位、校验位、停止位。最常见的组合是 9600/8/N/1也就是 9600 波特、8 数据位、无校验、1 停止位。但现场设备五花八门19200/8/E/1、38400/8/N/1 都常见。配置前先确认物理连接。RS485 是两线差分A 接 A、B 接 B接反了收不到数据但不会烧设备。如果是 USB 转 485 线先确认驱动装好在系统设备管理器里能看到对应的 COM 口。工具里选端口时如果列表是空的基本就是驱动问题。# 在 Linux 下可以用 stty 确认串口参数是否生效 # 假设串口是 /dev/ttyUSB0 stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb # 查看当前参数 stty -F /dev/ttyUSB0 -a # 用 od 直接看原始字节确认物理层有数据 # 这一步是排除工具问题的关键如果这里没数据工具里也不会有 od -x /dev/ttyUSB0stty这条命令在 Windows 下没有对应但思路一样先用系统层面的工具确认串口能收到字节再回到 NModbus Tools 里配。od -x是把串口当文件读按十六进制打印如果从站在被轮询这里应该能看到连续的字节流。看不到就查接线、查波特率、查从站是否上电。3.2 从站地址与功能码的选择逻辑物理层通了之后配从站地址。RTU 下从站地址范围是 1 到 2470 是广播地址248 到 255 保留。如果你不知道从站地址可以用工具里的“扫描”功能逐个试但更快的办法是查设备手册或者看从站拨码开关。功能码的选择取决于你要读什么数据。读线圈状态用 01读离散输入用 02读保持寄存器用 03读输入寄存器用 04。保持寄存器和输入寄存器的区别在于保持寄存器可读可写输入寄存器只读。如果你要写数据只能用 03 对应的写功能码 06 或 16。// 构造一个读保持寄存器的请求带异常处理 try { // 超时设置很关键RTU 下建议 300-1000ms master.Transport.ReadTimeout 500; master.Transport.WriteTimeout 500; ushort[] result master.ReadHoldingRegisters(1, 0, 4); // 成功读到数据 Console.WriteLine(读取成功: string.Join(,, result)); } catch (SlaveException ex) { // 从站返回了异常码ex.FunctionCode 是功能码 // ex.SlaveExceptionCode 是异常码常见的有 // 01 非法功能码02 非法数据地址03 非法数据值 Console.WriteLine($从站异常: 功能码{ex.FunctionCode}, 异常码{ex.SlaveExceptionCode}); } catch (TimeoutException) { // 超时通常是物理层或从站地址不对 Console.WriteLine(超时检查接线和从站地址); }这段代码里超时设置是血泪经验。默认超时往往偏长现场调试时等半天没反应很浪费时间。RTU 下 500ms 是个比较稳的值TCP 下可以设到 1000ms 到 2000ms。异常处理里SlaveException和TimeoutException要分开捕获前者说明通信通了但从站拒绝了请求后者说明根本没通。3.3 读回数据的解析与字节序处理读到ushort[]只是第一步真正的坑在解析。一个 16 位寄存器就是一个 ushort但如果设备里存的是 32 位整数或浮点数就需要两个寄存器拼。拼接时的字节序有四种可能大端、小端、大端字交换、小端字交换。// 把两个 ushort 拼成一个 32 位浮点数 // 不同设备的字节序不同这里给的是最常见的大端字交换 ushort high registers[0]; ushort low registers[1]; // 大端字交换先交换两个字再按大端拼 byte[] bytes new byte[4]; bytes[0] (byte)(low 8); bytes[1] (byte)(low 0xFF); bytes[2] (byte)(high 8); bytes[3] (byte)(high 0xFF); float value BitConverter.ToSingle(bytes, 0); Console.WriteLine($浮点值: {value});字节序这个问题没有捷径只能拿已知值去试。比如设备手册说某个寄存器在某个条件下应该是 25.0你就用四种字节序各解析一遍哪个出 25.0 就用哪个。工具里如果有字节序切换选项直接切着看比改代码快。注意读线圈和读离散输入返回的是 bool 数组不是 ushort 数组。功能码 01 和 02 的返回数据是按位打包的工具会替你解包但如果你自己解析原始报文要记得每个字节对应 8 个线圈。4. 避坑与排查NModbus Tools 调试中最容易翻车的五个场景这一章是现场踩坑记录每条都按“现象、原因、解决”写。这些坑我在不同项目里反复遇到有些是工具本身的边界有些是 Modbus 协议的特性提前知道能省很多时间。4.1 现象TCP 连上了但读数据超时原因通常有三个。第一单元标识填错。Modbus TCP 里单元标识用来区分同一 IP 下的多个从站如果网关配置的是 1你填 0 或 255从站不会响应。第二端口不对。Modbus TCP 默认端口是 502但有些网关会改成别的端口。第三防火墙或路由问题TCP 握手能成但数据包被拦。解决步骤先用telnet或nc确认端口通不通再用工具连单元标识从 1 开始试。如果网关有配置页面直接看它的单元标识设置。# 确认 Modbus TCP 端口是否可达 # 假设从站 IP 是 192.168.1.100 nc -zv 192.168.1.100 502 # 如果通了再用工具连 # 如果不通先查网络和防火墙4.2 现象RTU 下偶尔能读到数据大部分时候超时这是典型的物理层问题。RS485 总线如果没接终端电阻或者线太长、分支太多信号反射会导致部分帧损坏。表现就是时好时坏看着像玄学。解决在总线两端各接一个 120 欧姆终端电阻。线长控制在 1200 米以内波特率越高线越短。如果现场有多台从站用菊花链拓扑不要用星型。4.3 现象读回来的数据整体偏移一位地址基准问题。工具里如果默认 0 基而设备手册是 1 基你填手册上的地址就会整体偏移。比如手册说保持寄存器 40001 是温度你填 40001工具按 0 基解析成地址 40001实际读的是 40002。解决确认工具里的地址基准设置和手册对齐。如果不确定从地址 0 开始连续读 10 个对照手册找规律。4.4 现象写单个寄存器成功写多个寄存器报异常码 03异常码 03 是非法数据值。写多个寄存器用功能码 16请求里带字节计数。如果字节计数和实际数据长度对不上从站会拒绝。另一个常见原因是写的值超出了寄存器范围比如寄存器是 0 到 1000你写 2000。解决检查请求里的字节计数字段确认等于寄存器数量乘 2。确认写入值在设备允许范围内。4.5 现象工具界面卡死日志里全是超时如果轮询间隔设得太短而设备响应慢请求会堆积。NModbus 的 master 实例不是线程安全的多个线程同时调会出问题。解决轮询间隔至少设成超时时间的两倍。单线程轮询或者每个线程用独立的 master 实例。工具里如果有并发设置调低并发数。5. 把 NModbus Tools 用进自动化流程批量验证与回归测试单次读取跑通之后真正的价值在于批量验证。产线上一批设备要逐个测或者代码改动后要回归测试 Modbus 通信靠手工点工具效率太低。这一章讲怎么把 NModbus Tools 的能力嵌进自动化流程落到一个可复用的验证脚本上。5.1 用脚本批量扫描从站地址与寄存器区思路很简单对地址范围做遍历每个地址发一次读请求记录成功和失败。成功说明该地址有从站响应失败说明没有。这个扫描在部署新设备时特别有用能快速摸清总线上挂了哪些从站。// 批量扫描从站地址 1 到 247 // 对每个地址尝试读一个保持寄存器成功则记录 using System; using System.Collections.Generic; var foundSlaves new Listbyte(); for (byte slaveId 1; slaveId 248; slaveId) { try { // 超时设短一点扫描才快 master.Transport.ReadTimeout 200; master.Transport.WriteTimeout 200; // 读地址 0 的一个寄存器只为探测从站是否存在 master.ReadHoldingRegisters(slaveId, 0, 1); foundSlaves.Add(slaveId); Console.WriteLine($发现从站: {slaveId}); } catch (TimeoutException) { // 超时说明该地址没有从站继续下一个 } catch (SlaveException ex) { // 从站存在但返回异常也算发现 foundSlaves.Add(slaveId); Console.WriteLine($发现从站: {slaveId}, 异常码: {ex.SlaveExceptionCode}); } } Console.WriteLine($扫描完成共发现 {foundSlaves.Count} 个从站);这段脚本的关键在超时设置。扫描时超时要短200ms 足够否则 247 个地址扫一遍要几分钟。SlaveException也要捕获因为从站可能对地址 0 返回异常码 02但这恰恰说明从站在。5.2 把验证结果落成可对比的基线扫描只是第一步更有价值的是把每次读取的结果存下来和上一次对比。如果某个寄存器的值突然变了或者某个从站从有响应变成超时就是异常信号。这个思路在设备固件升级后的回归测试里特别有用。// 把读取结果存成 JSON便于对比 using System.Text.Json; var snapshot new Dictionarystring, ushort[](); foreach (var slaveId in foundSlaves) { try { // 读 0 到 9 共 10 个保持寄存器 ushort[] values master.ReadHoldingRegisters(slaveId, 0, 10); snapshot[$slave_{slaveId}] values; } catch (Exception ex) { snapshot[$slave_{slaveId}] null; Console.WriteLine($从站 {slaveId} 读取失败: {ex.Message}); } } // 序列化成 JSON 文件 string json JsonSerializer.Serialize(snapshot, new JsonSerializerOptions { WriteIndented true }); File.WriteAllText(modbus_snapshot.json, json);JsonSerializer是 .NET 内置的不需要额外依赖。存成 JSON 的好处是可读出问题时直接打开看哪个从站哪个寄存器不对。对比两次快照可以用简单的 diff 工具或者写几行代码逐项比。5.3 轮询间隔与并发数的取舍自动化流程里轮询间隔和并发数是两个要权衡的参数。间隔太短设备响应不过来请求堆积间隔太长实时性差。并发数太高master 实例的线程安全问题会暴露。我的习惯是单从站轮询间隔不低于 100ms多从站用单线程顺序轮询间隔按从站数量乘 50ms 起步。如果确实需要高并发每个线程用独立的 master 实例不要共享。场景轮询间隔并发数说明单从站调试200-500ms1稳定优先多从站巡检从站数×50ms1顺序轮询高实时采集50-100ms每从站 1 线程独立实例批量扫描200ms 超时1快速遍历这张表是起点实际值要根据设备响应时间和总线负载调。调的时候盯着超时率超时率超过 1% 就说明参数太激进。5.4 一个容易忽略的细节连接释放与重连长时间运行的自动化流程里连接释放和重连逻辑必须写。串口如果被异常拔出不重连就会一直报错。TCP 连接如果被对端断开不重连也会一直超时。// 简单的重连逻辑 bool TryReadWithReconnect(byte slaveId, ushort startAddress, ushort count, out ushort[] result) { result null; try { result master.ReadHoldingRegisters(slaveId, startAddress, count); return true; } catch (Exception) { // 读失败尝试重连 try { master.Transport.Dispose(); master.Transport CreateNewTransport(); // 重新创建传输层 master.Transport.ReadTimeout 500; result master.ReadHoldingRegisters(slaveId, startAddress, count); return true; } catch { return false; } } }CreateNewTransport这个方法要根据实际传输类型实现RTU 下是重新打开串口TCP 下是重新建连接。重连不要无限重试设个上限比如连续失败 3 次就报警。这套自动化流程跑顺之后Modbus 调试就从“每次都要手工点”变成了“跑个脚本看结果”。我自己的习惯是每个项目都留一份扫描脚本和快照对比脚本设备换型或者固件升级时先跑一遍基线对不上再人工介入。这样能把大部分低级问题挡在产线之前剩下的才是真正需要现场判断的。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Spring Boot医院挂号系统源码解析与实战运行指南

Spring Boot医院挂号系统源码解析与实战运行指南

做医院挂号类的管理系统,前前后后我接触过不下十套,从最早的 JSP 到后来的 SSH,再到现在的 Spring Boot 全家桶,说实话,技术选型越来越轻,但业务逻辑却一点没变简单。最近在帮一个朋友调试这套《Spring Boo…

2026/10/13 7:25:02 阅读更多 →
Windows容器化部署实战:WSL2+Docker引擎替代Docker Desktop

Windows容器化部署实战:WSL2+Docker引擎替代Docker Desktop

半个月前,一个朋友跟我抱怨:他在Windows上折腾某容器化开源框架,按文档装了Docker Desktop,结果内存动不动吃掉十几个G,磁盘IO慢得离谱,框架里的日志服务还时不时连不上。我看了一眼他的环境,一…

2026/10/13 7:24:02 阅读更多 →
全国流域水质数据清洗与建模实战指南

全国流域水质数据清洗与建模实战指南

简介:本资源是面向环境科学、数据科学及公共政策研究者的全国流域水质分析数据集,聚焦水环境健康评估、污染溯源与治理效果追踪等实际问题。压缩包共309个文件,含308个按日期命名的JSON格式水质记录(如2020-05-08.json、2021-03-1…

2026/10/13 7:24:02 阅读更多 →

最新新闻

RNOH TextInput 适配实战:属性映射、受控行为与中文输入法问题

RNOH TextInput 适配实战:属性映射、受控行为与中文输入法问题

1. 先说背景:TextInput 在 RNOH 组件体系中的位置1.1 为什么输入组件是跨端项目里最烧时间的一环跨端开发做得久了,你会发现一个规律:页面上那些花哨的动效、复杂的布局,解决起来其实都有套路,真正消耗大量调试时间的往…

2026/10/13 8:09:32 阅读更多 →
DM7客户端工具WIN64使用指南:环境配置、数据迁移与排错实战

DM7客户端工具WIN64使用指南:环境配置、数据迁移与排错实战

简介:DM7客户端工具WIN64是一款面向64位Windows操作系统的达梦数据库V7管理客户端,主要服务对象是数据库管理员、开发人员以及需要维护达梦库的技术工程师,解决他们在生产环境中连接数据库、执行SQL、管理对象与保障数据安全时的操作便利性问…

2026/10/13 8:09:32 阅读更多 →
PyQt5+MySQL轻量人事管理系统:从数据库设计到打包部署

PyQt5+MySQL轻量人事管理系统:从数据库设计到打包部署

简介:简易人事管理系统基于PyQt5与MySQL实现,面向初学桌面端开发与数据库联调的开发者,也适合作为ERP系统中人事模块的参考方案。资源包含完整的员工、部门、薪资、登录验证等管理界面与逻辑,通过Python脚本和SQL文件即可运行与二…

2026/10/13 8:09:32 阅读更多 →
四旋翼无人机仿真与控制:MATLAB与SolidWorks联合开发实践

四旋翼无人机仿真与控制:MATLAB与SolidWorks联合开发实践

1. 项目背景与核心价值四旋翼飞行器的仿真与控制一直是无人机开发领域的关键环节。传统开发流程中,MATLAB/Simulink负责算法验证,而SolidWorks承担机械设计,两者往往独立进行导致效率低下。这个项目打通了从多体动力学仿真到三维模型控制的完…

2026/10/13 8:09:32 阅读更多 →
SpringBoot+Vue私房菜定制上门服务系统:全栈毕设项目实战解析

SpringBoot+Vue私房菜定制上门服务系统:全栈毕设项目实战解析

每年毕设季都有很多同学在选题边缘反复横跳:想做个前后端分离的项目,又怕工作量太大hold不住;想做商城系统,又觉得太泛滥没新意。今天聊的这个项目方向——SpringBoot Vue 私房菜定制上门服务系统管理平台,恰好属于那…

2026/10/13 8:09:32 阅读更多 →
Claude Code稳定使用指南:小任务、短会话、严审查

Claude Code稳定使用指南:小任务、短会话、严审查

最近两三周,我几乎把 Claude Code 用成了日常开发里最顺手的帮手。但说实话,刚上手那几天它并没有宣传里那么“开箱即用”:会话动不动就把上下文搞丢,改到一半的代码稍微切换一下任务就忘了自己刚才在干什么,碰上一个稍…

2026/10/13 8:08:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →