『7x24小时有问必答』
基于EtherCAT总线的2位位置控制功能完整实施方案
— — — — — — — — — — —
在自动化设备开发中,不同品牌PLC与伺服驱动器的配合使用是非常普遍的需求。欧姆龙NJ系列PLC凭借强大的运动控制能力,配合EtherCAT总线的高效通信,可以实现与第三方伺服驱动器的无缝集成。本文以一个典型的"欧姆龙NJ501-1300 + 信捷DS5C1 + MS6H电机"组合为例,从硬件连接、软件配置到ST语言程序实现,完整演示2位位置控制功能的开发过程。
所谓"2位控制",是指伺服电机在两个固定位置之间进行精确往返运动——比如一个简单的"取料-放料"动作,或者"夹紧-松开"的位置切换。这是自动化设备中最基础也最常见的运动控制需求。
— — — — — — — — — — —

一、系统概述与选型依据

1.1 系统架构

本系统的核心架构为:欧姆龙NJ501-1300 PLC作为EtherCAT主站,通过EtherCAT总线连接信捷DS5C1伺服驱动器(从站),驱动器再驱动MS6H系列伺服电机。整个系统的运动控制通过欧姆龙Sysmac Studio软件进行配置和编程。
系统数据流如下:
    上位机(HMI) → NJ501-1300(EtherCAT主站) → DS5C1(从站) → MS6H(伺服电机)

1.2 核心设备清单

设备
型号
关键参数
角色
PLC控制器
NJ501-1300
16轴伺服控制     20MB内存

     EtherCAT主站
主站/运动控制器
伺服驱动器
DS5C1-20P4-PTA
400W功率

     EtherCAT总线

     RJ45接口
EtherCAT从站
伺服电机
MS6H-60CM30B3-20P4
400W/1.27Nm

     3000rpm

     17位编码器
执行机构

1.3 NJ501-1300控制器简介

NJ501-1300是欧姆龙NJ5系列的中高端CPU单元,内置EtherCAT主站端口,最大支持16轴同步伺服控制,最多可连接192个EtherCAT从站节点。其核心特点包括:
·             内置双端口EtherCAT主站(支持菊花链拓扑)
·             PLC引擎与运动引擎同步,控制周期最低0.5ms
·             支持PLCopen标准的MC运动控制功能块
·             配备EtherNet/IP端口,方便与上位机/HMI通信
·             20MB程序/数据内存,满足复杂应用需求
·             支持ST(结构化文本)语言编程

1.4 DS5C1伺服驱动器简介

信捷DS5C1系列是新一代EtherCAT总线型伺服驱动器,相较上一代产品体积缩小41%,采用欧式插拔端子,接线更便捷。核心特性:
·             EtherCAT总线通信,通讯周期 < 1ms(32轴同时工作)
·             分布式时钟(DC)实现精准同步
·             标准RJ45通信接口,布线效率高
·             支持3路DI/3路DO,可做限位/原点信号接入
·             支持位置、速度、转矩三种控制模式
·             支持两路高速探针功能
·             支持上位机组网调试,连接一台即可配置所有伺服设备
·             适配MS5/MS6S/MS6H/MS6G等多系列电机

1.5 MS6H伺服电机简介

MS6H系列是信捷高惯量伺服电机,通过合理的电磁优化设计,温升比MS5系列降低15-20°C,具有更高的可靠性。典型400W型号参数如下:
参数
数值
参数
数值
额定功率
400W
额定转速
3000 rpm
额定转矩
1.27 N·m
最高转速
4500 rpm
额定电流
2.8A
编码器
17位(可选19/23位)
转子惯量
高惯量
防护等级
IP67
法兰尺寸
60mm
电源
AC 220V
— — — — — — — — — — —

二、硬件连接详解

2.1 EtherCAT总线连接

