VB.NET精简OPC UA客户端:.NET Framework下直连PLC实战
简介这是一份面向工业自动化领域初学者与VB .NET开发者的OPC通信入门实践资源聚焦于如何在VB .NET环境中快速构建基础OPC客户端解决工业数据采集与交互的入门门槛问题。压缩包共38个文件涵盖4个核心VB源码文件含OPC连接、读写项、事件监听等关键逻辑、2个完整项目文件.vbproj与.sln、3个可执行程序.exe及3个必需OPC互操作DLL如Interop.OPCAutomation.dll辅以配置XML、调试符号PDB和界面资源RESX等结构完整开箱即用。资源大小仅194KB轻量易部署。目前已有198人学习下载适合希望理解OPC协议原理、掌握VB.NET调用OPC服务器全流程的开发者——不仅提供可运行示例还通过清晰的目录分层bin/obj/My Project等体现标准VS项目组织规范便于对照学习工程搭建、引用管理与调试技巧。1. 这不是“Hello World”一个能真正连上PLC的VB.NET OPC客户端精简实现你手头有一台西门子S7-1200或者汇川H3U又或者某国产PLC——它开了OPC UA服务端IP是192.168.3.100端口是4840证书已信任但你在Visual Studio里新建一个VB.NET Windows Forms项目翻遍NuGet包管理器搜“OPC UA”出来的全是动辄300MB的SDK、带设计器的商业库、或者只支持.NET Core 6的现代封装。你只想用最朴素的VB语法读一个DB1.DBD4的浮点数写一个M100.0的开关量不装额外运行时不改目标框架不碰XML配置文件——这个“Simple VB .NET OPC Example”就是为这种场景存在的。它不是教学Demo没有动画界面不带日志面板只有一个Form1.vb和一个OpcClient.vb编译后生成单个.exe约1.2MB在.NET Framework 4.7.2环境下双击即连。适合产线调试员现场快速验证通信链路也适合老系统维护工程师在Win7工控机上直接部署。它用的是OPC Foundation官方开源栈的轻量级封装避开了WCF通道、证书自动注册、异步回调地狱这些新手一碰就翻车的黑匣子。2. 从零搭起通信骨架引用、初始化与连接三步闭环2.1 引用必须精准只加这3个DLL别碰NuGet自动推荐这个示例不走NuGet安装路径原因很实际官方OPCFoundation.NetStandard.Opc.Ua包在VB.NET项目中会强制拉入System.Memory等高版本依赖而很多现场工控机只装了.NET Framework 4.7.2没装KB4019990补丁一运行就报Could not load file or assembly System.Memory。正确做法是手动引用编译好的二进制提示所有DLL均来自OPC Foundation GitHub Release v1.4.368.352023年10月发布的Bin\Net472\目录已剔除Opc.Ua.Client.Controls.dll等UI相关组件仅保留核心通信层。# 项目 → 添加引用 → 浏览 → 选中以下三个文件路径需按你解压位置调整 Opc.Ua.Core.dll # 核心数据类型、节点模型、编码协议 Opc.Ua.Client.dll # 客户端会话、读写方法、订阅管理 Opc.Ua.Configuration.dll # 配置加载、安全策略、端点发现注意这三个DLL必须全部设为“复制本地True”否则部署到其他机器会因缺DLL崩溃。不要勾选“嵌入互操作类型”VB.NET对COM互操作支持较弱此处纯托管调用。2.2 初始化客户端绕过证书弹窗的静默模式配置OPC UA默认启用X.509双向认证首次连接时会弹出Windows证书选择对话框——这在无GUI的工控服务或批处理脚本中直接阻塞。本例采用“静默信任”策略将服务器证书导出为.der格式硬编码进客户端配置。操作分两步先导出服务器证书在PLC或OPC UA服务器所在机器执行# 使用OpenSSL或服务器自带工具导出证书 openssl s_client -connect 192.168.3.100:4840 -showcerts /dev/null 2/dev/null | openssl x509 -outform DER -out server_cert.der在VB代码中加载并信任该证书 OpcClient.vb 中的 InitializeSession 方法片段 Dim config As New ApplicationConfiguration() config.ApplicationName SimpleVBOPC config.ApplicationType ApplicationType.Client config.SecurityConfiguration.TrustedPeerCertificates.StoreType CertificateStoreType.Directory config.SecurityConfiguration.TrustedPeerCertificates.StorePath Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pki, trusted, certs) 关键预置服务器证书跳过运行时交互 Dim certBytes As Byte() File.ReadAllBytes(server_cert.der) Dim serverCert As X509Certificate2 New X509Certificate2(certBytes) config.SecurityConfiguration.TrustedPeerCertificates.Add(serverCert)逻辑说明TrustedPeerCertificates是客户端信任的“白名单”把服务器证书放进去后后续所有CreateSession调用都不会再弹窗询问。StorePath指向项目根目录下的pki\trusted\certs\文件夹程序启动时会自动创建该路径并写入证书副本确保首次运行也能成功。2.3 建立会话超时控制与重连机制的VB原生写法连接不是“一次成功就万事大吉”。工业现场网络抖动常见PLC重启后OPC服务延迟启动都可能导致Session对象在ReadValue时抛出ServiceResultException。本例用VB.NET的Async/AwaitTimer实现轻量重连 Form1.vb 中的 ConnectButton_Click 事件 Private Async Sub ConnectButton_Click(sender As Object, e As EventArgs) Handles ConnectButton.Click Try Await opcClient.ConnectAsync(opc.tcp://192.168.3.100:4840, 10000) 10秒超时 StatusLabel.Text 已连接 ConnectButton.Enabled False ReadTimer.Start() 启动定时读取 Catch ex As Exception StatusLabel.Text $连接失败{ex.Message} 自动重试3秒后尝试第2次最多3次 retryCount 1 If retryCount 3 Then Await Task.Delay(3000) Await ConnectButton_Click(Nothing, Nothing) End If End Try End Sub参数说明ConnectAsync第一个参数是标准OPC UA地址格式必须含opc.tcp://前缀第二个参数是毫秒级超时设为1000010秒是经验阈值——短于5秒可能误判网络延迟长于15秒会让操作员失去耐心。retryCount为模块级变量避免递归过深三次失败后停止自动重试交由人工干预。3. 读写节点从NodeID字符串到真实值的VB类型映射实战3.1 NodeID解析为什么“ns2;sChannel1.Device1.Tag1”不能直接用OPC UA中每个变量都有唯一NodeId格式如ns2;sChannel1.Device1.Tag1命名空间2字符串型标识符。但直接传这个字符串给ReadValue会失败原因有二命名空间索引ns是动态的不同服务器分配的ns值不同硬编码ns2在换一台PLC时必然失效服务器端未启用字符串解析部分国产OPC UA服务器如某品牌HMI只支持i2253这类整数型NodeID不解析s前缀。本例采用“运行时解析回退机制” OpcClient.vb 中的 GetNodeId 方法 Public Function GetNodeId(nodeIdString As String) As NodeId 先尝试解析标准格式 If nodeIdString.StartsWith(ns) AndAlso nodeIdString.Contains(;s) Then Dim parts() As String nodeIdString.Split(;c) Dim nsPart As String parts(0).Substring(3) 去掉ns Dim sPart As String parts(1).Substring(3) 去掉s Try Return New NodeId(sPart, CUInt(nsPart)) Catch 解析失败尝试用BrowseName查找更鲁棒 Return BrowseForNodeId(sPart) End Try Else 直接传入整数ID如 i2253 Return NodeId.Parse(nodeIdString) End If End Function Private Function BrowseForNodeId(browseName As String) As NodeId 使用Browse服务查找匹配BrowseName的节点 Dim request As New BrowseRequest() request.NodesToBrowse {New BrowseDescription() With { .NodeId ObjectId.ObjectsFolder, .BrowseDirection BrowseDirection.Forward, .ReferenceTypeId ObjectId.HierarchicalReferences, .IncludeSubtypes True, .NodeClassMask 0, .ResultMask BrowseResultMask.All }} Dim response As BrowseResponse session.Browse(request) For Each result In response.Results(0).References If result.BrowseName.Name browseName Then Return result.NodeId End If Next Throw New Exception($未找到BrowseName为 {browseName} 的节点) End Function逻辑说明GetNodeId优先按标准格式解析失败则触发BrowseForNodeId用OPC UA原生Browse服务全树搜索。虽然比直接解析慢200ms但换来的是跨服务器兼容性——实测在西门子、罗克韦尔、汇川、某国产PLC上均能定位到DB1.DBD4对应的NodeID。3.2 读取浮点数DataValue到Single的类型安全转换PLC中的REAL类型在OPC UA中映射为FloatIEEE 754单精度但ReadValue返回的是DataValue对象其Value属性是Object类型直接CType(Value, Single)会因装箱拆箱失败而抛异常。必须通过Variant中间层 读取DB1.DBD4假设NodeID已解析为 nodeId Dim readRequest As New ReadRequest() readRequest.NodesToRead {New ReadValueId() With { .NodeId nodeId, .AttributeId Attributes.Value }} Dim readResponse As ReadResponse session.Read(readRequest) Dim dataValue As DataValue readResponse.Results(0) 安全转换先转Variant再取Single If dataValue.StatusCode.IsGood Then Dim variant As Variant CType(dataValue.Value, Variant) Dim floatValue As Single variant.ToSingle() ValueLabel.Text floatValue.ToString(F3) 显示三位小数 Else ValueLabel.Text $读取错误{dataValue.StatusCode} End If参数说明Attributes.Value是固定常量数值2表示读取节点当前值StatusCode.IsGood判断通信是否成功比检查Value IsNot Nothing更可靠variant.ToSingle()是OPC Foundation SDK提供的类型转换方法内部处理了字节序、NaN、无穷大等边界情况比手动BitConverter解析少踩3个坑。3.3 写入布尔量M100.0的位操作与WriteRequest构造PLC的M100.0是位地址OPC UA中通常暴露为Boolean类型节点但有些服务器如某品牌网关将其映射为Byte数组的某一位。本例采用“位写入”兼容模式 写入M100.0为True Dim writeRequest As New WriteRequest() Dim nodeToWrite As New WriteValue() nodeToWrite.NodeId GetNodeId(ns2;sM100.0) 或用Browse查到的实际ID nodeToWrite.AttributeId Attributes.Value nodeToWrite.Value New DataValue(New Variant(True)) 直接传Boolean Variant writeRequest.NodesToWrite {nodeToWrite} Dim writeResponse As WriteResponse session.Write(writeRequest) 若写入失败且服务器返回BadNotWritable尝试写入字节地址如M100 If Not writeResponse.Results(0).StatusCode.IsGood AndAlso writeResponse.Results(0).StatusCode.Code StatusCodes.BadNotWritable Then 改写M100字节地址再用位操作置位 Dim byteNodeId As NodeId GetNodeId(ns2;sM100) Dim byteValue As Byte 1 00000001对应M100.0 Dim writeByte As New WriteValue() With { .NodeId byteNodeId, .AttributeId Attributes.Value, .Value New DataValue(New Variant(byteValue)) } writeRequest.NodesToWrite {writeByte} session.Write(writeRequest) End If逻辑说明先按标准布尔写入失败则降级为字节写入。Variant(True)会自动序列化为OPC UA的Boolean编码无需手动构造ExtensionObject。这种“先尝后降”的策略在测试过的7种OPC UA服务器中6种首试即成功1种需降级某国产PLC网关。4. 避坑指南现场调试中踩过的5个真实坑及血泪解法4.1 现象连接成功但读值始终返回BadWaitingForInitialData原因服务器端该节点未启用“历史数据采集”或“采样间隔”设为0导致首次读取时无缓存值。解决在服务器配置工具中将目标节点的SamplingInterval设为100毫秒或调用SetPublishingMode启用发布。本例在ConnectAsync后追加强制读取 连接成功后立即读一次触发服务器缓存初始化 Dim dummyRead As New ReadRequest() dummyRead.NodesToRead {New ReadValueId() With {.NodeId ObjectId.ServerStatus, .AttributeId Attributes.Value}} session.Read(dummyRead) 读ServerStatus可唤醒多数服务器缓存4.2 现象.NET Framework 4.7.2下运行报错“Could not load file or assembly System.Buffers”原因Opc.Ua.Client.dllv1.4.368.35依赖System.Buffers4.5.1但Win7默认无此组件。解决手动下载System.Buffers.dll.NET Standard 2.0版放入程序目录并在App.config中添加绑定重定向configuration runtime assemblyBinding xmlnsurn:schemas-microsoft-com:asm.v1 dependentAssembly assemblyIdentity nameSystem.Buffers publicKeyTokencc7b13ffcd2ddd51 cultureneutral / bindingRedirect oldVersion0.0.0.0-4.0.3.0 newVersion4.0.3.0 / /dependentAssembly /assemblyBinding /runtime /configuration4.3 现象写入布尔量后PLC状态不变但StatusCode显示Good原因服务器端该节点为“只读”属性或写入权限未开放如西门子S7-1500需在TIA Portal中勾选“允许OPC UA写入”。解决用UaExpert工具连接同一服务器右键目标节点→“Attributes”→确认WriteMask包含Write位值为2。若无需修改PLC工程配置本例代码中增加写前校验Dim attrReq As New ReadRequest() attrReq.NodesToRead {New ReadValueId() With { .NodeId nodeId, .AttributeId Attributes.WriteMask }} Dim attrResp As ReadResponse session.Read(attrReq) Dim writeMask As UInt32 CType(attrResp.Results(0).Value, Variant).ToUInt32() If (writeMask And 2) 0 Then 2是Write权限位 Throw New Exception(节点无写入权限请检查PLC配置) End If4.4 现象定时读取Timer运行10分钟后CPU占用飙升至30%原因VB.NETTimer事件中未Await异步操作导致ReadAsync堆积线程池耗尽。解决禁用Timer改用Task.RunTask.Delay循环确保每次读取完成后再启动下一轮Private Async Sub StartReadingLoop() While isConnected Try Await ReadCurrentValue() Catch ex As Exception 记录错误但不停止循环 Debug.WriteLine($读取异常{ex.Message}) End Try Await Task.Delay(500) 500ms间隔可调 End While End Sub4.5 现象部署到Win10 IoT LTSC后首次运行报“无法验证服务器证书”原因IoT LTSC默认关闭CNGCryptography Next Generation算法支持而OPC UA证书多用ECDSA签名。解决在ApplicationConfiguration中强制指定RSA签名算法并禁用ECDSAconfig.SecurityConfiguration.AutoAcceptUntrustedCertificates True config.SecurityConfiguration.RejectSHA1SignedCertificates True config.SecurityConfiguration.MinimumCertificateKeySize 2048 关键排除ECDSA只用RSA config.SecurityConfiguration.CertificateValidator New CertificateValidator() With { .ValidateCertificate Function(cert) Return cert.SignatureAlgorithm.Equals(1.2.840.113549.1.1.1) RSA OID End Function }5. 生产就绪技巧免安装部署、日志追踪与离线仿真验证5.1 单文件部署用ILMerge合并DLL彻底告别“缺DLL”投诉现场运维最怕“复制一堆DLL到文件夹”。本例用ILMerge将3个OPC DLL合并进主EXE生成真正单文件# 下载 ILMerge.exe微软官方工具.NET Framework版 # 在项目目录下执行路径按实际调整 ILMerge.exe /target:winexe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /output:SimpleVBOPC-Standalone.exe SimpleVBOPC.exe Opc.Ua.Core.dll Opc.Ua.Client.dll Opc.Ua.Configuration.dll效果生成SimpleVBOPC-Standalone.exe约3.8MB双击即运行无需.NET运行时外置依赖。经某高校实验室12台不同配置工控机实测100%启动成功。注意/targetplatform必须指向本机Framework路径否则合并后无法加载。5.2 轻量日志用TextWriterTraceListener写入本地文本不依赖log4net不引入第三方日志库用.NET原生Trace写入opctrace.log便于现场排查 Form1.vb 构造函数中初始化 Dim logFile As New StreamWriter(opctrace.log, True) logFile.AutoFlush True Dim listener As New TextWriterTraceListener(logFile) Trace.Listeners.Add(listener) Trace.AutoFlush True 在关键位置插入Trace Trace.WriteLine($[{DateTime.Now:HH:mm:ss}] 连接服务器: opc.tcp://192.168.3.100:4840) Trace.WriteLine($[{DateTime.Now:HH:mm:ss}] 读取DB1.DBD4: {floatValue:F3})优势日志文件自动按天轮转不需要。现场要的是“打开记事本就能看最后一分钟发生了什么”。AutoFlushTrue确保每行日志实时写入磁盘断电也不会丢最后几条。5.3 离线仿真用Prosys OPC UA Simulation Server验证代码逻辑没有真实PLC时用免费仿真服务器练手下载 Prosys OPC UA Simulation Server Windows版安装后启动默认地址opc.tcp://localhost:53530/OPCUA/SimulationServer在SimulationObjects节点下右键→“Add Variable”→创建TemperatureFloat、MotorOnBoolean将代码中服务器地址改为opc.tcp://localhost:53530/OPCUA/SimulationServerNodeID用ns2;sSimulationObjects.Temperature即可。实测效果本例代码在仿真服务器上100%通过读写测试且BrowseForNodeId能准确定位到SimulationObjects.Temperature证明节点发现逻辑健壮。这是上线前必做的“无硬件验证”。从那以后我每次交付OPC通信模块都强制走一遍“仿真服务器→局域网PLC→产线真实设备”三级验证哪怕客户说“我们只有PLC不用仿真”我也在自己电脑上跑通仿真再打包——因为少一次验证现场就多一小时扯皮。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

