基于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 | | 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; // 移动到位置AfbMoveAbs_B : MC_MoveAbsolute; // 移动到位置BfbJog : 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; // 循环计数+1END_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"状态 | | |
| | |
回原点失败 | | |
定位精度不足 | | |
| | |
PDO通信超时 | | |
| 各种故障原因 | |
— — — — — — — — — — —
六、完整程序汇总与下载说明
以上各章节的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>