EtherCAT总线采用标准的RJ45网口连接,支持菊花链拓扑(即进线从一个端口进入,出线从另一个端口级联到下一个设备)。NJ501-1300的EtherCAT端口位于控制器正面,标注为"EtherCAT"的RJ45端口。
<b>EtherCAT接线规则:
·             使用标准CAT5e/CAT6屏蔽网线(STP)
·             网线最大长度不超过100米(每段)
·             EtherCAT IN/OUT注意方向,总线末端需连接终端电阻(或使用带终端电阻的T型连接器)
·             NJ501的EtherCAT端口1(Port 1)为进线口,端口2(Port 2)为出线口(级联下一个设备)
·             总线上最后一个从站的OUT端口不连接或连接终端电阻
·             EtherCAT网线与普通以太网线外形相同,但功能不同,切勿混用网络交换机
物理连接示意:
NJ501-1300 PLC┌──────────────────┐

  [EtherCAT Port1]├──── RJ45网线  ────┐

  [EtherCAT Port2]├──────────────────┘│ (菊花链级联)

  [EtherNet/IP    ] │                              

  [USB]                                               

└──────────────────┘                              

                                                            

                                            ┌─────────▼─────────┐

                                                  DS5C1  驱动器         

                                                  [EtherCAT IN] ←──┤

                                                  [EtherCAT OUT]──→├──→ (下一个设备或终端)

                                                  [U/V/W  电源输出]   

                                                  [编码器接口]           

                                                  [DI/DO端子]           

                                            └────────┬──────────┘

                                                           │  动力线缆

                                                           │ (U/V/W +  编码器线)

                                            ┌────────▼──────────┐

                                                  MS6H  伺服电机        

                                                  [动力线  U/V/W]      

                                                  [编码器线]            

                                                  [抱闸线](可选)      

                                             └───────────────────┘

2.2 动力线缆连接(驱动器→电机)

DS5C1驱动器与MS6H电机之间的动力线缆连接是整个系统中最关键的接线部分。需严格按照以下要求执行:
<b>(1)动力线连接
驱动器端子
电机端子
线缆规格
说明
U
U
AWG14~16 (2.5mm²)
电机U相动力线
V
V
AWG14~16 (2.5mm²)
电机V相动力线
W
W
AWG14~16 (2.5mm²)
电机W相动力线
PE
PE (机壳)
AWG14 (2.5mm²)
保护接地线
<b>(2)编码器线连接
MS6H电机标配17位编码器,编码器线为专用屏蔽线缆,由信捷原厂提供。编码器线插头与DS5C1驱动器上的编码器接口为配套设计,直接插接即可。编码器线另一端连接到电机上的编码器接口。
(3)抱闸线连接(如电机带抱闸)
驱动器端子
说明
备注
BRK+ / BRK-
制动抱闸控制
仅带抱闸电机需要连接
R / S / T
主电源输入
AC 220V 单相
L1 / L2
控制电源输入
AC 220V 单相

2.3 DI/DO端子接线

DS5C1驱动器标配3路DI(数字输入)和3路DO(数字输出),可用于接限位开关、原点开关、外部使能等信号。在本2位控制方案中,推荐接线如下:
<b>端子
方向
功能
接线说明
DI1
输入
正向限位(+OT)
连接正向限位开关常开触点
DI2
输入
反向限位(-OT)
连接反向限位开关常开触点
DI3
输入
原点信号(ORG)
连接原点传感器信号
DO1
输出
伺服就绪(SRDY)
可接指示灯,表示伺服就绪
DO2
输出
定位完成(POS_CMP)
可接指示灯,表示定位完成
DO3
输出
报警输出(ALM)
可接报警器或指示灯
<b>️ 注意事项
1. DI信号建议使用NPN型(漏型)接线方式,公共端接0V;     2. DI/DO的外部供电电源建议为DC 24V,与PLC供电分开以减少干扰;

     3. 动力线与信号线必须分开走线,间距至少10cm,避免电磁干扰;

     4. 所有线缆的屏蔽层必须单端接地(推荐驱动器端接地);

     5. 系统必须可靠接地,接地电阻不大于4Ω。

