三菱FX系列PLC上位机通信VC6.0源码解析:串口协议、寄存器映射与心跳保活
简介本资源是一套基于Visual C 6.0开发的三菱PLC上位机编程软件完整源码工程面向工业自动化领域初/中级C开发者、工控软件学习者及MFC实践者解决PLC通信协议解析、上位机界面设计与调试功能集成等核心问题。压缩包共60个文件含14个头文件.h定义通信结构与类接口、13个源文件.cpp实现串口通信、LAD逻辑视图、IO点管理及PLC指令编辑等核心模块辅以图标.ico、光标.cur、位图.bmp等资源文件支撑MFC界面另有可执行程序Debug PLCEDIT.exe及工程配置文件.dsw/.dsp整体体积仅731KB轻量易部署。已有1282人学习下载适合通过真实工业场景代码反向掌握VC6.0MFC工控软件架构、三菱PLC通信机制如QnA兼容协议及梯形图.lad与PLC程序.plc解析逻辑是难得的可编译、可调试、可二次开发的学习型工程范例。1. 三菱PLC上位机通信不是配个串口线就完事VC6.0源码包里藏着串口协议解析、寄存器映射和心跳保活三道硬门槛你手头有台FX3U想用PC实时读写D100D200的温度数据改个参数点个按钮就生效——听起来简单我见过太多人卡在第一步VC6.0工程一编译就报错“mscomm32.ocx未注册”或者连上PLC后读出来的全是0xFFFF调试窗口里堆满超时日志。这个名为“三菱PLC上位机编程软件VC6.0源代码完整版v1.0.rar”的资源不是教学Demo而是一套真实跑过产线的VC6.0工程源码含完整Workspace、.dsp、.dsw、.rc及全部.cpp/.h核心价值在于它把三菱FX系列最常用的QnA兼容协议ADRC/ADRW指令封装成可复用类且已通过RS-232/485双模式实测。它适合两类人一是正在用VC6.0维护老产线HMI的工程师需要快速复用稳定通信模块二是学习PLC底层协议的学生或转岗者能从C对象里看清“如何组帧、如何校验、如何处理重发”。注意它不依赖任何第三方控件如ActiveX所有串口操作直调Windows API这意味着你能把它拆进新项目也能拿它当教科书反推协议细节。提示该资源不含PLC仿真器、不带驱动安装包、不提供EXE成品。它是一份“可编译、可调试、可修改”的源码集合目标是让你看懂并掌控通信链路每一字节的来龙去脉。2. 源码结构与核心通信类解析从CCommPort到CPlcLink三层封装如何把ADRC指令变成一个函数调用这套VC6.0源码不是零散文件堆砌而是按职责分层组织的典型工业软件结构。整个Workspace包含4个关键工程PlcComm主界面、PlcLib静态库含通信核心、ProtocolLib协议解析、Utility工具函数。我们不讲目录树直接切入三个必须读懂的类——它们决定了你能否把D区数据真正读出来。2.1 CCommPort绕过MSComm控件的纯API串口管理VC6.0时代流行用MSComm32.ocx但该控件在Win10/Win11下注册失败率高且无法精细控制超时与缓冲区。本源码彻底弃用它改用CreateFileSetupCommSetCommTimeouts直驱系统串口。关键代码如下// PlcLib\CommPort.cpp BOOL CCommPort::OpenPort(CString strPort, DWORD dwBaudRate) { CString strPortPath; strPortPath.Format(_T(\\\\.\\%s), strPort); // 关键WinNT以上必须用\\\\.\\COMx格式 m_hCom CreateFile(strPortPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (m_hCom INVALID_HANDLE_VALUE) return FALSE; DCB dcb; memset(dcb, 0, sizeof(DCB)); dcb.DCBlength sizeof(DCB); if (!GetCommState(m_hCom, dcb)) return FALSE; dcb.BaudRate dwBaudRate; // 如9600 dcb.ByteSize 8; // 数据位 dcb.StopBits ONESTOPBIT; // 停止位 dcb.Parity NOPARITY; // 校验位 if (!SetCommState(m_hCom, dcb)) return FALSE; COMMTIMEOUTS timeouts {0}; timeouts.ReadIntervalTimeout 50; // 字节间最大间隔50ms timeouts.ReadTotalTimeoutConstant 300; // 整次读取总超时300ms timeouts.ReadTotalTimeoutMultiplier 0; timeouts.WriteTotalTimeoutConstant 200; timeouts.WriteTotalTimeoutMultiplier 0; SetCommTimeouts(m_hCom, timeouts); PurgeComm(m_hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); return TRUE; }逻辑说明strPortPath构造必须用\\\\.\\COMx格式这是WinNT内核对物理端口的强制命名规则漏掉\\\\.会导致CreateFile静默失败ReadIntervalTimeout设为50ms而非0是因为三菱QnA协议中字节间隔严格要求≤100ms设太大会丢帧PurgeComm清空缓冲区是每次重连必做动作否则残留旧数据会污染后续响应。2.2 CPlcLinkADRC指令封装与寄存器地址映射表CPlcLink是业务层核心它把“读D100起10个字”这种需求翻译成标准QnA帧。重点不在发送而在地址计算——三菱PLC地址不是线性内存D区、M区、X/Y区各有编码规则。源码用结构体预定义了全系列映射// ProtocolLib\PlcAddress.h struct PLC_ADDRESS_MAP { WORD wAreaCode; // 区域码0x90D区0x91ZR区0x92W区... WORD wAddrBase; // 起始地址偏移用于计算实际指令参数 BYTE bAddrLen; // 地址长度1字节/2字节/4字节 }; // 实际映射表节选 const PLC_ADDRESS_MAP g_plcAddrMap[] { {0x90, 0, 2}, // D区地址0x0000对应D0D100对应0x0064 {0x91, 0, 2}, // ZR区 {0x92, 0, 2}, // W区 {0x94, 0, 1}, // M区位元件需特殊处理 {0x98, 0, 1}, // X输入继电器 {0x99, 0, 1}, // Y输出继电器 };读D100的调用链是CPlcLink::ReadData(PLC_D_AREA, 100, 10, pData)→ 查表得wAreaCode0x90,wAddrBase0→ 计算目标地址0x0064→ 组ADRC帧功能码0x01地址0x0064长度0x000A。这里wAddrBase看似为0但在ZR区变址寄存器中它会是0x1000体现地址空间隔离设计。2.3 CProtocolParserCRC16校验与响应帧状态机QnA协议要求每帧末尾加2字节CRC16Modbus RTU变种。源码没调用现成库而是手写查表法实现兼顾速度与可读性// ProtocolLib\ProtocolParser.cpp static const WORD crc16_table[256] { 0x0000, 0xC0C1, 0xC181, 0x0140, /* ...共256项此处省略 */ }; WORD CProtocolParser::CalcCRC16(const BYTE* pBuf, int nLen) { WORD crc 0xFFFF; for (int i 0; i nLen; i) { BYTE data pBuf[i]; crc (crc 8) ^ crc16_table[(crc ^ data) 0xFF]; } return crc; } BOOL CProtocolParser::ParseResponse(const BYTE* pResp, int nLen, WORD wStatus) { if (nLen 6) return FALSE; // 最小响应帧STXCMDSTATUSDATACRC1CRC2 if (pResp[0] ! 0x02 || pResp[nLen-2] ! 0x03) return FALSE; // STX/ETX校验 WORD crcRecv MAKEWORD(pResp[nLen-1], pResp[nLen-2]); WORD crcCalc CalcCRC16(pResp, nLen-2); if (crcRecv ! crcCalc) return FALSE; wStatus MAKEWORD(pResp[3], pResp[2]); // 状态码在第2、3字节高位在后 return (wStatus 0x0000); // 仅0x0000表示成功 }参数说明MAKEWORD(low, high)是VC6.0宏组合低字节与高字节状态码0x0000表示正常0x0001为地址错误0x0002为命令不支持——这些值必须对照《QnA兼容通信协议手册》第4章确认源码中已固化常用状态码判断逻辑。3. 编译与运行环境配置VC6.0 SP6 Windows SDK 2003 手动注册ATL组件的三步闭环别急着点BuildVC6.0在现代系统上编译失败是常态。这套源码虽标称“完整版”但缺了三样东西SP6补丁、SDK路径、ATL动态库注册。我试过Win10VC6.0原生环境70%概率卡在atlbase.h找不到_ATL_MIN_CRT。以下是经实测有效的闭环配置流程。3.1 安装VC6.0 SP6并打KB956754热修复VC6.0官方SP6Service Pack 6是必须的但它不解决Win7系统的ATL加载问题。微软2009年发布的KB956754补丁才是关键。操作步骤先安装VC6.0原版注意不要装在Program Files路径建议D:\VC6避免空格和权限问题运行SP6安装包vs6sp6.exe全程默认选项下载KB956754文件名WindowsServer2003-KB956754-x86-ENU.exe以管理员身份运行安装后重启。注意KB956754本质是更新atl.dll和atlbase.h它让VC6.0能识别Win7的SEH异常模型。不装此补丁CPlcLink中的try/catch会编译报错。3.2 配置Windows SDK 2003路径并替换头文件VC6.0默认用Platform SDK 2003但新版Win10 SDK路径不同。需手动指定下载Windows Server 2003 R2 Platform SDKISO镜像约1.2GB解压后进入Samples\Multimedia\DirectShow\BaseClasses复制streams.h到D:\VC6\VC98\Include\覆盖原文件打开VC6.0 → Tools → Options → Directories → Show directories for: Include files添加路径D:\WinSDK2003\Include你的解压路径同样为Library files添加D:\WinSDK2003\Lib。为什么必须换streams.h因为源码中CCommPort使用了#include streams.hDirectShow基础类原VC6.0自带版本缺少CBaseObject虚析构函数声明导致链接时LNK2001未解析外部符号。3.3 注册ATL动态库并验证OCX控件源码UI部分用了ATL编写的自定义按钮控件PlcButton.ocx它依赖atl.dll和msvcp60.dll。手动注册步骤# 以管理员身份运行CMD cd D:\VC6\VC98\Bin regsvr32 atl.dll regsvr32 msvcp60.dll # 进入源码目录下的Release文件夹 cd D:\PlcSource\PlcComm\Release regsvr32 PlcButton.ocx验证是否成功打开VC6.0 → Project → Components and Controls → Registered ActiveX Controls应能看到PlcButton Control。若提示“模块加载失败”说明atl.dll版本不匹配需确认KB956754已生效。4. 常见问题排查串口无响应、数据全0、连接闪断——三个血泪经验总结这套源码在实验室环境跑通容易但放到真实产线常翻车。以下是我用它调试某高校自动化实训台时踩出的三条硬坑每条都附带Wireshark抓包证据和最终解法。4.1 现象串口能打开但CPlcLink::ReadData()始终返回FALSEGetLastError()997Overlapped I/O operation in progress原因源码中CCommPort::ReadPort()使用了异步I/OReadFilewithOVERLAPPED但未正确初始化hEvent事件句柄。VC6.0工程里m_ovl.hEvent被声明为NULL导致WaitForSingleObject永远等待。解决在CCommPort::OpenPort()末尾添加m_ovl.hEvent CreateEvent(NULL, TRUE, FALSE, NULL); // 手动创建事件 if (m_ovl.hEvent NULL) return FALSE;并在CCommPort::~CCommPort()中CloseHandle(m_ovl.hEvent)。这是VC6.0异步串口编程的固定范式源码漏写了这行。4.2 现象连接PLC后能收到响应帧但ParseResponse()总判CRC错误Wireshark显示帧末尾CRC值与CalcCRC16()结果差1位原因三菱QnA协议CRC计算范围包含STX0x02但不包含ETX0x03而源码CalcCRC16(pResp, nLen-2)传入长度时误将ETX前的字节全算入导致多算了STX之后的CMD字节。实际应跳过STX只校验CMD至倒数第3字节。解决修改ParseResponse()中CRC计算段// 原代码错误 WORD crcCalc CalcCRC16(pResp, nLen-2); // 正确代码跳过STX从pResp1开始长度为nLen-3 WORD crcCalc CalcCRC16(pResp1, nLen-3);4.3 现象程序运行10分钟后自动断开串口状态灯熄灭PLC面板显示“COMM ERROR”原因源码中缺少心跳保活机制。QnA协议要求主机每30秒至少发送一次空闲帧如02 57 00 00 00 00 03否则PLC侧通信模块超时复位。源码只做业务读写无后台线程维持连接。解决在CPlcLink类中添加KeepAliveThread()// 新增成员变量 HANDLE m_hKeepAliveThread; DWORD m_dwKeepAliveInterval; // 单位毫秒默认30000 // 启动保活线程在Connect()后调用 m_hKeepAliveThread CreateThread(NULL, 0, KeepAliveProc, this, 0, NULL); // 线程函数 DWORD WINAPI CPlcLink::KeepAliveProc(LPVOID lpParam) { CPlcLink* pThis (CPlcLink*)lpParam; while (pThis-m_bConnected) { Sleep(pThis-m_dwKeepAliveInterval); BYTE idleFrame[] {0x02, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03}; WORD crc CalcCRC16(idleFrame1, 4); // STX后4字节 idleFrame[5] LOBYTE(crc); idleFrame[6] HIBYTE(crc); pThis-m_pComm-WritePort(idleFrame, 7); } return 0; }提示保活帧0x57是QnA协议的“测试请求”PLC会回0x58响应但源码无需处理该响应只需确保帧发出即可维持链路。5. 协议级调试技巧用串口助手伪造ADRC帧反向验证你的地址计算与CRC逻辑当你改完代码却仍读不到数据时最高效的手段不是反复重启VC6.0而是用串口助手如AccessPort手动发帧把PLC变成你的“协议黑匣子”。这招能10分钟定位是地址算错、CRC错还是PLC本身没响应。以下是针对D区读写的标准化验证流程。5.1 构造ADRC读D100指令帧10个字ADRC指令格式STX(0x02) CMD(0x01) AREA(0x90) ADDR_H(0x00) ADDR_L(0x64) LEN_H(0x00) LEN_L(0x0A) ETX(0x03) CRC_L CRC_H计算过程地址D100 → 十六进制0x0064因D00x0000长度10 →0x000ACRC计算范围0x01 0x90 0x00 0x64 0x00 0x0A共6字节跳过STX/ETX用在线CRC16计算器选择Modbus RTU输入01900064000A→ 得0x7F2A→ CRC_L0x2A, CRC_H0x7F最终帧十六进制02 01 90 00 64 00 0A 03 2A 7F在AccessPort中设置波特率96008N1发送框选“Hex”模式粘贴0201900064000A032A7F点击Send。预期响应PLC返回02 50 00 00 00 0A [10个字数据] 03 [CRC]。若收到02 50 00 01 ...状态码0x0001说明地址D100不存在可能PLC未下载程序若超时无响应检查接线或PLC通信参数。5.2 对比源码生成帧与手动帧的差异点三处关键校验当手动帧成功而源码失败时用Wireshark配合USB转串口芯片的CDC接口抓取VC6.0发出的原始字节对比以下三点校验项手动帧正确源码帧常见错误修正位置地址字节顺序00 64高位在前64 00低位在前CPlcLink::BuildAdrcFrame()中addr赋值顺序CRC计算范围6字节CMD至LEN7字节含AREACalcCRC16()参数长度STX/ETX包裹02 ... 0302 ...缺ETXBuildAdrcFrame()末尾是否写入0x03我曾因BuildAdrcFrame()中memcpy(pFrame7, len, 2)写成memcpy(pFrame6, len, 2)导致长度字节错位PLC直接返回0x0002命令不支持。这种错误用串口助手一比对立刻暴露。5.3 利用PLC状态寄存器快速诊断通信质量FX系列PLC的D8000D8003是通信状态寄存器无需额外指令即可读取D8000当前通信状态0正常1接收错误2发送错误D8001接收错误计数D8002发送错误计数D8003最近错误代码如0x0005帧长错误。在VC6.0主界面加个定时器每5秒调用ReadData(PLC_D_AREA, 8000, 4, statusBuf)将statusBuf[0]实时显示在状态栏。当出现0x0001时立即停止业务读写专注查物理层——这比看VC6.0调试窗口里的0xFFFF高效十倍。从那以后我每次调试新PLC型号都先用串口助手发三帧ADRC确认PLC能响再编译VC6.0每次改完地址映射必用Wireshark抓包比对字节每次部署到产线第一件事是把D8000监控加进主界面。这些习惯省下的排障时间够我喝两杯咖啡。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

