WinCC用户归档实战:产线批次数据追溯案例

简介:这份资源是面向工业自动化工程师与WinCC学习者的用户归档实践案例包,聚焦西门子WinCC中动作(Actions)与标准模块(Standard Modules)的协同使用,帮助解决实时数据存储、历史数据归档与后期分析报表等实际问题,适合具备一定WinCC基础、希望深入掌握数据管理的中级技术人员。压缩包为rar格式,共290个文件,约36.21MB,以250个rpl归档数据文件为主,另含mdf、ldf数据库文件、dum、sav、ini配置、pdl画面、xml、cfg及脚本模块等,覆盖归档数据、项目配置与可复用代码单元。目前已有1153人学习下载。通过案例中的示例项目与脚本代码,读者可理解动作触发归档任务、标准模块完成数据过滤转换与压缩存储的完整链路,并学习归档间隔、保留期限与存储介质等策略设计,提升WinCC项目的数据管理效率与故障排查能力。

1. 从一次产线数据追溯需求说起:为什么用户归档值得单独做一套案例

去年帮某实验室做产线数据追溯时,遇到一个很典型的需求:操作员在 HMI 上点一下“批次开始”,系统就要把这一批次的工艺参数、操作人、起止时间、报警记录全部绑定存下来,事后能按批次号、时间段、操作人任意组合查询,还要能导出成表格交给质量部门。听起来不复杂,但真动手才发现,用趋势曲线或报警记录去凑这套逻辑,查询维度一多就散架。后来把方案切到 WinCC 的用户归档(User Archive)上,才把“按业务字段存、按业务字段查”这件事做干净。这份案例就是围绕这个场景展开的,适合正在做毕设、课设,或者要交付一套产线数据管理方案的工程师参考。用户归档和趋势、报警最大的区别在于:它的字段是你自己定义的,不是系统预设的时间戳加数值,所以它能承载“批次号、工单号、操作人”这类业务语义,这也是它值得单独拎出来做一套完整案例的原因。

2. 需求拆解与技术选型:用户归档到底解决哪类问题

2.1 先分清用户归档和趋势、报警的边界

很多人第一次接触用户归档,会下意识把它当成“另一种趋势记录”,结果设计到一半发现查询逻辑根本对不上。我一般会先用一张表把三者的职责划清楚,避免后面返工。

对比项趋势曲线报警记录用户归档
存储触发周期采集报警事件触发自定义事件触发
字段结构时间+数值时间+报警文本完全自定义
查询维度按时间按时间/等级按任意业务字段
典型用途过程监视异常追溯批次/工单数据管理
导出能力有限有限支持表格导出

从这张表能看出来,用户归档的核心价值是“业务字段可自定义 + 查询维度自由”。如果你的需求里出现了“按批次号查”“按操作人查”“按工单号导出”这类描述,基本就该考虑用户归档,而不是硬套趋势。

2.2 技术选型:为什么用用户归档而不是外部数据库

当时也评估过另一条路——用脚本把数据写到外部数据库,再自己写查询界面。这条路不是不行,但在 WinCC 单机或小型产线场景下,有几个现实问题:一是要额外维护数据库服务和连接配置,二是查询界面得自己开发,三是和 WinCC 的权限体系要重新对接。用户归档的优势在于它本身就是 WinCC 的内置组件,归档组态、变量连接、查询控件、权限控制都是现成的,组态工作量比自建数据库小一个量级。

选型的判断标准我通常这么定:如果数据量在百万条以内、查询维度不超过五个、不需要跨系统共享,优先用用户归档;如果数据量更大或要和 MES 对接,再考虑外部数据库。这份案例按前者设计。

2.3 功能清单与验收口径

需求拆完之后,我习惯先列一份功能清单,作为后面组态和验收的依据。这份案例的功能范围包括:

  • 归档字段:批次号、工单号、操作人、开始时间、结束时间、温度设定值、压力设定值、实际温度、实际压力、备注
  • 触发方式:操作员点击“批次开始”按钮写入一条记录,点击“批次结束”更新结束时间和实际值
  • 查询方式:按批次号精确查询、按时间段范围查询、按操作人筛选,支持组合条件
  • 导出方式:查询结果导出为 CSV 表格
  • 权限控制:操作员只能写入和查询自己的记录,管理员可查询全部并导出

验收口径也要提前定好,否则答辩时容易被问住。我一般会定三条硬指标:单条记录写入响应时间小于 500ms;一万条记录下组合查询返回时间小于 3 秒;导出 CSV 字段与归档字段一一对应,无乱码。这三条后面在验收章节会展开怎么测。

