☰
S7-1200G2 四轴运动控制实战:从轴组配置到现场调试
2026/10/6 6:22:40 网站建设 项目流程

前阵子刚交付了一个用 S7-1200G2 做四轴运动控制的小项目,从最开始选型号、组态工艺对象,到后面写逻辑、现场调试,踩的坑不算少,但把整套流程完整跑通之后,再回头看这个平台,其实逻辑很清晰,难的是你愿不愿意把每一步都吃透。

这篇内容就围绕"S7-1200G2 运动控制"这条主线展开,重点讲清楚三件事:轴组配置怎么做、运动控制程序怎么组织、到了现场又该怎么调试。适合刚接触 S7-1200G2、之前只用过老款 S7-1200 或者 S7-200 SMART 的电气工程师、调试工程师,也适合那些想把多轴定位控制从"能转"做到"转得稳、调得快"的朋友参考。

1. 项目背景与需求拆解

1.1 为什么这一代会选 S7-1200G2

先说结论:S7-1200G2 不是 S7-1200 换个外壳那么简单。它的 CPU 性能提升非常明显,工作存储器扩大,运算速度上了一个台阶,尤其是在运动控制相关的指令处理和轴对象管理上,明显比第一代 S7-1200 从容很多。

第一代 S7-1200 做运动控制,CPU 1214C 最多能管 4 个轴,而且当轴数多了以后,逻辑扫描周期和运动控制周期的相互影响会比较明显。G2 这一代在轴数上限上做了扩展,高端型号可以做到更多轴,同时高速输出和高速计数的配合精度也更好,脉冲输出频率也有提升。对于大多数中小型设备,一台 G2 CPU 直接管理 4 到 8 根轴已经完全够用了,不用额外加运动控制器,成本和控制复杂度都能压下来。

另外,G2 在通信能力上更友好,PROFINET 口是标配,CPU 本体的网口用来连触摸屏、上位机、远程 IO 都很方便。调试的时候直接在线访问,不用来回插拔网线。

1.2 设备与项目需求确认

我这次项目是四台步进电机控制,每一台分别带动一个独立工位,完成水平和垂直方向的位置定位。之所以用步进而不是伺服,是因为负载轻、定位精度要求不高(±0.1mm 足够),用步进能把成本压到很低,而且调试简单。

硬件清单大概如下:

  • 西门子 S7-1200G2 CPU,具体型号 1214C DC/DC/DC,外加一个 24V 传感器电源
  • 四台步进驱动器,拨码设置为脉冲加方向模式,单脉冲 2000 脉冲每转
  • 四台 57 步进电机,带 1:10 行星减速机,输出端接同步带机构
  • 每根轴配两个接近开关,一个做原点,一个做负限位
  • 四个 24V 中间继电器作为使能信号输出隔离,防止驱动器干扰 PLC 输出

选择 S7-1200G2 还有一个很现实的原因:博途软件支持完善。TIA Portal V20 及以上版本可以直接建 S7-1200G2 的站点,运动控制工艺对象也在同一套软件里配置,不需要额外插件。

1.3 运动控制需求的确认:你要的到底是"轴组"还是"单轴"

很多人一听到"轴组配置"就觉得要搞多轴插补、龙门同步、圆弧插补。在 S7-1200G2 这个平台里,我更愿意把"轴组"理解为"多轴工艺对象的组态管理",而不是 CNC 插补。G2 不支持像 S7-1500T 那样做运动学机构,也不支持复杂的多轴插补,它的强项是单轴定位、多轴独立运行和通过程序逻辑做简单联动。

所以在项目启动前,先明确需求:这台设备有没有"多个轴必须同时按一定比例运动"的场合?有没有"轨迹必须是圆弧或直线插补"的场合?

如果是,S7-1200G2 可能不是最优选择,需要上带 T-CPU 或独立运动控制器。如果只是"这根轴走 500mm,那根轴同时走到 300mm,然后各自停止",那 G2 完全没问题,而且性价比非常高。

2. 轴组配置:工艺对象从创建到参数化