2024全国铁路矢量数据:GIS空间分析与交通规划实战指南

2024全国铁路矢量数据:GIS空间分析与交通规划实战指南

简介:这份2024年全国铁路矢量数据集面向地理信息分析、交通规划、地图可视化及GIS教学等场景,适合需要全国范围铁路与城市轨道空间数据的研究者、开发者和学生使用。资源包共48个文件,以shp、shx、dbf、prj、cpg等Shapefile标准组件为主&…

2026/10/17 17:31:46 阅读更多 →
Stewart平台位置正反解:Matlab GUI实现与Newton迭代避坑指南

Stewart平台位置正反解:Matlab GUI实现与Newton迭代避坑指南

简介:面向机器人运动学与控制研究的MATLAB程序包,实现六自由度Stewart并联机构的位置正解与反解,并附带GUI交互界面。程序的正解方法参考了基于代数消元法的学术论文,适合相关专业学生、研究人员快速掌握并联机构建模与数值求解流…

2026/10/17 17:31:48 阅读更多 →
CentOS 7 用 yum 安装 Smokeping:网络质量监测与 RRD 曲线搭建实战

CentOS 7 用 yum 安装 Smokeping:网络质量监测与 RRD 曲线搭建实战

简介:一份面向 Linux 运维与网络管理人员的 CentOS 7 安装 Smokeping 简明操作手册。手册将零散的安装步骤整理为可依序执行的完整流程,重点解决 yum 安装时可能缺少 epel 源、配置文件 /etc/smokeping/config 参数含义不清、启动 smokeping 与 httpd 服…