2.4 电源连接

<b>供电对象
电源规格
说明
NJ501-1300
DC 24V (20%容差)
通过内置DC-DC转换器供电
DS5C1驱动器
AC 220V 50/60Hz
主电源R/S/T,控制电源L1/L2
MS6H电机
由驱动器供电
通过驱动器U/V/W输出,无需外部供电
DI/DO外部信号
DC 24V
限位开关、指示灯等外部设备供电
— — — — — — — — — — —

三、Sysmac Studio软件配置

硬件连接完成后,需要在Sysmac Studio中进行EtherCAT总线配置、ESI文件安装、PDO映射和轴参数设置。以下是完整的配置流程。

3.1 安装信捷DS5C1的ESI文件

ESI(EtherCAT Slave Information)文件是EtherCAT从站的设备描述文件(XML格式),必须安装后Sysmac Studio才能识别信捷DS5C1驱动器。
<b>安装步骤:
1. 从信捷电气官网(www.xinje.com)下载DS5C1系列的ESI文件,文件名通常为"DS5C1.xml"或类似命名;
2. 关闭Sysmac Studio软件;
3. 将ESI文件复制到Sysmac Studio安装目录下的ESI文件夹中,默认路径为:C:\Program Files (x86)\OMRON\Sysmac Studio\EtherCAT\ESI\;

如果找不到该目录,也可以在软件中通过菜单导入;
4. 重新启动Sysmac Studio软件;
5. 验证安装成功:在EtherCAT工具箱中搜索"XINJE"或"DS5C1",如果能找到对应型号,说明ESI安装成功。
<b> 提示
安装ESI文件后务必重启Sysmac Studio。如果ESI文件版本不匹配导致配置异常,请到信捷官网下载最新版本。     部分信捷ESI文件可能需要手动在Sysmac Studio菜单中执行"显示ESI库 → 安装"操作来导入。

3.2 新建工程与硬件组态

<b>操作步骤:
1. 新建工程:打开Sysmac Studio,文件 → 新建 → 设备选择NJ501-1300,版本选择v1.07或更高;
2. 添加EtherCAT主站:在"多视图 → 配置和设置"中,展开控制器下的EtherCAT节点;
3. 添加从站:在右侧工具箱中找到已安装的信捷DS5C1型号,双击或拖拽到EtherCAT总线上;
4. 设置从站地址:选中添加的从站节点,设置其Station Alias(站号别名),建议设为1(第1个从站);
5. 设置同步模式:选中从站 → 属性 → 同步模式选择"Distributed Clock"(分布式时钟),确保与主站同步;
6. 下载配置到PLC:确认所有设置无误后,点击"传输到控制器"将配置下载到NJ501-1300。

3.3 PDO映射配置

PDO(Process Data Object,过程数据对象)是EtherCAT主站与从站之间实时交换数据的通道。正确的PDO映射是2位位置控制功能正常工作的前提。
在本方案中,DS5C1驱动器需要配置以下PDO映射(CSProfile模式):
(1)RxPDO(主站→从站,控制指令)
对象地址
索引
子索引
功能说明
数据类型
0x6040
00
控制字(Control Word)
UINT16
0x6060
00
操作模式(Modes of Operation)
INT8
0x607A
00
目标位置(Target Position)
INT32
0x6081
00
目标速度(Profile Velocity)
UINT32
0x6083
00
加速度(Profile Acceleration)
UINT32
0x6084
00
减速度(Profile Deceleration)
UINT32
<b>(2)TxPDO(从站→主站,状态反馈)
对象地址
索引
子索引
功能说明
数据类型
0x6041
00
状态字(Status Word)
UINT16
0x6064
00
实际位置(Position Actual Value)
INT32
0x606C
00
实际速度(Velocity Actual Value)
INT32
0x6077
00
转矩实际值(Torque Actual Value)
INT16
0x603F
00
错误代码(Error Code)
UINT16
<b>配置PDO映射的步骤:
1. 在Sysmac Studio中选中已添加的DS5C1从站节点;
2. 在属性面板中找到"PDO映射设置"或"Process Data"选项;
3. 确认RxPDO和TxPDO的映射关系如上表所示;
4. 如果默认映射不符合需求,可以通过"编辑PDO"手动调整映射对象;
5. 2位位置控制模式(CiA 402 Profile)下,操作模式需设置为 8(CS模式)或 1(PP模式);
6. 注意:使用第三方驱动器时,欧姆龙的"自动伺服参数设置"功能不可用,需手动配置。