2.1 添加工艺对象

在博途里,运动控制轴不是直接编程,而是先添加一个"工艺对象"(Technology Object),然后通过 PLCopen 指令去控制这个对象。

操作路径:左侧项目树 → PLC_1 → 工艺对象 → 新增对象 → 运动控制 → 定位轴(PTO)或者速度轴。

我四个轴全部用的是"定位轴(PTO)",因为我们需要做绝对定位和相对定位,速度轴适合那种只要求持续运行的场合,比如输送带恒速驱动。

添加之后,每个轴都会生成一个对应的"轴名称",比如 Axis_1、Axis_2。这个名字后面所有程序里都要引用,最好一开始就定义得规范,比如 Axis_L1、Axis_R1、Axis_L2、Axis_R2,千万不要叫 Axis_1、Axis_2、Axis_3、Axis_4,否则程序写多了自己都记不住。

2.2 关键参数怎么填

轴参数配置是整个运动控制能否稳定运行的核心,我建议按顺序逐个填,不要跳。

驱动参数:选择"脉冲 A 和方向 B"还是"双脉冲 CT"?我用的驱动器支持脉冲加方向,就选第一种。脉冲输出通道要分配到 PLC 本体的高速输出点,S7-1200G2 的 1214C 本体默认有四个高速输出通道,正好对应四个轴。如果是更高轴数,可能要用到信号板扩展,选型的时候就要提前确认。

编码器参数:步进电机没有外部编码器,所以选择"内部计算",也就是 PLC 根据发出的脉冲数来计算实际位置。如果是伺服电机带编码器反馈,可以选择"外部编码器",把编码器信号接入高速计数器,这样位置闭环更可靠。但步进场景下,只要不丢步,内部计算足够用。

机械参数:这一步最容易出错。我建议先在纸上画一下传动链:

电机轴 → 减速机(10:1)→ 同步带轮 → 负载

机械部分的"每转电机对应的负载距离"要算准确。以我其中一根轴为例:同步带轮节圆直径约 48mm,周长约 150.8mm。减速比 10:1,即电机转 10 圈,带轮转 1 圈,负载移动 150.8mm。所以"负载每转"这个值,实际含义是"电机转一圈,负载移动多少距离",也就是 150.8 ÷ 10 = 15.08mm。

这个数字填进去以后,配合脉冲数 2000 脉冲/转,软件会自动算出每个脉冲对应的位移量。如果这个数算错了,设备标定出来的定位距离会整体偏差,后面再查就非常痛苦。

限位参数:正负硬限位建议一开始就接上,千万别偷懒。很多人觉得反正有软限位,硬限位可接可不接。但实际现场一旦电机过冲、驱动器参数没调好,软限位就是一层纸。我在轴组配置里全部启用了硬件限位输入,负限位接到接近开关,正方向限位在行程末端用机械挡块加检测开关。

动态参数:加速度、减速度、急停减速度。这里有两条经验:

  • 运行加速度不要拍脑袋填,先按设备工艺节拍估算,然后在现场从低到高慢慢提升,直到出现明显丢步或机械振动再回调 20%
  • 急停减速度必须比运行减速度大,但也不要大太多,否则机械冲击很容易把同步带拉断

我习惯先设置:加速度 200mm/s²、减速度 200mm/s²、急停减速度 800mm/s²,然后根据现场实际节拍要求去调。

2.3 轴组配置的三条铁律

第一,单位一定要统一。我全部用 mm 和 mm/s,不搞混用。如果某根轴用 mm、另一根轴用 inch,程序里换算非常容易出错。S7-1200G2 的工艺对象里单位可以选,一定要在项目最开始就定下来。

第二,一根轴对应一个工艺对象,不要多个设备复用同一个轴对象,否则两个设备互相抢轴,程序逻辑会乱得没法看。即使两根轴机械结构完全一样,也必须建两个工艺对象。

第三,轴名称、轴编号、物理通道要有一个对应表。我项目里做了一张 Excel 表格,列清楚"Axis_L1 对应本体 Q0.0 和 Q0.1,对应电机 1,对应原点开关 I0.0",这张表在整个调试期间一直在更新,极大减少了现场排查问题的时间。