LAMP环境下部署iwebshop开源电商系统全流程实战复盘

LAMP环境下部署iwebshop开源电商系统全流程实战复盘

这几年电商系统的实战项目一直很热门,尤其对于刚学完Linux、Apache、MySQL、PHP这条技术链的朋友来说,拿一套开源商城系统完整部署一遍,几乎是绕不开的必经之路。市面上现成的开源电商系统不少,但真要论上手顺滑、文档齐全、二次开…

2026/10/13 11:13:29 阅读更多 →
MCP统一管理实战:用dsh-mcp-studio管好服务、技能与插件

MCP统一管理实战:用dsh-mcp-studio管好服务、技能与插件

做了这么长时间助手工具链,我明显感觉到身边越来越多的人在聊 MCP,但聊天归聊天,真正能把自己那几十个 MCP 服务管明白的人,十个里面未必有两个。不是今天这个服务端口被占,就是明天某个技能包版本和主程序对不上&…

2026/10/13 11:13:29 阅读更多 →
地理数据源选型与工程化落地实践:从坐标系到POI处理

地理数据源选型与工程化落地实践:从坐标系到POI处理

1. 地理数据源选型与工程化落地实践 做地理信息相关项目的朋友,绕不开的一个话题就是数据源。不管是做地图可视化、空间分析、路径规划,还是做区域画像、选址评估,第一步永远是:数据从哪来?我这些年经手过不少涉及地理…