3.4 轴参数设置

在Sysmac Studio中创建伺服轴并设置运动参数:
1. 创建轴:在"多视图 → 运动控制设置"中,右键添加新的轴(Axis),命名为"Axis_Servo1";
2. 绑定从站:在轴设置中,将该轴绑定到EtherCAT总线上已添加的DS5C1从站;
3. 设置编码器分辨率:根据MS6H电机编码器规格设置,17位编码器对应的脉冲数为 131072 PPR;
4. 设置单位换算:设置"电机每转脉冲数"和"机械每转位移量",例如丝杠导程5mm则设置位移为5mm/rev;
5. 设置速度限制:设置最大速度、最大加减速度等安全参数;
6. 设置限位信号:绑定DI1(正向限位)和DI2(反向限位)到轴的限位输入;
7. 设置原点信号:绑定DI3(原点传感器)到轴的原点输入;
8. 设置回零参数:选择回零方式(推荐"原点传感器+限位开关"方式)。
参数名称
推荐设置值
说明
轴名称
Axis_Servo1
自定义,方便编程时识别
控制方式
位置控制(PP/CSP)
2位控制需要位置模式
编码器分辨率
131072 (17位)
对应MS6H的17位编码器
每转位移
5mm (丝杠导程)
根据实际机械结构设置
最大速度
300mm/s
根据工艺需求设定
最大加速度
2000mm/s²
根据负载惯量设定
最大减速度
2000mm/s²
根据负载惯量设定
正向软限位
由硬件限位决定
配合正向限位开关
反向软限位
由硬件限位决定
配合反向限位开关
— — — — — — — — — — —

四、ST语言程序实现——2位位置控制

本章是本文的核心内容。我们将使用ST(Structured Text,结构化文本)语言编写完整的2位位置控制程序,实现电机在"位置A"和"位置B"之间的精确往返运动。

4.1 2位控制功能需求

典型的2位控制场景如下:
    位置A:原点位置(HOME),例如 0.0mm —— 机械原点或待机位
    位置B:工作位置(WORK),例如 150.0mm —— 取料/放料/加工位
<i>运动流程:上电→使能→回原点→等待启动信号→移动到位置B→等待→返回位置A→等待→循环...</i>
<b>功能要求:
·             支持手动/自动模式切换
·             手动模式下支持点动正转/反转
·             自动模式下循环执行:A位→B位→A位→B位...
·             支持急停和异常报警
·             支持一键回原点功能

4.2 变量定义

在Sysmac Studio的全局变量表中定义以下变量:
// ============================================================//  全局变量定义  - 2位位置控制

// ============================================================

// ---  控制输入信号  ---

bAutoMode           : BOOL;                //  自动模式选择  (TRUE=自动, FALSE=手动)

bStart                : BOOL;                //  自动循环启动按钮  (上升沿触发)

bStop                 : BOOL;                //  停止按钮

bHomeReq             : BOOL;                //  回原点请求按钮

bJogFwd              : BOOL;                //  手动点动正转

bJogBwd              : BOOL;                //  手动点动反转

bReset                : BOOL;                //  故障复位按钮

bEmergencyStop    : BOOL;                //  急停信号  (0=急停激活)

// ---  位置参数  ---