3. 运动控制程序设计与编写

3.1 PLCopen 指令选型

S7-1200G2 运动控制使用的是 PLCopen 标准指令,具体分几类:

  • MC_Power:轴的使能/去使能。任何运动指令执行前,必须先把对应轴使能,这是所有运动控制的大前提
  • MC_Home:回零,确定机械原点位置。步进电机的回零方式一般是主动找原点开关,碰到后把当前位置设为 0
  • MC_MoveAbsolute:绝对定位,运行到指定位置。前提是已经完成回零,否则"绝对位置"就是空中楼阁
  • MC_MoveRelative:相对定位,从当前位置开始走一定距离。不受原点影响
  • MC_MoveVelocity:恒速运行,适合输送带等场景
  • MC_Halt:平滑停止
  • MC_Stop:紧急停止,一般配合急停按钮
  • MC_Reset:确认轴故障,清除错误

我的程序框架里,这四个轴都各自封装了一个功能块(FB),里面调用上述指令,统一管理轴的使能、回零、定位和停止逻辑。主程序里只需要给每个 FB 传入目标位置、运行速度和启动命令,这样后期维护非常方便。

3.2 程序架构与状态机设计

运动控制程序最忌讳的就是直接用一大堆 M 变量东拉西扯。我习惯的做法是给每个轴做一个轴状态机,内部有:复位状态、使能状态、回零状态、待机状态、运行状态、暂停状态和故障状态。

主流程大概是这样:

设备上电 → 所有轴 MC_Reset 清除历史故障 → 等待使能命令 → MC_Power 使能成功 → 等待回零完成信号 → 主程序根据工艺节拍给各轴发送定位命令 → 定位完成以后进入待机 → 收到停止命令或者急停信号,进入停止流程。

这个状态机的好处是:任何时候你都能从轴的当前状态判断出它到底卡在哪一步,而不必去猜。现场调试的时候,报警停机了,直接看 FB 里的状态字就知道是没使能、没回零还是指令报错。

3.3 关键程序段与 SCL 示例

下面给出一个典型的单轴定位调用示例,SCL 代码,可以直接在博途里建一个 FB 测试:

// 轴使能 "MC_Power_Axis1"( Axis := "Axis_L1", Enable := #bEnableCmd, StopMode := 2, // 1: 急停减速度停止, 2: 使用轴组态里的急停减速度 Power => #bPowerDone, Status => #bPowerStatus, Error => #bPowerError, ErrorID => #iPowerErrorID ); // 相对定位 "MC_MoveRelative_Axis1"( Axis := "Axis_L1", Execute := #bStartCmd, Distance := #rTargetDistance, Velocity := #rMoveSpeed, Acceleration := #rMoveAcc, Deceleration := #rMoveDec, Jerk := 0.0, Done => #bMoveDone, Busy => #bMoveBusy, CommandAborted => #bMoveAborted, Error => #bMoveError, ErrorID => #iMoveErrorID );

这段程序里有两个细节值得注意。

第一个是 MC_Power 的 StopMode 参数。默认情况下轴使能断开后,轴会按组态里的急停减速度停止,这个参数要认真对待。如果不希望使能断开时用那么猛的减速度停下来,可以在 StopMode 里选择"使用轴的动态参数"(也就是普通减速度),但这样的话,安全急停的效果会被削弱。我现场是分两个场景:普通停止用 MC_Halt,急停按钮触发时直接把 MC_Power 的 Enable 置 false,同时 StopMode 设为 2,保证快速刹停。

第二个是 Jerk(加加速度)参数。S7-1200G2 支持加加速度限制,如果设为零,那么加速度变化是瞬时的,对于轻载步进问题不大;对于重载机构,建议给一个小值来过滤掉启动瞬间的冲击。我的同步带机构负载轻,Jerk 设 0,定位更快;后来有一根轴负载较重,我加了 100mm/s³ 的 Jerk,机械撞击声明显下降。

