S7-1200 脉冲控制伺服

新人指导手册 · 从零开始学脉冲定位控制

S7-1200 1214C/1215C TIA Portal V16+ PTO 脉冲输出 位置控制 开环定位入门

📖 目 录

  1. 第〇章 · 看完这篇你就能上手
  2. 第一章 · 基础概念
  3. 第二章 · 硬件选型与接线
  4. 第三章 · TIA Portal 组态配置
  5. 第四章 · Motion Control 编程
  6. 第五章 · 实战案例:一个完整的定位程序
  7. 第六章 · 常见问题与排错
  8. 第七章 · 进阶建议

🚀 第〇章 · 看完这篇你就能上手

如果你是一个刚接触 S7-1200 控制伺服的新人,这篇手册的目标是让你在看完后能独立完成一个脉冲定位控制项目。

你需要具备的基础:

什么是不需要的?

💡 虾仁给你的定位:本篇的目标是「你照着做就能动起来」,而不是「你理解所有原理后再动手」。先动起来,再深入理解。


📐 第一章 · 基础概念

1.1 为什么用"脉冲"控制伺服?

在工业自动化中,S7-1200 控制伺服驱动器最常见的三种方式是:

方式说明适用
脉冲+方向PLC发脉冲的频率=速度,脉冲数=位置;方向信号决定正反转新手入门、简单定位、成本敏感的项目
PROFINET(总线)通过工业以太网直接发位置指令给伺服高端伺服、多轴联动、需要回读参数
模拟量速度给定0~10V 速度信号 + 开关量方向老式变频器、不需要精确定位的场合

新手学脉冲+方向是最友好、最直观的——每个脉冲对应伺服电机转过一个固定的角度(取决于伺服的分辨率设置),你只要知道"发了多少脉冲,电机就走了多少距离"就可以了。

1.2 三个关键词

① PTO(Pulse Train Output,脉冲串输出)

S7-1200 通过硬件脉冲发生器输出精确的脉冲序列。PTO 模式下,PLC 可以输出频率可调的方波信号——频率决定电机的速度,脉冲数量决定电机的位置。注意:高速计数器(HSC)主要用于接收高速脉冲,PTO 是输出功能,两者不要混淆。

② 电子齿轮比

伺服驱动器内部有一个参数把"收到的脉冲数"和"电机实际走的距离"关联起来。电子齿轮比 = 分子 / 分母。常见的设置是:

💡 新手建议:先将伺服驱动器的电子齿轮比设为 1:1(即 10000 pulse/rev),这样软件里计算最简单。

③ 加减速时间

机械系统在启停时有惯性——如果一瞬间就从 0 加速到 3000 rpm,电机会过载,机械会震动。S7-1200 的 Motion Control 会按工艺对象参数生成加减速曲线,你需要设置最大速度、加速度和减速度等参数。

1.3 脉冲输出类型

类型PLC输出点说明
Pulse + Direction1 个脉冲输出 + 1 个方向输出最常用,省输出点。方向为 0 正转,1 反转(可配置)
CW/CCW(正反转脉冲)2 个脉冲输出正转时一个口发脉冲,反转时另一个口发脉冲。占输出点多
A/B 相(正交编码)2 个相位差90°的脉冲一般不用在 PLC 发脉冲的场合,用于编码器反馈

本手册以 Pulse + Direction(脉冲+方向) 为例进行讲解。


🔌 第二章 · 硬件选型与接线

2.1 S7-1200 选型要求

PTO 功能需要 CPU 固件版本 V4.0 及以上,并且必须使用晶体管输出点或高速信号板/信号模块。继电器输出点不能直接发高速脉冲。不同 CPU 和输出点支持的数量、频率不同,选型时一定要按实际订货号查手册。