rPositionA          : LREAL := 0.0;           //  位置A -  原点位  (mm)

rPositionB          : LREAL := 150.0;        //  位置B -  工作位  (mm)

rMoveSpeed          : LREAL := 200.0;        //  移动速度  (mm/s)

rAccel                : LREAL := 1000.0;       //  加速度  (mm/s²)

rDecel                : LREAL := 1000.0;       //  减速度  (mm/s²)

rJogSpeed           : LREAL := 50.0;          //  点动速度  (mm/s)

// ---  状态标志  ---

bAxisEnabled       : BOOL;                //  轴已使能

bHomed                : BOOL;                //  已回原点标志

bMovingToB          : BOOL;                //  正在向B位移动

bMovingToA          : BOOL;                //  正在向A位移动

bMoveDone           : BOOL;                //  本次移动完成

bCycleRunning     : BOOL;                //  自动循环运行中

nCycleCount        : UINT := 0;        //  循环计数

// ---  轴引用  ---

Axis_Servo1        : AXIS_REF;          //  伺服轴引用  (Sysmac Studio中绑定)

// --- MC功能块实例  ---

fbPower              : MC_Power;                      //  轴使能

fbHome                : MC_Home;                       //  回原点

fbMoveAbs_A        : MC_MoveAbsolute;           //  移动到位置A

fbMoveAbs_B        : MC_MoveAbsolute;           //  移动到位置B

fbJog                 : MC_Jog;                         //  点动

fbStop                : MC_Stop;                       //  停止

fbReset              : MC_Reset;                      //  复位

4.3 轴使能与回原点程序

<b>轴使能是所有运动控制的前提。使用MC_Power功能块实现:
// ============================================================//  1步:轴使能控制  (MC_Power)

// ============================================================

// MC_Power功能块用于控制驱动器的使能/去使能状态

// Enable=TRUE →  伺服使能,电机锁定,可以接受运动指令

// Enable=FALSE →  伺服去使能,电机自由,不响应运动指令

fbPower(

     Axis          := Axis_Servo1,          //  轴引用

     Enable       := NOT bEmergencyStop, //  非急停时使能

     Stop          := bStop,                    //  停止信号

     Status       => bAxisEnabled,          //  使能状态反馈

     Busy          => ,                            //  忙标志

     Error        => ,                             //  错误标志

     ErrorID     =>                               //  错误代码

);
<b>回原点程序:
// ============================================================//  2步:回原点控制  (MC_Home)

// ============================================================

//  回原点是位置控制的基础,必须在使能后执行

//  使用"原点传感器+限位开关"方式回零

fbHome(

     Axis                   := Axis_Servo1,

     Execute              := bHomeReq,                      //  触发回原点

     StartDirection    := _MC_Dir_Positive,           //  起始搜索方向:正向

     HomingMode          := _MC_Homing_BlockStartRef, //  回零模式

     Speed                 := rJogSpeed * 0.5,             //  回零速度(较低)

     Acceleration       := rAccel * 0.5,                  //  回零加速度

     Deceleration       := rDecel * 0.5,                 //  回零减速度

     HomeOffset          := 0.0,                               //  原点偏移  (mm)

     Done                   => bHomingDone,                   //  回零完成标志

     Busy                   => ,                                   //  忙标志

     Error                 => ,                                   //  错误标志

     ErrorID              =>                                      //  错误代码

);

//  回零完成后更新标志

IF bHomingDone THEN

     bHomed := TRUE;

END_IF;
<b> MC_Home回零模式说明
_MC_Homing_BlockStartRef(块起始参考):正向搜索到限位开关后,反向离开限位开关,     再次正向搜索原点传感器信号上升沿作为原点。这是最可靠的原点搜索方式。

     其他可选模式:

     • _MC_Homing_LimitSwitchRef:仅使用限位开关作为原点参考

     • _MC_Homing_HomeSensor:仅使用原点传感器

     • _MC_Homing_Immediate:将当前位置直接设为原点

     • _MC_Homing_SetPosition:软件直接设置原点位置值

