
本文将详细探讨如何使用欧姆龙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通信:使用网线将NJPLC的EtherCAT端口与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);注意:DM3C和CL3C系列中,数据类型为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 MAINVAR_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_VARVAR_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_VARVAR // 本地变量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_PROGRAM3.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_IFEND_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
|