『7x24小时有问必答』
副标题
: 让伺服成为PLC的"精密执行器"

一、PLC与伺服通信的本质

伺服驱动器是PLC的"精密执行器"——PLC发位置/速度命令,伺服精确执行。
[tr][td]通信方式[/td][td]控制内容[/td][td]精度[/td][td]响应时间[/td][td]适用场景[/td][/tr][tr][td]脉冲+方向[/td][td]位置/速度[/td][td]±1脉冲[/td][td]<1ms[/td][td]简单定位[/td][/tr][tr][td]模拟量[/td][td]速度/扭矩[/td][td]±1%[/td][td]<5ms[/td][td]速度控制[/td][/tr][tr][td]总线通信[/td][td]全参数[/td][td]±0.1%[/td][td]<1ms[/td][td]精密控制[/td][/tr]
通信需求分析
PLC → 伺服:
- 位置命令(脉冲/数字量)
- 速度命令(模拟量/数字量)
- 扭矩命令(模拟量/数字量)
- 使能命令
- 清零命令
伺服 → PLC:
- 使能状态
- 当前位置
- 当前速度
- 当前扭矩
- 报警代码
- 跟随误差

二、脉冲控制:最经典的方式

2.1 脉冲接线

PLC脉冲输出 → 伺服脉冲输入:
Y0 → PULS+ (脉冲+)
Y1 → PULS- (脉冲-)
Y2 → SIGN+ (方向+)
Y3 → SIGN- (方向-)
Y4 → SERV_ON (使能)
伺服输出 → PLC输入:
X0 ← ALM (报警)
X1 ← READY (准备就绪)
X2 ← IN_POS (到位)

2.2 脉冲控制模式

[tr][td]模式[/td][td]脉冲输入[/td][td]方向输入[/td][td]说明[/td][/tr][tr][td]脉冲+方向[/td][td]1路脉冲[/td][td]1路方向[/td][td]最常用[/td][/tr][tr][td]CW/CCW[/td][td]正转脉冲[/td][td]反转脉冲[/td][td]双绕组[/td][/tr][tr][td]A/B相[/td][td]2路相位差90°[/td][td]-[/td][td]编码器模拟[/td][/tr]

2.3 位置计算

移动距离(mm) = 脉冲数 × 丝杠螺距(mm) / 编码器分辨率(脉冲/转)
示例:
丝杠螺距 = 5mm
编码器分辨率 = 2500脉冲/转
目标移动 = 100mm
所需脉冲数 = 100 × 2500 / 5 = 50000 脉冲

2.4 ST语言实现

