1. 为什么要在没有硬件的情况下跑通S7-1200与HMI仿真很多人第一次接触西门子S7-1200 PLC和HMI触摸屏的时候都会卡在同一个地方手里没有实物。一套S7-1200 CPU加一块KTP系列触摸屏少说也要几千块对于自学、备课、方案预演或者给客户做演示来说成本太高。而博途TIA Portal自带的PLCSIM和HMI仿真功能恰好能解决这个问题——你可以在纯软件环境里把PLC逻辑、HMI画面、变量交互全部跑起来效果和真机几乎一致。这套仿真方案的核心价值在于三点。第一是零硬件成本验证逻辑程序写得对不对、画面跳转顺不顺、报警触发准不准都能在电脑上先跑一遍。第二是调试效率极高真机上改一个变量要重新下载、重启仿真里点一下就能看到结果特别适合教学演示和方案评审。第三是风险可控像联锁逻辑、急停回路这种在真机上不敢随便试的操作仿真环境里可以放心折腾。这篇文章适合三类人看一是刚学博途、手里没设备的自动化新手二是需要做课程演示或方案汇报的工程师三是想快速验证HMI交互逻辑、不想反复烧录真机的老手。我会从环境搭建、项目组态、仿真启动、变量联动到常见故障排查把整个流程拆开讲透重点放在那些官方文档里不会写、但实际操作中一定会踩的坑上。需要提前说明的是仿真不是万能的。PLCSIM模拟的是CPU的运算和存储行为它不模拟真实的电气特性比如输入滤波、输出驱动能力、模拟量精度这些。所以仿真跑通只代表逻辑正确硬件选型和接线还得按实际工况来。这个边界心里要有数。2. 仿真环境搭建与软件版本匹配2.1 博途、PLCSIM与HMI仿真的版本关系这是最容易翻车的地方。博途TIA Portal、S7-PLCSIM、WinCC Runtime AdvancedHMI仿真运行环境这三者之间存在严格的版本对应关系装错了版本仿真按钮要么灰的要么点了没反应。先理清楚各自的分工。博途是组态平台负责写PLC程序和画HMI画面S7-PLCSIM是PLC的仿真器它虚拟出一个CPU让你的程序有地方跑HMI仿真则依赖WinCC Runtime Advanced它把HMI画面渲染成一个可以交互的窗口。三者缺一不可。版本匹配的基本原则是PLCSIM的版本必须与博途主版本一致或兼容HMI仿真运行环境必须与博途版本对应。比如你用博途V16那PLCSIM就要装V16对应的版本WinCC Runtime Advanced也要是V16的。混装V15和V16大概率会出现仿真启动失败或者变量连不上的问题。博途版本对应PLCSIMHMI仿真运行环境常见问题V15.1S7-PLCSIM V15.1WinCC RT Advanced V15.1老版本对Win10兼容性一般V16S7-PLCSIM V16WinCC RT Advanced V16较稳定推荐入门V17S7-PLCSIM V17WinCC RT Advanced V17对系统要求略高V18S7-PLCSIM V18WinCC RT Advanced V18需较新系统支持我个人的建议是如果你是新装环境直接上V16或V17稳定性和兼容性都比较成熟。V15.1虽然经典但在较新的Windows系统上偶尔会有运行环境报错。2.2 安装顺序与系统环境注意事项安装顺序这件事很多人不当回事结果装完发现仿真功能用不了。正确的顺序是先装博途主程序再装PLCSIM最后装WinCC Runtime Advanced。因为后两者需要依赖博途的底层组件顺序反了会导致注册表关联不上。系统环境方面有几个硬性要求。首先操作系统建议用Windows 10专业版或企业版家庭版在某些组件注册上会有问题。其次安装路径不要带中文和空格这是西门子软件的老毛病路径里有中文仿真启动时可能直接闪退。第三关闭杀毒软件的实时防护再安装装完再开否则某些动态链接库会被误删。还有一个特别容易被忽略的点Windows用户名不能是中文。如果你的电脑登录账户是中文名WinCC Runtime在创建运行实例时会因为路径编码问题失败。这个坑我见过太多次了解决办法是新建一个英文名的本地账户用它来跑仿真。提示安装前把系统区域设置里的“Beta版UTF-8支持”关掉这个选项会导致部分西门子组件的中文字符显示异常。2.3 授权与许可证的常见误区仿真功能需要授权但不是所有授权都要买。PLCSIM和WinCC Runtime Advanced的仿真授权在博途的试用期内是可以用的试用期过了就需要正式授权。很多人以为装了软件就能一直仿真结果30天后仿真按钮变灰就是因为授权到期。授权管理用Automation License Manager这个工具。装完软件后打开它检查一下授权状态。如果显示“试用”或者“无授权”仿真功能会在试用期结束后失效。对于学习用途可以申请试用授权或者使用官方提供的学习版授权具体渠道这里不展开但一定要走正规途径。另外提醒一句授权文件不要随便从不明来源下载一是法律风险二是很多破解授权会破坏软件组件导致仿真功能彻底用不了得不偿失。3. 项目组态从PLC程序到HMI画面的完整搭建3.1 新建项目与设备选型的关键参数打开博途新建项目第一步是添加设备。这里要加两个设备一个S7-1200 CPU一个HMI触摸屏。CPU选型上仿真对具体型号不敏感选一个常用的比如CPU 1214C DC/DC/DC就行。HMI选型要注意必须选支持WinCC Runtime Advanced的型号比如KTP700 Basic、KTP900 Basic这类。有些精简面板只支持Basic版运行环境仿真能力受限。选完设备后博途会自动建立PLC和HMI之间的连接。这个连接叫HMI连接是两者通信的桥梁。在“设备与网络”视图里你能看到一条绿色的连线说明连接已经建立。如果没连上右键HMI设备选择“更改设备/版本”确认型号然后在“连接”里手动添加。这里有个细节PLC和HMI的IP地址要在同一网段。仿真环境下虽然不涉及真实网络但博途的逻辑校验会检查这一点。PLC设192.168.0.1HMI设192.168.0.2子网掩码都是255.255.255.0这样最省事。3.2 PLC程序的编写要点与仿真适配写PLC程序的时候有几个地方要专门为仿真做适配。首先是输入输出地址的使用。仿真环境下物理输入I点不会真的被触发你需要用强制表或者监控表来手动置位。所以程序里对I点的依赖不要写得太死最好留出可以用M点或者DB块变量替代的路径。其次是定时器和计数器的处理。仿真里定时器是真实计时的但如果你用了很长的延时比如几分钟调试时会等得很难受。建议在调试阶段把定时器预设值改小逻辑验证通过后再改回实际值。计数器同理。第三是模拟量处理。S7-1200的模拟量输入在仿真里不会产生真实信号你需要用NORM_X和SCALE_X指令配合手动赋值来模拟。比如一个0-27648对应0-100度的温度信号你可以在监控表里直接给模拟量输入通道写一个中间值看程序输出对不对。程序结构上建议把逻辑分成几个FC或FB主程序OB1里只做调用。这样仿真调试时你可以单独监控某个FC的运行状态定位问题更快。3.3 HMI画面组态与变量连接HMI画面组态是仿真能不能“动起来”的关键。画面上的按钮、指示灯、输入框都要和PLC变量建立连接。连接的方式是在HMI变量表里新建变量然后关联到PLC的对应地址或DB块变量。这里有个高频问题HMI变量连不上PLC变量。原因通常是三个一是PLC变量所在的DB块没有取消“优化的块访问”二是HMI变量的数据类型和PLC变量不匹配三是连接没有正确建立。第一个原因最常见S7-1200的DB块默认是优化访问这种模式下变量没有固定地址HMI访问不了。解决办法是右键DB块属性里取消“优化的块访问”然后重新编译。画面切换逻辑也要提前设计好。比如主画面、参数设置画面、报警画面之间怎么跳转用“画面切换”函数还是用按钮的“激活屏幕”事件。建议在仿真前把画面结构画个草图避免组态到一半发现逻辑乱了。按钮的交互方式有两种按下置位、松开复位点动或者按下翻转切换。前者适合启动停止后者适合开关量。在按钮的事件里配置“按下”和“释放”分别对应什么操作这个要和PLC程序里的逻辑对应上否则会出现按了没反应或者状态不对的情况。4. 启动仿真PLCSIM与HMI仿真的联动实操4.1 启动PLCSIM并下载PLC程序一切组态完成后先启动PLC仿真。在项目树里选中PLC设备点击工具栏的“启动仿真”按钮一个带播放图标的按钮。博途会自动打开S7-PLCSIM窗口并提示你下载程序。下载的时候注意接口类型选PN/IE接口选PLCSIM。如果选错了会提示找不到设备。下载完成后PLCSIM窗口里的CPU指示灯会变绿表示运行状态。这时候你可以打开程序块在线监控看程序有没有在跑。如果下载时报错“无法建立连接”检查两点一是PLCSIM是否已经启动并处于RUN模式二是博途的“在线访问”设置里网卡是否选的是PLCSIM虚拟网卡。这两个地方对了下载基本不会出问题。4.2 启动HMI仿真并与PLC建立通信PLC仿真跑起来后再启动HMI仿真。选中HMI设备同样点击“启动仿真”按钮。这时候会弹出WinCC Runtime的窗口显示你组态的画面。关键来了HMI仿真要和PLCSIM建立通信。默认情况下HMI仿真会尝试连接真实的PLC或者PLCSIM。如果连接不上画面上的变量会显示“####”或者灰色。解决办法是在HMI仿真的运行设置里确认连接指向的是PLCSIM。具体操作是在WinCC Runtime窗口里打开“设置”或者“连接”选项把连接目标改成PLCSIM对应的虚拟地址。还有一个更省事的办法在博途里HMI连接的属性中把“仿真”选项勾上。这样启动HMI仿真时它会自动寻找同一项目里的PLCSIM实例不用手动配。4.3 变量联动测试与画面交互验证通信建立后就可以测试联动了。在HMI画面上点一个启动按钮观察PLCSIM里对应的M点或者Q点有没有变化。如果PLC程序里这个点控制了一个定时器或者计数器再看定时器的当前值有没有在走。测试的顺序建议是先测单个变量再测画面切换最后测报警和趋势。单个变量通了说明通信没问题画面切换正常说明HMI组态逻辑对报警和趋势能触发说明数据记录和事件系统工作正常。这里分享一个实用技巧用PLCSIM的监控表配合HMI仿真做双向验证。在PLCSIM里打开监控表手动修改一个变量值看HMI画面上对应的显示有没有跟着变。反过来在HMI上操作看PLCSIM里的值有没有变。双向都通了才算真正联调成功。5. 高频故障排查与实战避坑指南5.1 HMI仿真按钮无反应的排查思路这是搜索热词里出现频率最高的问题。点了HMI仿真按钮要么没反应要么弹个错误框就没了。排查顺序如下第一检查WinCC Runtime Advanced是否安装。很多人只装了博途和PLCSIM没装HMI运行环境仿真按钮自然是灰的或者点了报错。在控制面板的程序列表里找“WinCC Runtime Advanced”没有就补装。第二检查HMI设备型号是否支持仿真。精简面板Basic Panel的部分型号不支持Advanced运行环境仿真会失败。换成Comfort面板或者支持Advanced的型号再试。第三检查项目路径和用户名。前面提过路径带中文、用户名是中文都会导致Runtime启动失败。把项目移到纯英文路径下用英文账户登录再试。第四检查授权。WinCC Runtime Advanced的授权过期仿真会启动不了。打开Automation License Manager确认授权状态。第五检查端口占用。WinCC Runtime默认用一些特定端口如果被其他程序占用会启动失败。重启电脑或者换个端口试试。5.2 PLCSIM下载失败与通信中断的解决PLCSIM下载失败最常见的原因是PLCSIM没有先启动。博途的下载流程是先启动仿真PLCSIM窗口打开后再点下载。如果顺序反了博途找不到仿真设备就会报连接错误。另一个原因是网卡选择错误。在“在线访问”里要选PLCSIM Virtual Ethernet Adapter而不是你真实的物理网卡。选错了下载请求发到真实网络里自然找不到设备。通信中断的情况通常是PLCSIM意外停止或者博途和PLCSIM的版本不匹配。检查PLCSIM窗口的CPU状态如果是STOP或者ERROR重新启动仿真。版本不匹配的话只能重装对应版本。5.3 变量连接异常与数据类型不匹配HMI变量显示“####”或者不更新八成是变量连接的问题。排查步骤先看PLC变量所在的DB块是否取消了优化访问。优化访问的DB块变量没有绝对地址HMI访问不了。取消优化后重新编译下载。再看数据类型。HMI变量的数据类型必须和PLC变量一致。比如PLC里是RealHMI里选成了Int就会显示异常。在HMI变量表里逐个核对数据类型。还有一种是变量地址越界。比如PLC里DB块只有10个字节你HMI变量访问到了第12个字节就会读不到。检查DB块的实际大小和变量偏移量。故障现象可能原因排查方法解决措施HMI仿真按钮灰色未装Runtime或授权过期检查程序列表和授权补装或更新授权仿真启动闪退路径或用户名含中文检查项目路径和账户名改为纯英文变量显示####DB块优化访问未取消查看DB块属性取消优化并重新编译下载找不到设备PLCSIM未启动或网卡选错检查PLCSIM状态和在线访问设置先启动仿真选PLCSIM网卡画面切换无反应按钮事件未配置或变量未连接检查按钮事件和HMI变量表重新配置事件和连接5.4 仿真性能优化与长时间运行稳定性仿真跑久了电脑会变卡尤其是同时开PLCSIM和WinCC Runtime的时候。优化建议关闭博途里不用的编辑器窗口减少内存占用把HMI画面的刷新周期调长一点比如从100ms改成500ms降低CPU负载PLCSIM的扫描周期可以适当放宽不用设得太快。长时间运行稳定性方面建议每隔几小时重启一次仿真环境清理内存碎片。如果做长时间的数据记录测试把WinCC Runtime的归档功能打开但归档周期不要太密否则硬盘写入压力大。还有一个经验仿真时把Windows的电源计划设成高性能避免CPU降频导致仿真卡顿。这个细节很多人不注意但实际影响挺明显的。6. 仿真方案的扩展应用与进阶玩法6.1 用仿真做程序版本对比与逻辑验证仿真环境特别适合做程序版本对比。比如你改了一版逻辑不确定有没有引入新问题可以在仿真里把新旧两版程序分别跑一遍用相同的输入序列测试对比输出结果。具体做法是用PLCSIM的监控表记录关键变量的变化曲线或者用博途的跟踪功能Trace记录变量时序两版对比一目了然。逻辑验证方面可以构造边界条件测试。比如一个温度控制程序设定值是100度你可以手动给模拟量输入赋一个接近100的值看输出动作是否在预期范围内。这种测试在真机上很难做仿真里就是改个数字的事。6.2 多HMI与多PLC的仿真组网博途支持在一个项目里组态多个PLC和多个HMI。仿真时你可以启动多个PLCSIM实例每个实例对应一个CPU然后让HMI分别连接不同的PLC。这种组网仿真适合验证多站通信、主从控制这类场景。操作上每个PLC单独启动仿真PLCSIM会为每个实例分配不同的虚拟网卡或者端口。HMI连接里指定对应的PLC地址就能实现多对多通信。注意资源占用同时跑三个以上PLCSIM实例电脑配置要跟得上建议16G内存起步。6.3 仿真与真实硬件的平滑过渡仿真跑通后往真机迁移的时候有几个地方要改。第一是IP地址仿真里用的虚拟地址真机上要改成实际网段的地址。第二是硬件组态仿真时选的CPU型号要和真机一致否则下载会报错。第三是输入输出地址仿真里用M点模拟的输入真机上要改成实际的I点地址。迁移前建议做一次完整的离线编译检查有没有硬件相关的错误。下载到真机后先跑一遍空载测试确认基本通信和I/O正常再逐步加载完整逻辑。这样过渡最稳妥。6.4 仿真在教学与方案演示中的实战技巧用仿真做教学演示最大的好处是可重复、可回放。你可以把整个操作过程录屏学生跟着做每一步都能暂停讲解。遇到学生操作错误导致仿真崩溃重启一下就能重来不像真机那样有损坏风险。方案演示时建议提前把常用操作做成HMI上的快捷按钮演示时一键触发不用在现场慢慢点。另外把PLCSIM的监控表和HMI画面并排摆放观众能同时看到“操作”和“数据变化”说服力更强。我个人的习惯是演示前把整个流程在仿真里完整走三遍确认没有卡顿和报错。现场演示最怕的就是点下去没反应提前多跑几遍能避免大部分尴尬。7. 一些实操心得与踩坑记录仿真这件事说起来简单做起来细节特别多。我踩过的坑里最典型的是DB块优化访问这个问题。刚开始学的时候HMI变量死活连不上查了半天以为是通信问题最后发现是DB块默认优化访问取消掉就好了。这个坑几乎每个新手都会踩记住就行。另一个是PLCSIM和博途的启动顺序。一定要先启动仿真再下载程序。反过来操作博途会提示找不到设备新手容易懵。养成习惯就好了。还有中文路径的问题。我见过有人把项目放在桌面上桌面路径带中文用户名仿真怎么都起不来。后来把项目移到D盘根目录问题消失。这种问题没有报错提示只能靠经验排查。最后说一个提效技巧把常用的监控表保存成模板。每次新建项目把常用的变量监控表导入省得重新建。仿真调试时监控表就是你的眼睛眼睛越顺手调试越快。仿真终究是仿真它不能替代真机调试但能帮你把逻辑层面的问题全部解决掉。真机上剩下的主要是电气特性和现场工况的适配。把仿真用好了真机调试的时间能省一大半。这个投入产出比试过的人都知道。
企业数字化 ERP 产品动态
相关推荐
3111S H桥驱动芯片实战:从原理图到PWM调速与散热布局 /* 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 9:06:52
工业SPI隔离方案:MAX14431BAEE+与STM32F042K6实战 /* 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 9:05:51
工业SPI隔离设计:MAX14431BAEE+与STM32F417ZG实战指南 /* 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 9:05:51
如何快速部署Mistral Medium 3.5 128B:5步完成本地vLLM服务器搭建 如何快速部署Mistral Medium 3.5 128B:5步完成本地vLLM服务器搭建
Mistral Medium 3.5 128B是一款具有1280亿参数的强大开源AI模型,支持256k超长上下文窗口,具备多模态输入、函数调用和推理能力。本文将通过5个简单步骤,教你如何… · 2026/11/3 9:52:57
MiniMax-Text-01:400亿级MoE模型如何突破400万token上下文? MiniMax-Text-01:400亿级MoE模型如何突破400万token上下文?
导语:MiniMax最新发布的4560亿参数混合架构大模型MiniMax-Text-01,通过创新技术组合实现400万token超长上下文处理能力,在多项长文本任务中表现超越主流商业… · 2026/11/3 9:52:57
【58】舌象数据集(有v5/v8模型)/YOLO舌象检测 /* 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 9:52:57
【大数据框架】Calcite 基础概念:从 SQL 到执行计划的思维路径 /* 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 9:51:56
Qwen3-Omni:多模态AI实时交互全攻略 Qwen3-Omni:多模态AI实时交互全攻略
导语
Qwen3-Omni-30B-A3B-Instruct正式发布,作为一款原生支持文本、图像、音视频输入并实时生成语音的多语言全模态模型,它标志着AI交互从单一模态向"感知-理解-响应"全链路智能化的跨越。
行… · 2026/11/3 9:51:56
三环境测试全覆盖:OpenRouter ai-sdk-provider Node、Edge与E2E测试体系解析 【免费下载链接】ai-sdk-provider The OpenRouter provider for the Vercel AI SDK contains support for hundreds of models through the OpenRouter chat and completion APIs. 项目地址: https://gitcode.com/gh_mirrors/ai/ai-sdk-provider 点击查看 免费下载 … · 2026/11/3 9:51:56
双极步进电机控制实战: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