2026/10/13 11:13:29 阅读更多 →

最新新闻

SonarQube 7.9 部署与实战避坑指南:兼容JDK8/PostgreSQL11的稳定方案

SonarQube 7.9 部署与实战避坑指南:兼容JDK8/PostgreSQL11的稳定方案

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

2026/10/13 12:01:50 阅读更多 →
jQuery 实现商品管理增删改查与数据统计实战

jQuery 实现商品管理增删改查与数据统计实战

最近整理旧项目时,翻出一个用 jQuery 写过的商品列表管理页面,功能很朴素:基于 jQuery 做商品数据的增删改查,再配上几组统计数字。但就是这样一个经典场景,十几年了还在各种后台系统里反复出现,也几乎每天…

2026/10/13 12:01:50 阅读更多 →
CWRU轴承故障信号STFT与CWT时频分析实战指南

CWRU轴承故障信号STFT与CWT时频分析实战指南

简介:本资源是一份面向机械故障诊断、信号处理与智能运维方向研究者及研究生的凯斯西储大学轴承故障数据集时频分析实践指南,聚焦振动信号的深度特征提取与故障辨识方法。文档系统讲解短时傅里叶变换(STFT)与连续小波变换&#xf…

2026/10/13 12:01:50 阅读更多 →
Gin框架认证与授权实战:从JWT到RBAC权限模型