3.4 速度曲线与加减速经验

定位控制的核心是速度规划。S7-1200G2 的定位轴默认走梯形速度曲线:加速段、匀速段、减速段。加速段和减速段完全对称,所以实际定位时间可以这样估算:

总距离 = 加速距离 + 匀速距离 + 减速距离

如果总距离 d 大于等于 2 × 加速距离,就存在匀速段;如果太小,速度还没上到设定值就开始减速,此时最高实际速度会小于设定值,定位时间会变长。现场调试时我发现一个经典问题:把定位距离改短以后,电机速度明显变慢,后来一算才发现是距离不够,梯形变成了三角。这个不需要改参数,如果你希望短距离也能跑出速度,需要提升加速度。

另外,步进电机在高速段扭矩会明显下降,所以设定速度不要超过电机矩频特性的安全区。我用的 57 步进电机,驱动器拨码细分 10,对应 2000 脉冲每转,设定速度跑到 120mm/s 时(对应电机转速约 4800rpm 带减速机后),已经开始出现轻微丢步的情况。我把速度降到 100mm/s,同时加速度从 800 降到 500,问题消失。经验是:速度参数要给余量,不要卡在电机的极限附近。

4. 程序调试全流程实录

4.1 离线仿真先跑一遍

S7-1200G2 在博途里支持运动控制的仿真,虽然没有真实电机反馈,但可以验证程序逻辑、状态机跳转、指令调用顺序是否正确。

我建议在仿真里把每个轴的回零、定位、报警恢复流程都跑一遍。特别是"定位过程中断开使能"这种故障场景,仿真里能看到指令报错 NotDone,并且上电后必须用 MC_Reset 复位才能重新使能。这些不提前搞清楚,现场遇到会慌。

仿真还有一个用处:确认轴组态的机械参数换算结果是否合理。在工艺对象在线监控里,可以直接看到"每脉冲的距离"这个计算值,仿真前就把 15.08mm/转 这个值验证清楚,避免到了现场发现整体定位距离偏差。

4.2 上电点动调试

仿真通过以后,连上 PLC,进入真正的调试环节。我习惯的第一步是点动。

在博途运动控制调试面板里,选择对应的轴 → 点动按钮 → 设定点动速度,比如 10mm/s,然后按下正方向点动。这个步骤主要确认几个关键点:

  • 电机方向是否正确。如果按下正方向,电机反向走,说明驱动器方向信号接反,或者是脉冲加方向逻辑不对,要在驱动器或者组态里改方向
  • 电机是否有异响、振动。如果步进电机低频振动明显,可能是细分设置不对,也可能是电流设置偏小
  • 实际位移方向与组态的正方向定义是否一致。不一致的话,后面回零、限位逻辑全都会反

点动确认后,把点动速度逐步提高,比如 20、50、80、100mm/s,在高速点动下听声音是否正常,观察电机是否丢步。这个阶段不需要接负载,可以先把电机和减速机放在台架上空跑,有问题提早暴露。

4.3 回零与限位调试

回零调试是整个项目现场最容易出问题的一环,原理很简单:轴朝指定方向找原点开关,碰到开关后减速停止,然后把当前位置设为原点。

但在实际操作中,有几个细节极易踩坑。

第一个坑:原点开关要装在"不会在正常运动中误碰"的位置。我有一次把原点开关装在负限位旁边,结果回零过程中轴先撞上负限位,直接报限位故障,后来把原点位置往正方向挪了一段距离才解决。

第二个坑:主动回零结束后,轴的当前位置并不一定正好在机械零点上,取决于接近开关的感应位置和减速的停止位置。如果设备要求零点精度高,需要在组态回零参数里开启"主动回零后执行校准移动",也就是回零碰到开关后再做一次基准定位。这个配置可以在工艺对象的回零属性里找到。

第三个坑:限位开关和原点开关不能共用一个输入点。虽然物理上可能靠得很近,但 PLC 程序里必须用两个独立的输入点,否则限位信号和原点信号互相影响。

4.4 监控表与 Trace 追踪