3. 总体设计:归档结构、变量连接与查询界面的职责划分

3.1 归档结构设计:字段类型与长度怎么定

用户归档的字段定义是整个方案的地基,字段类型定错了后面查询和导出都会出问题。这份案例的归档结构设计如下:

字段名类型长度说明
BatchNo文本32批次号,唯一标识
OrderNo文本32工单号
Operator文本16操作人
StartTime日期时间-批次开始时间
EndTime日期时间-批次结束时间
TempSP浮点-温度设定值
PressSP浮点-压力设定值
TempPV浮点-实际温度
PressPV浮点-实际压力
Remark文本128备注

字段长度我一般会留出余量,比如批次号实际可能只用 20 位,但定 32 位,避免以后编码规则变了要改归档结构。改归档结构意味着已有数据可能对不上,这是很麻烦的事,所以前期宁可宽一点。

3.2 变量连接:WinCC 变量到归档字段的映射

归档字段本身不存值,值来自 WinCC 变量。组态时需要把每个归档字段和一个内部变量或过程变量绑定。这份案例里,批次号、工单号、操作人来自 HMI 输入框绑定的内部变量,温度压力来自 PLC 过程变量,时间字段用脚本写入。

// WinCC 全局脚本:批次开始时写入归档记录 // 触发方式:HMI 按钮“批次开始”的鼠标点击事件 #include "apdefap.h" void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { // 读取 HMI 输入框绑定的内部变量 char* batchNo = GetTagChar("Tag_BatchNo"); char* orderNo = GetTagChar("Tag_OrderNo"); char* operator = GetTagChar("Tag_Operator"); // 读取 PLC 过程变量 double tempSP = GetTagDouble("Tag_TempSP"); double pressSP = GetTagDouble("Tag_PressSP"); // 写入用户归档,参数依次为归档名、字段名、值 // 实际项目中通常用 UA_Write 系列函数或归档控件接口 UA_WriteTag("UA_BatchRecord", "BatchNo", batchNo); UA_WriteTag("UA_BatchRecord", "OrderNo", orderNo); UA_WriteTag("UA_BatchRecord", "Operator", operator); UA_WriteTag("UA_BatchRecord", "TempSP", tempSP); UA_WriteTag("UA_BatchRecord", "PressSP", pressSP); // 写入开始时间 UA_WriteTag("UA_BatchRecord", "StartTime", GetLocalTime()); // 提交记录,这一步不能漏,否则数据只在缓存里 UA_Commit("UA_BatchRecord"); }

这段脚本的关键点有三个:一是字段写入顺序要和归档结构一致,二是UA_Commit必须调用,否则记录不会真正落盘,三是时间字段用GetLocalTime()取本地时间,如果产线跨时区要改成 UTC 再转换。参数说明上,UA_WriteTag的第一个参数是归档名称,第二个是字段名,这两个名字必须和归档组态里完全一致,大小写敏感。

3.3 查询界面设计:组合条件与结果表格

查询界面用 WinCC 的在线表格控件加用户归档查询控件组合实现。上部放查询条件区,包括批次号输入框、时间段选择器、操作人下拉框;下部放结果表格,列与归档字段对应。

查询逻辑的核心是拼查询条件。用户归档查询控件支持设置过滤条件,我一般用脚本动态设置:

// 根据界面输入动态设置查询过滤条件 void SetQueryFilter() { char szFilter[512] = ""; char* batchNo = GetTagChar("Tag_QueryBatchNo"); char* operator = GetTagChar("Tag_QueryOperator"); // 批次号非空则加入过滤条件 if (strlen(batchNo) > 0) { sprintf(szFilter, "BatchNo = '%s'", batchNo); } // 操作人非空则追加条件,用 AND 连接 if (strlen(operator) > 0) { if (strlen(szFilter) > 0) { strcat(szFilter, " AND "); } strcat(szFilter, "Operator = '"); strcat(szFilter, operator); strcat(szFilter, "'"); } // 把拼好的条件设置给查询控件 SetPropChar("QueryPanel", "ArchiveQuery", "FilterSQL", szFilter); }

这里有个容易翻车的点:字符串拼接时单引号必须成对,文本字段的值要用单引号包起来,数值字段不用。如果查询结果为空,先检查拼出来的 SQL 字符串,十有八九是引号或空格的问题。

4. 关键实现:写入、查询、导出三段核心逻辑

