ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

西门子1500T电子凸轮控制:OUPUTCAM指令实现气缸精准动作

2026/10/7 18:21:46 拓冰建站 浏览量
西门子1500T电子凸轮控制:OUPUTCAM指令实现气缸精准动作 搞过包装机械、飞剪和贴标机的老哥们应该都有过这种体会机械凸轮这东西调试起来真要命。换一次产品规格就得重新车一个凸轮装上去发现相位不对还要反复盘车微调磨来磨去半天就没了。后来上了西门子1500T系列PLC用OUPUTCAM指令把凸轮输出这块直接做成软件里的“电子凸轮”气缸动作、裁切位置、贴标时序全部靠程序来控制换规格就换一组凸轮表数据调试效率翻了不止一倍。这篇东西就围绕1500T的凸轮输出功能展开重点讲OUPUTCAM指令怎么用、凸轮表怎么建、气缸具体怎么让它按主轴角度伸出缩回。适合刚接触西门子运动控制、想把电子凸轮用到气动控制里的工程师也适合准备用1500T替代机械凸轮的设备厂商。1. 核心需求拆解为什么1500T的凸轮输出能替代机械凸轮1.1 传统机械凸轮控制的痛点和电子凸轮的出现先说说以前是怎么干的。一台典型的包装机里主轴带动传送链运动各个工位上的气缸需要按主轴的旋转角度、在特定的角度区间里伸出或者缩回。比如一个插管机构主轴转到90°的时候气缸推出插管转到130°的时候退回整个动作必须和主轴的相位严格同步。传统做法是在主轴上装一串机械凸轮每个凸轮对应一个气缸凸轮的轮廓决定气缸顶杆的推出时机和保持角度。听着简单用起来全是坑凸轮磨损后动作点漂移调相位要松开锁紧螺丝转凸轮两台设备想做得完全一致很难换产品规格时凸轮组几乎要全部重做。电子凸轮的原理其实一句话就能说清楚用一个编码器或者伺服驱动器的反馈实时采集主轴位置程序里预先定义好“哪些角度区间输出通哪些区间输出断”然后按位置直接触发气缸电磁阀。西门子1500T把这套东西集成到了运动控制指令里OUPUTCAM就是干这件事的核心指令。1.2 OUPUTCAM指令在1500T中的定位S7-1500T系列是西门子带运动控制功能的CPU和普通1500比它多了很多工艺指令比如齿轮同步、速度同步、位置同步还有我们今天说的凸轮输出。OUPUTCAM可以理解为“输出凸轮表”指令它读入一个主轴位置值和凸轮表里预先画好的曲线做对比然后输出一个布尔量用来控制电磁阀、气缸或者其他开关量执行机构。和自己在OB1里写一堆“如果位置在100到150之间就置位Q点”的FOR循环不一样OUPUTCAM有几个实打实的优势凸轮表支持多段曲线的编辑0~360°里可以定义几十个区间每个区间都有独立的输出状态。指令和运动控制中断保持同步采样周期固定输出不会因为主程序扫描时间波动而抖。可以做相位偏移补偿气缸的机械滞后、电磁阀的动作时间都不用改硬件的凸轮位置直接在软件里把曲线左右挪一下就行。支持多套凸轮表在线切换换产品规格时按下按钮直接换表不用停机换凸轮。1.3 这个方案适合哪些场景OUPUTCAM最适合的控制对象就是“按主轴位置动作的气缸”。举个典型清单贴标机里的压瓶气缸、刷标气缸纸巾、卫生纸生产线里的切断气缸包装机的插角、撑箱气缸飞剪设备里的剪刃驱动虽然是伺服或气动但逻辑一样陶瓷、砖机里的布料框动作控制只要你有“主轴角度在某个区间时气缸必须伸出/缩回”这类需求OUPUTCAM就是比一堆比较指令更干净、更专业的方案。2. 硬件选型与系统搭建1500T凸轮输出需要哪些东西2.1 1500T常见的CPU型号选择做凸轮输出首选带T的CPU目前市面上常见的1500T有1511T-1 PN、1515T-2 PN、1516T-3 PN这几个型号。如果是中小型设备1511T基本够用如果项目里还要带几个伺服轴、几组电子齿轮同步1515T/1516T更从容。特别提醒一点凸轮输出指令依赖运动控制中断所以CPU的固件版本和T-版本工艺包要匹配。我碰到过有人拿普通1500去跑OUPUTCAM结果指令根本找不到就是这个原因。T版本CPU和普通1500的外观区别不太大订货号末尾一般带“T”组态的时候软件里也会显示“Technology CPU”。2.2 主轴位置信号的来源OUPUTCAM需要一个位置输入作为“主轴位置”这个位置从哪来决定了整套系统的基础方案伺服电机自带的编码器反馈主轴由伺服驱动用V90、S210这类驱动器位置直接从驱动器的实际值读过来。这种方式最方便不需要额外装编码器。外部编码器接入有些老设备主轴是普通电机带变频器驱动的保留机械主轴想加电子凸轮就得在主轴后端加编码器。带T的CPU可以通过高速计数模块或者工艺模块读编码器信号。第三方驱动器的位置反馈比如汇川、台达之类支持总线控制的驱动器通过PROFINET把实际位置传给1500T。我的建议是如果设备是新设计的尽量用伺服主轴直接在工艺对象里组态一个轴位置不用你操心OUPUTCAM里直接读取轴的实际位置就行。如果是改造项目外接编码器也能做但要注意采样延迟后面我会讲怎么补偿。2.3 气缸执行部分的硬件接线凸轮输出的最终执行目标一般是气缸电磁阀。OUPUTCAM算出来的只是个BOOL量真正驱动阀体还需要数字量输出点。常见两类做法CPU或信号板上自带的DO点比如1511T自带的24V数字量输出直接接中间继电器再控制电磁阀。远程IO从站上的DO点设备比较分散时走ET200SP输出点放在气缸附近少拉线。这时候凸轮输出指令计算完通过PROFINET把结果写到从站输出字软件上多一行赋值而已。接线需要注意的反而不是PLC这边而是电磁阀。气缸动作频率高的话电磁阀选双电控还是单电控差距很大。单电控弹簧复位阀断电时气缸自动回位适合“伸出保持、断电缩回”的场合双电控阀有两个线圈掉电保持当前状态如果设备有急停后的安全位要求选型时要想清楚。2.4 凸轮输出和运动控制的关系既然叫“凸轮输出”很多人会误以为OUPUTCAM一定要配合伺服轴用。其实不完全是OUPUTCAM本质上只是一个“位置区间比较器”它的输入是一个位置值NormValue而位置值既可以是轴的实义位置也可以是你在PLC里累加出来的虚轴位置。我见过一个现场主轴是变频器加编码器工程师用高速计数模块读编码器把计数值转成角度后直接塞给OUPUTCAM照样跑得好好的。所以别被“运动控制CPU”这几个字吓住只要位置源稳定、采样周期一致OUPUTCAM完全可以当成一个高级功能块来用。3. OUPUTCAM指令详解与凸轮表设计3.1 指令的调用格式和接口参数OUPUTCAM这个指令在1500T的工艺指令库里面位置在“运动控制 - 凸轮 - 输出凸轮”目录下。不同版本的T-工艺包叫法可能略有差异有的叫OutputCam有的叫OUPUTCAM功能一样。这里给一个典型的SCL调用示例大家感受一下接口的样子CamControl_DB.Enable : TRUE; // 凸轮输出使能 CamControl_DB.CamID : 1; // 凸轮表编号1号凸轮 CamControl_DB.NormPosition : Axis_1.ActualPosition; // 主轴实际位置 OutputCam_Instance( Enable : CamControl_DB.Enable, CamID : CamControl_DB.CamID, NormPosition : CamControl_DB.NormPosition, CamData : CamTable_1, // 关联的凸轮表数据块 Output : CamControl_DB.Output // 输出布尔量 );几个关键参数的理解Enable功能块的使能靠这个可以在调试时快速关闭凸轮输出强制电磁阀断电。CamID要激活的凸轮表编号。CMC中的凸轮表可以提前建好几套运行时用CamID选择激活哪一套。NormPosition归一化位置就是主轴当前的角度值。单位可以是度也可以是脉冲数需要和凸轮表配置的单位一致。我个人习惯全用度因为看起来直观调试时脑子里好换算。CamData凸轮表数据块的引用。这是在工艺对象里组态好的凸轮表运行时不能在线改轮廓只能通过凸轮编辑指令或工艺对象组态去修改。Output计算结果一个BOOL量FALSE代表气缸缩回TRUE代表伸出。3.2 在TIA博途中创建凸轮表凸轮表不是随便画个方波就行它本质上是位置-输出值的一张映射表。在博途的工艺对象里新建一个“凸轮”对象进入凸轮编辑器后你可以看到一个横轴是主位置、纵轴是输出值的坐标系手动画出你想要的气缸动作区间。比如我们要实现一个简单的“90°到130°气缸伸出”的动作凸轮表可以这样定义区间起点°区间终点°输出值090FALSE90130TRUE130360FALSE看着是不是特别简单但实际生产里没这么乖气缸动作往往有提前量。你希望气缸在90°完全伸出到位但电磁阀得电到气缸真正伸出去需要几十毫秒如果主轴转速是每分钟100转一转只要0.6秒也就是1°大概1.67毫秒30毫秒的动作时间差意味着一个阀岛的响应滞后就有将近18°的相位差。这时候凸轮表就要把伸出起点往前提比如提拉到70°让气缸在90°时恰好到位。3.3 凸轮曲线加圆角和过渡区防止气缸飞起很多第一次用OUPUTCAM的工程师会犯一个错误凸轮表画成理想方波输出瞬间从0跳到1。电气上没问题但机械上就不对了。气缸电磁阀得电时阀芯瞬间打开气路压力突然冲击气缸活塞如果气缸运动速度又比较快就会产生哐当一下的冲击设备跑几个小时导轨就松了。所以凸轮表的输出沿一定要做过渡区。TIA博途的凸轮编辑器里可以直接对曲线做平滑过渡处理把上升沿和下降沿的拐角修成斜线或者圆弧。这个过渡区的作用是给电磁阀一个预励磁的过程让气缸的动作更柔和同时也减少对机械结构的冲击。原则上过渡区角度大小根据主轴转速来整定转速越高过渡区适当加大。我一般先设2°到3°现场听声音看振动如果动作不够干脆就减小冲击大就加大这个只能现场试。3.4 凸轮表的几种类型绝对凸轮、相对凸轮和从动凸轮OUPUTCAM配合的凸轮表在T-工艺对象里分好几种类型别选错了。绝对凸轮表输出只和主轴位置的绝对值有关比如上面那张90°到130°的表就是绝对型。相对凸轮表不以0°作为参考而是以某个刀具、执行机构的当前位置作为参考适合运动过程中动态追相位多用于飞剪。从动凸轮表配合凸轮同步功能使用从动轴跟随主轴运动时输出根据从动轴位置变化。这种情况一般不是直接控制气缸而是控制伺服轴配合气动元件复杂一些。做气缸控制绝大多数场景用绝对凸轮表就够了。只有在设备测试时需要对气缸动作点做整体偏移才需要动用凸轮偏移量功能。3.5 位置采样周期对输出精度的影响这里要提一个容易被忽略的细节OUPUTCAM的位置采样周期。因为凸轮输出是在循环中断OB里执行的位置的读取、比较、输出都在这个中断里做所以中断周期决定了凸轮输出的最小时间分辨率。举个例子主轴转速600rpm也就是每秒10转每转360°如果中断周期是1ms那么每毫秒主轴走过3.6°也就是说凸轮输出的最大定位误差是3.6°如果中断周期是10ms那误差就是36°这肯定没法用。所以用OUPUTCAM做高速凸轮控制循环中断周期一定要根据最高转速来反推。我的经验是最高转速下的角度分辨率最好控制在0.5°以内即中断周期毫秒 最高转速转/秒 * 0.5° / 360° * 1000简单算出来大约就是10转/秒时中断周期不能大于1.4ms。CPU的负载会因此增加但这是保证气缸动作精准的必要成本。4. 实战完整程序设计与气缸动作控制4.1 现场案例背景说一个我实际调过的设备剖面吧一台三工位贴管机用于日化产品吸管贴装。工艺流程是这样的转盘主轴连续旋转吸管经过切管机构切成段然后由吸管夹持气缸从切管工位搬到压管工位最后压在瓶身上。这台设备原来用的是机械凸轮控制气缸客户换品种频繁从30ml瓶换到100ml瓶整个凸轮组都要调整平均每次换型要4个小时。后来改成1500T加电子凸轮我负责把OUPUTCAM输出功能跑起来其中最关键的一只“切管压紧气缸”它的任务是转盘主轴在33°到57°之间时伸出压住切好的吸管防止切管刀运动时吸管位移主轴转到125°之前必须退回让出压管工位的空间。4.2 工艺对象和轴的组态步骤先讲组态步骤照着做一次后面理解程序就顺了。第一步在博途里创建一个带T的1500CPU项目组态好服务器驱动轴。如果主轴是V90伺服直接添加一个“位置轴”工艺对象选驱动类型为PROFINET对应V90里的报文。如果主轴是外部编码器则添加一个“外部编码器轴”工艺对象。第二步在工艺对象的“凸轮”选项卡里新建凸轮对象命名“PressingCam”选择绝对凸轮类型。第三步打开凸轮编辑器把横轴单位设置成“度”纵轴设置成“布尔量”然后通过添加关键点的方式绘制曲线在0°处输出FALSE在33°处输出TRUE在57°处输出FALSE在360°处输出FALSE第四步给这段凸轮曲线加过渡沿上升沿和下降沿各留1.5°让气缸动作更稳当避免阀芯和气缸活塞剧烈撞击。第五步编译下载。到这里凸轮表本身就已经生效了只是还没有在程序里调用OUPUTCAM。4.3 主程序和中断任务的分工调用OUPUTCAM的代码我建议放在循环中断OB里不要在普通的OB1里扫。原因前面提过OB1的循环时间不稳定凸轮输出的位置阈值判断如果突然多扫描了几个毫秒气缸的动作点就飘了。我一般建一个OB30循环中断周期设1ms或者2ms具体根据转速算好。把凸轮输出相关代码全放OB30里。主轴位置值呢如果是标准轴对象直接用“Axis_1.ActualPosition”这个工艺数据块的变量这个数据在运动控制时钟里是实时更新的在OB30里读它不会引入额外延迟。OB30里的程序大概长这样// 凸轮输出使能用一个DB里的开关量方便HMI上做手/自动切换 CamOut_Data.Enable : HMI_Commands.CamOutputOn; // 读取主轴实际位置 CamOut_Data.NormPosition : Axis_1.ActualPosition; // 调用凸轮输出指令 OutputCam_Instance( Enable : CamOut_Data.Enable, CamID : CamOut_Data.ActiveCamID, NormPosition : CamOut_Data.NormPosition, CamData : CamTable_Pressing, // 凸轮表 Output : CamOut_Data.Output ); // 输出映射到物理点驱动气缸电磁阀 Q0.0 : CamOut_Data.Output;这段代码里Q0.0对应切管压紧气缸电磁阀的输出点。因为OB30是周期性扫描所以只要主轴位置进到33°区间这个Q点会立刻置位主轴位置到57°就复位。这个过程完全由硬件中断保证和OB1里做什么事情无关气缸动作点非常稳定。4.4 气缸动作的相位补偿方法调试的时候发现气缸实际推出时间比OUPUTCAM输出得电时间晚了大约40毫秒。主轴转速43rpm换算下来一转是1.4秒40毫秒差不多等于10.3°。这就是整个气路的响应滞后。处理办法很简单把凸轮表的33°起点改成22.7°57°终点改成46.7°这样气缸真正伸出和退回时刚好和机械工艺要求吻合。你别觉得这样改曲线很笨这恰恰是电子凸轮的最大优势——机械凸轮想调10°相位得拆机软件里改两个数字重新下载就完事了。4.5 多气缸协调时的凸轮表管理一台设备不可能只有一个气缸。切管机的例子后面还有夹持气缸、吹气清洁气嘴动作都是按主轴的相位来触发的。我的做法是把每一个气缸对应一个独立的凸轮对象每个凸轮对象有自己独立的凸轮表但在程序里统一用一个ActiveCamID来管理。这样有两个好处第一换产品规格时不用改程序只需要给每个凸轮组写一套新的凸轮表数据下载后切换ActiveCamID就行。第二出问题时排查方便哪个气缸动作不对就打开对应的凸轮编辑器看曲线一目了然。4.6 凸轮表在线切换和总线输出如果要在线切换凸轮表不能直接改CamID就算了。因为凸轮表切换如果发生在当前凸轮表的动作区内输出状态可能会突变气缸会猛跳一下。规范的切换流程是这样的// 切换请求 IF HMI_Commands.ChangeCamRequest THEN CamOut_Data.NewCamID : HMI_Commands.TargetCamID; HMI_Commands.ChangeCamRequest : FALSE; END_IF; // 等主轴转过零位后再切换 IF Axis_1.ActualPosition 10.0 AND CamOut_Data.NewCamID 0 THEN CamOut_Data.ActiveCamID : CamOut_Data.NewCamID; CamOut_Data.NewCamID : 0; END_IF;这段代码的意思是收到切换请求后先记下目标凸轮表编号等主轴转到0°附近时再真正执行切换保证凸轮输出不会在动作区中间突然跳变。5. 常见问题与排查技巧实录5.1 凸轮输出指令找不到或报错最容易碰到的问题是OUPUTCAM的指令根本不在指令列表里。这个基本就是选型问题CPU不带T版本或者博途软件里没有安装对应的运动控制工艺包。检查流程很简单看模块型号末尾有没有T没有T换CPU或者用带T的控制器。去“程序块”右键“从库中调用指令”进入“工艺”目录看有没有“凸轮输出”这一项。没有检查软件里的“Technology”选件是否装上了。固件版本也要看太老的固件不支持凸轮输出指令升级CPU固件到V2.5以上同时注意博途版本要匹配。5.2 气缸动作点每次都在飘时好时坏如果凸轮输出状态是对的但气缸的实际动作点在设备运行中每次都不一样大概率不是OUPUTCAM的问题而是位置源在飘。外接编码器的情况下常见原因是编码器连轴器松动或者码盘脏了位置信号来回跳。如果是伺服主轴去看驱动器里实际位置有没有抖动可能有机械振动反馈进了编码器。这时候先把位置信号滤波做好然后在OUPUTCAM输入端加一个滞后比较器IF CamOut_Data.NormPosition CamOut_Data.LastPosition - 0.5 OR CamOut_Data.NormPosition CamOut_Data.LastPosition 0.5 THEN CamOut_Data.FilteredPosition : CamOut_Data.NormPosition; END_IF; CamOut_Data.LastPosition : CamOut_Data.NormPosition;这个0.5°的死区能过滤掉编码器抖动引起的输出颤振前提是正常运行时位置变化不会卡在死区里出不来。5.3 气缸在凸轮输出错误时乱动急停和复位怎么处理有一种现场特别怕就是设备急停后主轴停止了但凸轮输出状态保持在上电那一个位置。如果当时凸轮表正好输出TRUE气缸就会一直顶在那里操作工去处理故障时可能被夹伤。我的建议是急停回路直接串在电磁阀供电回路上用硬接线强制断气不依赖PLC程序。然后在程序里做安全逻辑当急停信号为TRUE或者驱动器反馈的“轴使能”丢失时强制清除凸轮输出的激活让所有气缸回位。IF Safety_Inputs.EStop OR NOT Axis_1.DriveReady THEN CamOut_Data.Enable : FALSE; ELSE CamOut_Data.Enable : HMI_Commands.AutoRun; END_IF;5.4 凸轮输出点执行慢电磁阀响应跟不上凸轮周期有些电磁阀本身响应时间可能到几十毫秒如果凸轮输出的动作区间小于电磁阀的响应时间气缸可能还没来得及完全打开凸轮区段就结束了活塞根本不动或者半开状态。这个时候有三个解决思路换高速电磁阀响应时间10ms以内成本稍高。加气动锁止回路让阀体得电后气路保持。用OUPUTCAM的相位偏移功能把整个凸轮区间往前平移给电磁阀留出动作时间。我一般先用第三种效果不好再考虑换阀。毕竟软件解决成本最低改个参数就行。5.5 凸轮输出在高速时表现不稳怎么排查高速工况下比如主轴转速超过300rpm外围IO的刷新速度就可能追不上凸轮输出了。这时候如果还是用远程IO从站里的DO点去驱动电磁阀PROFINET通讯周期本身就占掉好几个毫秒气缸动作就没法保证精确。这时候有两个改进方向把电磁阀直接接到CPU自带的高速DO点上凸轮输出信号不经远程IO中转。启用“等时同步模式”把IO刷新和运动控制时钟同步起来保证位置采样和输出执行在同一个时间基准上。6. 一点心里话和后续扩展关于1500T凸轮输出我最后想说的是OUPUTCAM说到底只是一个工具关键还是你对工艺的理解。我见过不少工程师上来就埋头写指令把凸轮表拖得到处是曲线但气缸实际动作跟不上最后还得回到机械上去找原因。气动系统的响应、阀岛的流量、气缸的负载率这些东西比指令本身更影响成败。调试的时候养成一个习惯先把主轴转速降到最低用示波器或者PLC的追踪功能记录凸轮输出的置复位点和凸轮表设定对比确认无误后再升速。升速过程中盯住动作点偏移量能涨多少记得很清楚就能倒推出气路的滞后到底有多稳定这个数据后续做相位补偿特别管用。这个项目完结之后我又在另一台飞剪设备上用了类似的思路不过那时候控制的不再是气缸而是直接把凸轮输出接到伺服驱动器的使能端用电子凸轮控制剪刃起停。原理和OUPUTCAM如出一辙只是CAM表的输出值变成了伺服轴的位置目标。如果你把这篇里的凸轮表设计吃透了往伺服插补方向迁移也会很快。