CPU/硬件PTO 使用建议典型频率备注
晶体管输出型 CPU(DC/DC/DC)可用本体高速输出做 PTO常见为 100 kHz;1217C 可更高新手优先选 1214C/1215C DC/DC/DC
继电器输出型 CPU(AC/DC/RLY)本体继电器点不能做 PTO需要加高速信号板或晶体管输出模块
SB/SM 高速输出模块用于补充 PTO 输出点或提高频率按模块手册确认不同订货号差异较大,不要只看 CPU 型号
1217C适合更高频率或更复杂的定位应用最高可到 1 MHz 级别成本更高,普通入门项目不必首选

💡 新手采购建议:直接选择 CPU 1214C DC/DC/DCCPU 1215C DC/DC/DC 更省事;如果现场已经是继电器型 CPU,再按手册补高速输出信号板或晶体管输出模块。

2.2 伺服驱动器选型建议

任何支持"脉冲+方向"控制的伺服驱动器都可以使用。常见品牌:

2.3 接线图(脉冲+方向)

S7-1200 的脉冲输出点不是随便选的,需要在 TIA Portal 的“脉冲发生器(Pulse generators)”里分配。下面是新人最常用的 PTO/PWM [0] 示例;更多轴请以你的 CPU、信号板和 TIA Portal 实际可选地址为准。

示例轴脉冲输出(Pulse)方向输出(Direction)
Axis_1(PTO/PWM [0])常见为 Q0.0常见为 Q0.1
Axis_2 及以上在设备组态中继续启用 PTO/PWM [1]、[2]、[3],按 TIA Portal 给出的可用输出点接线

接线方式(以 Axis_1 = Q0.0 Pulse, Q0.1 Direction 为例):

[ S7-1200 ]                    [ 伺服驱动器 ]
 ┌─────────┐                  ┌────────────┐
 │  Q0.0   ├─────── Pulse ────┤  PULSE+     │  ← 脉冲信号正
 │  GND    ├──────────────────┤  PULSE-     │  ← 脉冲信号负(接COM0)
 │         │                  │             │
 │  Q0.1   ├─────── DIR  ─────┤  SIGN+      │  ← 方向信号正
 │  GND    ├──────────────────┤  SIGN-      │  ← 方向信号负
 │         │                  │             │
 │  DO 点  ├─────── EN  ──────┤  SON        │  ← 伺服使能(Servo On)
 │  DO 点  ├─────── RESET ────┤  ALARM_RST  │  ← 报警清除
 └─────────┘                  │             │
                              │  24V+  ─────┤  ← 外接24V电源正
                              │  0V   ─────┤  ← 外接24V电源负
                              └────────────┘

⚠️ 重要提醒:S7-1200 晶体管输出为 24V 电平,如果伺服驱动器的脉冲输入是 5V 差分信号,需要加 24V→5V 脉冲转换模块(或使用集电极开路接法)。具体以你所用伺服的手册为准。

⚠️ 接线前先确认输出类型:S7-1200 晶体管输出有源型/漏型差异,伺服输入也可能是差分、集电极开路、NPN 或 PNP。PULSE-/SIGN- 不一定都能直接接 PLC 的 0V,必须按伺服手册的输入电路接线。

2.4 伺服驱动器的关键参数设置

无论你用什么牌子的伺服,以下几个参数必须设置正确:

参数推荐值说明
控制模式Pt(位置控制模式 / Position Mode)脉冲定位
脉冲输入类型Pulse + Direction(脉冲+方向)对应 PLC 的配置
电子齿轮比/指令脉冲数先设成 10000 pulse/rev 这类易算值不同品牌“分子/分母”的定义可能相反,按驱动器手册确认
脉冲输入逻辑按 PLC 输出和驱动器输入电路选择NPN/PNP、源型/漏型、正逻辑/负逻辑不要混用
SON(伺服使能)设置为外部端子控制由 PLC 的数字量输出控制
ALM(报警输出)接 PLC 数字量输入读取伺服报警状态

⚙️ 第三章 · TIA Portal 组态配置

本章以 TIA Portal V17 + S7-1200 1214C + 台达 ASDA-B2 为例(其他版本步骤类似)。