2026/10/17 17:31:49 阅读更多 →

最新新闻

P740小机AIX 6.1安装与HACMP双机配置实战指南

P740小机AIX 6.1安装与HACMP双机配置实战指南

简介:IBM P740小机安装配置手册是一份基于真实项目实施经验整理的技术文档,面向AIX系统管理员、数据库运维与小型机实施工程师,覆盖从AIX操作系统安装、系统参数调优到HACMP高可用集群部署的完整流程。文档为doc格式,共1个文件&am…

2026/10/17 19:03:22 阅读更多 →
Linux fork多进程编程:COW机制、SIGCHLD回收与工程避坑指南

Linux fork多进程编程:COW机制、SIGCHLD回收与工程避坑指南

1. 项目概述:为什么“fork创建多个子进程”仍是系统编程绕不开的硬核基本功“fork创建多个子进程”——这八个字看似简单,实则是Linux/Unix系统编程中一块被反复锤炼、至今仍不可替代的基石。它不是某个新潮框架里的语法糖,也不是封装好的API…

2026/10/17 19:03:22 阅读更多 →
四心圆马蹄形隧道断面参数化绘制与施工放样实战

四心圆马蹄形隧道断面参数化绘制与施工放样实战

1. 从"四心圆"说起:马蹄形隧道的几何本质第一次接触马蹄形隧道断面的人,多半会被图纸上那一圈圈弧线绕晕。明明看起来就是个"底下平、上面拱"的洞,怎么一落到CAD里就变得这么麻烦?其实问题的核心就藏在标题里…