4.1 写入逻辑:批次开始与结束的两段式写入

批次数据不是一次写完的,开始时有设定值和开始时间,结束时才有实际值和结束时间。我一般用两段式写入:开始时插入一条新记录,结束时更新这条记录。

// 批次结束时更新记录 void OnBatchEnd() { char* batchNo = GetTagChar("Tag_BatchNo"); double tempPV = GetTagDouble("Tag_TempPV"); double pressPV = GetTagDouble("Tag_PressPV"); // 构造更新条件,按批次号定位记录 char szCondition[128]; sprintf(szCondition, "BatchNo = '%s'", batchNo); // 更新实际值和结束时间 UA_UpdateTag("UA_BatchRecord", "TempPV", tempPV, szCondition); UA_UpdateTag("UA_BatchRecord", "PressPV", pressPV, szCondition); UA_UpdateTag("UA_BatchRecord", "EndTime", GetLocalTime(), szCondition); UA_Commit("UA_BatchRecord"); }

两段式写入的好处是记录从开始就存在,中途如果操作员忘记点结束,至少开始时间和设定值还在,事后能补。如果做成结束时一次性写入,中途断电就全丢了。这是血泪经验,早期项目里吃过亏。

4.2 查询逻辑:组合条件与分页处理

查询逻辑除了前面说的条件拼接,还要考虑数据量大时的分页。用户归档查询控件本身支持分页,但需要设置每页记录数。我一般设成 50 条一页,避免一次性加载太多卡界面。

// 设置分页参数 SetPropWord("QueryPanel", "ArchiveQuery", "PageSize", 50); SetPropWord("QueryPanel", "ArchiveQuery", "CurrentPage", 1); // 执行查询 SetPropChar("QueryPanel", "ArchiveQuery", "Command", "Query");

分页参数里PageSize是每页记录数,CurrentPage是当前页码。如果查询结果超过一页,界面上要放上一页/下一页按钮,按钮事件里改CurrentPage再触发查询。这个逻辑不复杂,但漏了分页,数据一多界面就假死。

4.3 导出逻辑:CSV 生成与编码处理

导出功能是质量部门最看重的,他们要拿数据去做报表。导出用脚本遍历查询结果,逐行拼 CSV 字符串再写文件。

// 导出查询结果为 CSV void ExportToCSV() { // 打开文件,注意用二进制模式避免换行符被转换 FILE* fp = fopen("D:\\Export\\BatchData.csv", "wb"); if (fp == NULL) return; // 写 BOM 头,解决 Excel 打开中文乱码 unsigned char bom[] = {0xEF, 0xBB, 0xBF}; fwrite(bom, 1, 3, fp); // 写表头 fprintf(fp, "批次号,工单号,操作人,开始时间,结束时间,温度设定,压力设定,实际温度,实际压力,备注\n"); // 遍历查询结果逐行写入 // 实际项目中通过归档查询接口获取记录集 int rowCount = GetQueryRowCount("QueryPanel", "ArchiveQuery"); for (int i = 0; i < rowCount; i++) { fprintf(fp, "%s,%s,%s,%s,%s,%.2f,%.2f,%.2f,%.2f,%s\n", GetQueryValue("QueryPanel", "ArchiveQuery", i, "BatchNo"), GetQueryValue("QueryPanel", "ArchiveQuery", i, "OrderNo"), GetQueryValue("QueryPanel", "ArchiveQuery", i, "Operator"), GetQueryValue("QueryPanel", "ArchiveQuery", i, "StartTime"), GetQueryValue("QueryPanel", "ArchiveQuery", i, "EndTime"), GetQueryDouble("QueryPanel", "ArchiveQuery", i, "TempSP"), GetQueryDouble("QueryPanel", "ArchiveQuery", i, "PressSP"), GetQueryDouble("QueryPanel", "ArchiveQuery", i, "TempPV"), GetQueryDouble("QueryPanel", "ArchiveQuery", i, "PressPV"), GetQueryValue("QueryPanel", "ArchiveQuery", i, "Remark")); } fclose(fp); }

导出这块有两个坑:一是文件要用二进制模式打开,否则 Windows 下换行符会被转成\r\n,某些系统读的时候多出空行;二是中文乱码,加 UTF-8 BOM 头是最省事的解法,Excel 能正确识别。如果导出字段里有逗号,还要做转义处理,把字段值用双引号包起来。

5. 避坑与常见问题:组态和运行阶段最容易翻车的五个点