4.4 2位自动循环控制程序

<b>以下程序实现核心的2位自动循环功能——电机在位置A(0mm)和位置B(150mm)之间往返运动:
// ============================================================//  3步:2位自动循环控制

// ============================================================

//  状态机方式实现  A → B → A → B  循环

//  使用顺序控制确保每一步完成后才执行下一步

// ----  自动循环启动/停止  ----

IF bStart AND bHomed AND bAxisEnabled AND NOT bCycleRunning THEN

     //  满足条件:已启动  +  已回原  +  已使能  +  当前未运行

     bCycleRunning := TRUE;           //  启动循环

     bMovingToB     := TRUE;             //  先向B位移动

     bMovingToA     := FALSE;

     nCycleCount    := 0;                 //  清零计数

END_IF;

IF bStop THEN

     bCycleRunning := FALSE;          //  停止循环

     bMovingToB     := FALSE;

     bMovingToA     := FALSE;

END_IF;

// ----  移动到位置B(工作位)  ----

fbMoveAbs_B(

     Axis              := Axis_Servo1,

     Execute          := bMovingToB AND bCycleRunning,

     Position        := rPositionB,              //  目标位置  150.0mm

     Velocity        := rMoveSpeed,              //  速度  200mm/s

     Acceleration := rAccel,                   //  加速度

     Deceleration := rDecel,                   //  减速度

     Jerk              := 0,                            //  加加速度(0=自动)

     Done              => bMoveToBDone,           //  到达B

     Busy              => ,

     Active           => ,

     CommandAborted => ,

     Error             => ,

     ErrorID          =>

);

//  到达B位后,切换为向A位移动

IF bMoveToBDone THEN

     bMovingToB     := FALSE;           //  停止向B移动

     bMovingToA     := TRUE;             //  开始向A移动

     nCycleCount    := nCycleCount + 1;    //  循环计数+1

END_IF;

// ----  移动到位置A(原点位)  ----

fbMoveAbs_A(

     Axis              := Axis_Servo1,

     Execute          := bMovingToA AND bCycleRunning,

     Position        := rPositionA,              //  目标位置  0.0mm

     Velocity        := rMoveSpeed,              //  速度

     Acceleration := rAccel,

     Deceleration := rDecel,

     Jerk              := 0,

     Done              => bMoveToADone,           //  到达A

     Busy              => ,

     Active           => ,

     CommandAborted => ,

     Error             => ,

     ErrorID          =>

);

//  到达A位后,切换为向B位移动(循环)

IF bMoveToADone THEN

     bMovingToA     := FALSE;

     bMovingToB     := TRUE;             //  又开始向B移动,形成循环

END_IF;

4.5 手动点动控制程序

// ============================================================

//  4步:手动模式  -  点动控制  (MC_Jog)

// ============================================================

//  仅在手动模式且未运行自动循环时有效

fbJog(

     Axis              := Axis_Servo1,

     JogForward     := bJogFwd AND NOT bAutoMode AND NOT bCycleRunning,

     JogBackward    := bJogBwd AND NOT bAutoMode AND NOT bCycleRunning,

     Velocity        := rJogSpeed,             //  点动速度  50mm/s

     Acceleration := rAccel * 0.5,       //  点动加速度(较低更安全)

     Deceleration := rDecel * 0.5,       //  点动减速度

        Jerk             := 0,

     Active           => bJogActive,           //  点动中

     Error             => ,

     ErrorID          =>

);

4.6 停止与故障复位

// ============================================================

//  5步:停止与故障复位

// ============================================================

//  紧急停止或正常停止

fbStop(

     Axis              := Axis_Servo1,

     Execute          := bEmergencyStop = FALSE OR bStop,

     Deceleration := rDecel * 2,          //  停止时使用更大的减速度

     Jerk              := 0,

     Done              => bStopDone,

     Busy              => ,

     Error             => ,

     ErrorID          =>

);

