
去年接了一个传感器装配工装的项目转盘旁要加一台步进电机驱动的推料机构正转把物料推到检测位检测完再反转退回来转速要在触摸屏上能调。用西门子S7-1200做PLC控制步进电机听起来无非是梯形图加脉冲输出但真从I/O分配到博途组态到现场跑通中间还是有几个容易被新手低估的坎。这篇文章就按我当时推进项目的顺序把硬件选型、接线、运动轴组态、梯形图编写和调试排错全过一遍给准备用S7-1200带步进电机的朋友一个可以直接抄的作业。1. 硬件选型晶体管输出的CPU是绕不开的门槛1.1 为什么S7-1200比200 SMART更适合做步进控制很多人问我200 SMART不是也能发脉冲吗为什么选S7-1200确实200 SMART的PTO/PWM功能也不差但耐不住S7-1200在博途里的运动控制工艺对象做得完整调试和监控体验好太多了。你可以直接在轴对象里组态单位、加减速、限位、回原点梯形图只需要调用几个运动控制指令块不用自己去算PTO包络、管理脉冲数这对做非标设备来说非常省心。选具体型号时有一点必须说在前面如果要输出高速脉冲必须选DC/DC/DC的晶体管输出型CPU。继电器输出型的S7-1200输出响应时间在毫秒级根本发不出步进驱动器需要的几十kHz脉冲即使你勉强把梯形图写出来电机也是抖着走的所以别在选型上省这个钱。我当时用的是CPU 1214C DC/DC/DC6个高速输出通道Q0.0/Q0.1作为脉冲和方向输出足够用了。1.2 步进电机、驱动器和电源怎么配套步进电机我选的是57系列的57HS22搭配导程5mm的丝杠模组。57步进在中小型装配机构里属于性价比很高的选择扭矩够用体积也不算夸张。如果你做的是很轻的负载42步进电机也完全够热词里常有人问42步进电机怎么驱动其实控制逻辑完全一样区别主要在电流和扭矩上。驱动器用的是TB6600和DM542都试过个人觉得DM542的电流设置和抗干扰表现更好一点但TB6600便宜量大调试也方便。关键要把驱动器的工作模式设置为“脉冲/方向”有的驱动器默认是“双脉冲”模式接正反转脉冲的时候接线方式完全不同上电前一定要看说明书。电源方面我是PLC和驱动器分开供电的PLC用一个24V/2A开关电源步进驱动器单独用了一个24V/4A开关电源。分开供电不是浪费是减少干扰——步进电机启停瞬间电流波动很大如果和PLC共用电源很容易导致CPU偶发停机或模拟量跳变这个坑我在早期项目里踩过后来就再也没合用过。1.3 I/O分配表动手写程序前先把这个表填好I/O分配是整个项目的地基不能边写程序边拍脑袋。我当时的分配表是这样定的信号名称地址类型说明正转启动按钮I0.0DI常开按下启动正转反转启动按钮I0.1DI常开按下启动反转停止按钮I0.2DI常开程序内取反处理急停开关I0.3DI常闭断开即急停正转限位I0.4DI正方向限位常闭反转限位I0.5DI反方向限位常闭原点接近开关I0.6DI回原点用常开轴0脉冲输出Q0.0DO 晶体管发步进脉冲接驱动器PUL轴0方向输出Q0.1DO 晶体管接驱动器DIR驱动使能Q0.2DO接驱动器ENA低有效或按驱动器定义运行指示灯Q0.3DO正转/反转启动时亮这里有一个很关键的细节Q0.0是高速脉冲输出Q0.1是方向信号。很多教程会让你再单独用一个输出做方向但博途运动轴对象组态时会把脉冲和方向绑定到一个轴方向信号其实是被系统自动管理的不需要你在梯形图里手动置位或复位。还有建议把急停按钮接到常闭触点而不是常开。万一急停线路断线了PLC能第一时间判断出故障如果你用常开线断了系统反而不知道这是安全逻辑上的基本要求。I0.3在程序里用常开触点读取导线正常连接且急停未按下时它一直是1一旦急停按下或线路断开就变成0。2. 接线与驱动器设置脉冲、方向、使能的接法2.1 共阳还是共阴S7-1200的输出特性和驱动器输入端子匹配这是很多新手最容易搞混的地方。S7-1200晶体管输出是PNP高电平有效输出点导通时输出电压接近24V。而TB6600、DM542这类步进驱动器的脉冲输入端通常是一对光耦以TB6600为例端子为PUL和PUL-内部是一个发光二极管加限流电阻电流从PUL流进、从PUL-流出光耦才导通。所以正确接法是驱动器的PUL接PLC输出点如Q0.0驱动器的PUL-接PLC公共端电源0V驱动器的DIR接Q0.1DIR-接0V使能ENA可以悬空或者根据驱动器手册单独控制PLC输出高电平时电流从Q0.0流入PUL再从PUL-流回0V光耦导通。这个接法对于S7-1200来说最自然。千万不要用“PUL接24VPLC输出接PUL-”的低边接法那是针对继电器输出或者漏型输出PLC用的强行接到S7-1200晶体管输出上输出点可能过流或者根本不工作。有人会问PLC输出高电平时不是24V吗步进驱动器脉冲输入一般只能承受5V或24V其实大多数国产驱动器输入光耦已经内置了适配24V的限流电阻所以直接用24V高电平驱动没问题。但如果你用的驱动器说明书写的是5V信号就需要在PLC输出和驱动器之间加电阻限流或者用中间继电器转换别硬怼。2.2 细分和电流拨码直接影响运行精度和发热驱动器上最需要认真设置的拨码就是细分和电流。我的57电机额定电流是2.8A驱动器电流拨码按2.0A整定运行久了电机温升还在可接受范围。电流不是越大越好大了电机发热严重小马拉大车时又会失步一般按电机额定电流的70%~90%设置比较稳。细分我设置成1600步/圈。为什么是1600因为驱动器常见的细分档位有800、1600、3200、64001600在精度和速度之间比较平衡。细分越高每一步对应的角度越小电机运行越平滑但同样的脉冲频率下电机转速越慢。比如我后面要算脉冲当量丝杠导程5mm驱动器细分1600步/圈那么每个脉冲对应的直线位移是5mm÷16000.003125mm也就是3.125微米。这个精度对装配工装来说够了如果用6400细分精度是有了但同样的PTO频率下最快速度只有1600细分时的一半得不偿失。2.3 电源回路和屏蔽线稳定运行不能只靠运气步进驱动器的电源线尽量直接接到开关电源的两个端子不要经过中间长距离转接。我用1.5mm²的软线长度控制在0.5米以内。开关电源上也建议并联一个25V/470μF的电解电容用来吸收电机频繁启停时产生的反向电动势。脉冲和方向信号线必须用双绞屏蔽线最好一路信号一根屏蔽线屏蔽层单端接到驱动器侧的电源0V或接地排。我把PLC输出线和步进电机动力线分槽布置横向距离至少隔开10厘米。现场电磁干扰的问题很玄学但只要接线规范至少能把绝大多数干扰挡在门外。3. 博途运动轴组态把Q0.0变成“Axis_1”3.1 添加工艺对象“定位轴”打开TIA Portal在项目树左侧“工艺对象”下点击“添加新对象”选“定位轴”名称改成Axis_1。组态时选择“PTO脉冲A和脉冲B”——注意如果你的驱动器是脉冲/方向模式这里的“脉冲A和脉冲B”在下一步会有更多选择实际我们只需要一个脉冲输出加一个方向输出如果博途版本里有“脉冲/方向”选项直接选它。然后选择集成的输出脉冲输出选Q0.0方向输出选Q0.1。S7-1200的运动轴对象会把这两个点绑定起来以后你在梯形图里调用MC_MoveVelocity这类指令系统会自动根据速度的正负去切换Q0.1的电平不需要你额外写方向控制梯形图这是S7-1200运动控制最舒服的地方。3.2 机械参数和单位换算把“脉冲数”翻译成“毫米”在轴组态里必须告诉PLC你的机械结构是什么。电机每转脉冲数填1600减速比填1如果电机和丝杠直连负载位移填5mm单位选mm。这些参数填好后你在程序里设定的速度单位就成了mm/s而不是每秒多少个脉冲。比如我后面触摸屏上写50就是50mm/s这就直观多了。加速度和减速度的初始值不要给得太激进。很多第一次用运动轴的人习惯性填个5000mm/s²然后电机一启动就啸叫甚至失步。我当时先用500mm/s²试跑觉得响应太慢再一步步往上加最终稳定在800mm/s²。具体数值和负载惯量强相关别迷信推荐值。3.3 限位、急停和回原点的组态在轴对象的“硬限位”选项卡里把所有限位信号关联进来。正限位接I0.4负限位接I0.5动作模式选“立即停止”。注意这些限位信号必须是常闭触点否则限位开关断线时系统不会报警。急停我放在MC_Power指令的使能条件里没有单独在轴组态里配。程序里MC_Power的Enable输入接“急停未按下且无报警”这样急停一断轴使能立即解除驱动器收不到脉冲电机自然停住。比在轴上组态急停输入更直接也好排查。回原点我后面加了MC_Home这个在第五章说。3.4 博途“资源使用情况”怎么查调试前可以在博途里先看一眼PLC的资源余量。操作方式是在项目树里右键CPU选择“属性”在“资源”选项卡里能看到CPU内存占用率、装载内存占用率、工作内存占用率还有位存储器、定时器等资源使用情况。如果工艺对象多了这里也能看到运动控制资源占用。在线状态下还可以打开“在线和诊断”-“存储器”页面看运行中的实际负载。为什么我要提这个因为S7-1200虽然是中型PLC但工艺对象和运动控制指令比较占资源。如果你同时开了好几个轴对象又加了一堆DB块编译时会提示“无法创建运动控制实例”或者“资源不足”这时候就得回头精简程序或者换更大内存的CPU。早发现比上线后发现好处理多了。4. 梯形图实战正反转、顺起逆停和调速4.1 程序变量规划先规划好要用的变量别在写梯形图时临时造地址。我这里建了一个全局DB“HMI_Data”存放速度和状态信息变量名类型初始值说明Speed_SetReal50.0触摸屏设定速度单位mm/sRun_PosBoolFALSE正转运行标志Run_NegBoolFALSE反转运行标志Axis_ErrorBoolFALSE轴故障标志MC_ActiveBoolFALSE轴运动中标志梯形图采用“控制标志位调用运动控制指令”的结构这样做的好处是运动控制指令不会在同一个扫描周期里被反复启停逻辑清爽。4.2 网络1MC_Power使能与急停逻辑MC_Power是运动轴的电源使能指令相当于给轴“送电”。我这样写网络1轴使能 I0.3急停常闭触点 M1.0无报警 ----| |-----------------------| |---------[ MC_Power ] Enable: %DB_Axis_1_MC_Power, Enable StopMode: 2控制逻辑是急停常闭触点I0.3为1且无报警时Enable为TRUE。StopMode设成2表示急停时按组态的急停减速停止而不是立刻抱死如果设备有安全需求要立即停可以设成1但机械冲击会大一些。4.3 网络2和3正转启动、反转启动与互锁正转启动按钮I0.0用上升沿P触发置位Run_Pos复位Run_Neg。反转启动按钮I0.1同理置位Run_Neg复位Run_Pos。这一步就是互锁保证两个方向不会同时运行。然后调用MC_MoveVelocity网络2正转启动 I0.0(上升沿) M0.0 Run_Pos ----|P|-----------------( S ) Run_Pos M0.1 Run_Neg ( R ) Run_Neg 网络3反转启动 I0.1(上升沿) M0.1 Run_Neg ----|P|-----------------( S ) Run_Neg M0.0 Run_Pos ( R ) Run_Pos运动控制指令这样接网络4连续速度运动 M0.0 Run_Pos MC_MoveVelocity ----| |-------------------------------| Execute: Motor_on | M0.1 Run_Neg | Velocity: 速度 | ----| |-------------------------------|| |其实在博途里梯形图直接调用MC_MoveVelocity时Execute用边沿触发更好但我们的标志位M0.0/M0.1在整个运行期间一直为TRUE所以MC_MoveVelocity的Execute端会一直有信号这样也舒服——轴会持续按给定速度运行直到收到停止或新的速度指令。速度值怎么接我直接从DB“HMI_Data”.Speed_Set取正转时把Speed_Set传给Velocity反转时把Speed_Set取负后传给Velocity。如果你不想做正负速度切换也可以把方向信号交给轴对象自动处理MC_MoveVelocity的Velocity只填正值另用MC_MoveDirection或轴的方向参数控制。但我个人习惯用速度的正负来控制方向这样程序最直观也可以在触摸屏上自由设定顺转逆转速度。4.4 停止、限位和“顺起逆停”逻辑停止按钮I0.2为常开触点用常闭触点串联在运行标志位上。限位信号I0.4和I0.5也要参与到停止里正转限位动作时把Run_Pos复位并调用MC_Halt。MC_Halt的梯形图逻辑网络5停止/限位停机 I0.2(停止) M0.0 Run_Pos M0.1 Run_Neg MC_Halt ---| |--------|/|-----------|/|------------------|Execute|停止后把方向标志复位。限位动作时也可以触发一个报警位让触摸屏显示“到达限位”。热词里有个“西门子s7-1200顺起逆停”其实就是一种特殊的控制要求正转启动按钮启动顺时针运行反转启动按钮不光启动逆时针还承担“停止反转”的任务。我做过类似的收放卷机构梯形图逻辑和普通正反转有一点区别按正转按钮正转运行标志置位直到停止。按反转按钮如果当时正在正转先MC_Halt停止正转然后延时200ms再置位反转运行标志。再次按正转按钮先停止反转再延时再正转。这个“先停再反”的延时非常关键防止电机因为方向切换太快而失步。实现方式是在两个运行标志之间加TON延时同时把每次方向切换指令的边沿只执行一次。很多设备要“点到即停”就不要加延时要根据机械负载来取舍。4.5 调速从触摸屏到实际速度调速我做了两个入口一个是在触摸屏上直接填Speed_Set另一个是预留了模拟量调速。模拟量调速的思路是0~10V模拟量输入模块采集电位器电压FC把整数0~27648转换成0~100mm/s的Real速度传给Speed_Set。梯形图核心是把模拟量浮点化网络6模拟量调速 %IW64(模拟量) ----[MOVE]---- %MW10(整数) %MW10 ----[DI_REAL]---- %MD20(实数) %MD20 ----[MUL]---- 100.0/27648.0 ---- %MD24(速度)然后在MC_MoveVelocity的Velocity端不用Speed_Set直接用%MD24同时加一个上下限限幅比如最低5mm/s最高120mm/s。限幅用TIA的LIMIT指令最方便否则万一触摸屏上误填一个500电机会像疯了一样冲。5. 调试实操监控、波形和资源占用5.1 上电检查顺序第一次上电千万别直接把电机连上去就猛干。我的顺序是断开电机电源PLC上电用万用表量Q0.0和Q0.1对M的电压至少确认输出通道没烧。用博途在线监控把轴手动点动速度设到10mm/s确认轴对象能输出脉冲。示波器探Q0.0看有没有频率稳定的方波没有示波器就把万用表打到频率档一般能看到几十Hz到几百Hz的读数。接上驱动器电源但先不接电机手动方向输出听驱动器有没有故障报警声。接电机速度从5mm/s开始点动跑10mm确认方向正确再往上加。我见过太多人跳过前两步接完全套以后电机不转结果排查了一整天才发现是PLC输出点没初始化或者方向信号没接对。分步调试虽然慢但定位问题快多了。5.2 博途轴诊断面板怎么看在线模式下打开工艺对象Axis_1在“诊断”页能看到轴状态、当前位置、运行速度、跟随误差等。如果轴有报警诊断列表里会直接显示错误代码比如“50000”是轴激活冲突“35069”是回原点超时。把错误代码拿去查帮助手册比蒙着猜快得多。还可以点“手动测试”直接让轴以设定速度点动这个功能在接线后试方向时特别有用不需要写任何程序。我调试时先用手动测试确认机械方向再回到梯形图里验证程序逻辑不然很难判断是程序写错还是接线接错。5.3 限位和原点开关的测试限位逻辑一定要在低速下测把速度设到10mm/s手动JOG向限位方向移动触发限位后看轴是否立即停止再看报警是否出现。我遇到过一次正转限位I0.4接线接触不良程序里虽然是常闭逻辑但线没接好导致信号一直为0轴一使能就报“硬限位已达到”根本跑不了。后来把限位开关线重新压了一遍端子才解决。回原点我用MC_HomeMode设成3主动回原点限位原点开关。调试时注意原点开关最好用常开触点安装在丝杠中间位置而不是末端避免和限位开关干涉。原点回零速度先慢点比如30mm/s碰到原点开关后减速到5mm/s找Z相或原点沿最后停在Offset位置。5.4 现场踩过的坑失步、发热、反向间隙调试过程中最容易遇到的是失步。表现是速度一快电机就响或者发出“咔啦咔啦”声音位置越跑越偏。我当时的处理顺序是先降低最高速度从120mm/s降到80mm/s观察是否改善再提高加减速度时间把800mm/s²降到500mm/s²最后检查驱动器电流发现之前设的2.0A偏小提高到2.4A后失步明显减少。电机发热的问题也常见。我有一台57步进连续跑半小时后壳体烫手测温枪一打70℃。后来把驱动器电流从2.8A降到2.2A发热降到50℃左右扭矩也没有明显下降。另外加装了一块小散热片效果更好。反向间隙是丝杠的固有属性尤其用久了以后。如果你要做往返定位正转和反转的绝对位置会有零点几毫米的偏差。简单做法是程序里做反向补偿反转启动时先额外走一段固定距离再按正常速度走这个补偿值要实测出来。螺纹丝杠硬度不够的话换滚珠丝杠是最彻底的方案。6. 升级方向开环到闭环、加原点回归、多轴联动6.1 为什么步进要闭环普通步进系统是开环控制PLC发多少个脉冲默认电机就走多少步但电机不会汇报它到底走没走到位。如果负载突变或加速过猛丢步了系统完全不知道。所以对定位要求比较高的场合可以考虑闭环步进比如热词里提到的雷赛DM3E。闭环步进电机尾部带编码器驱动器内部实时检测位置偏差并补偿PLC这边仍然是通过脉冲/方向控制接线方式几乎不变只是驱动器多了一个报警输出信号可以接到PLC输入。但是闭环步进本质上还是步进电机高速性能不如伺服别想着换了个闭环步进就能跑10000rpm。如果负载惯量很大或者要高速高动态响应老老实实上伺服才是正解。6.2 MC_Home回原点每个定位程序的标配如果你的设备每次上电都要从绝对位置开始运行那回原点就是必须的。梯形图里调用MC_HomeMode选3Position填0执行一次后轴就有了参考坐标。MC_Home Execute: I0.6(原点触发边沿) Position: 0.0 Mode: 3调试时我把原点开关装在丝杠正中间模式里的回零方向选“负方向”这样轴会先往负方向走找限位再反向找原点开关的上升沿最后停车。这种方式比直接碰限位更精准。6.3 S7-1200能做多轴联动和圆弧插补吗这是很多从三菱PLC转过来的朋友最常问的问题。S7-1200的运动轴对象可以做点到点定位、速度控制、回原点也支持简单的两轴线性插补用“运动学”功能但如果你想做圆弧插补或者复杂轨迹S7-1200原生工艺对象是不支持的。热词里提到的“三菱PLC圆弧插补程序梯形图”能在三菱FX5U上实现是因为三菱的定位指令和CPU硬件本身为此设计了专用功能。S7-1200如果要实现同样效果要么换S7-1500配合高端运动控制模块要么外置运动控制器。这个坑提醒大家选型前先确认好运动控制需求别等程序写了一半才发现硬件干不了。除了多轴联动后续还可以扩展触摸屏显示轴状态或者用Profinet把S7-1200连接到上位机做配方管理。步进电机控制这块S7-1200能做的事其实很多关键是把基础的地基打好。这台推料机构后来跑了三个多月除了换过一次驱动器散热风扇再没出过别的问题。如果让我重做一遍我会提前把机械参数、脉冲当量、限位方式全部写在I/O分配表旁边而不是一边接线一边想——这些一开始没理清楚的东西最后都会变成你调试时的“隐形时间成本”。