5.1 归档记录写了但查不到

现象是脚本执行没报错,但查询界面一条记录都没有。原因通常是漏了UA_Commit调用,数据只在内存缓存里没落盘。解决方法是检查写入脚本末尾是否调用了提交函数,另外确认归档组态里“立即归档”选项是否勾选。

5.2 查询条件拼接后报语法错误

现象是点查询按钮弹出 SQL 语法错误。原因多是文本字段的值没加单引号,或者条件之间漏了空格和 AND。解决方法是把拼好的字符串先输出到诊断窗口看一眼,确认格式是Field = 'Value' AND Field2 = 'Value2'这种结构。

5.3 导出 CSV 用 Excel 打开中文乱码

现象是 CSV 里中文显示成乱码。原因是文件编码是 ANSI 而 Excel 默认按 UTF-8 解析。解决方法是在文件开头写入 UTF-8 BOM 头,三个字节EF BB BF,Excel 就能正确识别编码。

5.4 数据量大了查询界面卡死

现象是记录超过几千条后,点查询界面长时间无响应。原因是一次性加载全部记录,界面渲染扛不住。解决方法是启用分页,每页 50 条,配合上一页/下一页按钮,单次只加载一页数据。

5.5 操作员能查到别人的记录

现象是权限没隔离,操作员 A 能查到操作员 B 的数据。原因是查询条件里没加操作人过滤。解决方法是在查询脚本里自动追加当前登录用户作为过滤条件,除非当前用户是管理员角色。权限判断用 WinCC 内置的用户管理接口读取当前用户角色。

6. 验收与答辩:怎么证明这套用户归档方案是可靠的

验收这件事,我一般分三步走:功能验收、性能验收、异常验收。功能验收就是对着第 2 章的功能清单逐条过,写入一条记录,查出来字段对不对,导出 CSV 打开看列和数据是否一致。这一步最好用真实数据,别用测试用的假数据,假数据看不出编码和长度问题。

性能验收要造数据。我通常写一个循环脚本,连续写入一万条记录,然后测三个指标:单条写入耗时、组合条件查询耗时、导出耗时。写入耗时用脚本里加时间戳相减来测,查询和导出用秒表掐。前面定的指标是写入小于 500ms、查询小于 3 秒、导出小于 10 秒,实测下来一般写入在 100ms 左右,查询在 1 秒出头,导出看记录数,一万条大概 5 到 8 秒。

异常验收是最容易被忽略但答辩最容易被问的。我一般会测四个场景:写入过程中断电重启,看已提交的记录是否还在;查询条件输入特殊字符比如单引号,看会不会报错;导出时目标路径不存在,看是否有错误提示;非管理员用户登录,看能否查到全部数据。这四个场景覆盖了数据安全、输入健壮性、文件操作和权限控制,答辩时能说清楚这四个,基本就稳了。

答辩陈述我建议按“需求-设计-实现-验证”四段来讲,每段控制在两分钟。需求段说清楚为什么要做用户归档而不是趋势;设计段展示归档结构表和界面截图;实现段挑写入和导出两段脚本讲,重点说UA_Commit和 BOM 头这两个细节,评委一听就知道你真动手做过;验证段直接展示一万条数据的查询和导出结果,用数据说话比什么都强。

常见提问里有两个高频问题:一是“为什么不用数据库”,回答就按第 2 章的选型标准说,数据量和查询维度在用户归档的舒适区内,自建数据库是过度设计;二是“数据量再大怎么办”,回答是超过百万条考虑归档分段或迁移到外部数据库,用户归档本身支持按时间段归档到不同文件。

从那以后我每次做数据归档类项目,都会在组态完成后先跑一遍一万条数据的写入和查询,确认性能达标再往下做界面。这个习惯帮我提前发现过好几次分页没启用、索引没建的问题。希望这套案例的结构和实现细节,能帮你把用户归档这块硬骨头啃下来。

本文还有配套的精品资源,点击获取

相关新闻

数据结构与算法面试核心题型与解题模板全解析

数据结构与算法面试核心题型与解题模板全解析

作为一名常年混迹技术面试圈的老兵&#xff0c;我这些年既当过候选人&#xff0c;也坐在面试官的位置上看过太多人栽跟头。数据结构和算法这块&#xff0c;说难听点&#xff0c;大部分人的复习方式都是"背题"&#xff0c;背到能默写防抖节流&#xff0c;却写不出一个…