//  故障复位

fbReset(

     Axis              := Axis_Servo1,

     Execute          := bReset,

     Done              => bResetDone,

     Busy              => ,

     Error             => ,

     ErrorID          =>

);

4.7 状态监控与报警

// ============================================================

//  6步:状态监控

// ============================================================

//  读取当前位置

MC_ReadActualPosition(

     Axis        := Axis_Servo1,

     Execute    := TRUE,                   //  持续读取

     Valid       => bPosValid,

     Busy        => ,

     Position => rActualPosition, //  当前实际位置  (mm)

     Error       => ,

     ErrorID    =>

);

//  读取轴状态

MC_ReadStatus(

     Axis        := Axis_Servo1,

     Execute    := TRUE,

     Valid       => bStatusValid,

     Busy        => ,

     Status     => wAxisStatus,        //  轴状态字

     Error       => ,

     ErrorID    =>

);

//  急停时自动停止循环并复位

IF bEmergencyStop = FALSE THEN

     bCycleRunning := FALSE;

     bMovingToA       := FALSE;

     bMovingToB       := FALSE;

     bHomed             := FALSE;

END_IF;
— — — — — — — — — — —

五、调试与常见问题

5.1 调试步骤

1. 检查接线:确认所有线缆连接正确(EtherCAT、动力线、编码器线、DI/DO、电源);
2. 上电检查:先给PLC上电(DC 24V),再给驱动器上电(AC 220V),观察驱动器面板指示灯是否正常;
3. 通信测试:打开Sysmac Studio,在线连接PLC,检查EtherCAT从站是否显示"OP"(Operational)状态;
4. ESI验证:确认DS5C1在Sysmac Studio中能正确识别,PDO映射无错误;
5. 轴使能测试:手动执行MC_Power使能,观察驱动器面板是否显示"SERVO ON";
6. 点动测试:使用MC_Jog指令进行低速点动,确认电机正反转方向正确;
7. 限位测试:手动移动轴触发电机正/反向限位,确认限位功能正常;
8. 回零测试:执行MC_Home回原点操作,确认回零精度满足要求;
9. 自动循环测试:启动自动循环,观察电机在A位和B位之间的运动是否平稳、到位精度是否满足要求。

5.2 常见问题与解决方案

<b>现象
可能原因
解决方法
EtherCAT从站     显示"INIT"状态
ESI文件未正确安装

     或版本不匹配
重新安装ESI文件

     确认版本与驱动器固件匹配
轴使能后电机

     不转动
驱动器未就绪

     或急停信号激活
检查急停信号状态

     查看驱动器面板报警代码
回原点失败
原点传感器信号

     接线错误或方向反
检查DI3接线

     尝试改变回零方向
定位精度不足
加减速度过大

     或惯量设置不当
降低加减速度

     使用自动增益调整
电机抖动或

     发出异响
增益参数不当

     或机械卡死
降低增益参数

     检查机械传动是否顺畅
PDO通信超时
网线质量差

     或通信周期过长
更换屏蔽网线

     缩短网线长度
驱动器报警

     AL-xxx
各种故障原因
查阅信捷DS5C1用户手册

     中报警代码对照表

— — — — — — — — — — —

六、完整程序汇总与下载说明

以上各章节的ST语言代码片段,按顺序组合即可构成完整的2位位置控制程序。程序的整体结构如下:
// ============================================================

//    完整程序结构(概要)

// ============================================================