3.1 新建项目并添加 PLC

1 打开 TIA Portal,点击 创建新项目 → 输入项目名称 → 点击创建。

2 在项目树中双击 添加新设备 → 选择你的 CPU 型号(推荐 CPU 1214C DC/DC/DCCPU 1215C DC/DC/DC)→ 版本号选择你实际的固件版本 → 确定。

⚠️ 注意:如果你的 CPU 是 继电器输出型(RLY)无法直接输出脉冲。继电器输出的响应时间太长,必须在扩展机架上使用 晶体管输出模块(如 SM 1222 DQ 8×24VDC)才能使用 PTO。

3.2 启用脉冲发生器(PTO)

3 在设备组态中双击 CPU → 在底部的 属性 标签页中,展开 → 脉冲发生器(Pulse generators)

你通常会看到 PTO/PWM [0] ~ PTO/PWM [3]。实际可用数量取决于 CPU、信号板/信号模块和输出点是否已被占用。

4 点击 PTO/PWM [0]
参数设置
  ✓ 勾选 启用该脉冲发生器
  ✓ 信号类型:选 PTO(脉冲串输出)
  ✓ 硬件输出:示例为 DQ0.0(脉冲输出)和 DQ0.1(方向输出),以你的 TIA Portal 可选项为准
  ✓ 脉冲格式:选 Pulse_A_Dir_B(脉冲+方向)

CPU 会提醒你需要重新分配输出地址或者配置轴对象,点击确认即可。

3.3 创建工艺对象(TO_Axis_PTO)

这是西门子脉冲定位的核心步骤——在 TIA Portal 里创建一个"轴对象",把所有和这个轴相关的参数都放在里面。

5 在项目树中展开 工艺对象(Technology objects) → 双击 添加新对象
→ 选择 Motion ControlTO_Axis_PTO(轴) → 输入名称如 Axis_1 → 确定。

6 打开轴对象后,在组态向导中设参数:

① 驱动器:选择你刚刚启用的脉冲发生器(PTO/PWM [0])

② 编码器:选择 编码器未连接(实际值不反馈)(开环脉冲控制,不需要编码器反馈),或接编码器做位置检测跟踪(闭环)

③ 机械参数:这是最重要的设置,我在下面单独讲

3.4 机械参数设置(核心)

参数说明示例值
每转脉冲数电机转一圈需要多少个脉冲10000
每转距离电机转一圈,负载走多远(mm)10(丝杠导程 10mm)
速度单位选 mm/s 最直观mm/s
最大速度限制最高速度,防止飞车300 mm/s(按实际需求设)
启动/停止速度从 0 加速的起始速度10 mm/s
最大加速度加减速斜率,越大越快但越冲击500 mm/s²
急停加速度急停时更大的减速值2000 mm/s²

💡 计算示例
假设丝杠导程 10mm(电机转一圈,滑块走 10mm),伺服设定为 10000 pulse/rev。
→ 每个脉冲对应的距离 = 10mm ÷ 10000 = 0.001 mm = 1 μm
→ 精度为 1 μm/脉冲,对于绝大多数工控定位足够了。


💻 第四章 · Motion Control 编程

4.1 常用的 Motion Control 指令

S7-1200 的 Motion Control 是通过调用系统自带的指令块来实现的。最常用的几个:

指令功能说明
MC_Power轴软件使能必须循环调用,Enable=1 后轴对象才能接受运动指令。它不等同于硬件安全上电,伺服 SON/STO 仍需单独处理
MC_Home回原点让轴找到机械参考点,建立坐标零点
MC_MoveAbsolute绝对定位移动到坐标系中的指定位置(比如到 250mm 处)
MC_MoveRelative相对定位从当前位置继续往前走一段距离(比如再走 50mm)
MC_MoveVelocity速度模式以设定速度持续运行,直到被停止
MC_MoveJog点动手动模式点动正转或反转,常用于调试
MC_Halt停止按设定的减速度将轴减速停止
MC_Reset错误复位轴报错后清除错误状态

