ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

S7-1200 PLC控制伺服电机实战:选型组态编程调试全链路解析

S7-1200 PLC控制伺服电机实战:选型组态编程调试全链路解析 手里同时压着几条产线改造的项目最近又帮几个朋友调了S7-1200带伺服电机的方案踩了不少坑也总结了不少经验。正好借这个机会把西门子S7-1200 PLC与伺服电机控制的实战内容好好梳理一遍。这篇文章不写那些说明书上已有的废话只讲我在实际项目里怎么选型、怎么组态、怎么写程序、怎么调参、怎么排查故障的完整链路。如果你正准备用S7-1200控制伺服或者已经在调试但被各种奇怪问题卡住这篇文章应该能给你省下大量弯路。1. 项目上S7-1200配伺服先想清楚四件决定成败的事1.1 工艺需求拆解速度和精度的倒挂关系很多人拿到项目需求就直接开始选硬件这是个误区。我第一次做S7-1200带伺服的项目时就吃过亏——客户只给了一句定位要准、速度要快结果设备跑起来发现定位精度够了但节拍跟不上或者速度提上去了但过冲严重。后来我养成了一个习惯在选型前先把工艺需求拆成三个关键指标定位精度、运行速度、加减速时间然后算清楚它们之间的倒挂关系。举个例子某个贴标机项目要求定位精度±0.1mm贴标速度60片/分钟。这意味着从检测到贴标动作完成只有1秒而贴标头要走完一个行程再回来。如果行程是200mm那平均速度就得200mm/s但考虑到有加减速过程实际峰值速度可能要到400-500mm/s。这时候如果电机选的转速不够或者电子齿轮比配得不合理就会出现在加速段还没走完就要减速整个运动曲线变成三角形精度和节拍全崩。所以我建议第一步永远是画运动曲线位置或速度-时间图标出加速时间、匀速时间、减速时间、定位稳定时间。这个图一画出来电机的峰值转速、扭矩需求、PLC的扫描周期要求就全出来了。S7-1200的运动控制指令中加减速时间直接影响MC_MoveAbsolute等指令的完成时间这个必须在组态前就确定不然后面调程序会非常痛苦。1.2 为什么选S7-1200而不是200 SMART或1500经常有人问我S7-1200、S7-200 SMART、S7-1500都能控制伺服到底怎么选我的判断标准很简单看轴数和通信需求。S7-200 SMART更适合纯粹的位置控制通过脉冲输出控制步进或伺服最多支持4轴脉冲输出实际用起来两轴以上就吃力。S7-1500功能强大适合几十个轴的复杂运动控制配合工艺对象和科技对象使用但成本高、组态复杂。S7-1200刚好卡在中间自带高速脉冲输出从固件4.0开始支持PLCopen运动控制指令后面新的固件还支持PROFINET总线伺服属于面包和黄油的选择。具体来说S7-1200带伺服有三种方式晶体管输出的PTO脉冲控制CPU本体高速脉冲输出控制伺服驱动器的脉冲/方向输入。适合1-2轴、精度要求适中、成本敏感的项目。通过PROFINET总线控制CPU通过PROFINET与V90 PN等总线型伺服通信走工艺对象的方式支持位置控制、速度控制、回零、加减速曲线配置等。适用范围更广能带更多轴具体限幅取决于CPU型号接线简化反馈数据更丰富。通过Modbus RTU控制S7-1200的CM1241 RS485通信模块或者CB1241通过Modbus RTU协议读写伺服驱动器内部寄存器实现速度、位置控制。适合老旧设备改造、驱动器自带Modbus控制字的情况。这三个方向我在后面会详细展开讲。这里想强调的一点是S7-1200的定位是中小型运动控制的性价比之选很多人拿它当S7-1500用拿它当200 SMART用其实都不对。搞清楚了项目真正需要什么再决定用哪种控制方式才是最核心的选型逻辑。1.3 伺服选型与惯量匹配被忽略的最重要一环我见过太多项目PLC程序写得漂亮参数整定也做了但设备一跑就出问题——电机发烫、定位抖动、高速时过冲、低频时共振。排查到最后十有八九是伺服电机本身选小了或者电机惯量和负载惯量不匹配。惯量匹配是伺服控制里最容易被忽视、但影响最大的一环。简单说无论负载轻重如果电机的转子惯量与折算到电机轴上的负载惯量比值不合理通常推荐负载惯量/电机惯量在3倍以内高端要求高的项目甚至会控制在1倍以内整个系统的动态响应就会变差要么低速爬行要么高速振荡。在实际项目中我一般会这样算负载是滚珠丝杠传动J_load m × (P / (2π))²其中m是移动部分质量kgP是丝杠导程m。如果有联轴器和丝杠本身的惯量要一并折算进去。负载是皮带传动J_load m × R²R是带轮半径m。负载是回转工作台J_load J_盘 工件。然后把这个转动惯量折算到电机轴上除以电机转子惯量伺服手册上都有看比值是否在合理区间。如果不匹配优先考虑加减速机而不是换更大的电机。减速机一方面增大了扭矩另一方面惯性比转回来伺服系统会稳定得多。我之前做一个旋转分度台的方案客户要求分度速度0.2秒/90°定位精度±30角秒。转台带夹具和工件的总惯量算下来很大直接选大电机导致成本超预算。后来加了5:1的行星减速机电机的实际负载惯量降到原来的1/25速度、精度都满足了成本还降了。这经验在当时真是血泪教训。1.4 控制方式脉冲、PROFINET还是通信如何快速判断选控制方式我有自己的判断流程首选考虑PROFINET总线伺服尤其是S7-1200固件版本支持的情况下。理由很简单接线少一根网线搞定通信、状态、报警所有信息、反馈数据全位置、速度、电流、报警码都能在PLC里直接读、支持高级运动控制功能电子齿轮、电子凸轮、多轴插补。缺点是要花时间学PLCopen指令和工艺对象配置而且项目前期组态工作量比脉冲方式大。如果项目只有1-2轴、精度要求不是特别极端、成本敏感用脉冲方式更合适。S7-1200的PTO输出频率上限和精度完全够用实际规格参考具体CPU型号通常PTO频率都在100kHz以上个别高功能型CPU更快。脉冲接线简单调试直观很多老工程师闭着眼都能调。缺点是我之前踩过的坑——脉冲方向接错、漏脉冲、干扰导致丢步排查起来非常费时间。Modbus RTU控制伺服适合改造类项目。比如旧的变频器换伺服或者驱动器没有脉冲接口、只有RS485接口。但Modbus通信有延迟响应时间不稳定做位置控制时Synchrone运动和加减速控制不细腻一般只建议用在速度控制、点到点移动不追求高动态响应的场合。S7-1200 PLC与伺服电机控制这块市面上的教材通常只讲单一方式实际上项目里往往是混合的。比如我在一个包装设备里就是PROFINET控制两个V90伺服做定位再用脉冲方式控制一个步进做送料各取所长。2. 组态阶段容易埋雷的细节一次说清别到现场再补课2.1 机械传动链参数怎么折算进PLC组态工艺对象时TIA Portal要求你输入一大堆机械参数驱动每转的电机转数、负载每转的位移、速度单位、位置单位。很多新手在这就直接懵了随便填几个数结果程序写完运动控制完全不对——轴走100mm实际走了300mm速度显示值和实际差一大截。其实这些参数无非是回答一个问题电机转一圈负载走了多少分两种情况丝杠传动如果电机直连丝杠联轴器连接电机转一圈负载就移动一个导程比如10mm的导程就是10mm/圈。如果电机经过减速机减速比i负载位移变成 导程/i。比如减速比5:1、丝杠导程10mm那电机转一圈负载走2mm。伺服电机的电子齿轮比这是另一个关键参数。电机转一圈通常对应伺服编码器的整圈脉冲数如2500线编码器×4倍频10000脉冲/圈但总线控制时工艺对象一般不需要你算电子齿轮比你在组态里直接填电机每转的负载位移然后在驱动里设置负载每转的脉冲数PLC的工艺对象会把两者结合自动算出位置换算关系。我见过最坑的一个案例客户在TIA Portal的驱动每转的电机转数里填了1但实际用的是减速机导致位置指令和实际位置差了5倍。后来排查了整整一天问题就出在这个参数上。因此我强烈建议在组态阶段写一个换算表把电机转数、减速比、丝杠导程、负载位移全部列出来确认无误后再往下走。2.2 单位制选择mm、rpm还是脉冲数组态时还有一个非常影响后面调试体验的选项位置和速度单位。我的习惯是上位机显示和定位指令一律用mm和mm/s不用脉冲数或者rpm。原因很简单后期程序可读性高工人调参数时不用心算脉冲数一条指令MC_MoveAbsolute(100.5)谁都能看懂是走到100.5mm的位置。速度单位同理我在面板上设置的速度值直接用mm/s现场操作人只需要输入200系统就会按200mm/s走。工程师过去调机省了速度值×电子齿轮比×……的换算效率高很多。这里要说明的是S7-1200的工艺对象支持位置、速度的单位自定义。组态时填好每个位置单位对应的负载位移比如1mm对应多少编码器脉冲PLC会自动换算。你不需要在程序里写任何换算公式。如果项目一开始就在程序里手动做换算后期改机械参数时会非常痛苦——因为换算逻辑散落在几十条指令里。2.3 PID参数与运动控制的前馈、反馈本质这个话题放在组态阶段讲是因为很多人等到调试轴的时候才去想PID实际上应该在组态时就要在心里有个数伺服驱动的内部电流环、速度环、位置环与PLC工艺对象的位置控制器、速度前馈之间是一个级联结构。所谓级联结构通俗讲就是外层位置环给出速度指令内层速度环给出力矩指令最内层电流环执行力矩逐层收紧。S7-1200工艺对象在PROFINET模式下默认是PLC侧做位置控制驱动器侧做速度和电流控制。也就是说位置环增益、速度前馈增益、加速前馈增益、动态跟随误差等参数在PLC工艺对象里是可以调的而速度环的P/I参数、电流环带宽一般在驱动器端调。实际调参的优先级一般是先调好驱动器端的速度环这决定了轴的刚性再调PLC侧的位置环增益和速度前馈。很多人一上来就狂加PLC位置增益轴开始啸叫还以为是电机坏了。其实往往是驱动器速度环参数没调好PLC再加前馈与增益整个级联就振荡了。因此组态阶段建议把位置环增益、速度前馈系数、加速前馈系数这三个工艺对象的参数先按经验值填好到现场再根据机械刚性和负载情况细调。经验值可以从0起步慢慢加也可以直接参考西门子文档中对应机械结构的推荐值起步。2.4 回零方式选错了设备半夜自己跑飞回零是运动控制里看着简单、实际最容易出问题的环节。S7-1200工艺对象支持的回零方式有好几种主动回零找硬件限位、找原点开关、找编码器Z脉冲、被动回零遇到硬限位后反向脱离、直接设置回零位置绝对编码器不需要回零等。我强烈建议长远来看优先选绝对编码器直接设置回零位置。这样可以忽略回零环节每次上电直接绝对定位省掉一个动作、省掉很多麻烦。很多设备故障是小概率性问题主动回零是机械冲突的一个高发源。但绝对编码器成本更高预算有限时退而求其次选主动回零编码器Z脉冲方式先低速找原点开关碰到后减速再找Z脉冲以Z脉冲为准定位。这样可以避开不同的开关接线和机械公差误差。回零方向也要在组态时设对。我遇到过一个很搞笑的案例——设备回零方向设反每次上电回零都往硬限位方向冲把机械挡块都撞弯了。调试的时候务必先手动点动确认方向再启用回零别把自己搭进去。3. 运动控制指令的落地写法从程序结构到参数传递3.1 MC_Power、MC_MoveAbsolute、MC_MoveVelocity的程序组织S7-1200的PLCopen运动控制指令核心就那几个MC_Power使能轴、MC_Reset复位、MC_Home回零、MC_MoveAbsolute绝对定位、MC_MoveRelative相对定位、MC_MoveVelocity速度模式、MC_Halt停止、MC_Stop等。程序里我习惯这样组织轴使能独立成段MC_Power的Enable端不要到处复位。任何模式下轴的使能要保持常开除非急停。一旦使能断开再重新使能很多轴会重新找原点这在产线上会引发不小的问题。运动指令用单实例不要为了省OB资源把多个轴的运动状态塞在同一个背景DB里复用因为后面每一个轴的指令参数位置、速度、完成标志都是独立监控的。S7-1200的指令背景DB是自动生成的多占点内存换可维护性完全值得。错误处理并行每个运动控制指令的Error信号和ErrorID不要只在调试时才看。程序里应当把指令的Error信号汇总到一个DB在HMI上弹出报警。比如BUS故障、回零超时、位置跟随误差超限最好能直接显示中文报警文本操作人员不用懂PLC也能快速报修。以一段典型的绝对定位为例伪代码逻辑DB_Test_To.MC_Power_Instance( Enable : HMI.AxisEnable, StopMode : 0, Busy DB_Test_To.Power_Busy, Error DB_Test_To.Power_Error, ErrorID DB_Test_To.Power_ErrorID ); DB_Test_To.MC_MoveAbsolute_Instance( Execute : HMI.JogToPos, Position : HMI.TargetPos, Velocity : HMI.MoveVel, Acceleration : 1000, Deceleration : 1000, Jerk : 0, Done DB_Test_To.MoveDone, CommandAborted ... Error ... ErrorID ... );注意**Jerk加加速度**这个参数。很多人忽略了它。在高速运动场景下Jerk设为0意味着加速度突变机械结构会承受冲击和振动噪音也大。数值设得太小运动时间拖长节拍可能受影响。实际经验值如果没有特殊要求Jerk先设成加速度的20-50倍跑起来看着不太冲就合适再根据静态画质和设备噪音细化。3.2 多轴联动和同步电子齿轮的应用思路S7-1200在固件版本较新的CPU中通过工艺对象支持简单的多轴联动和电子齿轮。虽然它不能像1500那样做完整的多轴插补CNC但在包装、印刷、飞剪这些场景电子齿轮同步轴已经能解决大量问题。电子齿轮的思路是从轴的位置跟随主轴的位置比例系数可设。也就是说主轴转1圈从轴可以通过齿轮比转0.5圈或2圈。这在飞剪、追剪、印刷定位里非常实用。S7-1200里实现电子齿轮一般不是直接用MC_GearIn这个指令在博图的新版里对不同固件版本的支持情况不同而是通过总线读取主轴的位置值然后换算成从轴的目标位置去执行。也可以用不同CPU之间数据交换。更聪明的办法是让驱动器自己完成电子齿轮功能——现在很多伺服驱动器例如V90、S210都内置电子齿轮命令PLC只要发指令触发。如果项目的核心就是飞剪、追剪而且轴数多、同步要求高我会直接建议客户用SIMOTION或S7-1500T而不是在S7-1200上硬憋。S7-1200做做简单的主从跟随是没问题的但高性能动态同步就不要勉强了。选型障碍提前和客户说清楚比做完了满足不了需求要好得多。3.3 速度模式与位置模式切换的逻辑坑有些应用需要在同一根轴上做位置控制和速度控制切换。比如送料轴先用速度模式连续送料到位置后切到位置模式精确定位。S7-1200的工艺对象一旦组态为位置轴通常默认是位置模式。但你可以在程序里使用MC_MoveVelocity把它切到速度模式——它会把位置给定改成速度给定但位置环仍然在后台运行只是指令变成速度环跟踪。实际使用中这个切换比较平滑但切换的瞬间如果速度给定跳变较大会有明显的冲击。我一般会在切换前加一个过渡斜坡或者在HMI上做软启动让速度给定从0慢慢拉起来。另一个常用的场景是手动/自动切换。手动时用MC_MoveVelocity或MC_Jog做寸动自动时用MC_MoveAbsolute做定位。切换时一定要做严格互锁防止手动状态下自动指令执行或者相反。我在程序里会把模式判断放在最前面只有当前模式对应的指令才有Execute脉冲。调试中见过因为手动按钮和自动启动按钮接在同一I/O点导致自动模式误触发设备瞬间冲出去把治具撞坏教训极其深刻。3.4 Modbus RTU控制伺服老设备改造的另一种解法前面说过Modbus RTU适合老设备升级。这里补充下细节。当伺服驱动器支持Modbus RTU控制时通常是通过通信控制字如16进制控制字设置伺服使能、运行模式、目标速度/位置值再通过读取状态字监控报警和当前位置。以某台支持Modbus的伺服驱动器为例常见寄存器有控制字: 0x0001使能、0x0002运行、0x0004复位报警等。目标速度寄存器写值单位如0.1rpm。目标位置寄存器写值单位如脉冲数。状态字寄存器读值判断是否使能、是否到位、是否报警。S7-1200的Modbus RTU主站编程一般用MB_COMM_LOAD和MB_MASTER指令或新版的MB_CLIENT、MB_SERVER在OB里轮询。注意轮询周期受波特率和响应时间影响我建议把读写放同一轮询周期尽量降低延迟。如果驱动器响应时间较长通信出错率会高需要做错误重试和超时判断。Modbus RTU做位置控制最大的限制是位置给定的实时性。因为通信是周期性轮询位置目标值和实际反馈始终有一个通信延迟如果项目要求连续运动如插补、轮廓控制Modbus RTU是做不到的。它最适合的场景是点对点定位、速度控制、设备改造不想换控制器。我在一个印刷机上就是用一个CM1241 RS422/485模块带了三台老式的PANASONIC伺服做速度同步虽然响应没有PROFINET快但生产要求不高、系统稳定客户用了几年都没出问题。4. 调试和排错实测总结的故障排查链路4.1 伺服电机抖动的排查顺序伺服抖动是现场最常见的故障原因可能是机械共振、参数不合适、编码器问题、负载异常等。我的排查顺序是这样的第一步看电机是否在空载下抖动。把电机与机械脱开前提是安全允许上电使能给一个很小的速度指令。如果空载抖动问题在电机、编码器或驱动器如果空载正常、负载下抖动问题在机械或参数。第二步检查驱动器的速度环增益和积分时间。增益过大、积分时间过小系统会振荡。先通通降一倍试试看是否明显改善。如果改善说明是参数问题慢慢往回调找到临界稳定点后留60-70%的余量。很多人在这一步就急着调PLC侧的位置环增益其实搞错了方向。第三步检查编码器反馈。编码器线松动、屏蔽层接地不良、编码器内部光栅盘脏都可能导致反馈跳动。看驱动器显示的电流波形或者位置反馈值如果反馈值在电机静止时还在跳多半是编码器或线路问题。第四步检查机械共振。如果电机停机后仍然有高频振动用手摸电机座和负载能感觉到大概率是机械共振。对策主要有加装减振垫、增加结构刚性、调整增益避开共振频率、使用驱动器上的陷波滤波器Notch Filter功能。V90驱动器的自动陷波功能对固定频率振动特别有效但前提是你得先找到振动频率。4.2 定位偏差的根因排查从脉冲到总线都要覆盖定位偏差指令位置和实际位置不一致的坑我踩得最多整理一个排查链路先确认回零是否正常。位置偏差往往不是因为运动过程中丢步而是因为零点本身就偏了。回零开关的重复精度、Z脉冲的关键在不在都会导致每次开机零点偏移。再查机械间隙。丝杠反向间隙、联轴器松动、皮带打滑这些都会导致双向定位偏差不一样。手动量一下正方向走到一个位置再反方向走到同一个指令位置实际位置差多少重复几次差距稳定就基本锁定是间隙。接着查电子齿轮比。如果是脉冲控制电子齿轮比是驱动器的参数往往是由拨码或软件设置的。拨码拨错位一个数位置偏差就是固定倍数。我一次在项目里客户自己拨码设电子齿轮比把分子分母方向搞反了导致脉冲数*10才能走一样的距离排查了很久才定位到。如果是PROFINET总线控制查工艺对象里的位置单位、负载位移设置有没有和机械传动链参数一致。这个是我前面反复强调的最常见的错误就是减速比填反。最后考虑脉冲丢失。如果用的是PTO脉冲方式驱动器和PLC的脉冲信号线没做屏蔽、跟动力线走同一个线槽干扰严重时会丢脉冲。这时定位偏差是偶发性的、没有固定规律。加固屏蔽、单独走线槽、降低脉冲频率都能改善实在不行建议换PROFINET总线控制从源头省了这块麻烦。4.3 PROFINET IO通信故障诊断从设备不可用到数据无效PROFINET总线伺服最常见的一个故障现象设备列表里能看到设备但控制指令报错或者通信突然中断。这里涉及几个概念我得说清楚设备名PROFINET设备名和IP地址是两类不同的东西。PROFINET通信靠设备名识别设备改IP地址不改变设备名设备名配置错误设备在拓扑里就是不可用。组态时应分配设备的设备名然后下载硬件配置到PLC设备上电后它会自动通过设备名找到PLC配置再重新分配IP。在TIA Portal里诊断报错时可以通过在线与诊断面板查看设备的通讯诊断信息。如果报设备不可用排查顺序是设备名是否一致、IP段是否一致、网线是否接触良好、设备和PLC是否在同一网段、是否有IP冲突。注意S7-1200自身和PROFINET设备的IP必须在同一个网段而且最好固定IP不要用DHCP。另一个常见问题从站掉站后复位轴需要重新使能、重新回零。如果程序里没有处理通信恢复逻辑设备掉线重连后工艺对象位置会与实际位置产生巨大偏差再执行定位会导致瞬间巨速移动非常危险。我习惯在程序里监控轴的通信故障和跟随误差超限信号一旦触发就执行MC_Stop并保持报警直到人工复位确认后才重新使能。4.4 常见报警代码与处理方法分享几个在S7-1200带伺服的项目中最高频的报警报警代码/现象常见原因处理办法轴跟随误差超限F31127或类似位置环增益过大、负载卡死、减速机损坏、速度给定跳变先降低位置环增益再点动测试检查机械卡滞检查加减速时间是否过短驱动器过载过流电机选型偏小、负载惯量过大、连续高负荷运行检查惯量比、负载曲线必要时更换大电机或加减速机通信超时/掉站网线松动、屏蔽不良、从站掉电、网络拓扑变化检查物理连接在PLC里添加看门狗时间的组态加通信错误重连逻辑编码器电池电压低绝对编码器断电时间过长、电池没电提前更换电池启动后进行绝对位置初始化确认Modbus通信超时波特率不匹配、从站地址错误、响应慢核对波特率/站号增加超时时间检查接线及终端电阻很多报警从字面看一样原因差距很大所以别只盯着报警码翻手册按照上面说的排查链路一步步走才最稳。5. 最后想说的控制方案里人的因素往往比技术更难搞西门子S7-1200 PLC与伺服电机的组合在中小型自动化设备里算是一套非常均衡的方案。它不像S7-1500那样强到杀鸡用牛刀也不像200 SMART那样在通信和运动控制能力上捉襟见肘。掌握好这套组合能应付大多数单机设备和简单产线的运动控制需求。但说实话项目做得越多我越觉得真正的分水岭不在指令用得多熟而在于几个软技能现场沟通设备是给操作工用的报警信息能不能让操作工一眼看懂直接决定设备半夜2点会不会打电话给你。HMI上显示原始错误码的绝对会被现场人员嫌弃。文档记录每个参数改了什么、为什么改、之前的值是多少全部记录下来。一次调好的设备不多每次改装回来调整参数却很少有人记得之前改过什么。安全敬畏伺服电机力矩大、响应快运动轴一旦失控就是大事故。急停回路、限位开关、软限位、程序互锁一个都不能省。如果你手头正有一个S7-1200带伺服的项目卡住了不妨按这篇文章的脉络重新捋一遍先确认机械参数和选型是否匹配再检查组态细节和程序结构最后按排查链路逐项测试。大多数问题都能被定位到具体环节剩下的往往只是耐心和时间的问题。调试伺服控制就是这样的过程——前期多想一步现场就少熬一夜。
返回列表