PROGRAM Main

     // ----  1步:轴使能  ----

     fbPower(...);

      

     // ----  2步:回原点  ----

     fbHome(...);

      

     // ----  3步:自动循环(2位控制)  ----

     //  启动/停止逻辑

     //  移动到B  fbMoveAbs_B(...)

     //  到达B位后切换

     //  移动到A  fbMoveAbs_A(...)

     //  到达A位后循环

      

     // ----  4步:手动点动  ----

     fbJog(...);

      

     // ----  5步:停止与复位  ----

     fbStop(...);

     fbReset(...);

      

       // ----  6步:状态监控  ----

     MC_ReadActualPosition(...);

     MC_ReadStatus(...);

     MC_ReadActualVelocity(...);

      

     // ----  急停保护  ----

     IF bEmergencyStop = FALSE THEN ... END_IF;

      

END_PROGRAM
<b> MC功能块调用顺序说明
在Sysmac Studio中,MC功能块的调用顺序非常重要!必须遵循以下原则:

     1. MC_Power(使能)必须最先调用;

     2. MC_Home(回原点)必须在MC_Power之后调用;

     3. 运动指令(MC_MoveAbsolute、MC_Jog等)必须在回原点完成后才有效;

     4. MC_Stop和MC_Reset可以随时调用;

     5. 所有MC功能块在每个PLC扫描周期中只调用一次(不要重复调用);

     6. 不要在多个MC运动功能块中同时对同一个轴发送运动指令(会导致冲突)。

6.1 运动控制功能块速查表

<b>功能块名称
功能
关键参数
MC_Power
轴使能/去使能
Axis, Enable, Stop
MC_Home
回原点
Axis, Execute, HomingMode, Speed
MC_MoveAbsolute
绝对定位
Axis, Execute, Position, Velocity
MC_MoveRelative
相对定位
Axis, Execute, Distance, Velocity
MC_MoveVelocity
恒速运动
Axis, Execute, Velocity, Direction
MC_Jog
点动
Axis, JogForward, JogBackward, Velocity
MC_Stop
减速停止
Axis, Execute, Deceleration
MC_Halt
暂停(可恢复)
Axis, Execute, Deceleration
MC_Reset
故障复位
Axis, Execute
MC_ReadActualPosition
读取当前位置
Axis, Execute → Position
MC_ReadActualVelocity
读取当前速度
Axis, Execute → Velocity
MC_ReadStatus
读取轴状态
Axis, Execute → Status

— — — — — — — — — — —

七、总结

本文详细介绍了欧姆龙NJ501-1300 PLC通过EtherCAT总线控制信捷DS5C1伺服驱动器和MS6H电机的完整实施方案,核心内容包括:
·             硬件连接:EtherCAT总线菊花链拓扑、动力线缆、编码器线缆、DI/DO端子接线的详细说明;
·             软件配置:ESI文件安装、硬件组态、PDO映射设置、轴参数设置的完整步骤;
·             程序实现:基于MC_Power、MC_Home、MC_MoveAbsolute、MC_Jog等PLCopen标准功能块的ST语言2位位置控制程序;
·             调试指南:从上电检查到自动循环测试的9步调试流程,以及7类常见问题的解决方案。
在实际项目应用中,请特别注意以下几点:
·             第三方伺服驱动器的ESI文件必须与驱动器固件版本匹配,建议从信捷官网下载最新版本;
·             使用第三方驱动器时,欧姆龙的"自动伺服参数设置"功能不可用,所有运动参数必须在Sysmac Studio中手动设置或在程序中初始化;
·             EtherCAT总线通信质量直接影响运动控制的稳定性和精度,务必使用优质屏蔽网线并做好接地;
·             2位控制的定位精度取决于机械传动精度、编码器分辨率和增益参数的综合调试。

<i>希望本文能对使用欧姆龙NJ系列PLC配合信捷伺服系统的工程师们有所帮助。如有疑问,欢迎在评论区留言讨论!</i>
— — — — — — — — — — —
声明:本文内容基于公开资料整理,仅供技术交流参考。实际应用中请以设备厂商最新官方手册为准,作者不对因使用本文内容导致的任何损失承担责任。

</b></b></b></b></b></b></b></b></b></b></b></b></b></b></b></b></b></b></b>

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

本版积分规则

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

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

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


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