4.2 最小程序模板

下面是最小定位逻辑示意。实际项目还应补回零、停止、复位、限位和报警处理。

        ┌─────────────────────────────────────┐
        │           MC_Power_DB                │
  ──────┤ EN                        ENO ├─────
  "Axis1"┤ Axis                                   │
  "AxisEnable"┤ Enable                              │
   True  ┤ StopMode  ┌─────────────────────┐       │
        └────────────┤   MC_MoveAbsolute_DB │───────
                     │ EN          ENO │
              "Axis1"┤ Axis              │
              "Go"   │ Execute           │
               250.0 ┤ Position          │
                50.0 ┤ Velocity          │
                     └───────────────────┘

对应的梯形图逻辑:

// 网络 1:轴软件使能
// MC_Power 需要在 OB1 中循环调用
   "AlwaysTrue"               MC_Power_DB
   ──┤├───────────────────────┬─ EN ──────────
                              │ Axis := "Axis1"
                    ┌─────────┤ Enable := "PLC_Tag_AxisEnable"
                    │         │ StopMode := 0
                    │         │  ENO ────────
                    │         └────────────────
                    │
                    ▼  // 网络 2:绝对定位
                    MC_MoveAbsolute_DB
                    ├─ EN ──────────
                    │ Axis := "Axis1"
                    │ Execute := "StartMove"
                    │ Position := 250.0    // 目标位置 250mm
                    │ Velocity := 50.0     // 速度 50mm/s
                    │  ENO ────────
                    └────────────────

💡 每个 MC 指令都需要一个背景数据块(Instance DB)来存储运行数据。当你拖拽指令到编程区时,TIA Portal 会自动弹出提示框让你创建 DB,建议取名和指令对应(如 MC_Power_DB、MC_MoveAbsolute_DB)。

4.3 回原点(MC_Home)

绝对定位前必须先回原点。回原点的三种方式:

方式说明适用场景
直接回零(Direct)直接把当前位置设为指定坐标调试时最快,上电后把机械移到原点位置后用这个
主动回零(Active)轴按设定速度寻找原点/参考点开关,找到后建立零点脉冲控制项目最常用,适合操作员一键回零
带编码器零脉冲的回零参考点开关 + 编码器零脉冲需要接入实际编码器反馈,精度更高但接线和组态更复杂
// 回零指令(主动回零示例)
   "MC_Home_DB"(Axis := "Axis1",
                Execute := "HomeTrigger",
                Position := 0.0,
                Mode := 3);       // Mode 值按 TIA 帮助/工艺对象向导确认

⚠️ 回零不是可选项:开环 PTO 控制只知道 PLC 发出了多少脉冲,不知道负载实际在哪里。上电后如果不回零就做绝对定位,坐标基准可能是错的。


🔧 第五章 · 实战案例:一个完整的定位程序

5.1 项目需求

5.2 编程步骤

1 创建 DB 变量:在 PLC 变量表中创建以下变量

名称             | 数据类型  | 地址      | 注释
─────────────────┼──────────┼──────────┼────────────────
Axis1_Enable     | Bool     | M0.0     | 轴软件使能
Axis1_HomeBtn    | Bool     | M0.1     | 回零按钮
Axis1_StartBtn   | Bool     | M0.2     | 启动定位按钮
Axis1_StopBtn    | Bool     | M0.3     | 停止按钮
Axis1_Emergency  | Bool     | M0.4     | 急停按钮
Axis1_IsHomed    | Bool     | M0.5     | 已回零标志
Axis1_IsBusy     | Bool     | M0.6     | 运行中标志
Axis1_TargetPos  | Real     | MD10     | 目标位置 (mm)
Axis1_Speed      | Real     | MD14     | 运行速度 (mm/s)
Axis1_HasError   | Bool     | M0.7     | 指令错误标志
Axis1_ResetBtn   | Bool     | M1.0     | 错误复位按钮
Axis1_Done       | Bool     | M1.1     | 定位完成标志
Axis1_ErrorCode  | Word     | MW18     | 错误代码

