
简介西门子1200PLC随动程序资源包聚焦编码器反馈下伺服/步进电机的实时跟随控制适合工业自动化工程师、PLC编程人员及运动控制初学者参考。资源内含基于TIA Portal V14的完整项目工程涉及高速计数器、脉冲输出、PID调节及SCL/梯形图逻辑并附组态截图与转换日志便于对照理解程序结构和调试思路。压缩包共41个文件以png图片、xml配置、cfg/cfs项目文件为主包含程序数据与日志记录整体仅1.25MB轻量而关键要素齐全。目前已有1038人学习浏览可帮助读者快速掌握随动程序的设计方法并迁移至实际设备中。 做设备调试这几年我最常被问到的问题之一就是“PLC怎么做随动”。尤其在包装、印刷、锂电、线材这类连续运动的产线上西门子1200PLC随动程序几乎是绕不开的活——传送带一直往前走机械手或者切割机构必须跟着跑起来才能完成抓取、贴标、裁切这些动作。这类动作如果做得不好轻则废品率上升重则直接撞机。这篇文章我就把我在1200上做随动控制的一套完整思路、程序和调试经验摊开讲一讲。这套内容适合刚接触1200运动控制的工程师也适合做飞剪、追剪、同步传送、电子凸轮这类设备的老手因为很多坑不是看手册能看出来的你得真到现场被设备“咬”一口才长记性。我尽量按一个完整项目的顺序讲从需求分析、硬件选型、核心原理到博图里的具体组态和SCL编程再到现场最常见的故障排查照着这个思路走至少能让你少走几个月的弯路。1. 随动程序到底解决什么问题先把需求说透1.1 随动的本质是“让从轴跟着主轴走”很多人一听“随动程序”觉得很高深其实拆开看就一句话让从动轴实时跟随主动轴的位置和速度始终保持一个预设的同步关系。这里有两个关键点一是“实时”不能等主轴的信号过来了再慢慢反应必须提前算、提前动二是“同步关系”这个关系可能是固定比例、固定相位差也可能是随位置变化的凸轮曲线。我习惯用跑步来打比方。两个人并排跑一个人忽快忽慢另一个人要始终保持固定间距那他不能光靠眼睛看了再追必须预判前一个人的速度变化提前调整自己的步频。随动程序也是这个道理它要把“前一个人的速度变化”实时算出来再换算成“从轴该跑多快”的命令。1.2 典型应用场景几乎覆盖所有连续生产线飞剪/追剪管材、板材、线缆连续挤出或牵引飞剪机构在材料不停顿的情况下追上材料速度完成切断或冲孔切完再快速返回。这是最典型的随动场景对位置同步和速度同步的要求都很高。同步贴标/套印瓶子在传送带上连续运动贴标头或者印刷辊必须与瓶子的瞬时位置对齐贴完或印完再退回原点。电子凸轮用PLC程序替代机械凸轮从轴的位置是主轴位置的一个函数关系比如某个角度区间内从轴快进另一个区间内从轴停止。视觉纠偏康耐视之类的视觉相机检测出产品位置偏差后通过Profinet或者串口把偏差量发给PLCPLC换算成修正量让纠偏轴跟着主轴实时调整位置。这些场景在1200上都能做但提前把需求弄清楚特别重要。比如是位置随动还是速度随动、同步精度要求到多少毫米、加减速过程允许多大误差这些参数直接决定后面的硬件选型和程序架构。1.3 为什么用1200来做而不是1500或者独立运动控制器S7-1200的优势在于集成度高、成本友好中小型设备上用起来很顺手。它自带高速计数器HSC可以直接接增量编码器自带PTO/Pulse输出可以发脉冲给伺服驱动器FW4.0以上的固件还支持基本的运动控制工艺对象配合Profinet总线可以控制V90、S210这类伺服。对大多数单轴或两轴随动的产线设备来说1200完全够用。但也要说句实话1200毕竟属于中小型PLC如果你要做四轴以上、要求整周期小于1ms的精密电子凸轮或者多轴插补那就别硬扛了直接看1500或者独立运动控制器。选型这关过不好后面程序写得再漂亮也是白搭。2. 硬件选型与通讯方案动手前必须想明白的事2.1 主轴位置从哪来编码器还是伺服反馈主轴信号一般有两个来源。第一个是增量编码器接1200板载高速计数器。这种方案适合主轴本身是普通电机拖动、没有伺服反馈的场合比如传送带拖轮、挤出机牵引轮。编码器选型要注意线数比如500线、1000线、2500线接A/B相的话按4倍频计算实际分辨率就是线数乘以4。还要注意是HTL还是TTL信号HTL是24V电平抗干扰好适合现场环境TTL是5V差分适合短距离高速场合。1200的HSC输入到底支持哪种要看具体的CPU型号和输入点组态的时候要仔细确认。第二个来源是伺服驱动器的实际位置反馈。如果主轴本身也是一个伺服轴那就没必要在外面额外装编码器直接把伺服驱动器的实际位置通过Profinet或者脉冲口读回来就行。这种方式少了一个中间环节精度和稳定性会更好但前提是主轴伺服和PLC之间的通讯必须可靠。2.2 从轴执行机构伺服、变频还是步进从轴是整个随动系统的执行端选择直接决定跟随效果。伺服电机伺服驱动器最推荐响应快、过载能力强、转速范围宽。1200和伺服之间可以用三种方式连接分别是PTO脉冲方向、Profinet通讯、以及模拟量变频器的组合。脉冲方式简单直接但频率上限受PLC限制一般单路PTO在100~200kHzProfinet方式接线少、能回读伺服状态和实际位置但受IO更新时间影响模拟量变频器适合低速、精度要求不高的场合响应比较慢。步进电机如果负载小、速度低、精度要求又不高步进也能做随动但要注意高速丢步的问题最好加编码器做闭环。我把常见的几种从轴控制方式整理成一张表方便大家对照选型控制方式响应速度定位精度成本适用场景PTO脉冲伺服快高中中小型设备、单轴/双轴随动PROFINET通讯伺服较快高中高需要回读状态、多轴网络控制模拟量变频器慢低低大惯量、低速、精度要求低的场合脉冲步进中中低轻负载、低成本设备2.3 选型细节和总线周期的坑选CPU的时候至少要考虑一路HSC和一路PTO1214C起步基本够用带以太网和更多PN从站需求的选1215C。要注意固件版本早于FW4.0的1200运动控制功能会比较弱条件允许的话尽量用新固件有些指令和工艺对象只有新版本才有。还有一点容易被忽略Profinet的IO更新周期。1200和伺服通过Profinet通讯时默认的IO周期可能是4ms甚至8ms这个延迟对随动控制来说太长了。实际调试时我会把IO更新周期设到2ms左右如果伺服和PLC都支持甚至可以到1ms。总线周期太长的话主轴位置传过来的那一刻就已经是“旧数据”了程序再聪明也追不上现场表现就是跟随动作像在拉橡皮筋一顿一顿的。3. 核心原理电子齿轮、前馈与中断任务3.1 电子齿轮比是最基础的数学关系随动控制的核心公式非常简单从轴目标位置等于主轴位置乘以齿轮比再加上偏移量从轴目标速度等于主轴速度乘以齿轮比。齿轮比可以是正的也可以是负的负值代表从轴与主轴反向运行。我举个实际算例。假设主轴编码器是1000线接A/B相4倍频也就是4000个脉冲/圈传送带驱动轮周长200mm那么每个脉冲对应的主轴位移就是200除以4000等于0.05mm。再看从轴伺服电机2500线4倍频10000脉冲/圈滚珠丝杠导程10mm每个脉冲对应的从轴位移是0.001mm。如果工艺要求主轴走100mm、从轴走20mm那齿轮比就是20除以100等于0.2。注意这里用的是工程单位不是脉冲数换算关系一定要理清不然程序里的单位乱七八糟最终输出必然出错。3.2 光有反馈不够前馈才是随动的灵魂很多新手做随动上来就写一个PID把目标位置和实际位置的误差算出来再用误差输出速度。这种纯反馈方案有一个天然问题稳态时必须有误差才能维持输出因为负载阻力、摩擦这些扰动需要偏差来“抵着”所以从轴永远慢半拍。解决办法就是加前馈。前馈的思路是把主轴速度直接折算成从轴速度作为命令的主要部分PID只负责补偿那些前馈没覆盖到的扰动和模型误差。公式可以写成命令速度等于主轴速度乘以齿轮比再乘以前馈系数再加上Kp乘以位置误差。前馈系数一般调在1.0左右实际调试时会让它略大于1用来补偿系统摩擦和机械间隙。用一个生活化的比喻你开车跟车不能等前车刹车灯亮了才踩刹车得看着前车速度变化提前松油门、提前带刹车。随动里的前馈就是让你“预判”主轴的下一步动作。3.3 为什么必须在中断里做而不是放在主循环这是整个程序架构里最关键的一步。OB1主循环的扫描周期是不稳定的如果你的PLC程序除了随动还要处理触摸屏、报警、通讯、气缸逻辑那扫描周期可能一会儿2ms一会儿20ms。把随动计算放在这种时间不确定的地方主轴位置读取就会忽快忽慢跟随误差自然就大了。正确做法是单独开一个循环中断组织块比如OB30或者OB31把位置环计算放在里面固定周期执行。我常用2ms到8ms的周期具体看机械惯量和伺服响应能力。高速计数器的值在中断里读取、计算、输出速度命令一气呵成。主循环只管外部逻辑和状态切换不要碰位置环的实时计算。这种“控制任务分层”的思路才是从入门到进阶的分水岭。学会了它你以后写任何实时性要求高的程序都能扛得住。4. 博图实操从组态到随动功能块4.1 高速计数器的组态方法在博图左侧项目树里打开设备组态选中CPU在属性里找到高速计数器HSC。以1214C DC/DC/DC为例通道0对应输入点I0.0和I0.1可以组态为A/B相计数器也就是4倍频模式。工作模式选“计数”计数方向根据编码器接线设置地址默认是ID1000程序里直接读ID1000就能拿到当前计数值。有个容易被忽略的参数是输入滤波时间默认6.4微秒。如果现场有变频器、接触器这类干扰源编码器读数可能会跳变可以把滤波时间提高到20微秒甚至更大。但要注意滤波时间越大最高计数频率就越低这个是此消彼长的关系得根据实际速度来平衡。Z相脉冲如果编码器有一定要接进来。Z相每圈出一个脉冲可以用来做高精度回零或者定期清零消除累计误差。4.2 创建运动控制工艺对象如果从轴用的是PTO脉冲方式在项目树里右键“工艺对象”→“新增对象”→“运动控制”→“轴”创建一个轴对象。组态时要设置驱动类型为“脉冲方向”电机每转脉冲数按伺服驱动器参数填负载每转行程按机械传动比填。单位可以选mm、度或者脉冲建议直接用工程单位后面调试看监控数据会更直观。轴对象创建好后先不要直接跑随动。我习惯用调试面板里的点动、绝对定位、相对定位功能先把从轴的基本动作验证一遍确认方向对不对、速度上下限是否合理、急停是否生效。轴的基本动作都不稳的话随动逻辑想都不用想。4.3 随动功能块的SCL实现下面给出一段可以跑通的核心骨架用SCL写的。它实现了一个带前馈和位置反馈修正的速度随动控制适合直接抄进自己的FB里再改。FUNCTION_BLOCK FB_Follow VAR_INPUT bEnable : BOOL; // 使能 iMasterPos : DINT; // 主轴计数值HSC读到的值 rGearRatio : REAL; // 电子齿轮比 rOffset : REAL; // 位置偏移量 rKP : REAL; // 位置误差比例系数 rFeedForward : REAL; // 前馈系数通常略大于1 rDeadband : REAL; // 死区单位与从轴一致 END_VAR VAR_OUTPUT rSpeedCmd : REAL; // 从轴速度命令 rFollowError : REAL; // 当前跟随误差 END_VAR VAR iLastMasterPos : DINT; // 上次采样的主轴位置 rMasterSpeed : REAL; // 滤波后的主轴速度 rPosRef : REAL; // 目标位置工程单位 rSlavePos : REAL; // 从轴实际位置由伺服反馈换算 END_VAR IF #bEnable THEN // 1. 用相邻两次中断的差值计算主轴速度并做一阶滤波 #rMasterSpeed : 0.9 * #rMasterSpeed 0.1 * REAL((#iMasterPos - #iLastMasterPos)); #iLastMasterPos : #iMasterPos; // 2. 目标位置 主轴位置 × 齿轮比 偏移 #rPosRef : REAL(#iMasterPos) * #rGearRatio #rOffset; // 3. 跟随误差 #rFollowError : #rPosRef - #rSlavePos; IF ABS(#rFollowError) #rDeadband THEN #rFollowError : 0.0; END_IF; // 4. 速度命令 前馈 反馈修正 #rSpeedCmd : #rMasterSpeed * #rGearRatio * #rFeedForward #rKP * #rFollowError; ELSE #rSpeedCmd : 0.0; #iLastMasterPos : #iMasterPos; END_IF;这里面的从轴实际位置rSlavePos实际项目里一般从伺服驱动器的反馈报文里读到换算成工程单位后赋值进来。如果是脉冲方式也可以在从轴电机上加编码器反馈给PLC用第二路HSC来读。代码里的速度计算用的是相邻两次中断的主轴位移差值因为是周期固定的转速就成了比例值后面再乘一个换算系数就好。一阶滤波系数0.9和0.1可以根据实际速度波动来调速度信号太毛糙就加大0.9的比例。4.4 参数整定的步骤把功能块下载进去之后不要急着设一个很大的Kp就完事。我调参的顺序是这样的先给主轴一个固定的速度比如200mm/s观察跟随误差的稳态值。这时候主要靠前馈先把前馈系数从平时的值开始微调让稳态误差尽量接近0。前馈偏小从轴会一直落后前馈偏大从轴会冲到前面去。然后才开始加Kp一点点增大观察动态误差的变化。当从轴出现轻微振荡的时候把Kp退回80%左右留出一点裕量。如果机械负载有周期性波动可以考虑加一个很弱的积分项但积分太强会导致振荡一般能不加就不加。全部调完以后用博图的Trace功能同时抓主轴位置、从轴位置和目标位置三条曲线一眼就能看出是纯滞后、超调还是振荡。我实测过一个项目主轴传送带速度200mm/sKp取0.5前馈系数取1.05跟随误差稳定在0.3mm以内主轴急加速到500mm/s时误差会短暂拉到1mm左右这时候就需要增加加速度前馈或者加一点积分来压住动态误差。5. 现场常见问题与调试实录5.1 跟随滞后像在拉橡皮筋这个现象我碰到太多次了。设备一跑起来从轴动作肉眼可见地“慢半拍”要么跟不上要么一顿一顿的。排查的时候先看程序结构HSC的值是不是在OB1主循环里被读的如果是那大概率就是扫描周期不稳定导致的。解决办法就是把读取HSC和随动计算全部搬进循环中断OB31把中断周期设置成2ms或者4msIO访问和中断对齐。再检查一下Profinet的IO更新周期如果伺服是走总线通讯的IO周期和中断周期太接近会产生叠加延迟可以试着把IO周期缩短到和中断周期一样或者调整中断周期避开总线刷新时刻。5.2 编码器读数跳变设备不动也在跳主轴编码器信号受到干扰是最隐蔽的故障之一。现象是触摸屏上监控的主轴位置在设备静止时也会上下跳跳几十个脉冲甚至更多。先看编码器信号线是不是双绞屏蔽线屏蔽层有没有单端接地再看编码器供电和PLC是不是共用一个开关电源如果共用变频器启停瞬间容易把干扰串进来最好给编码器单独供电。还可以检查HSC输入滤波时间。把滤波时间从6.4微秒调到20微秒很多毛刺信号直接就被滤掉了。但要注意滤波时间提高了最高计数频率会降低如果主轴速度很快编码器频率本身就高调滤波时间就要谨慎权衡。5.3 碰到Modbus轮询和Profinet通讯挤占时间有一次设备上既要做随动又要和几台仪表做Modbus轮询。我把MB_MASTER指令放在主循环里结果发现OB1扫描周期被拉到了几十毫秒随动控制直接废了。问题在于Modbus轮询是串行通讯一次读写几百个字节要等从站响应几十毫秒就没了。解决办法是把Modbus轮询从主循环里拆出去放到一个慢速循环中断里比如500ms周期执行一次或者让它按条件触发不是每一扫都去轮询。慢速任务和快速任务各走各的中断互不干扰。如果有视觉相机通过Profinet传数据也要注意数据一致性读照片结果不要在主循环里反复读而是在中断里一次性读取。5.4 回零和初始相位没对齐很多随动系统调试阶段挺正常一断电重启就出问题十有八九是原点丢了。上电后从轴必须回一次机械原点同时主轴编码器的零点也要有一个明确的参考关系。做法可以是上电后从轴先回原点然后把当前主轴编码器值记录下来作为偏置量或者把编码器的Z相脉冲也利用起来主轴每转到零位就清零一次。如果编码器没有Z相可以在材料经过的位置装一个接近开关做一次软回零每次经过时把HSC清零。这样至少能把累计误差和断电丢零点的问题规避掉。最后说点个人体会。随动程序听起来挺高深实际拆解下来就是“读主轴、算偏差、控从轴”三个动作难的是各种工程细节——中断周期选多少、前馈怎么调、编码器干扰怎么滤。我在现场调试时最有效的办法就是用博图的Trace功能同时抓主轴位置、从轴位置和目标位置三条线一眼就能看出是纯滞后还是超调。新手建议先在仿真环境把虚拟主轴和从轴跑通逻辑再上真机能省不少现场时间。这篇文章里的FB骨架你可以直接抄走但如果要投到产线上一定记得加限幅、加速度前馈和急停逻辑——稳定永远比花哨重要。本文还有配套的精品资源点击获取