抖音粉丝群1
『7x24小时有问必答』

本文将详细探讨如何使用欧姆龙NJ系列PLC通过EtherCAT总线控制雷赛步进电机,涵盖硬件配置、接线方式、参数设置及ST语言程序编写,特别包含IO映射的实现方法。

1.系统概述与硬件配置

欧姆龙NJ系列控制器是基于EtherCAT总线的运动控制器,其运动控制功能非常强大,性价比高,广泛应用于锂电、3C、新能源等复杂多轴控制场合。雷赛DM3C系列步进驱动器支持EtherCAT通信协议,能够实现高性能的运动控制。

1.1所需硬件组件

·欧姆龙NJ系列PLC(如NJ-501
·雷赛DM3C系列EtherCAT步进驱动器
·雷赛步进电机
·24V直流电源
·Micro USB调试线
·EtherCAT通信电缆

1.2硬件连接步骤

1.  电源接线:将24V电源正极连接到驱动器的V+端子,负极连接到GND端子
2.  电机接线:使用万用表测量电机绕组,将同一绕组的两根线分别接到A+A-B+B-端子。如果电机方向相反,可以交换A+A-B+B-的接线。
3.  EtherCAT通信:使用网线将NJPLCEtherCAT端口与DM3C驱动器的EtherCATIN端口连接,多个驱动器可以通过EtherCATOUT端口串联。
4.  IO信号接线DM3C驱动器数字量输入接口可做共阴极或共阳极接法。如果需要连接限位开关或原点信号,请注意:
o  正限位默认对应DI4
o  负限位默认对应DI5
o  原点信号默认对应DI1(探针输入1
o  Home开关默认对应DI3
重要提示:如果PLC输出信号为24V,而步进驱动器输入需要5V信号,则需要在脉冲和方向信号线上串联一个2kΩ的电阻。否则可能会损坏驱动器输入点。

2.软件配置与参数设置

2.1软件准备

使用欧姆龙Sysmac Studio软件进行配置和编程:
1.  安装Sysmac Studio软件(确保版本与PLC固件兼容)
2.  获取雷赛DM3C驱动器的ESI文件(DM3C-EC_V1.06.xml
3.  ESI文件复制到Sysmac Studio安装目录的EsiFiles/UserEsiFiles文件夹下

2.2新建工程与通信设置

1.  新建工程:打开Sysmac Studio,创建新工程,选择对应的NJPLC型号和版本
2.设置通信
o  将计算机和PLC设置为同一网段(例如PLC IP地址为192.168.250.1,计算机可设置为192.168.250.x
o  Sysmac Studio中设置通信参数,建立与PLC的连接
3.EtherCAT配置
o  在线成功后,双击"EtherCAT"项目
o  右键点击"主设备",选择"与物理网络配置比较和合并"
o  点击"应用物理网络配置"
o  系统会自动扫描连接到网络上的DM3C驱动器

2.3驱动器参数设置

通过Sysmac Studio可以修改驱动器的多项参数:
//  通过SDO修改驱动器参数的示例程序段
VAR
       bExecute: BOOL; //  执行触发
       diStatus: INT; //  状态显示
       bBusy: BOOL; //  忙状态
       bError: BOOL; //  错误状态
       diErrorCode: INT; //  错误代码
END_VAR
//  修改电流参数(对象字典0x2030)的示例
MC_BWriteParameter(
       Axis:= Axis1,
       Execute:= bExecute,
       DeviceId:= 1601,
       Index:= 162030,
       SubIndex:= 1,
       DataType:= DINT,
       Value:= 1500,
       Done=> ,
       Busy=> bBusy,
       Error=> bError,
       ErrorCode=> diErrorCode
);
//  修改细分参数(对象字典0x2001)的示例
MC_BWriteParameter(
       Axis:= Axis1,
       Execute:= bExecute,
       DeviceId:= 1601,
       Index:= 162001,
       SubIndex:= 1,
       DataType:= DINT,
       Value:= 6400,
       Done=> ,
       Busy=> bBusy,
       Error=> bError,
       ErrorCode=> diErrorCode
);
注意DM3CCL3C系列中,数据类型为DINT,需要设置为4字节

。其他可能需要修改的参数包括:细分(0x2001)IO极性(0x2152-子索引值+0x80)、运行方向(0x2051)

2.4轴参数配置

1.  添加轴:在"运动控制设置"→"轴设置"中,右键点击"添加"→"运动控制轴"
2.  单位换算配置:根据实际需求设置工程单位(如脉冲、毫米、度等)
3.回零参数配置
o  欧姆龙采用主站回零,提供多种回零方法
o  注意信号映射:欧姆龙的原点接近输入  =  雷赛的原点输入HOME switch(默认对应DI3
o  欧姆龙的原点输入信号  =  雷赛的探针输入1 Probe1(默认对应DI1
4.PDO配置
o  对于常用功能,DM3C默认配置的PDO已经足够
o  如需添加对象字典到PDO中,可在PDO配置界面中进行添加

3. ST语言程序编写

本节展示使用ST语言编写控制程序,包括变量声明、IO映射和运动控制功能实现。

3.1变量声明与IO映射

//  全局变量声明
VAR_GLOBAL
       //  输入信号结构体
       stInputs: STRUCT
             //  限位信号
             bPositiveLimit: BOOL;        //  正限位信号
             bNegativeLimit: BOOL;        //  负限位信号
             bOriginSensor: BOOL;          //  原点传感器信号
             bEmergencyStop: BOOL;        //  急停信号
             //  按钮信号
             bStartBtn: BOOL;                //  启动按钮
             bStopBtn: BOOL;                 //  停止按钮
             bJogPlusBtn: BOOL;             //  正点动按钮
             bJogMinusBtn: BOOL;           //  负点动按钮
             //  保留信号
             bReserved01: BOOL;             //  保留IO1
             bReserved02: BOOL;             //  保留IO2
       END_STRUCT;
      
       //  输出信号结构体
       stOutputs: STRUCT
             bReadyLED: BOOL;                //  就绪指示灯
             bRunningLED: BOOL;             //  运行指示灯
             bErrorLED: BOOL;                //  故障指示灯
             bOutput01: BOOL;                //  输出01
             bOutput02: BOOL;                //  输出02
       END_STRUCT;
      
       //  轴变量
       Axis1: AXIS_REF;                      //  1参考
       bAxisEnabled: BOOL;                 //  轴使能状态
      
       //  运动控制功能块变量
       mcPower: MC_POWER;                   //  使能功能块
       mcHome: MC_HOME;                      //  回零功能块
       mcMoveAbsolute: MC_MOVEABSOLUTE; //  绝对定位功能块
       mcMoveRelative: MC_MOVERELATIVE; //  相对定位功能块
     mcMoveVelocity: MC_MOVEVELOCITY; //  速度运动功能块
       mcStop: MC_STOP;                      //  停止功能块
      
       //  状态变量
       bPowerOn: BOOL;                       //  电源开启状态
       bHomed: BOOL;                          //  回零完成状态
       bBusy: BOOL;                            //  忙状态
       bError: BOOL;                           //  错误状态
       diErrorCode: INT;                    //  错误代码
END_VAR
// IO映射实现
//  将物理IO映射到程序变量
PROGRAM MAIN
VAR_INPUT
       //  物理输入映射  -  根据实际硬件配置调整地址
       PHYSICAL_INPUT01 AT %I0.0: BOOL;
       PHYSICAL_INPUT02 AT %I0.1: BOOL;
       PHYSICAL_INPUT03 AT %I0.2: BOOL;
       PHYSICAL_INPUT04 AT %I0.3: BOOL;
       PHYSICAL_INPUT05 AT %I0.4: BOOL;
       PHYSICAL_INPUT06 AT %I0.5: BOOL;
       PHYSICAL_INPUT07 AT %I0.6: BOOL;
       PHYSICAL_INPUT08 AT %I0.7: BOOL;
       PHYSICAL_INPUT09 AT %I1.0: BOOL;
       PHYSICAL_INPUT10 AT %I1.1: BOOL;
END_VAR
VAR_OUTPUT
       //  物理输出映射  -  根据实际硬件配置调整地址
       PHYSICAL_OUTPUT01 AT %Q0.0: BOOL;
       PHYSICAL_OUTPUT02 AT %Q0.1: BOOL;
       PHYSICAL_OUTPUT03 AT %Q0.2: BOOL;
       PHYSICAL_OUTPUT04 AT %Q0.3: BOOL;
       PHYSICAL_OUTPUT05 AT %Q0.4: BOOL;
END_VAR
VAR
       //  本地变量
END_VAR
// IO映射操作
//  输入映射
stInputs.bPositiveLimit := PHYSICAL_INPUT01;
stInputs.bNegativeLimit := PHYSICAL_INPUT02;
stInputs.bOriginSensor := PHYSICAL_INPUT03;
stInputs.bEmergencyStop := PHYSICAL_INPUT04;
stInputs.bStartBtn := PHYSICAL_INPUT05;
stInputs.bStopBtn := PHYSICAL_INPUT06;
stInputs.bJogPlusBtn := PHYSICAL_INPUT07;
stInputs.bJogMinusBtn := PHYSICAL_INPUT08;
//  输出映射
PHYSICAL_OUTPUT01 := stOutputs.bReadyLED;
PHYSICAL_OUTPUT02 := stOutputs.bRunningLED;
PHYSICAL_OUTPUT03 := stOutputs.bErrorLED;
PHYSICAL_OUTPUT04 := stOutputs.bOutput01;
PHYSICAL_OUTPUT05 := stOutputs.bOutput02;
END_PROGRAM

3.2轴使能控制

//  轴使能控制程序
mcPower(
       Axis := Axis1,
       Enable := TRUE,
       Enable_Positive := TRUE,
       Enable_Negative := TRUE,
       Status => bPowerOn,
       Busy => bBusy,
       Error => bError,
       ErrorCode => diErrorCode
);
//  检查使能状态并更新输出
IF bPowerOn THEN
       stOutputs.bReadyLED := TRUE;
       stOutputs.bErrorLED := FALSE;
ELSE
       stOutputs.bReadyLED := FALSE;
       IF bError THEN
             stOutputs.bErrorLED := TRUE;
       END_IF
END_IF;

3.3回零操作

//  回零操作程序
//  当启动按钮按下且系统已使能但未回零时,执行回零操作
IF stInputs.bStartBtn AND bPowerOn AND NOT bHomed THEN
       mcHome(
             Axis := Axis1,
             Execute := TRUE,
             Position := 0.0,
             Done => ,
             Busy => bBusy,
             Error => bError,
             ErrorCode => diErrorCode
       );
END_IF;
//  回零完成检测
IF mcHome.Done THEN
       bHomed := TRUE;
       stOutputs.bRunningLED := TRUE;
END_IF;

3.4点动运动控制

//  点动运动控制程序
//  正点动
IF stInputs.bJogPlusBtn AND bPowerOn AND bHomed THEN
       mcMoveVelocity(
             Axis := Axis1,
             Execute := TRUE,
             Velocity := 1000.0,
             Acceleration := 10000.0,
             Deceleration := 10000.0,
             Direction := MC_POSITIVE_DIRECTION,
             Busy => bBusy,
             Error => bError,
             ErrorCode => diErrorCode
       );
END_IF;
//  负点动
IF stInputs.bJogMinusBtn AND bPowerOn AND bHomed THEN
     mcMoveVelocity(
             Axis := Axis1,
             Execute := TRUE,
             Velocity := 1000.0,
             Acceleration := 10000.0,
             Deceleration := 10000.0,
             Direction := MC_NEGATIVE_DIRECTION,
             Busy => bBusy,
             Error => bError,
             ErrorCode => diErrorCode
       );
END_IF;
//  点动按钮释放时停止
IF NOT stInputs.bJogPlusBtn AND NOT stInputs.bJogMinusBtn THEN
       mcStop(
             Axis := Axis1,
             Execute := TRUE,
             Deceleration := 10000.0,
             Done => ,
             Busy => bBusy,
             Error => bError,
             ErrorCode => diErrorCode
       );
END_IF;

3.5绝对位置运动

//  绝对位置运动程序
//  当启动按钮按下且系统已使能且已回零时,执行绝对运动
IF stInputs.bStartBtn AND bPowerOn AND bHomed THEN
       mcMoveAbsolute(
             Axis := Axis1,
             Execute := TRUE,
             Position := 5000.0,
             Velocity := 2000.0,
             Acceleration := 10000.0,
             Deceleration := 10000.0,
             Done => ,
             Busy => bBusy,
             Error => bError,
             ErrorCode => diErrorCode
       );
END_IF;

4.调试与监控

4.1 PDO变量监控

Sysmac StudioI/O映射中,可对PDO变量进行监控

。这有助于调试和验证通信是否正确建立。

4.2常见故障排除

1.  通信故障:检查EtherCAT网络连接、节点地址设置和ESI文件是否正确导入1
2.  电机不运动:检查使能信号、脉冲输出和驱动器参数设置
3.  位置偏差:检查细分设置、齿轮比和单位换算配置
4.  限位故障:检查限位开关接线和极性设置

5.总结

本文详细介绍了欧姆龙NJ系列PLC通过EtherCAT总线控制雷赛步进电机的完整过程,包括硬件配置、接线方式、参数设置以及ST语言程序编写。通过使用IO映射和标签变量,程序可读性和维护性大大提高。
关键配置要点:
1.  正确设置节点地址并通过拨码开关配置

2.  导入正确的ESI文件到Sysmac Studio

3.  配置PDO参数和轴参数以适应应用需求

4.  使用ST语言编写结构化程序,实现运动控制功能
5.  通过IO映射将物理IO与程序变量关联
这种方法不仅适用于雷赛步进电机,也可作为其他EtherCAT从站设备配置的参考,为工业自动化系统提供了一种高效、可靠的解决方案。

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

本版积分规则

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

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

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


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