
搞自动化这么多年说实话西门子S7-1200控制伺服和步进电机这套东西几乎是每个搞设备、搞产线的工程师都绕不过去的活。不管你是做小型装配机、贴标机、绕线机还是实验室里的定位平台只要涉及精确位置控制大概率就是PLC发脉冲给驱动器驱动器带电机转。S7-1200作为西门子中小型PLC里的主力既能用高速脉冲输出直接控制步进和伺服又能通过PROFINET总线挂伺服驱动器灵活度很高。这篇就把我从选型、接线、参数计算到TIA Portal编程调试的整套经验整理出来附带我踩过的坑和排查思路给正在做相关项目的朋友一个可以直接抄作业的参考。先说清楚一个基本判断S7-1200控制伺服/步进核心就是“发脉冲”和“发方向”。不管电机后面带的是丝杆、同步带还是齿轮齿条PLC要做的事就三件输出脉冲串控制位移和速度输出方向信号控制正反转输出使能信号控制驱动器通断。搞清楚这三件事剩下的就是接线细节和参数匹配的问题。1. 项目概述与需求拆解1.1 控制对象与方案选型这一步别看简单但真的经常有人选错。控制对象无非就是两种步进电机和伺服电机。步进电机的特点是开环控制你发多少脉冲它就转多少步没有反馈信号回来校验。好处是便宜、结构简单、控制容易坏处是丢步了你自己不知道。适合那些负载不大、速度不高、精度要求相对宽松的场景比如小型传送带定位、简单的翻转机构、教学演示设备。伺服电机是闭环控制驱动器实时读取电机编码器反馈一旦发现实际位置/速度与指令不一致马上调整输出。它的优势是响应快、精度高、低速平稳、过载能力强但价格也摆在那里而且参数设置比步进复杂得多。适合贴标机、点胶机、绕线机这类对定位速度和动态响应有要求的场合。选型上有几句掏心窝子的话如果负载惯量比大、启停频繁、要求高速高精老老实实上伺服如果只是做点简单的点位移动、成本敏感步进完全够用。很多项目其实是被“用伺服显得高级”的想法带偏了预算超了不说调试周期也拉长。我做过的项目里不少步进方案改成伺服之后性能提升明显但同样也有伺服方案降级成步进依然稳定运行的。1.2 为什么选S7-1200做运动控制市面上能发脉冲的PLC一抓一大把国产的、日系的、欧系的都有为什么我会推荐S7-1200最主要的原因是它把“脉冲输出”和“运动控制”软件化了用起来很顺手。S7-1200从固件4.0开始支持真正的运动控制指令在TIA Portal里可以组态轴对象用PLCopen标准的MC_Power、MC_MoveAbsolute、MC_MoveRelative这些指令来做定位控制编程思路和做连续控制完全不一样逻辑清晰很多。早期很多PLC要做定位你得自己写脉冲发送逻辑、自己统计脉冲数、自己处理方向切换S7-1200把这些都封装好了你只需要告诉它“走到哪”“走多快”“怎么走”。另外S7-1200最高支持200kHz的脉冲频率视CPU型号而定虽然比不上专门的运动控制PLC但驱动常规的步进电机和中小功率伺服绰绰有余。而且它自带PN口以后要扩展PROFINET总线伺服、连接HMI、做远程监控都很方便一个CPU全包了。对大多数中小型单机设备来说用S7-1200做运动控制是性价比非常高的选择。2. 硬件选型与接线全解2.1 CPU选型注意输出类型选CPU是一个特别容易出坑的地方核心就一句话必须选晶体管输出Transistor型号不能选继电器输出Relay型号。S7-1200晶体管输出和继电器输出的外观基本一样价格差得也不多但功能上完全是两回事。继电器输出是靠机械触点吸合响应速度慢、寿命有限最重要的是它不能输出高速脉冲根本驱动不了步进和伺服。晶体管输出是电子开关响应速度快能输出PTO高速脉冲这才是运动控制的硬件基础。具体选型时看型号最后几位比如CPU 1214C DC/DC/DC三个DC分别代表供电电源、输入、输出都是直流24V如果是CPU 1214C AC/DC/Rly输出就是继电器的不能用。S7-1200常见的CPU型号有1211C、1212C、1214C、1215C、1217C等它们自带的高速脉冲输出数量不一样CPU本身集成的输出点一般是4路左右最多能支持4个脉冲轴如果不够用就得加信号板SB 1222或扩展SM 1222晶体管输出模块。选CPU之前先数清楚你到底要控制几个轴。一个典型的定位项目每个轴需要占用至少一个脉冲输出点和一个方向输出点再加上使能、报警、原点、限位这些IOCPU自带的IO数量很快就不够用了这个时候要提前规划好扩展模块的型号和数量。别等电气图都画完了才发现IO不够那就很被动了。2.2 伺服驱动器接线脉冲、方向、使能怎么接伺服驱动器的接线一般分三块主回路电源、控制电源、信号接口。这里主要讲信号接口也就是PLC和驱动器之间的控制线。先看驱动器侧。不同品牌的伺服驱动器信号定义会有差异但基本都包含这几类脉冲输入PUL、方向输入DIR、使能输入SON/ENA、报警输出ALM、准备好输出RDY、原点开关输入等。脉冲和方向是核心使能是安全连锁。S7-1200晶体管输出属于高边开关输出输出点导通时该点相对M端输出约24V电压。所以脉冲信号推荐这么接驱动器PUL接S7-1200的高速脉冲输出点如Q0.0或Q0.1驱动器PUL-接PLC的M端0V当PLC输出点为高电平时PUL回路导通驱动器收到一个脉冲沿。方向信号同理DIR接PLC输出点DIR-接M端。这里要特别强调不同品牌驱动器的脉冲输入接口内部电路不一样。有的驱动器内部已经串好了限流电阻直接接24V没问题有的驱动器内部只针对5V差分信号外部必须串接2kΩ左右的限流电阻否则可能烧坏光耦。我见过好几个同行直接把24V接到5V输入的驱动器上光耦当场就击穿了。接之前一定翻驱动器手册确认它的输入规格和是否需要外接电阻。使能信号的接法更有讲究。使能有高电平使能和低电平使能之分默认情况下很多驱动器是高电平使能但有些项目为了提高安全性会做成“常闭逻辑”驱动器默认使能PLC输出一个信号来禁止使能避免PLC断电或程序跑飞时电机突然抱死或松闸。这个逻辑要根据设备的安全要求去设计。对普通设备我习惯把伺服使能接成PLC程序控制程序正常运行且无报警时输出使能信号一旦触发急停或报警立即撤销使能。还有抱闸控制。带垂直轴的伺服电机通常配电磁抱闸断电时抱闸锁死防止重物下滑。抱闸的控制逻辑是伺服准备运行前先松闸停止并定位完成后才抱闸。很多新手直接把抱闸接到24V上电机通电就一直松闸垂直轴一断电就掉下来非常危险。正确做法是用PLC或驱动器的抱闸输出信号控制一个中间继电器再由继电器触点控制抱闸线圈同时注意抱闸线圈是感性负载需要并联续流二极管。2.3 步进驱动器接线PUL、DIR、ENA别接反步进驱动器的接线相对简单但有一个现成的坑几乎每周都有人踩ENA使能信号接反了。很多步进驱动器默认ENA有效时是“脱机”状态也就是电机轴处于自由状态。你把ENA信号一直给上电机会完全无力用手能轻松转动PLC发脉冲它也不动然后你就开始怀疑是不是脉冲没发出去、参数是不是没设对……折腾半天才发现是ENA接错。步进驱动器的标准信号接口是三个差分输入对PUL / PUL-脉冲信号输入DIR / DIR-方向信号输入ENA / ENA-使能/脱机信号输入这三个信号的有效电平取决于驱动器内部的接口电路。目前主流步进驱动器雷赛、信浓、白山等都支持共阳和共阴两种接法。S7-1200晶体管输出是高电平有效和共阳极接法最匹配PUL接24VPUL-接PLC脉冲输出点Q0.0DIR接24VDIR-接PLC方向输出点Q0.2ENA接24VENA-接PLC使能输出点也可以直接悬空因为默认使能等等这种接法和我上面说伺服的是不是矛盾了其实不矛盾关键看驱动器接口是“源型”还是“漏型”。很多步进驱动器的光耦输入是共阳极结构阳极在驱动器内部统一接了上拉外部必须把PUL-拉低来形成回路所以PLC输出低电平时脉冲才有效。S7-1200晶体管输出高电平有效这时候你要么用“PUL接PLC输出点、PUL-接0V”的接法发光二极管导通方向取决于驱动器内部接法要么加一级中间转换。实际操作中我最常用的方案是步进驱动器采用“脉冲方向”共阴极接法时把PUL接PLC高速输出点PUL-接M端同时把DIR接到PLC方向输出点DIR-接M端。这时PLC输出高电平电流经输出点流入驱动器光耦再到M端形成完整回路。但前提是驱动器手册允许PUL接24V侧还是悬空侧必须看清楚引脚定义再动手。这里我给一个通用排查思路驱动器接口处各信号标记的上方都有一个“正”和“负”标记所有“正”端并不一定都接24V有些是按内部电源相连的。最稳妥的方法是下载对应驱动器的官方手册找到“输入信号接线”那一节照着里面的共阳/共阴接法图接比任何通用教程都靠谱。2.4 电源规划与共地问题PLC、驱动器和电机之间的电源共地问题看着不起眼处理不好能让你排查几个通宵。步进/伺服驱动器的主电源一般是220V交流单相或380V三相这个先不管关键是控制信号回路的电源必须和PLC的M端共地。S7-1200的晶体管输出以M端为参考如果驱动器的信号地通常是COM或GND不和PLC的M端接在一起脉冲信号回路就无法形成电机自然不动。具体操作上我一般把PLC的M端、伺服/步进驱动器的信号地COM、以及24V开关电源的0V全部接到同一个接地排上形成一个共地的直流系统。注意是单点共地不要在不同地方反复接地否则容易形成地环路引入干扰。另外24V电源容量一定要算够。一个普通的步进驱动器信号接口耗电很小但电磁抱闸线圈、制动电阻风扇、传感器、HMI这些加起来电流不小。我见过有人用一个24V 2A的开关电源硬撑整台设备结果一启动就电压跌落PLC都复位了。一般建议PLC及IO用一个独立24V电源伺服/步进驱动器的控制信号和抱闸用另一个电源两个电源的0V再共地。这样抗干扰能力明显好很多。3. 核心参数计算与设置3.1 电子齿轮比让脉冲当量变成“整数”不管是伺服还是步进驱动器上都有一个参数叫电子齿轮比Electronic Gear Ratio这个东西理解透了后面算位置就有底了。先举个例子。假设你用的是一个常见的小惯量伺服电机编码器分辨率是17位也就是电机转一圈反馈131072个脉冲。如果没有电子齿轮比PLC要发131072个脉冲电机才转一圈太不直观了。通过设置电子齿轮比我们可以让PLC每发比如10000个脉冲电机就转一圈这样每个脉冲对应的机械位移就很好算。电子齿轮比的定义式通常是电子齿轮比 编码器分辨率 / 电机每转所需指令脉冲数在驱动器参数里一般表示为“电子齿轮比分子 / 电子齿轮比分母”。比如说想让电机转一圈需要10000个指令脉冲编码器分辨率是131072分子 131072分母 10000约分后就是 16384 / 1250设置的时候把这两个值填进去就行。步进驱动器的电子齿轮比逻辑略有不同因为步进电机没有编码器它的“一圈脉冲数”是由细分决定的。步进驱动器一般有细分拨码或参数比如设定细分1600就代表驱动器每接收1600个脉冲让电机转一圈。在这个基础上还可以再设电子齿轮比做进一步的指令脉冲缩放。3.2 脉冲当量计算走一个脉冲工作台动多少脉冲当量每脉冲对应的机械位移是运动控制里最核心的计算。不管是伺服还是步进最后都要落到这个数值上因为程序里的定位距离、速度都是基于它换算的。脉冲当量的计算公式脉冲当量 (螺距 / 电机每转所需指令脉冲数) × 机械减速比假设丝杆导程是10mm电机直连丝杆减速比1:1伺服按10000脉冲/圈设置那么每个脉冲对应的位移 10mm / 10000 0.001mm 1μm这个精度对于大多数贴标、点胶、装配设备来说完全够用。如果是步进电机细分设为3200脉冲/圈丝杆导程5mm那脉冲当量就是5 / 3200 0.0015625mm不算整数程序里直接用浮点数也算得清问题不大但如果你对位置精度有强迫症可以通过设置电子齿轮比把这些数值整定成0.001mm的整数倍。还有个容易忽略的点如果是同步带传动脉冲当量计算时要用同步带轮的节圆直径算线位移不是简单的导程。齿轮齿条也是一样要算齿条的直线移动量和电机转一圈的对应关系。这里我建议用一个简单办法手动盘车转一圈丝杆或同步带轮用千分表测实际位移反推脉冲当量比纯理论计算更可靠因为机械实际参数和理论值多少有偏差。3.3 速度与加减速时间的匹配有了脉冲当量速度就很好算了。PLC的运动控制指令里速度单位通常是mm/s或mm/min有些直接用脉冲频率。如果你用的是MC_MoveAbsolute这类指令速度直接填mm/s指令内部会自动换算成脉冲频率。换算公式是目标脉冲频率 目标速度 / 脉冲当量比如目标移动速度是100mm/s脉冲当量是0.001mm/脉冲那脉冲频率就是100 / 0.001 100kHz。这个频率接近S7-1200的上限就要考虑降低速度或改用更高性能的控制器。加减速时间同样重要。伺服和步进都支持驱动器侧的加减速也可以在PLC侧设置加减速时间。我一般习惯在PLC侧做S曲线加减速也就是TIA里组态轴时设置“动态特性”参数包括加速度、减速度和急停减速度。负载惯性大、速度高的轴加减速时间要适当放宽否则机械冲击大、丢步甚至撞限位。计算公式比较简单加速度 目标速度 / 加速时间减速度 目标速度 / 减速时间实际项目里如果行程短、动作频率高加减速时间通常占总运动时间的一半以上。比如走100mm最大速度100mm/s光减速就需要1秒总时间算下来可能比匀速走还要慢所以速度不是越高越好要综合行程去优化爬坡速度曲线。4. 软件组态与运动控制编程4.1 TIA Portal中的轴组态S7-1200的运动控制是在TIA Portal里以“技术对象”方式组态的。新建项目、添加CPU之后在PLC数据块区域右键添加“新对象”→“运动控制”→“定位轴”或“步进轴”。这里有个区别定位轴针对伺服驱动器配置成“PTO脉冲输出”方式将集成运动控制指令与硬件输出关联步进轴也是PTO方式但更适合步进驱动器的特性实际上两者在S7-1200上都是脉冲输出控制主要区别在于组态时对“驱动器使能”、“抱闸”等信号的处理逻辑。我用过之后感觉差别不大一般习惯选“定位轴”。组态轴的时候要填一堆参数其中几步最关键硬件接口选CPU自带的高速输出点比如Q0.0。这一步不能错选错点后面发不出脉冲。机械系统填电机每转脉冲数、机械减速比、丝杆螺距等最终自动算出脉冲当量。这一步建议认真核对。行程范围设定软件限位防止程序坐标越界。硬件限位是接在传感器上的软件限位是写在轴对象里的两者配合用。回参考点配置回零方向和原点开关信号。S7-1200支持主动回零、被动回零等多种模式根据现场机械选一种合适的。动态特性填最大速度、加速度、减速度、急停速度。注意这里的数值不能超过硬件上限否则运行时可能报错或实际响应跟不上。4.2 运动控制指令集MC_Power到MC_MoveJogS7-1200的运动控制指令遵循PLCopen标准常用的有这么几个MC_Power使能/禁用轴MC_Home执行回参考点MC_Halt停止在当前目标位置MC_Stop急停MC_MoveAbsolute绝对定位移动到指定坐标MC_MoveRelative相对定位从当前位置移动指定距离MC_MoveVelocity连续速度模式常用于顺起逆停控制、速度同步等MC_MoveJog点动用于手动调试调用这些指令时每个指令都要配上对应的轴数据块和输入输出参数。比如MC_MoveAbsolute的输入有Execute执行触发、Position目标位置、Velocity速度、Acceleration加速度、Deceleration减速度输出有Done、Busy、CommandAborted、Error等状态位。我的编程习惯是做一个“控制模式”的变量用枚举或整数区分“点动模式”、“回零模式”、“绝对定位模式”、“相对定位模式”、“速度模式”然后根据模式去触发对应的MC指令。这样可以避免多个运动指令同时触发同一个轴导致冲突。S7-1200轴对象内部有冲突保护但外部逻辑还是要写好让指令触发条件互斥。4.3 初始化流程怎么设计上电之后的轴初始化是关键一步很多设备出问题都是在初始化阶段。我常用的初始化顺序是等待CPU和IO模块启动完成确认各传感器状态正常调用MC_Power使能轴等待轴进入“Standstill”或“Ready”状态根据设备需求决定是否执行回零MC_Home回零完成后检查坐标是否在软件限位范围内给HMI反馈“系统就绪”状态允许操作员启动生产流程回参考点尤其重要。如果你用的是绝对定位PLC掉电后轴坐标丢失上电后必须重新回零否则PLC认为当前位置还是旧坐标一执行定位指令就会往错误的方向冲。注意S7-1200的非易失性存储里可以保存轴的实际位置重上电后也能恢复但前提是电机编码器是绝对值式的增量式编码器回零躲不掉。回零时还要注意回零方向。主动回零模式下轴会朝指定方向运动碰到原点开关后减速到爬行速度再离开原点开关或停在原点开关信号沿上。如果回零方向给错了轴一上电就往反方向跑可能直接撞到机械限位。所以组态时一定要把回零方向、原点开关常开常闭点这些参数核对清楚再做一次手动慢速回零测试。4.4 程序示例绝对定位和顺起逆停写一个最简单的定位程序框架。假设要求按下启动按钮轴从当前位置绝对定位到坐标100mm处速度50mm/s。在OB1里依次调用MC_Power然后当启动按钮上升沿产生时给MC_MoveAbsolute的Execute一个脉冲沿同时把Position填为100.0Velocity填为50.0。轴运动时Done信号会一直是0Busy是1到位置后Done变成1Busy变0。程序里用Done去复位启动按钮的保持逻辑一个定位流程就完成了。顺起逆停控制其实就是点动/速度模式的翻版在很多输送、绕线、卷绕设备里很常用。控制要求一般是按正转按钮电机正方向连续转动按反转按钮电机反方向连续转动松开按钮或按停止按钮电机停止。S7-1200实现这个逻辑有两种方式用MC_MoveVelocity连续速度模式速度为正就是正转速度为负就是反转。按正转时Execute一次并填正速度值按反转时再Execute一次填负速度值停止时调用MC_Halt。用MC_MoveJog点动模式更直接JogForward和JogBackward两个输入分别控制正反向点动但Jog模式下速度要提前在指令参数里设好不适合在线调速。我做过的一个卷绕项目就是用的MC_MoveVelocity方案HMI上还能在线修改速度值效果很灵活。要注意每次修改速度或方向时Execute触发一次同时要等Busy信号稳定后再发下一条指令否则指令可能被忽略。5. 调试方法与常见问题排查5.1 上电调试的正确打开顺序设备接线完成、程序下载进去之后千万别急着让电机跑起来照着这个顺序做能省去不少折腾第一步短电状态下用万用表量一遍所有接线确认24V正负极没有接反PLC输出点与驱动器输入点之间的回路没有短路抱闸线圈和传感器线路没有混在一起。这一步是纯体力活但能避免后面烧东西。第二步给PLC上电但驱动器主回路电源暂时断开。打开TIA Portal在线监控确认CPU运行正常输入输出点状态与实物一致。这时候可以看一下PLC程序里的轴状态值应该是“错误”或“未使能”正常。第三步再给驱动器控制电源上电不要上主回路电。确认驱动器显示正常无报警同时把驱动器参数恢复出厂设置或核对一遍关键参数脉冲输入方式、电子齿轮比、方向逻辑、使能信号极性。第四步上主回路电使能轴在手动模式下用MC_MoveJog做低速点动。先用10%~20%的速度点动确认电机转动方向与预期一致。如果方向反了不要急着改程序可以先改驱动器方向逻辑参数也可以改PLC程序里的方向信号逻辑但注意如果你同时改了机械安装方向调整前后逻辑会乱建议统一在一个地方修正。第五步慢速回零测试确认原点信号逻辑和回零方向正确后再做绝对定位测试逐步提高速度验证动态特性。5.2 常见问题速查表现象可能原因排查思路电机完全不动PLC输出无脉冲输出点接线错误、轴未使能、轴被暂停在线监控Q点状态检查MC_Power的Enable信号电机不动但有信号输出驱动器有脉冲显示方向信号/脉冲类型不匹配、使能未给、限位触发先看驱动器面板有无报警再用万用表量PUL/DIR端电压电机转动方向反了方向信号极性、驱动器方向参数、电机相序接反切换DIR信号极性参数或交换步进电机两相接线丢步或定位不准电子齿轮比设错、脉冲频率过高、加速度过大低速验证脉冲当量逐步提升速度观察特性变化启动瞬间驱动器过流报警加减速时间太短、负载惯量太大、抱闸未松开增大加减速时间确认抱闸控制逻辑正常电机发烫严重电流设置过大、长时间低速高负载核对驱动器电流参数加装散热或降载PLCHMI显示位置与实际不符回零丢失、机械打滑、电子齿轮比错重新回零检查联轴器/同步带张紧运行中偶发突然停止干扰、急停信号抖动、通信超时检查屏蔽接地用示波器观察脉冲信号波形5.3 现场排障的几个独家心得最后说几个我多年现场调试攒下来的土办法可能比某些高大上的工具更实用。第一个备用一台上位机或笔记本装好TIA Portal和驱动器的调试软件。现场调试最怕的就是程序没法监控、参数没法看带好软件和数据线遇到问题直接看报文比猜快得多。我吃过亏有一次出差到客户现场驱动器的调试软件没带参数只能靠手动记遇到问题只能盲排效率低到崩溃。第二个用万用表量脉冲信号时不要只量平均电压要看有没有跳变。普通的数字万用表采样频率太低看不到脉冲细节但能判断有没有信号。更好的办法是把驱动器面板上的“指令脉冲累计值”调出来手动发一段已知脉冲数看累计值对不对快速判断脉冲链路是否通畅。第三个排查干扰问题先别急着加磁环换屏蔽线先解决接地。现场80%的干扰都是接地不规范引起的。信号线屏蔽层要单端接地而且接到控制柜的接地排上不要和电机动力线绑在一起走线。遇到过一台设备电机一启动PLC就通信断最后发现是电机动力线和编码器线在拖链里缠在了一起分开走线后问题消失。第四个修改参数时一定要做记录。驱动器参数、PLC轴参数每次调试后导出一份存档标记修改日期和原因。没有记录的项目三个月后你自己都会忘记当时为什么这么设“玄学调机”就是这么来的。做伺服和步进控制这么多年最大的感受是这东西看起来就那么三根线、几个参数但真正做好需要把机械、电气、软件、现场环境全部串起来。S7-1200的运动控制功能帮我解决过很多设备动作的问题但它毕竟只是发脉冲的大脑真正的执行质量还是要靠驱动器参数、机械刚性和现场调试去保证。如果这篇文章能帮你在选型和接线上少走几次弯路我就觉得值了。