2 编写主程序(Main [OB1])

网络 1 — 轴软件使能(循环调用)

     "Axis1_Enable"
   ──┤├─────────────────────── MC_Power_DB(EN)
                              Axis := "Axis1"
                              Enable := "Axis1_Enable"
                              StopMode := 0

⚠️ 不要在多个网络重复调用同一个 MC_Power 背景 DB。同一个轴的同一个 MC 指令实例应只保留一处循环调用,通过变量改变 Enable/StopMode,而不是在急停网络里再调用一次。

网络 2 — 回零

   "Axis1_HomeBtn"  "Axis1_IsHomed"
   ──┤├───────┤/├────────────────── MC_Home_DB(EN)
                                    Axis := "Axis1"
                                    Execute := "Axis1_HomeBtn"
                                    Position := 0.0
                                    Mode := 3
                                    Done => "Axis1_IsHomed"

网络 3 — 绝对定位

  "Axis1_StartBtn" "Axis1_IsHomed" "Axis1_Emergency"
──┤├───────┤├───────┤/├──────── MC_MoveAbsolute_DB(EN)
                                 Axis := "Axis1"
                                 Execute := "Axis1_StartBtn"
                                 Position := "Axis1_TargetPos"
                                 Velocity := "Axis1_Speed"
                                 Busy => "Axis1_IsBusy"
                                 Error => "Axis1_HasError"
                                 ErrorID => "Axis1_ErrorCode"
                                 Done => "Axis1_Done"

💡 Execute 信号建议用上升沿:按钮常常会保持多个扫描周期,正式程序里建议先用 R_TRIG 做启动沿,再把沿信号接到 MC_HomeMC_MoveAbsoluteMC_Halt 的 Execute。

网络 4 — 停止(可选)

   "Axis1_StopBtn"
   ──┤├──────────────────────── MC_Halt_DB(EN)
                                Axis := "Axis1"
                                Execute := "Axis1_StopBtn"

网络 5 — 停止与安全急停

// 软件停止:按下 Axis1_StopBtn 时触发 MC_Halt,让轴按减速度停下。
// 安全急停:必须走硬件急停/STO/安全继电器回路,同时复位 Axis1_Enable。
// 不要把“MC_Power Enable := 0”当成唯一急停手段。

网络 6 — 错误复位

   "Axis1_ResetBtn"
   ──┤├──────────────────────── MC_Reset_DB(EN)
                                Axis := "Axis1"
                                Execute := "Axis1_ResetBtn"

5.3 调试步骤

  1. 下载程序到 PLC,将 CPU 切换到 RUN 模式。
  2. 伺服上电:确保伺服驱动器已通电且无报警。将 Axis1_Enable 置 1。
  3. 手动回零:将轴手动移动到机械原点位置(或接近原点),触发 Axis1_HomeBtn,观察 Axis1_IsHomed 变为 True。
  4. 点动测试:如果你还编写了点动程序(MC_MoveJog),先用点动确认方向正确。
  5. 定位测试:将 Axis1_TargetPos 设为 50.0,速度设为 20.0,触发 Axis1_StartBtn。观察轴是否移动到 50mm 处。
  6. 逐步增加:如果 50mm 定位正确,逐步增大距离和速度到目标值(250mm, 50mm/s)。

💡 初次调试黄金法则:先低速小距离测试(比如 5mm, 10mm/s),确认方向和位置都正确后再上高速大距离。这一步能避免撞机。


❌ 第六章 · 常见问题与排错

