简介面向RDI垂直式与水平式ADCP设备用户、水文与河流生态科研人员及技术维护团队的一份命令配置与数据输出说明文档。聚焦设备首次投用、重新配置、故障排查时参数查询等场景系统梳理CR、CF、BA、BC、BE、BP等固定命令的作用与取值EX坐标转换、EB航向偏差、向导命令BX/BP/BN的设置逻辑并讲解ASCII输出文件的三行头部结构、水深分箱数据与回波强度字段的格式规范。资源包共1个docx文件约682KB内容以命令解析表、格式说明与WinRiver II操作流程串联便于随查随用。目前已有506人学习下载。读者可据此理解各参数背后的物理意义掌握从设备配置到数据后处理、流量报告生成的完整链路提升野外测量与长期监测中的数据解析能力。1. 装好一套 RDI ADCP 环境别急着敲命令先弄清版本和软件搭配第一次接手 RDI ADCP 的电脑桌面上往往躺着三个不同年份的 WinRiver II 快捷方式串口线插上去以后报出来的是乱码。心里想着“不就是装个软件、发几条命令吗”结果第一回就卡在波特率和固件匹配上。设备是垂直式还是水平式、固件是哪一版、WinRiver II 用的是哪一版这三件事没对齐后面 CR1、CF11110 发下去设备照样一声不吭。这套环境看着简单其实处处是坑命令少写一位、波特率差一档、串口被别的采集程序占用都会让你在河边现场耗上半天。这篇就把 RDI ADCP 命令配置与 ASCII 输出这套环境从头装一遍适合第一次上手设备的新人也适合需要重新核对参数的老操作员。2. 环境准备WinRiver II 与串口链路怎么配2.1 先定软件和固件版本别拿新旧混着上RDI ADCP 的上位机软件主要是 WinRiver II这套软件负责下发配置命令、采集 PD0 原始数据并在后处理阶段导出 ASCII 文件。装之前先把三样东西确认清楚ADCP 的型号垂直式还是水平式、设备固件版本、WinRiver II 的安装包版本。我一般会先去设备铭牌和出厂测试报告上找固件号再对照软件安装包里的 Release Notes看它支持到哪个固件段。固件太老、软件太新常见表现是设备能连上但向导命令跑不完或者 EX、WM 这类命令发下去没回显。安装 WinRiver II 的机器建议是 Windows 10 或 Windows 11 的 64 位系统内存 8 GB 起步硬盘留出至少 20 GB 给原始数据文件。软件本身对显卡没要求但串口驱动要单独装RDI 设备走的是 USB 转串口方案驱动装不好设备管理器里会显示一个带感叹号的未知设备或者干脆识别成别的串口芯片。安装顺序上我是先装串口驱动、确认 COM 口能正常枚举再装 WinRiver II最后插设备。反过来的话软件装完再插设备有时候会被系统自动匹配到一个不匹配的驱动。装完软件第一次启动先别急着连设备进配置页面把单位、坐标系统、语言这些基础项过一遍。单位决定了后面 ASCII 输出里速度是 cm/s 还是 ft/s、深度是米还是英尺一旦测量开始再改前后数据就没法直接拼。坐标系统默认是地球坐标对应 EX11xxx 这一档后面第 3 章会细说。2.2 串口链路与通信参数设备的通信参数在软件里配常见的是波特率、数据位、停止位、校验位。RDI 的 RiverRay 这类设备内部还带 GPS 模块GPS 的波特率由 SF 命令单独设置3 到 9 分别对应 4800 到 115200 和自动。这一点很容易被忽略主通信口和 GPS 口是两条线配错一条表现是流量数据正常但导航数据整段为空。下面是我一般在设备连接前先跑一遍的串口自检命令在 Windows 的 PowerShell 里执行用来确认设备到底枚举在哪个 COM 口、驱动是不是正常# 列出当前所有串口设备确认 ADCP 枚举在哪个 COM 口 Get-WmiObject Win32_SerialPort | Select-Object DeviceID, Description, PNPDeviceID # 查看该串口的工作参数波特率等部分驱动不返回全部字段 Get-WmiObject Win32_SerialPortConfiguration | Select-Object DeviceID, BaudRate, BitsPerByte, StopBits, Parity第一段命令列出的 DeviceID 就是 COM 口号Description 里一般能看到 USB Serial Port 之类的描述如果显示的是未知设备或者描述对不上基本可以判定驱动没装对。第二段命令读的是驱动上报的参数有些虚拟串口驱动会返回空值这时候不用纠结直接在设备管理器里看端口属性的高级页更准。还有一种情况是设备能被识别但一打开就报“端口被占用”。ADCP 采集期间串口同一时刻只能被一个进程持有常见的占用者是后台没退干净的采集软件、串口调试助手或者某些同步工具。排查办法是关掉所有可能占口的程序再在 PowerShell 里用下面这段确认端口是否可独占打开# 尝试独占打开串口成功说明端口空闲失败会抛出异常 try { $port New-Object System.IO.Ports.SerialPort COM3, 9600, None, 8, One $port.Open() Write-Host 端口可独占打开当前空闲 $port.Close() } catch { Write-Host 端口打开失败 $_.Exception.Message }这里的参数要和设备实际配置一致波特率先按出厂默认的 9600 试打不开再逐档往上试。代码里的COM3换成 2.1 一步查出来的实际口号9600换成设备当前波特率。注意Open()之后一定要Close()不然下一次采集又要报占用。2.3 现场网络与数据落地目录WinRiver II 采集出来的原始文件是 PD0 格式ASCII 文件是后处理阶段从 PD0 导出的两者不要放在同一个目录里混着管。我的习惯是在数据盘建三层目录raw放 PD0 原始文件、ascii放导出的 ASCII、config放每次测量的配置文件模板。理由是后处理阶段经常要回头重导 ASCII原始文件必须保持只读一旦被覆盖就再也回不去了。现场如果还要接 GPS 和测深仪串口会占掉两到三个口这时候要提前把口分配好并写在配置模板里别等到河边再临时插拔。测深仪的 DBT 数据、GPS 的 GGA/VTG 数据都会进 PD0 文件导航 ID 分别是 0x2100、0x2101、0x2102、0x2104 这几档后面做数据解码时要用到。3. 配置命令落地从 CR1 到向导命令的完整参数表3.1 出厂默认与流量控制CR1、CF11110 怎么下给一台状态不明的 ADCP 配置参数第一条命令一定是 CR1。它的作用是恢复出厂默认值把设备拉回一个“已知”状态。现场翻车的场景我见过不少上一拨人改过 EX 坐标标志、改过盲区没留记录下一拨人上来就发 WM 和 WN结果出来的剖面全是错的。先发 CR1等于先把黑匣子清零后面每改一项都有据可查。紧接着是 CF11110这条命令控制五件事自动集成循环、自动呯循环、二进制数据输出、启用串行输出、禁用数据记录。逐位看第一位管集成循环第二位管呯循环第三位是二进制输出第四位是串行输出第五位是数据记录开关。配置阶段发 CF11110目的是让设备按二进制格式往外吐数据同时关掉设备内部记录把记录这件事交给上位机避免设备存储写满之后行为异常。这两条发完先别继续往下灌参数读一次回显确认设备状态。常见做法是发一条简单的查询命令看返回的头部信息里固件号和当前配置是否符合预期。如果 CR1 之后设备毫无反应先回头查第 2 章的串口和波特率别在命令层面反复试。3.2 底跟踪与水跟踪参数BA、BC、BE、BP、WE、WF、WM、WP底跟踪和水跟踪是 ADCP 的两套测量逻辑参数之间互相牵连单独调一个往往不解决问题。下面这张表是我配置时常用的核心参数和取值来源是设备的标准配置实际项目里按水深和流速再微调命令含义典型取值调整依据BA30有效底检测的最小振幅30 counts底质反射弱时适当降低BC220底跟踪最小相关幅度220 counts含沙量高时适当提高BE100底跟踪最大误差速度100 mm/s船速快时放宽BP1每个集合的底跟踪呯数1一般保持 1WE1500水跟踪最大误差速度1500 mm/s流速大时放宽WF50发射后盲区50 cm受换能器深度影响WM1水跟踪模式1通用剖面模式WP1每个集合的水跟踪呯数1一般保持 1BA 和 BC 这两个值最容易被拍脑袋改。BA 太低水体里的悬浮物会被误判成底BA 太高软泥河床直接丢底。BC 同理相关幅度门槛设高了含沙量大的河段底跟踪会断续。我的做法是先按表里的默认值跑一个短断面看底跟踪的连续性和误差速度再决定往哪边调一次只动一个参数。WF 这个盲区参数和换能器入水深度是绑定的。换能器典型入水深度约 20 cm盲区设在 50 cm意味着第一个深度单元从换能器下方 50 cm 才开始这一段的水流数据是拿不到的。如果现场把换能器放得很浅盲区还按 50 cm 设等于白白丢掉一层有效数据反过来放得深、盲区设小了发射脉冲的余响会污染第一个单元。发命令的方式有两种一种是在 WinRiver II 的配置向导里填参数软件自动生成命令序列另一种是直接开一个终端手工发。手工发的好处是能逐条看回显坏处是顺序错了设备状态会很怪。我一般先用向导跑一遍再把生成的命令序列导出来存档下次同类断面直接照着改数值。3.3 坐标转换 EX 命令五位标志位逐位拆开EX 命令是整套配置里最需要逐位理解的一条它决定原始径向波束数据怎么变换成有物理意义的坐标。命令格式是 EX 加五位标志每一位管一件事默认配置是 EX11111。前两位决定坐标系统EX00xxx 是不做变换输出的是 1、2、3、4 四个波束的径向坐标航向、纵摇、横摇都不参与EX01xxx 是仪器坐标输出相对于 ADCP 的 X、Y、Z 矢量EX10xxx 是船舶坐标矢量相对于船体航向未应用EX11xxx 是地球坐标输出东、北、垂直三个分量航向已应用。做流量测量基本都用地球坐标因为后面算叉积要在东西南北的框架里做。第三位是倾斜补偿置 1 表示变换时使用纵摇和横摇。船在河面上不可能绝对水平纵摇横摇不补偿垂直速度里会混进水平分量的投影。第四位允许三波束解算某个波束的相关性低于 WC 设定的阈值时用剩下三个波束反推速度代价是误差变大好处是少丢数据。第五位允许 bin 映射把深度单元映射到更规整的网格上。这里有个反直觉的点EX 的位序是从左往右数和某些老文档里的描述方向相反。我见过有人把 EX11111 理解成“最后一位是倾斜”配出来垂直速度整段偏移。判断办法很直接改一位、看输出、对物理量别靠记忆。3.4 剖面结构与向导命令WN、WS、WV、TP、BX剖面结构参数决定数据的空间分辨率和时间分辨率。WN 是深度单元数量WS 是单元大小两者乘起来大致覆盖最大水深。举个例子WN50 配 WS50单元厚度 0.5 m、共 50 层理论覆盖 25 m 水深实际还要扣掉盲区和底部旁瓣层。如果现场水深超过这个范围底部数据会整段丢失而且不会报错只是最后一层有效 bin 的位置提前了。WV 是模糊速度设的是水流速度和 ADCP 速度之间允许的最大相对径向速度。这个值设小了流速大的时候会出现速度模糊表现出来是剖面里某几层的速度突然跳到反方向设大了噪声容忍度上升。170 cm/s 是常见起点实测流速接近这个量级时往上放。TP 是呯间隔典型值 0.2 s直接决定每个集合的时间分辨率和最大可测流速范围。呯间隔太短前后两个脉冲的回波会互相干扰太长集合时间拉长走航测量的空间分辨率下降。TE 是集合间隔设成零表示连续采集不等待。向导命令里 BX 是最大底部搜索限制WF 是发射后盲区WM 是水跟踪模式WN 和 WS 由 WinRiver II 根据输入的最大水深自动推荐。这里必须提醒一句自动推荐值只是起点换能器入水深度、河床坡度、含沙量都会影响实际效果自动值跑完一定要人工核对一遍。自动配置省的是时间不是判断。4. 数据输出落地ASCII 结构与 PD0 导航数据4.1 ASCII 文件的生成流程ASCII 输出不是采集时自动生成的是后处理阶段从 PD0 文件里导出来的。流程是先在 WinRiver II 里加载测量文件回到配置菜单选全部 ASCII 输出或部分 ASCII 输出再勾选是否输出背散射强度或回波强度数据然后对目标断面做回放或重新处理最后写出文件。这里有个容易误解的点ASCII 文件里包含的是 WinRiver II 作为工作集的全部选定数据包括被标记为“坏”的 bin。也就是说ASCII 不做质量筛选深度列里所有 WN 设定的 bin 都会出现好坏都在。后处理时必须自己按误差速度和相关性过滤别默认导出来的都是好数据。文件开头固定写三行头信息第一行和第二行是附注可以在断面上右键添加记录录入第三行是配置摘要包含 WS 深度单元厚度、WF 盲区、ADCP 入水深度、WN 层数、WP 每集合呯数、集合时间。这三行是判断这份 ASCII 和现场配置是否对得上的唯一依据导出后第一件事就是核对第三行。4.2 逐列读 ASCII前六行是头第七行起是 binASCII 文件的列结构分两段。前六行是头部信息包含年月日时分秒、集合时间、集合编号、纵摇、横摇、罗经修正航向、平均温度。第七行开始按 bin 深度往下排每一行对应一个深度单元列里依次是深度、速度大小、速度方向、东向分量、北向分量、垂直分量、误差速度、四个波束的强度、百分比良好。坏数据的填充值是固定的速度是 -32768流量是 2147483647经纬度是 30000。写解析脚本时这三个值必须先剔掉不然后面求平均、画剖面全被带偏。字段之间用一个或多个空格分隔没有短划线也没有补位符所以按空白字符切分比按固定列宽更稳。下面这段 Python 是我解析 ASCII 文件时的骨架只保留关键逻辑# 读取 WinRiver II 导出的 ASCII 文件跳过前六行头逐 bin 解析 BAD_VELOCITY -32768 def parse_ascii(path): rows [] with open(path, r, encodingutf-8, errorsignore) as f: lines f.readlines() # 前六行是头部时间、姿态、温度等单独留出来 header lines[:6] # 第七行起为 bin 数据按空白切分避免依赖固定列宽 for line in lines[6:]: parts line.split() if len(parts) 7: continue # 不足七列的行不是有效 bin 行 depth float(parts[0]) velocity float(parts[1]) if velocity BAD_VELOCITY: continue # 坏数据直接丢弃不参与统计 rows.append({ depth: depth, velocity: velocity, direction: float(parts[2]), east: float(parts[3]), north: float(parts[4]), vertical: float(parts[5]), error: float(parts[6]), }) return header, rows这段代码的取参逻辑是lines[:6]拿头部lines[6:]拿 bin 行parts[0]到parts[6]依次对应深度到误差速度这七列。BAD_VELOCITY的判断必须放在计算之前因为 -32768 参与任何运算都会污染结果。实际项目里还要加一步按误差速度过滤误差超过 WE 设定值的 bin 一样不能用。4.3 PD0 导航数据结构与 NMEA 字符串PD0 是原始二进制格式导航数据在固定前导之后按 ID 区分0x2100 是通用 NMEA 结构0x2101 是 DBT 测深仪0x2102 是 GGA0x2104 是 VTG。每种数据类型的字节长度是固定的比如底跟踪数据 85 字节DBT 38 字节GGA 97 字节。解码时要先找到固定前导再按 ID 偏移定位最后按长度截取。NMEA 字符串本身是 ASCII格式是$开头、逗号分隔字段、*后跟两位十六进制校验和、CR LF结尾。校验和是$和*之间所有字符的 8 位异或。现场如果 GPS 数据整段为空先查 NMEA 字符串的校验和是否对得上校验失败软件会直接丢弃整句表现就是导航列全是空字段。5. 避坑与排查现场最容易翻车的五个点5.1 现象设备能连上但向导命令跑不完原因通常是固件版本和 WinRiver II 版本不匹配或者串口波特率只对上了主口、GPS 口没对上。解决顺序是先核对固件与软件支持列表再单独验证 GPS 口的 SF 设置把主通信和 GPS 分两条链路测。5.2 现象底跟踪断续流量数据时有时无多半是 BA 或 BC 设得不合适。含沙量大的河段 BC 门槛偏低会让相关幅度噪声混进来软泥河床则要把 BA 往下调。处理办法是固定其他参数只改一个值跑短断面看连续性别一次改三四个参数改完根本不知道是哪个起的作用。5.3 现象剖面最后一层有效 bin 位置提前底部数据丢失WN 和 WS 的乘积没覆盖实际水深或者 WF 盲区设得太大。先按实测水深重算 WN 乘 WS再核对换能器入水深度与 WF 的关系。注意这个错误不会报异常只能靠看最后一层 bin 的深度判断。5.4 现象ASCII 导出后速度列出现大量异常值坏数据填充值没剔干净或者坐标系统配错导致速度分量符号整体反向。先检查 -32768 有没有被过滤再核对 EX 前两位是不是地球坐标最后看航向偏差 EB 有没有配。5.5 现象GPS 导航列整段为空一般是 NMEA 校验和失败或者导航 ID 对应的数据类型在 PD0 里压根没写入。先确认 GPS 口波特率再用校验和算法逐句验证最后检查采集时 GPS 是否有定位状态。6. 装完怎么验证用一段短断面把整条链路跑通验证这套环境别指望一次长断面我的做法是先找一段水流平稳、水深 5 到 10 米的短断面跑两到三个来回专门用来验链路。第一步验串口和命令回显连上设备后发 CR1 和 CF11110看回显是否完整。第二步验姿态和航向静止状态下读纵摇、横摇数值应该接近零且不跳变罗经修正航向在静止时漂移应该很小。第三步验底跟踪看底跟踪的连续性和误差速度误差速度稳定在 BE 设定值以内才算过。第四步验 ASCII 导出导出一份文件打开核对第三行头信息里的 WS、WF、WN 是否和现场配置一致。第五步验数据合理性把 ASCII 里的东向、北向速度分量做矢量合成和现场预估流速比一比量级差太多说明坐标变换有问题。验证通过的标准我列成了一张表照着打勾就行检查项通过标准不通过先查命令回显CR1、CF11110 均有完整回显串口、波特率静止姿态纵摇横摇接近零无跳变设备安装水平度底跟踪连续误差速度小于 BEBA、BC 取值ASCII 头第三行与现场配置一致导出时的配置模板流速量级与现场预估同量级EX 坐标标志、EB 航向偏差导航数据GGA、VTG 字段非空且校验通过GPS 口波特率、NMEA 校验这套流程我一般压在一个小时内跑完跑完才敢上正式断面。有一次赶时间省掉了静止姿态校验结果整段测量的垂直速度里混着横摇分量回来重导数据才发现等于白跑一趟。从那以后我每次配完 ADCP都强制走一遍这份短断面验证清单哪怕设备是昨天刚配好的同一台。希望这套流程能帮到你少在河边多耗那几个小时。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
VMware Workstation 17安装与虚拟化实战指南 1. 这不是“装个软件”那么简单:VMware 17背后的真实工作流很多人点开“VMware安装教程”时,心里想的只是“快点把虚拟机跑起来”,结果卡在第一步下载页面反复刷新,或是在创建虚拟机时面对几十个选项发懵——选错一个,… · 2026/11/3 14:31:30
Magpie Experimental:Windows窗口级实时超分与补帧技术解析 1. 项目概述:Magpie Experimental 不是“又一个画质增强工具”,而是 Windows 桌面级实时渲染管线的重新定义Magpie Experimental 这个名字乍一听像某个高校实验室里刚跑通 demo 的原型项目,但实际用过的人很快会意识到——它正在悄悄改写 Win… · 2026/11/3 14:31:30
AI驱动的业务流程建模与优化实践指南 1. 项目概述:AI驱动的业务流程建模与改进 这个项目源自《软件方法》系列课程中的"AI03"章节,聚焦于如何利用人工智能技术优化传统业务流程建模方法。作为一名在BPM(业务流程管理)领域工作多年的从业者,我见证… · 2026/11/3 14:31:30
从冷启动到传播引爆:一文拆解内容热度背后的buzz机制 这两年不管做内容还是做产品的人,应该都会经历过这种困惑:一条消息发出去,阅读量看着还行,点赞也有,可评论区像集体断网,更没人转发。项目复盘的时候,大家把这个现象叫“有曝光没热度”。后来我… · 2026/11/3 15:23:55
STM32CubeIDE从零搭建C8T6纯标准库工程 STM32F103C8T6 这颗芯片在圈子里火了快二十年,最小系统板便宜到一杯咖啡的价钱,资料堆得比芯片本身还厚。但这两年有个挺尴尬的现状:教程里九成还在讲 Keil 加标准库(SPL),而新一代开发者手里的工具链已经换… · 2026/11/3 15:23:55
AI工程从零开始:构建可交付的端到端推理闭环 1. 这不是“搭个LLM API”——AI工程从零开始的真实含义 很多人看到“AI Engineering from Scratch”第一反应是:哦,手写一个Transformer?或者用NumPy从头实现反向传播?那不是工程,那是博士生期末项目。我带过七支AI落… · 2026/11/3 15:23:55
V2X技术解析:智能汽车通信架构与安全实践 1. V2X技术在现代智能汽车中的核心定位V2X(Vehicle-to-Everything)作为智能交通系统的神经网络,正在重构人-车-路之间的交互范式。这项技术通过专用短程通信(DSRC)或蜂窝网络(C-V2X),… · 2026/11/3 15:23:55
Rust构建带Agent能力的Nostr中继:架构设计与性能调优实战 1. 从"buzz"这个名字说起:一个用Rust写的Nostr中继到底想解决什么 第一次看到"buzz"这个项目名,加上关键词里的Nostr、relay、Rust、agent,我脑子里第一反应是:又一个Nostr中继实现?Nostr生态里re… · 2026/11/3 15:23:55
Rust 构建 Nostr relay:从 git 克隆到 WebSocket 事件处理 1. 从 "buzz" 这个项目名说起:它到底想解决什么问题 第一次看到 "buzz" 这个标题,加上 Nostr、relay、Rust、git 这几个关键词,我脑子里第一反应是:这大概率是一个用 Rust 写的 Nostr 中继(relay&… · 2026/11/3 15:22:53
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46