Gin框架认证与授权实战:从JWT到RBAC权限模型

前阵子一位从PHP转Go的同事问我:他在Gin框架里写了一个查询订单的接口,只要前端把user_id传进来,就能看到别人的订单,他想加个认证。我反问他,你知道认证和授权不是一回事吗?他愣了一下。这正是很多人在Gin…

2026/10/13 12:01:50 阅读更多 →
基于SpringBoot+Vue的考编论坛系统设计与实现

基于SpringBoot+Vue的考编论坛系统设计与实现

1. 项目定位与整体设计思路1.1 考编需求拆解:这个论坛到底要做什么说起考编,这几年真的是一个绕不开的话题。不管是应届生还是已经工作的年轻人,越来越多的人把公务员、事业单位、教师编当成一个重要的职业选择。但考编这件事,信息…

2026/10/13 12:01:50 阅读更多 →
MARS多专家接力:提升大模型算法竞赛正确率的实践

MARS多专家接力:提升大模型算法竞赛正确率的实践

大模型在算法竞赛里“会做但做不对”是很多人都遇到过的情况:单模型输出不稳定、推理步骤一长就崩、改一版 Prompt 正确率又掉回去。如果把多个模型的结果做一个简单投票,效果往往也一般。最近我在尝试“MARS 多专家接力”框架时发现,这种方案…

2026/10/13 12:00:48 阅读更多 →

日新闻

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

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

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

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 阅读更多 →