调试过程中,博途的监控表和 Trace 功能非常好用。

我习惯在监控表里把每个轴的关键状态字、当前位置、当前速度、目标位置、指令的 Done/Busy/Error 全部拖出来,排成一张大表,然后按 F5 持续监控。比如定位命令下发以后,看到 Busy 一直为 true、Done 一直为 false,而当前位置已经不变化了,那就极有可能是速度或加速度设置太小、实际还没到位,或者命令被其他条件中断。

Trace 功能更适合看动态曲线。比如轴的设定位置和实际位置曲线是否平滑,速度曲线是否有突变,位置跟随是否超调。我用 Trace 抓过一次定位完成前后的位置曲线,发现定位到位瞬间有明显过冲现象,后来在动态参数里把减速度调低,过冲消失。没有 Trace 的话,这样的问题基本只能凭感觉猜。

4.5 常见问题与排查速查

现象可能原因排查思路
电机不转,轴报错误MC_Power 未使能或故障未清除先执行 MC_Reset,等待 Power 状态字为 true,再发运动指令
电机转了但方向反驱动器方向信号或组态方向参数反了点动确认,反接方向线或勾选反向方向
定位距离偏大或偏小机械参数"负载每转"计算错误核算减速比和带轮周长,用 Trace 看实际位置对比
电机高速丢步速度超过步进电机安全区,加速度过大降低速度,降低加速度,或换大电流设置
回零结束后原点位置不准确有减速过程,停止位置与感应点不一致开启回零后校准移动,或降低回零速度
运行时突然报限位错误,但机械并未撞限位限位开关信号抖动,或输入接线接触不良用监控表观察 I0.x 状态,确认是否因振动误触发
定位完成后有机械过冲减速度太小或负载惯量大增大减速度,或加 Jerk 限制,必要时机械加装阻尼

这张表在现场调试时非常实用,我把它打印出来贴在电柜门上,调试完以后直接留给客户做了维护手册。

5. 避坑总结与个人经验

项目整体下来,我的最大体会是:S7-1200G2 的运动控制功能本身非常成熟,它不像以前做步进控制要靠定时器去手动发脉冲,而是把所有底层逻辑都封装好了,你要做的是在组态里把机械参数填对,在程序里把指令调用顺序理对,剩下的事情硬件自己处理。

这里再分享一个我踩过的坑:轴使能状态和系统急停必须分开处理。我之前做一个设备,把急停信号直接接到了 PLC 的 STOP 输入,设备一按急停,PLC 直接停机,轴失去使能,变频器、驱动器全部掉电。表面看很安全,但实际上 PLC 停机后,跟不上急停减速度,电机会因为惯性继续滑行,位置就丢了。后来我把急停改为只复位 MC_Power 的 Enable,同时走 MC_Stop 指令,让轴按急停减速度快速停稳,然后再断使能,位置不会丢太多,上位机也能及时捕获到急停状态。

还有一个容易被忽略的点:S7-1200G2 工艺对象在线访问时,轴的"状态字"特别是"跟随误差"非常适合用来判断机械问题。有一次设备运行中偶发位置偏差,我查看轴状态字发现"跟随误差超限"报警,但机械也没卡死。后来逐项排查,发现是同步带一个张紧轮轴承碎裂,导致负载波动。这个报警在纯脉冲控制时代根本不可能监控到,这也是 S7-1200G2 做运动控制的好处之一。

最后讲一个调试习惯:每完成一个轴的调试点,立刻在项目的"PLC 变量注释"和"工艺对象注释"里更新自己的测试结论,比如"Axis_L1 点动速度 80mm/s 正常,超过后丢步"。别指望靠脑子记,现场数据一多,一天以后你连哪根轴调过都记不住。

S7-1200G2 这套平台,说实话上手门槛不高,真正拉开差距的是对轴组参数的理解、程序架构的设计和对运动控制细节的把控。如果你也在做类似的多轴定位项目,建议把组态和程序调试的每一步都记录好,尤其是机械参数换算和限位逻辑,项目交付后维护起来会非常省心。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询