( 脉冲定位控制 )
VAR
( 脉冲输出 )
Pulse_Out AT %QX0.0: BOOL;
Dir_Out AT %QX0.1: BOOL;
Serv_On AT %QX0.2: BOOL;
( 输入信号 )
Serv_Ready AT %IX0.0: BOOL;
Serv_Alarm AT %IX0.1: BOOL;
Serv_InPos AT %IX0.2: BOOL;
( 定位参数 )
Target_Pos: DINT := 50000;    ( 目标位置 脉冲数 )
Current_Pos: DINT;            ( 当前位置 )
Pulse_Count: DINT;            ( 已输出脉冲数 )
Pulse_Freq: INT := 10000;     ( 脉冲频率 Hz )
Move_Done: BOOL;
( 定时器 )
Pulse_Timer: TON;
END_VAR
( 使能伺服 )
Serv_On := Serv_Ready;
( 定位执行 )
IF Serv_Ready AND NOT Serv_Alarm AND NOT Move_Done THEN
( 判断方向 )
IF Target_Pos > Pulse_Count THEN
Dir_Out := TRUE;
ELSE
Dir_Out := FALSE;
END_IF;
( 输出脉冲 )
Pulse_Timer(IN:=TRUE, PT:=T#50us);  ( 20kHz = 50us )
IF Pulse_Timer.Q THEN
Pulse_Out := NOT Pulse_Out;
Pulse_Count := Pulse_Count + 1;
Pulse_Timer(IN:=FALSE);
END_IF;
( 检查是否到达 )
IF ABS(Pulse_Count) >= ABS(Target_Pos) THEN
Move_Done := TRUE;
Pulse_Out := FALSE;
END_IF;
ELSE
Pulse_Out := FALSE;
Pulse_Count := 0;
END_IF;
( 位置复位 )
IF Reset_Button THEN
Pulse_Count := 0;
Move_Done := FALSE;
END_IF;

三、模拟量控制:速度/扭矩模式

3.1 模拟量接线

PLC模拟量输出 → 伺服模拟量输入:
AO0 (±10V) → SV1 (速度命令)
AO1 (±10V) → SV2 (扭矩命令)
伺服输出 → PLC输入:
X0 ← ALM (报警)
X1 ← READY (准备就绪)
X2 ← BUSY (运行中)

3.2 速度控制公式

速度(rpm) = 模拟量电压(V) × 最大速度(rpm) / 10V
示例:
模拟量 = 5V,最大速度 = 3000rpm
输出速度 = 5 × 3000 / 10 = 1500 rpm
示例:
模拟量 = -5V,最大速度 = 3000rpm
输出速度 = -5 × 3000 / 10 = -1500 rpm (反转)

3.3 ST语言实现

( 速度模拟量控制 )
VAR
( 模拟量输出 )
Speed_Cmd: REAL := 1500.0;    ( 速度命令 rpm )
Max_Speed: REAL := 3000.0;    ( 最大速度 rpm )
AO_Value: INT;
( 使能 )
Serv_On: BOOL := TRUE;
( 状态 )
Serv_Ready: BOOL;
Serv_Alarm: BOOL;
Serv_Busy: BOOL;
END_VAR
( 速度命令 → 模拟量输出 )
AO_Value := INT#(Speed_Cmd / Max_Speed * 27648.0);
AO0_Write(AO_Value);
( 使能伺服 )
Serv_On := TRUE;
( 状态监控 )
Serv_Ready := X1_Ready;
Serv_Alarm := X0_Alm;
Serv_Busy := X2_Busy;
IF Serv_Alarm THEN
( 读取报警代码 )
Alarm_Code := D100;
END_IF;

四、总线通信:精密控制

4.1 常见通信协议

[tr][td]协议[/td][td]伺服品牌[/td][td]特点[/td][/tr][tr][td]CC-Link[/td][td]三菱[/td][td]三菱生态,简单[/td][/tr][tr][td]EtherCAT[/td][td]安川/松下[/td][td]高速实时[/td][/tr][tr][td]PROFINET[/td][td]西门子[/td][td]西门子生态[/td][/tr][tr][td]EtherNet/IP[/td][td]罗克韦尔[/td][td]通用[/td][/tr][tr][td]Modbus TCP[/td][td]通用[/td][td]通用协议[/td][/tr]

4.2 三菱PLC + 三菱伺服 CC-Link通信

参数配置
[tr][td]参数[/td][td]设置[/td][/tr][tr][td]站号[/td][td]1-64[/td][/tr][tr][td]链接寄存器[/td][td]RWw0-RWw7 (PLC→伺服)[/td][/tr][tr][td]链接寄存器[/td][td]RWr0-RWr7 (伺服→PLC)[/td][/tr][tr][td]链接继电器[/td][td]Y0-Y15 (PLC→伺服)[/td][/tr][tr][td]链接继电器[/td][td]X0-X15 (伺服→PLC)[/td][/tr]

4.3 寄存器映射

[tr][td]CC-Link寄存器[/td][td]伺服功能[/td][td]说明[/td][/tr][tr][td]RWw0[/td][td]控制字[/td][td]使能、复位、模式选择[/td][/tr][tr][td]RWw1[/td][td]位置命令[/td][td]目标位置[/td][/tr][tr][td]RWw2[/td][td]速度命令[/td][td]目标速度[/td][/tr][tr][td]RWw3[/td][td]扭矩命令[/td][td]目标扭矩[/td][/tr][tr][td]RWr0[/td][td]状态字[/td][td]使能、报警、到位[/td][/tr][tr][td]RWr1[/td][td]当前位置[/td][td]实际位置[/td][/tr][tr][td]RWr2[/td][td]当前速度[/td][td]实际速度[/td][/tr][tr][td]RWr3[/td][td]跟随误差[/td][td]位置偏差[/td][/tr]

4.4 ST语言实现

( CC-Link通信 - 伺服控制 )
VAR
( 控制字 - 写入伺服 )
Ctrl_Word AT %MW100: WORD;
Target_Pos AT %MW101: DINT;
Target_Speed AT %MW103: INT;
Target_Torque AT %MW105: INT;
( 状态字 - 读取自伺服 )
Status_Word AT %MW200: WORD;
Actual_Pos AT %MW201: DINT;
Actual_Speed AT %MW203: INT;
Follow_Error AT %MW205: DINT;
( 控制命令 )
Serv_Enable: BOOL;
Serv_Reset: BOOL;
Move_Done: BOOL;
END_VAR
( 控制字设置 )
Ctrl_Word := 0;
IF Serv_Enable THEN
Ctrl_Word := Ctrl_Word OR 16#0001;  ( 使能 )
END_IF;
IF Serv_Reset THEN
Ctrl_Word := Ctrl_Word OR 16#0004;  ( 复位 )
Serv_Reset := FALSE;
END_IF;
( 位置命令 )
Target_Pos := 50000;
( 速度命令 )
Target_Speed := 1000;
( 读取状态 )
IF (Status_Word AND 16#0001) <> 0 THEN  ( 使能状态 )
Serv_Enabled := TRUE;
END_IF;
IF (Status_Word AND 16#0002) <> 0 THEN  ( 报警 )
Serv_Alarm := TRUE;
Alarm_Code := Status_Word;
END_IF;
IF (Status_Word AND 16#0004) <> 0 THEN  ( 到位 )
Move_Done := TRUE;
END_IF;
( 当前位置 )
Current_Pos := Actual_Pos;

五、深度案例分析:CNC机床伺服控制

5.1 背景

某小型CNC机床,X/Y/Z三轴伺服控制,精度要求±0.01mm。

5.2 问题经过

[tr][td]问题[/td][td]表现[/td][td]影响[/td][/tr][tr][td]定位不准[/td][td]偏差0.05mm[/td][td]加工精度不达标[/td][/tr][tr][td]跟随误差大[/td][td]高速时误差大[/td][td]表面粗糙[/td][/tr][tr][td]报警频繁[/td][td]过载报警[/td][td]停机时间长[/td][/tr]

5.3 解决方案

硬件配置
[tr][td][/td][td]伺服型号[/td][td]编码器[/td][td]通信方式[/td][/tr][tr][td]X轴[/td][td]MR-J4-20A[/td][td]2500脉冲/转[/td][td]CC-Link[/td][/tr][tr][td]Y轴[/td][td]MR-J4-20A[/td][td]2500脉冲/转[/td][td]CC-Link[/td][/tr][tr][td]Z轴[/td][td]MR-J4-10A[/td][td]2500脉冲/转[/td][td]CC-Link[/td][/tr]
参数设置
[tr][td]参数[/td][td]设置值[/td][td]说明[/td][/tr][tr][td]电子齿轮比[/td][td]1/1[/td][td]1脉冲=1μm[/td][/tr][tr][td]最大速度[/td][td]3000rpm[/td][td]根据机械限制[/td][/tr][tr][td]加速度[/td][td]1000rpm/s[/td][td]根据负载[/td][/tr][tr][td]跟随误差允许值[/td][td]100脉冲[/td][td]0.1mm[/td][/tr][tr][td]过载保护[/td][td]150%[/td][td]额定扭矩的150%[/td][/tr]
控制逻辑
( CNC三轴伺服控制 )
VAR
( 三轴控制字 )
Ctrl_X AT %MW100: WORD;
Ctrl_Y AT %MW102: WORD;
Ctrl_Z AT %MW104: WORD;
( 三轴位置命令 )
Pos_X_Cmd AT %MW106: DINT;
Pos_Y_Cmd AT %MW108: DINT;
Pos_Z_Cmd AT %MW110: DINT;
( 三轴状态 )
Status_X AT %MW200: WORD;
Status_Y AT %MW202: WORD;
Status_Z AT %MW204: WORD;
( 三轴当前位置 )
Pos_X_Atual AT %MW206: DINT;
Pos_Y_Atual AT %MW208: DINT;
Pos_Z_Atual AT %MW210: DINT;
( 控制状态 )
All_Ready: BOOL;
All_Done: BOOL;
Any_Alarm: BOOL;
END_VAR
( 三轴使能 )
Ctrl_X := Ctrl_X OR 16#0001;
Ctrl_Y := Ctrl_Y OR 16#0001;
Ctrl_Z := Ctrl_Z OR 16#0001;
( 三轴同时定位 )
IF Start_Motion THEN
Pos_X_Cmd := 10000;    ( 10mm )
Pos_Y_Cmd := 5000;     ( 5mm )
Pos_Z_Cmd := 2000;     ( 2mm )
END_IF;
( 三轴到位判断 )
All_Done := TRUE;
IF (Status_X AND 16#0004) = 0 THEN
All_Done := FALSE;
END_IF;
IF (Status_Y AND 16#0004) = 0 THEN
All_Done := FALSE;
END_IF;
IF (Status_Z AND 16#0004) = 0 THEN
All_Done := FALSE;
END_IF;
( 报警检测 )
Any_Alarm := FALSE;
IF (Status_X AND 16#0002) <> 0 THEN
Any_Alarm := TRUE;
Alarm_X := TRUE;
END_IF;
IF (Status_Y AND 16#0002) <> 0 THEN
Any_Alarm := TRUE;
Alarm_Y := TRUE;
END_IF;
IF (Status_Z AND 16#0002) <> 0 THEN
Any_Alarm := TRUE;
Alarm_Z := TRUE;
END_IF;

5.4 效果对比

[tr][td]指标[/td][td]优化前[/td][td]优化后[/td][td]提升[/td][/tr][tr][td]定位精度[/td][td]±0.05mm[/td][td]±0.008mm[/td][td]-84%[/td][/tr][tr][td]跟随误差[/td][td]500脉冲[/td][td]50脉冲[/td][td]-90%[/td][/tr][tr][td]过载报警[/td][td]频繁[/td][td]无[/td][td]显著改善[/td][/tr][tr][td]加工效率[/td][td]60%[/td][td]95%[/td][td]+35%[/td][/tr]

六、伺服参数设置

6.1 必设参数

[tr][td]参数[/td][td]名称[/td][td]设置值[/td][td]说明[/td][/tr][tr][td]Pn100[/td][td]位置环增益[/td][td]100[/td][td]位置响应速度[/td][/tr][tr][td]Pn101[/td][td]位置环积分[/td][td]50[/td][td]消除静差[/td][/tr][tr][td]Pn200[/td][td]速度环增益[/td][td]200[/td][td]速度响应速度[/td][/tr][tr][td]Pn201[/td][td]速度环积分[/td][td]10[/td][td]消除速度静差[/td][/tr][tr][td]Pn300[/td][td]电子齿轮比分子[/td][td]1[/td][td]脉冲倍率[/td][/tr][tr][td]Pn301[/td][td]电子齿轮比分母[/td][td]1[/td][td]脉冲倍率[/td][/tr]

6.2 保护参数

[tr][td]参数[/td][td]名称[/td][td]设置值[/td][td]说明[/td][/tr][tr][td]Pn400[/td][td]过载保护[/td][td]150%[/td][td]额定扭矩的150%[/td][/tr][tr][td]Pn401[/td][td]过速保护[/td][td]3500rpm[/td][td]最大速度的115%[/td][/tr][tr][td]Pn402[/td][td]跟随误差允许[/td][td]100脉冲[/td][td]位置偏差阈值[/td][/tr][tr][td]Pn403[/td][td]超程保护[/td][td]启用[/td][td]软限位[/td][/tr]

七、通信调试技巧

7.1 调试步骤

[tr][td]步骤[/td][td]操作[/td][td]说明[/td][/tr][tr][td]1[/td][td]检查接线[/td][td]脉冲/模拟量/通信线[/td][/tr][tr][td]2[/td][td]设置伺服参数[/td][td]电子齿轮比、控制模式[/td][/tr][tr][td]3[/td][td]测试使能[/td][td]伺服能否正常使能[/td][/tr][tr][td]4[/td][td]测试脉冲[/td][td]脉冲输出是否正常[/td][/tr][tr][td]5[/td][td]测试定位[/td][td]单轴定位精度[/td][/tr][tr][td]6[/td][td]联调测试[/td][td]多轴联动[/td][/tr]

7.2 常见问题排查

[tr][td]问题[/td][td]可能原因[/td][td]解决方案[/td][/tr][tr][td]伺服不使能[/td][td]使能信号未给出[/td][td]检查Y4输出[/td][/tr][tr][td]定位不准[/td][td]电子齿轮比错误[/td][td]检查Pn300/Pn301[/td][/tr][tr][td]跟随误差大[/td][td]增益过低[/td][td]增大Pn100[/td][/tr][tr][td]报警过载[/td][td]负载过大[/td][td]检查机械负载[/td][/tr]

八、核心公式与工具

8.1 脉冲计算速查

脉冲数 = 目标距离(mm) × 1000 / 精度(μm)
示例:移动10mm,精度1μm
脉冲数 = 10 × 1000 / 1 = 10000 脉冲
脉冲频率 = 目标速度(mm/s) × 1000 / 精度(μm)
示例:速度100mm/s,精度1μm
频率 = 100 × 1000 / 1 = 100000 Hz = 100kHz

8.2 通信选择决策树

控制精度要求?
├─ ±1mm → I/O端子
├─ ±0.1mm → 脉冲控制
└─ ±0.01mm → 总线通信
需要读取状态?
├─ 否 → 脉冲控制
└─ 是 → 总线通信

九、金句集锦

本文基于三菱PLC与三菱MR-J4伺服驱动器通信实战经验整理,涵盖脉冲控制、模拟量控制、CC-Link通信、CNC案例等核心主题。
推荐阅读
三菱GX Works3 028:安全PLC编程——SIL2/SIL3安全功能实战
发布于 2026-05-27
三菱 PLC 教程 02:iQ-R 系列硬件组成
发布于 202603
NACHI 机械手教程第 4 章:编程基础
发布于 202603
KEYWORDS
PLC, ST语言, IL, 三菱, 西门子
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码