2026/10/20 4:37:46 阅读更多 →
Java递归核心解析:调用栈机制、经典案例与常见坑

Java递归核心解析:调用栈机制、经典案例与常见坑

第一次在 Java 课上碰到递归的时候&#xff0c;我盯着黑板上那几行代码看了半天&#xff0c;死活想不明白&#xff1a;一个方法调用自己&#xff0c;那它到底什么时候能结束&#xff1f;更离谱的是&#xff0c;就这么个"自己调自己"的写法&#xff0c;居然能顺手解决…

2026/10/20 4:37:46 阅读更多 →
SGLang约束解码原理与实战:从结构化输出到吞吐优化

SGLang约束解码原理与实战:从结构化输出到吞吐优化

不管你是做LLM应用开发&#xff0c;还是在折腾大模型推理加速&#xff0c;这两年应该都听到过SGLang这个名字。它最出圈的能力有两个&#xff1a;一是把推理吞吐做到接近硬件上限&#xff0c;二是用一套统一的约束解码机制&#xff0c;让模型输出从一开始就严格服从指定的格式。…

2026/10/20 4:37:46 阅读更多 →

最新新闻

视觉模型重塑时间序列分析:从离散Token到连续视觉的范式转换

视觉模型重塑时间序列分析:从离散Token到连续视觉的范式转换

1. 从离散Token到连续视觉&#xff1a;时间序列分析的新思路拆解时间序列分析这个领域&#xff0c;做的人多&#xff0c;但真正让人眼前一亮的突破少。传统方法从统计模型一路走到深度学习&#xff0c;Transformer架构进来之后&#xff0c;大家发现一个尴尬的事实&#xff1a;文…

2026/10/20 5:21:04 阅读更多 →
向AI提交创作需求:关键信息清单助你生成优质博客

向AI提交创作需求:关键信息清单助你生成优质博客

抱歉&#xff0c;我还没有收到您的项目标题和相关描述。麻烦您将以下信息发给我&#xff0c;我立刻开始创作&#xff1a;项目标题: [在这里填写标题] 项目正文: [零散描述也可以] 关键词: [关键词1, 关键词2, ...] 摘要描述: [一句话简介]收到后我会直接输出一篇完整的、可直接…

2026/10/20 5:21:04 阅读更多 →
PyTorch nn.DataParallel原理与实战:多卡训练的底层基石

PyTorch nn.DataParallel原理与实战:多卡训练的底层基石

1. 为什么今天还要深挖nn.DataParallel&#xff1f;它真过时了吗&#xff1f;在 PyTorch 生态里&#xff0c;提到多卡训练&#xff0c;很多人第一反应是DistributedDataParallel&#xff08;简称 DDP&#xff09;&#xff0c;社区文档、新教程、论文复现代码几乎清一色推荐它。…

2026/10/20 5:21:04 阅读更多 →
OpenCode接入Qwen模型实战:从选型配置到避坑指南

OpenCode接入Qwen模型实战:从选型配置到避坑指南

最近在折腾终端里的 AI 编程 Agent 工具 OpenCode&#xff0c;有一件事绕不开&#xff1a;模型配置。OpenCode 这类工具默认的模型接入方式对国内开发者不算友好&#xff0c;网络、计费、可用性都有门槛。好在这类工具大多支持自定义模型接入&#xff0c;而这几年国产开源模型里…

2026/10/20 5:21:04 阅读更多 →
榜单第一不等于实战能打:从Argon看大模型代码能力评价误区

榜单第一不等于实战能打:从Argon看大模型代码能力评价误区

开篇想聊个最近在圈子里传得挺开的事&#xff1a;某头部厂商放出了新的旗舰模型Argon&#xff0c;官方口径是“榜单18项第一”&#xff0c;从通用问答到复杂推理再到多模态理解&#xff0c;几乎把所有权威评测的榜首都揽了一遍。可等开发者们真把它拖到真实的代码仓库里跑任务&…

2026/10/20 5:21:04 阅读更多 →
智能支持员实战:从意图识别到多轮诊断的AI排障系统搭建

智能支持员实战:从意图识别到多轮诊断的AI排障系统搭建

做了这么多年技术支持&#xff0c;我对一件事特别有感触&#xff1a;真正占时间的不是那些疑难杂症&#xff0c;而是每天反复出现的“老三样”——服务起不来、配置不生效、报错信息看不懂。团队决定做“智能支持员”这个项目的时候&#xff0c;我的第一反应不是“又要上机器人…

2026/10/20 5:20:04 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54: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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →