news 2026/10/3 7:59:25

西门子S7-1500T凸轮同步与CAMIN指令详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
西门子S7-1500T凸轮同步与CAMIN指令详解

1. 为什么是1500T:普通1500做不了凸轮同步这件事

先聊个很多工程师问过我的问题:同样是S7-1500,为什么凸轮同步非要用1500T系列?普通1500加个高速计数模块能不能凑合?

答案很直接:凑合不了,或者说凑合出来也没法用。

普通1500系列的CPU虽然也有运动控制指令,但它的定位是逻辑控制为主、运动控制为辅。你可以用普通1500做点位运动、做速度控制,甚至做简单的电子齿轮(GearIn),但一旦涉及到多轴之间的非线性同步关系,比如飞剪、横切、贴标、灌装压盖这一类需要"主轴走一段、从轴跟着变比例地走一段"的工艺,普通1500的运算能力和轴控接口就撑不住了。凸轮同步的核心不是"同步"两个字,而是"凸轮曲线"——也就是主轴位置和从轴位置之间那一张非线性映射表。这张表在运行过程中要实时插值计算、要跟随主轴速度变化动态调整输出,还要保证在多轴联动时抖动足够小。这一套东西放到普通PLC上,CPU负载和响应时间都过不了关。

1500T系列是西门子专门为工艺运动控制推出的CPU,它的全称里那个"T"代表Technology,也就是工艺型CPU。它和普通1500最大的区别在于内部集成了运动控制引擎,支持PLCopen标准的运动控制指令集,包括我们常说的MC_MoveAbsolute、MC_GearIn、MC_CamIn、MC_Phasing等等。而且它的轴控制周期可以做到很短的等时同步循环,这是凸轮同步能否稳定工作的关键前提。

再说直白一点:1500T就是西门子把原来S120/S150驱动器和Simotion控制器里的那一套运动控制能力,往下沉到了PLC里。你不需要再搞一个单独的运动控制器,直接在博途(TIA Portal)里组态工艺对象,在PLC程序里调用指令,就能实现以前需要专用控制器才能实现的凸轮同步功能。

哪类项目需要用到CAMIN?我列几个常见的:

  • 飞剪:钢板或管材在运动中切断,刀辊必须和材料速度同步一会儿再快速返回。
  • 横切机:纸张、薄膜、无纺布在连续运动中裁切。
  • 印刷套准:承印物的图案位置和印刷辊之间的相位调整。
  • 贴标/套标:瓶子在输送带上连续运动,贴标头需要短暂跟随瓶子速度完成贴标。
  • 冲压/模切:材料连续进给,模具需要追着材料同步运动一段,完成冲切后返回。

这些工艺有一个共同点:主轴一直在动,从轴不是简单地按固定比例跟随,而是要按一条设计好的曲线来运动。比如飞剪,刀辊在切断区间要跟材料完全同步(这样才能保证切口垂直、没有毛刺),切完之后要快速回到起点等下一刀。这个过程如果只用电子齿轮,刀辊和材料之间始终是固定比例关系,切出来的切口就是斜的。必须用凸轮表来控制刀辊在一个周期内经历"同步段—返回段—等待段"的完整轨迹。

所以,你如果真的要在1500上做凸轮同步,不用纠结,直接上1500T。选型省下来的那点成本,可能还不够调试现场烧两天的时间。这个我后面讲踩坑的时候还会提到。

2. CAMIN指令到底做了什么:拆开看它的同步逻辑和管脚

CAMIN在博途里的正式名称叫MC_CamIn,属于PLCopen运动控制标准指令。它的作用说白了就一句话:让一条从动轴按照凸轮表的定义去跟随一条主轴运动,在主轴上电运行时能平滑地切入同步状态。

这里有个很容易搞混的概念必须先理清:CAMIN不是"每周期都在算"的那条指令,而是"建立耦合关系"的那条指令。凸轮同步一旦建立起来,从轴就会按照凸轮表持续跟踪主轴,这个过程不需要CAMIN每条扫描周期反复触发——它只需要在开始时执行一次,把耦合关系建立起来,后面就交给运动控制引擎去处理了。

CAMIN的主要管脚我整理成一个表格,方便大家对照着看:

管脚名方向类型作用说明
EnableINBool使能信号,上升沿触发指令执行
MasterIN轴引用指定主轴,可以是物理轴也可以是虚轴
SlaveIN轴引用指定从动轴
CamTableIN凸轮表选择用哪一张凸轮表
CouplingModeINEnum耦合模式,决定同步的位置基准
MasterStartPositionINReal切入同步时主轴的起始位置
SyncPositionINReal切入时从轴的对齐位置
StartModeINEnum启动模式,决定如何开始同步
VelocityINReal同步切入时允许的加速速率
AccelerationINReal同步切入时的加速度限制
DecelerationINReal同步切入时的减速度限制
JerkINReal加加速度限制,越大越平滑
DoneOUTBool同步建立完成
BusyOUTBool指令正在执行
CommandAbortedOUTBool指令被中止
ErrorOUTBool报错
ErrorIDOUTWord错误代码

2.1 主轴和从轴的"虚"与"实"

在飞剪这类现场调试里,主轴往往不是一根真实的编码器轴,而是一根虚轴(Virtual Axis)。为什么?因为真实材料的速度可能受到变频器、直流调速、甚至手动干预的影响,如果直接把物理编码器当主轴,速度波动就直接传导到从轴,切出来的产品品质就不稳定。用虚轴的好处是:虚轴本身可以做加减速规划、可以做速度平滑,而且它可以脱离物理限制自由回零。常见做法是让虚轴跟随材料线速度的信号——比如通过编码器或者变频器的实际速度反馈来驱动虚轴,再由虚轴作为CAMIN的主轴去带动从轴。这样中间多了一层缓冲,整个同步关系平稳很多。

这个"虚轴—实从轴"的层级关系,是1500T运动控制里非常重要的一个结构设计。

2.2 同步切入的几种模式

CAMIN的StartMode参数有几个选项,决定了切入瞬间从轴怎么跟上来。我实际用下来,最常用的是"绝对同步(AbsoluteSync)"和"增量同步(IncrementalSync)"。

  • AbsoluteSync(绝对同步):从轴按照凸轮表从某个固定位置开始映射。适用于每次启动都要从同样的位置关系开始的情况。
  • RelativeSync(相对同步):从轴保持当前实际位置,然后按凸轮表的增量关系开始跟随。适合在不同批次中需要保持当前相位关系不变的应用。
  • IncrementalSync(增量同步):类似于相对同步,但强调的是同步建立过程中的位置增量,常常用于多次重复切入、每次相位都有小幅度调整的场景。

选错模式的后果我来举个例子:有一个印刷项目,最初用绝对同步,但每次启动时如果材料已经走了一段,刀辊就会猛地跳到一个错误位置,导致切出来的第一张废品。后来改成增量同步,让刀辊在当前实际位置基础上平滑进入同步,问题就解决了。所以说,同步模式的选择不是一个随便填的参数,它直接决定了设备启动和切换时的冲击力。

2.3 耦合状态怎么看

CAMIN执行成功后,从轴的工艺对象里会有一个耦合状态属性。在博途的工艺对象变量表里,能看到类似<从轴名称>.CouplingState这样的状态量。这个状态量有几个值:解耦状态、同步状态、正在同步等等。

调试时判断"CAMIN到底有没有生效",不能只看Done位——有时候Done已经置位了,但工艺状态不对(比如主轴还没运行,从轴被锁死在一个位置)。正确做法是同时看Done位和从轴的耦合状态,再结合从轴的实际位置和速度来判断同步是否真正建立。多看一眼状态值,可以省下不少现场排查时间。

3. 从零配置一次凸轮同步:凸轮表、轴组态到指令调用

这一部分写给第一次碰1500T的人。虽然博途的整体操作逻辑和普通1500差不多,但运动控制相关的组态步骤还是有区别的,而且每一步都有坑。

3.1 第一步:创建工艺对象并确认轴类型

在博途项目中,新增技术对象(Technology Object)时,会要求选择轴类型。1500T下的轴类型有位置轴(Positioning Axis)、速度轴(Speed Axis)、虚轴(Virtual Axis)等。做凸轮同步通常至少需要两根轴:一根主轴(可以是虚轴或位置轴),一根从动轴(通常是位置轴或速度轴)。

如果主轴是跟随外部编码器信号的,编码器信号需要接到1500T支持等时同步的高速输入模块上,并且在组态编码器的时候选择"运动控制编码器"作为输入源。这一步漏了的话,CAMIN执行时主轴速度信号会出现明显延迟,同步效果很差。

3.2 第二步:编辑凸轮表

凸轮表是CAMIN的灵魂。在博途左侧项目树里找到"凸轮(CAM)"节点,右键新建凸轮。打开凸轮编辑器后,会看到一张主轴位置(X轴)和从轴位置(Y轴)的映射表。

凸轮表的编辑有两种方式:

  • 手动输入关键点:适合简单曲线。把主轴和从轴的对应位置关系逐点敲进去,系统自动插值成曲线。
  • 通过公式生成:适合复杂曲线。比如飞剪的刀辊运动曲线,通常由同步段和回程段组成,用数学表达式生成更精确。

不管是哪种方式,有一个参数必须搞明白:插值类型。博途里凸轮表支持线性插值、三次样条插值等选项。三次样条的曲线更平滑,但需要确保关键点密度足够,否则可能出现过冲;线性插值的计算量小,但会造成速度突变。飞剪这类对速度连续性要求高的工艺,我一般选三次样条。

另外凸轮表还有一个重要的概念是周期/非周期。飞剪用非周期凸轮(单次执行),每一刀跑完一整条曲线后从轴自动脱离;某些连续旋转设备(比如旋转切刀)则用周期凸轮,主轴转一圈,从轴跟着完成一整个周期的动作。这个设置在凸轮表属性里的"执行方式"中配置。

3.3 第三步:在程序中调用CAMIN指令

在OB1(或某个周期性OB)里拖入MC_CamIn指令,在Master和Slave管脚上连接对应的工艺对象。如果你是第一次调用,有两个细节容易忽略:

  • CamTable管脚不是字符串,而是一个"凸轮表引用"的对象类型,需要在管脚分配界面选择具体的凸轮表变量。
  • Velocity、Acceleration、Deceleration这几个参数虽然标的是Real类型,但它们不是速度设定值,而是切入同步时的动态调节限制。换句话说,它们决定了从轴在进入同步轨道时"多快到达目标曲线"。

下面是一个调用示例的写法(简化版,实际工程中需要写更完整的错误处理逻辑):

"MC_CamIn_DB"( Enable := "StartCond", Master := "主虚轴", Slave := "刀辊轴", CamTable := "飞剪凸轮_1", CouplingMode := 1, // 相对同步 MasterStartPosition := 0.0, SyncPosition := 8.0, StartMode := 1, Velocity := 360.0, Acceleration := 3600.0, Deceleration := 3600.0, Jerk := 20000.0, Done => "CamInDone", Busy => "CamInBusy", Error => "CamInError", ErrorID => "CamInErrID" ); // 同步建立成功后,给虚轴一个速度,让整个系统跑起来 "主虚轴".MoveVelocity(Enable := "CamInDone", Velocity := 60.0);

这里的CouplingMode := 1、StartMode := 1具体代表哪个枚举值,和工程里配置的工艺对象版本有关,实际编程要以博通在线帮助里的枚举表为准,我用常量是因为方便现场改。

3.4 第四步:下载并强制使能

1500T的凸轮同步第一次下载后会要求你进行"回参考点"操作。主轴(特别是虚轴)和从轴如果没有参考点,CAMIN的同步建立是无法完成的。这里要注意:虚轴的参考点和物理轴的参考点逻辑不一样。虚轴通常使用"绝对值编码器模拟"或"自动设置参考点"这两种方式,确保上电后位置立即有效。

强制使能的方式也简单:给Enable一个常TRUE,然后看Done有没有起来。如果没起来,查两个地方——主轴位置是否有效、从轴是否处于standstill状态以外的可耦合状态。我曾经遇到过几次从轴还处于"回零中"状态,导致CAMIN一直报错,直到我从轴把回零流程完整走完才恢复。

4. 关键参数的选择逻辑:同步模式、相位偏移和动态限制

CAMIN指令的参数虽然不多,但每个都和实际工艺紧密相关。这里挑四个重点展开。

4.1 CouplingMode(耦合模式)的底层差异

耦合模式决定了从轴位置和凸轮表X轴坐标的对应基准是什么。绝对模式下,凸轮表的X轴坐标就是主轴的绝对位置。如果主轴从100mm走起,那凸轮表的映射也只看主轴当前值。相对模式下,凸轮表X轴坐标看的是主轴从耦合建立的瞬间开始走过的相对距离,和主轴初始位置无关。

对飞剪这种工艺来说,因为每刀之间主轴的绝对位置可能漂移(材料速度不一样,编码器累积误差不一样),相对模式更合适。对印刷套准这种工艺,每一圈都要精确对齐到某一个绝对位置,绝对模式更方便。这一条建议大家按照自己的工艺特性来选,不要盲目照搬别人的程序。

4.2 MasterStartPosition和SyncPosition的意义

MasterStartPosition看起来像是"主轴从哪个位置开始同步",其实它指的是建立同步时,立即把凸轮表X轴的起点对齐到主轴上这个位置。你在CAMIN里写了MasterStartPosition := 720,效果就是:不管主轴当前在什么地方,一旦使能,系统就认为凸轮表的起点对应着主轴的720这个位置。

SyncPosition是从轴的相位偏移。如果凸轮表里从轴的第0个输出点是位置0,而你需要它在实际位置120处开始映射,就把SyncPosition设为120。这两个参数配合起来,可以实现现场对相的功能——不用去改凸轮表,直接调这两个值,就能改变同步开始的主从位置关系。

4.3 Velocity/Acceleration/Deceleration/Jerk的"软着陆"

这几个参数我以前觉得无所谓,直到有一次在调试横切机时出现了严重的机械冲击,才发现它们的重要性。

CAMIN建立同步不是瞬间完成的。为了让从轴在切入凸轮表时机械上不至于猛冲,控制器会提前计算一条"从当前状态平滑过渡到凸轮表目标状态"的过渡曲线。Velocity就是这条过渡曲线的最大速度,Acceleration和Deceleration是最大加减速度,Jerk是加加速度(Jerk越高,过渡越猛;Jerk越低,过渡越柔和)。

参数太小,从轴迟迟追不上凸轮表,会出现同步建立被拉长、甚至刀具和材料不同步的现象;参数太大,冲击明显,设备噪音和磨损都会上来。我调飞剪时喜欢从0到目标转速的加速度控制在1到2秒内完成,Jerk取加速度的5到8倍。当然这只是一个经验起点,最终还是要根据机械刚性来微调。

4.4 扫描周期与等时同步

1500T做凸轮同步时,强烈建议把运动控制任务放在等时同步中断OB(如OB60/OB61/OB62)中,或者设置专门的运动控制OB任务,控制周期在1到4ms之间。如果放在普通的OB1里,扫描周期不稳定,凸轮插值容易产生速度跳变,表现出来就是同步过程中从轴有微小的抖动,成品切出来边缘不整齐。

这里我遇到过的一个现场:客户把CAMIN调用放在了OB1里,平整度一直过不了检;后来换到等时同步中断后,立竿见影。这种问题最难找,因为它不报错,只有看产品才能发现。

5. 一个典型飞剪项目的CAMIN完整用法

前面讲了很多基础概念,这一节用我实际做过的飞剪项目把整个流程串起来,这样大家能理解CAMIN在真实工艺流程中是怎么被使用的。

5.1 工艺描述

设备是一台管材飞剪:管材连续挤出,速度恒定约每分钟12米。刀辊(从轴)需要在管材走动的过程中追上管材并完成切断,切断完成后快速返回初始位置等待下一刀。切管长度可以设定,比如用户要切200mm长的管,那每一刀之间的时间间隔就是材料走200mm的时间。

这个工艺的核心就是:刀辊的旋转角度和管材的位移之间,要维持一个由凸轮表定义的函数关系。

5.2 凸轮表设计

我建了一张非周期凸轮表,X轴是主轴位移(mm),Y轴是刀辊角度(度)。为了让刀具在切断区始终保持垂直切入,凸轮表中有一段是"同步段"——Y轴随X轴线性增长,比例关系根据刀辊周长和切断长度的几何关系计算出来。切断之后是"回程段"——刀辊角度快速回到起点,同时X轴继续前进。回程段的曲线用了样条平滑,避免高速返回时产生振动。

切断长度不同时,凸轮表的周期长度也要变化。好在博途支持在运行中更换CAMIN的CamTable输入,所以我的程序里预存了多张凸轮表,每一张对应一种常用切断长度。当操作员在HMI上修改切断长度时,程序会先在设备空闲时切换凸轮表,再在下一刀时执行CAMIN。

5.3 总线流程:从虚轴到刀辊

整个系统的轴控结构是这样的:

  1. 管材挤出速度通过编码器反馈给PLC,PLC经过滤波后作为虚轴的目标速度。
  2. 虚轴在OB60中运行,保持一个平滑的速度信号。
  3. 当PLC收到"切刀启动"信号后,执行CAMIN,把刀辊轴和虚轴耦合起来。
  4. 刀辊跟随凸轮表完成切断动作,当凸轮表执行到终点后,系统自动解耦。
  5. 刀辊轴执行回零动作,回到起始位置,等待下一刀信号。

代码里会有两个CAMIN?不是。操作流程中,每一刀都执行一次CAMIN来建立同步关系,切完一刀,从轴自动脱离,然后回零,下一刀再执行CAMIN。这种"每刀一次耦合"的方式是飞剪的标准做法。如果你的设备是"跑完整个凸轮后从轴停在终端位置不回来",那就是另一种工作循环方式,具体看工艺需要。

5.4 一个容易被忽略的问题:切长和速度的匹配

飞剪有个基本的物理约束:刀辊完成一圈所需的时间不能超过切长除以材料速度。如果材料速度过快,刀辊根本来不及回到起点,这时候CAMIN还没来得及再次建立同步就已经超时了。表现就是某些速度下飞剪切得正常,提速到某个阈值后突然频繁报警或者乱切。

解决办法有两个方向:一是提高刀辊回程速度(但在机械允许范围内),二是设计"多刀处理"——也就是刀辊在一个周期里完成两次或三次切断,相当于凸轮表里有多个同步段。后者在深挖后还会影响凸轮表的分段设计,但理论上是可以实现的。

6. 调试中我踩过的坑和完整排查链路

最后这部分全是实战经验,每条都是我自己或身边的人在1500T上碰到的真实问题。

6.1 CAMIN执行了,Done也置位了,但从轴纹丝不动

这是最常见的问题。排查链路如下:

  1. 先查从轴工艺对象是否真的处于"可耦合"状态。在轴调试面板里看从轴的状态,如果是"未回零"或"速度轴模式"而不是"位置轴模式",CAMIN不会真正驱动它。
  2. 查主轴是否在动。主轴位置不动的情况下,从轴跟随一个静止的主轴当然也是静止的,这不算故障。
  3. 查凸轮表选择是否有问题。如果CamTable管脚被填成了0或者无效对象,指令虽然不报错,但也会处于空跑状态。
  4. 查Velocity/Acceleration参数是不是被设成了0。在大约90%的现场,参数为0会导致同步建立后从轴不跟随,这也是我踩过最久的一个坑。

6.2 同步建立后从轴位置就偏了个固定量

这通常是SyncPosition和凸轮表起点坐标没有对齐。解决办法是把CAMIN的MasterStartPosition和SyncPosition设置为和凸轮表设计时的坐标基准一致,或者干脆都用0,先验证基础功能,再加偏移量。

6.3 飞剪切断处有斜口,不是垂直切口

斜口说明刀具在切断区间和材料速度不同步。优先检查凸轮表的同步段是不是真的与主轴X轴成线性关系,且斜率是否等于刀辊线速度和材料速度比。现场还有一个很常见的可能:主轴虚轴的速度反馈有延迟,导致同步段小幅偏差。把主轴改成通过编码器直接参与,或者增加主轴速度环的前馈补偿,都能改善。

6.4 切换凸轮表时从轴瞬间跳变

这个问题出在切换时机不对。CAMIN的CamTable不是随时都能换的,必须在从轴处于解耦状态时切换,而且切换后要让凸轮表从有效的起点重新开始计算。如果在同步建立状态下直接换凸轮表,运动控制引擎会尝试把从轴从当前目标曲线跳转到新曲线,瞬间的误差就会被夸大,产生跳变。解决办法是在程序里加一个"换凸轮表前先解耦"的判断逻辑。

6.5 CAMIN频繁报错,ErrorID不固定

如果ErrorID每次都不一样,多半不是CAMIN本身的问题,而是整个运动控制任务超时了或总线同步丢包了。1500T对等时同步的要求比较高,建议查一下DP/PN通讯的诊断缓存,看看有没有总线周期超时的记录。特别是主轴编码器如果是通过PROFINET IO设备接入的,延迟会明显影响运动控制响应,最好把编码器放到和CPU同一个等时同步域里。

6.6 虚轴回零总是失败

虚轴的回零和我前面说的一样,不能依赖外部限位开关,要用内部的"设置参考点"方式。在工艺对象组态里把回零方式选为"直接设置参考点(绝对)",同时给一个初值位置。这样每次上电后虚轴就能直接使用,不会卡在回零等待的状态。

7. 最后分享两个现场实用技巧

第一个技巧:用Trace功能观察CAMIN切入瞬间的位置偏差。1500T里自带的Trace(跟踪)功能非常好用,可以把主轴位置、从轴位置、速度、耦合状态这些变量同时录进来。CAMIN切入瞬间如果有微小的位置突变,在Trace曲线上能看得非常清楚,比在现场用示波器测编码器信号方便得多。我每次调试凸轮同步,都会开一个Trace记录切入瞬间的数据,先看突变再判断问题出在哪一段。

第二个技巧:在HMI上留一个"凸轮表偏移量"的设定值。现场调试时经常遇到因为机械安装误差、刀片磨损、材料厚度变化导致的切点偏移。如果在程序里把SyncPosition引到一个HMI可以修改的变量上,操作工自己就能微调相位,不用每次都喊电气工程师改程序。这个小改动,会让设备在长时间运行后依然能保持稳定的切断精度。

凸轮同步这个东西,说难也难,说简单也简单。难在一个"同步切入"的过程要让机械毫无冲击,简单在一旦你把凸轮表和CAMIN参数理解透了,后面改设备型号、换工艺参数,都只是改数值的事。1500T的CAMIN指令给了工程师很大的自由度,但自由度也意味着责任——参数设不好,设备就会用故障和废品来教你做人。希望这篇文章能把大家上电调试的时间压缩下来,少走我当年走过的弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 7:59:18

STM32 USART串口通信实战:从原理到代码,带你避开所有坑

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

作者头像 李华
网站建设 2026/10/3 7:58:56

图书馆管理信息系统数据库课设全攻略:从ER建模到并发事务

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

作者头像 李华
网站建设 2026/10/3 7:57:56

信噪比SNR全面解析:从ADC采集到ImageJ图像计算

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

作者头像 李华
网站建设 2026/10/3 7:57:05

d3dx9_xx.dll缺失修复指南:从DirectX运行库到老游戏卡顿全解决

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

作者头像 李华
网站建设 2026/10/3 7:56:20

Isaac Sim资源获取失败排查指南:IsaacLab资源加载问题解决

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

作者头像 李华
网站建设 2026/10/3 7:56:17

龙头复盘神器5.6实测:涨停板、连板梯队与板块轮动一键归集

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

作者头像 李华