问题可能原因解决办法
轴不动,MC_Power 报错 ① 脉冲发生器未组态
② 轴对象与脉冲发生器未关联
③ MC_Power 未循环调用或 Enable 条件不成立
④ 伺服 SON/STO 未满足
检查 PTO 组态;检查轴对象驱动器参数;在线监控 Enable、Status、ErrorID;确认伺服硬件使能链路正常
电机方向反了 ① 方向信号极性不对
② 伺服方向参数设置相反
在轴对象中勾选"反向方向",或在伺服驱动器中反转方向参数
电机运行抖动 ① 加减速时间过短
② 速度过低导致脉冲频率过低
③ 伺服刚性参数不合适
增大加速时间;提高最低速度;调整伺服驱动器刚性增益
定位不准确,误差大 ① 电子齿轮比计算错误
② 每转脉冲数/距离设置错误
③ 丝杠有间隙或打滑
重新校准机械参数;检查电子齿轮比(用示波器测脉冲数)
MC_MoveAbsolute 不执行 ① 轴未回零(绝对定位未建立坐标基准)
② Execute 没有形成有效上升沿
③ 轴仍处于 Busy、Error 或未使能状态
先执行 MC_Home;用 R_TRIG 产生 Execute 上升沿;在线监控 Busy、Error、ErrorID 和 Status
轴运行一段后突然停 ① 驱动器报警(过载/过流/编码器断线)
② 伺服使能被断开
查看伺服驱动器报警代码,对照手册排错
CPU SF/BF 灯亮 PTO/PWM 输出地址被普通 DQ、PWM 或其他工艺功能重复使用 在设备组态中确认 Q0.0/Q0.1 等 PTO 输出点没有被重复分配;重新编译硬件组态查看诊断信息

⚠️ 最常见的坑:在硬件组态中启用了 PTO 后,对应输出点会被工艺功能占用。如果你在同一工程中又把这些点当普通数字量输出使用,会导致地址冲突或硬件诊断错误。

6.1 如何快速定位问题

  1. 看伺服驱动器面板:大部分伺服会显示状态和报警代码。这是排查最快的入口。
  2. 看 PLC 指示灯:Q0.0 对应的 LED 是否在闪烁?(如果没闪说明 PLC 没输出脉冲)
  3. 用 TIA Portal 的诊断功能:在"工艺对象"→ "Axis_1" → "诊断" 标签页中可以看到轴当前状态、速度和错误信息。
  4. 测脉冲:优先用示波器或高速计数器确认 Q0.0 是否有脉冲。万用表频率档只能做低频粗测,高频或窄脉冲不一定读得准。按本例 10mm/rev、10000 pulse/rev、50mm/s 计算,脉冲频率约为 50 kHz。

📈 第七章 · 进阶建议

7.1 从脉冲到总线——什么时候该升级?

脉冲控制虽然简单,但有一些局限性:

当你的项目出现以下情况,建议考虑 PROFINET 总线控制(如西门子 V90 PN 或汇川 IS810N):

7.2 安全注意事项

🚨 安全第一

① 调试时先拆开负载联轴器,或把伺服速度/转矩限制到很低,确认方向、回零和限位都正确后再带载。
② 必须安装硬件急停和伺服安全断能回路(如 STO/安全继电器/主接触器),不要只依赖 PLC 程序停止。
③ 正限位、负限位和原点开关要接入 PLC,并在工艺对象或程序中同时设置软件限位。
④ 首次运行前确认机械行程内无人、无工具、无夹具干涉,再用低速小距离测试。

7.3 推荐的继续学习路线

  1. 先会走:脉冲+方向 + 绝对定位 + 回零 → 跑通一个轴
  2. 再会跑:加编码器做闭环反馈(Axis 的"编码器"配置为实际编码器)
  3. 再会多轴:两组 PTO 同时控制两个伺服
  4. 进阶总线:学 PROFINET 与 V90 PN 的组态,用 111 号报文做位置控制
  5. 再往上:S7-1500 + SINAMICS S120 + 电子凸轮 + 复杂的运动学控制

"脉冲控制是运动控制的基础——就像学车先学手动挡。如果你能把脉冲控制搞明白,将来上总线控制时你会理解得更深,踩坑也更少。"

—— 虾仁