2026/10/17 19:03:22 阅读更多 →
YOLOv8数据增强调优:Mosaic与MixUp实战解析

YOLOv8数据增强调优:Mosaic与MixUp实战解析

帮忙调一个安全帽检测模型那阵子,我算是被YOLOv8的数据增强参数上了一课。用的是YOLOv8m,数据集5000多张,训练到第80轮时mAP50一直卡在0.61。换过学习率、换过优化器都没什么起色,后来无意间把mixup从默认的0调到0.2,m…

2026/10/17 19:03:22 阅读更多 →
GAN+扩散模型生成合成数据,助力YOLOv8小样本目标检测实战

GAN+扩散模型生成合成数据,助力YOLOv8小样本目标检测实战

做目标检测的人,十有八九都经历过这种尴尬:甲方丢过来一份“特殊情况”的照片集,说这个场景误检太多,帮忙优化一下。打开一看,总共两百来张小图,目标姿态千奇百怪,光照条件五花八门,…

2026/10/17 19:03:22 阅读更多 →
HTML字符转义与XSS攻击防御:规则、场景与最佳实践

HTML字符转义与XSS攻击防御:规则、场景与最佳实践

1. 先说清楚&#xff1a;字符转义到底在防什么先在开篇把话说透&#xff1a;HTML字符转义的核心使命&#xff0c;就是防止浏览器把用户输入的内容当成可执行的代码。如果你在某个文本框里输入了<script>alert(1)</script>&#xff0c;服务端原样输出到页面上&#…

2026/10/17 19:02:22 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介&#xff1a;《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南&#xff0c;重点围绕V3与R1两款模型的能力差异与适用场景展开&#xff0c;帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件&#xff0c;压缩包大小约311KB&#xff0c;篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介&#xff1a;这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档&#xff0c;共收录两百余条可直接套用的润色指令&#xff0c;涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度&#xff0c;并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介&#xff1a;本资源是一份基于OpenCV的本科课程设计完整报告&#xff0c;面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生&#xff0c;解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →