跳至主要内容

在线培训

雷赛 MC500系列PLC EtherCAT 控制我们CPBH03ET伺服驱动 调试标准作业规程(SOP)

| 在线培训

适用范围
本规程适用于雷赛 MC532CS 中型 PLC,基于 LeadSys Studio 编程软件,对接支持 CiA402 标准的第三方 EtherCAT 伺服驱动器(以 Nanotec CPB 系列为例),完成从硬件接线、工程创建、总线扫描、轴参数配置到双任务架构运动程序编写、点动 / 定位 / 回零调试的全流程。 适用场景:单轴旋转伺服、3600 脉冲 / 圈、负限位接伺服 DI 口、方式 17 负限位回零、高低速任务分离架构。

前置条件

1. MC532CS 控制器 DC24V 供电正常,指示灯无报警。

2. 伺服驱动器、电机硬件接线完成,无硬件故障。

3. 上位机已安装 LeadSys Studio V3.1.0 及以上版本编程软件。

4. 上位机与 PLC 处于同一网段,默认 IP:192.168.1.13。

5. 已确认伺服电子齿轮比参数,设定为电机每转 3600 个指令脉冲。

6. 负限位开关已接入伺服驱动器 DI 口,并在伺服参数中配置为负向行程限位功能。

 

阶段一:硬件接线与预检查


步骤 1.1 电源与动力接线

1. PLC 侧:DC24V 电源接入控制器电源端子,正负极性正确,接地可靠。

2. 伺服侧:主回路电源、控制电源接线牢固,电机动力线、编码器线插接到位,屏蔽层单端接地。

3. 验证标准:PLC 上电后 RUN 指示灯正常闪烁;伺服上电无报警代码,显示屏正常显示。

步骤 1.2 EtherCAT 总线接线

1. 上位机网线 → PLC 的以太网口(LAN),用于程序下载与在线调试。

2. PLC 的EtherCAT 总线口(ECAT) → 伺服驱动器 EtherCAT IN 口。

3. 注意事项: 

◯使用屏蔽超五类以上网线,总线链路远离动力线。

◯多轴场景需串联接线,末端从站无需终端电阻。

步骤 1.3 负限位开关接线(方式 17 回零专用)

1. 限位开关信号线接入伺服驱动器对应 DI 端子,公共端匹配开关类型(NPN/PNP)。

2. 在伺服参数中,将该 DI 口功能设置为负向行程限位,确认有效电平与开关一致。

3. 验证标准:手动按压限位开关,伺服面板对应 DI 指示灯状态同步变化。

步骤 1.4 伺服驱动器预配置

1. 控制模式设置为EtherCAT 总线控制(CiA402 标准)。

2. 电子齿轮比设定:电机每转对应 3600 个指令脉冲。

3. 清除伺服当前所有报警,使驱动器处于待机就绪状态。

 

阶段二:工程创建与控制器连接

 

步骤 2.1 新建标准工程

1. 打开 LeadSys Studio 软件,点击左上角「文件 → 新建工程」。

2. 工程模板选择「标准工程」,自定义工程名称,选择无中文、无空格的存储路径。

3. 设备型号选择「MC532CS」,编程语言选择「ST(结构化文本)」,点击确定完成创建。

步骤 2.2 连接控制器

1. 点击顶部工具栏「在线 → 通信设置」。

2. 点击「搜索设备」,自动扫描局域网内的 MC532CS 控制器。

3. 扫描到目标设备后,选中并点击「确定」,设置为当前通信目标。

4. 验证标准:软件底部状态栏显示「已连接」,设备树中控制器图标无红色叉号。

 

阶段三:EtherCAT 总线配置

 

步骤 3.1 添加 EtherCAT 主站

1. 左侧设备树,确认「EtherCAT_Master_Leadshine_A」主站节点已存在;若缺失则右键「设备 → 添加 → EtherCAT 主站」手动添加。

2. 确认主站绑定 PLC 的 EtherCAT 硬件接口,默认配置无需修改。

步骤 3.2 扫描伺服从站

1. 右键点击 EtherCAT 主站 → 选择「扫描设备」。

2. 弹出确认提示全部点击「是 / 确定」,等待总线扫描完成。

3. 扫描结果中勾选目标伺服驱动器,点击确定添加到总线拓扑中。

4. 易错提醒:仅勾选真实伺服设备,取消其他虚拟设备、协议设备的勾选。

步骤 3.3 确认 PDO 过程数据映射

1. 双击伺服从站设备,打开「过程数据(PDO)」配置界面。

2. 确认核心对象已正确映射,缺失需手动添加:

数据方向 对象名称 对象字典地址 功能说明
输出(发) 控制字 6040h 下发使能、启动等指令
输出(发) 目标位置 607Ah 下发位置指令
输入(收) 状态字 6041h 读取伺服运行状态
输入(收) 实际位置 6064h 读取电机实际位置反馈

3. 验证标准:所有映射通道状态正常,无红色报错标记。

 

阶段四:SoftMotion 运动轴配置

 

步骤 4.1 添加轴对象

1. 左侧设备树,右键点击 EtherCAT 主站下的伺服端口 → 「添加轴」。

2. 自定义轴名称(如Axis),轴类型选择「旋转轴」,点击确定。

步骤 4.2 脉冲当量与单位配置(核心)

1. 双击轴对象,切换到左侧「脉冲当量换算」选项卡。

2. 参数填写(以脉冲为用户单位为例): 

◯电机旋转一圈的指令脉冲数:3600(与伺服参数严格一致)

◯工作台旋转一圈的工作行程:3600

◯含义:1 个用户单位 = 1 个脉冲,编程直接写脉冲数。

3. 可选单位切换: 

◯想用「度」做单位:工作台行程填 360

◯想用「圈」做单位:工作台行程填 1

步骤 4.3 通用动态参数配置

1. 切换到左侧「SoftMotion 驱动:通用」选项卡。

2. 参数填写(新手调试保守值): 

◯轴类型:「有限」(调试完成后可改模数)

◯速度:3600(脉冲 / 秒,对应每秒 1 圈)

◯加速度:18000

◯减速度:18000

◯加加速度:100000

◯软件限位暂不激活,调试正常后再开启。

步骤 4.4 回零参数预配置(方式 17 负限位)

1. 切换到左侧「原点参数设置」选项卡。

2. 参数填写: 

◯回零方式:选择「方式 17(负限位回零)」

◯回零速度(高速):1800(脉冲 / 秒)

◯回零爬行速度(低速):360(脉冲 / 秒)

◯回零加速度:18000

◯回零偏移:0

◯开关有效电平:根据实际接线选择

 

阶段五:双任务架构运动控制程序编写

 

架构说明

采用高低速任务分离设计,兼顾实时性与逻辑稳定性:

●高速任务 (PRG_MotionFast):绑定 EtherCAT 总线同步任务,负责轴使能、实时位置 / 速度采集、高速相对 / 绝对定位、回零功能块底层周期刷新,保证总线时序精准。

●低速任务 (PRG_MotionSlow):绑定普通主任务,负责点动控制、启动参数初始化、回零触发与完成标志逻辑处理,降低总线负载。

●全局变量表 (GVL_Motion):实现两任务间的数据交互,统一外部控制入口与状态监控。

步骤 5.1 新建全局变量表 GVL_Motion

1. 左侧设备树右键点击 Application → 添加对象 → 全局变量列表(Global Variable List)。

2. 名称输入 GVL_Motion,点击打开。

3. 删除默认内容,粘贴以下代码:

{attribute 'qualified_only'}

VAR_GLOBAL

    // --- 外部控制指令 ---

    bAxisEnable      : BOOL := FALSE;   // 轴使能上电

    bJog_Fwd         : BOOL := FALSE;   // 正向点动

    bJog_Rev         : BOOL := FALSE;   // 反向点动    

    bStartMove       : BOOL := FALSE;   // 相对定位触发(上升沿有效)

    fMoveDist        : LREAL := 3600.0; // 相对定位距离

    fMoveVel         : LREAL := 3600.0; // 相对定位速度    

    bStartAbs        : BOOL := FALSE;   // 绝对定位触发(上升沿有效)

    fAbsPos          : LREAL := 0.0;    // 绝对定位目标位置

    fAbsVel          : LREAL := 3600.0; // 绝对定位速度    

    CPB3_Home_Exe    : BOOL := FALSE;   // 回零触发(保持TRUE直到回零完成)

 

    // --- 实时监控输出(只读显示) ---

    fActPos          : LREAL := 0.0;    // 实时当前位置

    fActVel          : LREAL := 0.0;    // 实时当前速度

 

    // --- 状态反馈输出 ---

    bMoveDone        : BOOL := FALSE;   // 相对定位完成

    bMoveBusy        : BOOL := FALSE;   // 相对定位执行中    

    bAbsDone         : BOOL := FALSE;   // 绝对定位完成

    bAbsBusy         : BOOL := FALSE;   // 绝对定位执行中

    bAbsErr          : BOOL := FALSE;   // 绝对定位报错

    nAbsErrID        : SMC_ERROR;       // 绝对定位错误码    

    bHomeDonePending : BOOL := FALSE;   // 回零完成标志位

    bHomeErr         : BOOL := FALSE;   // 回零报错

    nHomeErrID       : SMC_ERROR;       // 回零错误码

 

    // --- 内部跨任务接口 ---

    bHomeBlockDone   : BOOL := FALSE;   // 底层功能块原始Done信号

END_VAR

步骤 5.2 新建高速实时程序 PRG_MotionFast

1. 右键点击 Application → 添加对象 → POU。

2. 名称输入 PRG_MotionFast,类型选「程序(Program)」,语言选「结构化文本(ST)」,点击打开。

3. 上半部分声明区粘贴:

VAR

    Axis_Power   : MC_Power;

    Axis_ReadPos : MC_ReadActualPosition;

    Axis_ReadVel : MC_ReadActualVelocity;

    Axis_MoveRel : MC_MoveRelative;

    Axis_MoveAbs : MC_MoveAbsolute;

    CPB3_Home    : MC_Home;

END_VAR

4. 下半部分代码实现区粘贴:

// 1. 轴使能上电(最高实时性)

Axis_Power(

    Axis         := Axis,

    Enable       := GVL_Motion.bAxisEnable,

    bRegulatorOn := TRUE,

    bDriveStart  := TRUE

);

 

// 2. 实时采集当前位置与当前速度(每个总线周期更新)

Axis_ReadPos(

    Axis     := Axis,

    Enable   := TRUE,

    Position => GVL_Motion.fActPos

);

 

Axis_ReadVel(

    Axis     := Axis,

    Enable   := TRUE,

    Velocity => GVL_Motion.fActVel

);

 

// 3. 高实时性相对定位

Axis_MoveRel(

    Axis         := Axis,

    Execute      := GVL_Motion.bStartMove,

    Distance     := GVL_Motion.fMoveDist,

    Velocity     := GVL_Motion.fMoveVel,

    Acceleration := 18000,

    Deceleration := 18000,

    Done         => GVL_Motion.bMoveDone,

    Busy         => GVL_Motion.bMoveBusy

);

 

// 4. 高实时性绝对定位

Axis_MoveAbs(

    Axis         := Axis,

    Execute      := GVL_Motion.bStartAbs,

    Position     := GVL_Motion.fAbsPos,

    Velocity     := GVL_Motion.fAbsVel,

    Acceleration := 18000,

    Deceleration := 18000,

    Done         => GVL_Motion.bAbsDone,

    Busy         => GVL_Motion.bAbsBusy,

    Error        => GVL_Motion.bAbsErr,

    ErrorID      => GVL_Motion.nAbsErrID

);

 

// 5. 回零功能块底层调用(保证总线同步刷新)

CPB3_Home(

    Axis     := Axis,

    Execute  := GVL_Motion.CPB3_Home_Exe,

    Position := 0,

    Done     => GVL_Motion.bHomeBlockDone,

    Error    => GVL_Motion.bHomeErr,

    ErrorID  => GVL_Motion.nHomeErrID

);

步骤 5.3 新建低速辅助程序 PRG_MotionSlow

1. 右键点击 Application → 添加对象 → POU。

2. 名称输入 PRG_MotionSlow,类型选「程序(Program)」,语言选「结构化文本(ST)」,点击打开。

3. 上半部分声明区粘贴:

VAR

    Axis_Jog     : MC_Jog;

    pAxis        : POINTER TO AXIS_REF_ETC_DS402_CS;

    pMinCycles   : POINTER TO UINT;

    bInitMinCyc  : BOOL := FALSE; // 指针参数初始化完成标志

END_VAR

4. 下半部分代码实现区粘贴:

// 1. 底层回零最小确认周期参数修正(仅启动执行一次,带空指针安全保护)

IF NOT bInitMinCyc THEN

    pAxis := ADR(Axis);

    IF pAxis <> 0 THEN

        pMinCycles := ADR(pAxis^.DSP402_Statemachine._uiHomingMinCycles);

        IF pMinCycles <> 0 THEN

            pMinCycles^ := 10;

            bInitMinCyc := TRUE;

        END_IF

    END_IF

END_IF

 

// 2. 点动控制

Axis_Jog(

    Axis         := Axis,

    JogForward   := GVL_Motion.bJog_Fwd,

    JogBackward  := GVL_Motion.bJog_Rev,

    Velocity     := 3600,

    Acceleration := 18000,

    Deceleration := 18000

);

 

// 3. 回零完成标志位逻辑处理

IF NOT GVL_Motion.CPB3_Home_Exe THEN

    // 回零触发复位时,自动清除完成标志

    GVL_Motion.bHomeDonePending := FALSE;

ELSIF GVL_Motion.bHomeBlockDone THEN

    // 回零真正到位后,置位完成标志

    GVL_Motion.bHomeDonePending := TRUE;

END_IF

步骤 5.4 程序挂载到对应任务(关键步骤)

1. 左侧设备树展开「任务配置」节点。

2. 右键点击 EtherCAT_Master_Leadshine_A 下的总线任务 → 增加调用 → 选择 PRG_MotionFast,点击确认。

3. 右键点击 MainTask(主任务,默认周期 10ms) → 增加调用 → 选择 PRG_MotionSlow,点击确认。

4. 找到默认生成的 PLC_PRG,若其中有旧运动控制代码,使用 (* ... *) 块注释全部屏蔽,避免逻辑冲突。

 

阶段六:编译下载与在线调试

 

步骤 6.1 编译工程

1. 点击顶部工具栏「编译」按钮(或按 F11)。

2. 查看下方输出窗口,0 错误即为编译通过;仅保留任务空、可视化库缺失类警告,不影响运行。

步骤 6.2 下载程序

1. 点击顶部「登录」按钮(或按 Alt+F8)。

2. 弹出提示选择「登录并下载」,等待程序下载完成。

步骤 6.3 运行与功能测试

1. 点击「启动」按钮(绿色三角,或按 F5),程序开始运行。

2. 双击打开 GVL_Motion 全局变量表,作为统一监控与操作界面。

(1)轴使能测试

●将 bAxisEnable 预备值设为 TRUE,按 Ctrl+F7 写入 PLC。

●验证标准:设备树中轴图标变绿,伺服电机锁轴,无自由晃动;fActPos、fActVel 数值正常刷新。

(2)点动测试

●置 bJog_Fwd 为 TRUE,电机正向匀速转动;置 FALSE 立即停止。

●置 bJog_Rev 为 TRUE,电机反向匀速转动。

●验证标准:电机运行平稳无异响,实际位置数值随运动正常变化。

(3)相对定位测试

●设置 fMoveDist 为目标距离(如 3600=1 圈),fMoveVel 为运行速度。

●将 bStartMove 从 FALSE 改为 TRUE,触发一次相对定位运动。

●验证标准:电机自动运行指定距离后停止,bMoveDone 变为 TRUE。

(4)绝对定位测试

●设置 fAbsPos 为目标绝对坐标,fAbsVel 为运行速度。

●将 bStartAbs 从 FALSE 改为 TRUE,触发一次绝对定位运动。

●验证标准:电机运行至目标坐标后停止,bAbsDone 变为 TRUE。

(5)回零功能测试

●先手动点动将轴移至负限位开关正方向一侧,避免初始即触发限位。

●将 CPB3_Home_Exe 设为 TRUE,启动回零流程。

●验证标准:电机先高速找负限位,触发后低速退开,锁定零点后停止;bHomeDonePending 变为 TRUE 表示回零完成。

●复位 CPB3_Home_Exe 为 FALSE 后,bHomeDonePending 自动清零,可再次触发回零。

 

关键注意事项

 

1. 单位一致性:PLC 侧脉冲当量与伺服电子齿轮比必须严格匹配,否则出现行程偏差。

2. 任务时序原则:核心运动控制功能块必须挂载在 EtherCAT 总线任务域下,禁止放在普通 MainTask 中,避免时序不同步导致轴报错、运动卡顿。

3. 指针操作安全:回零参数修正代码已加入空指针保护,禁止随意修改指针指向地址,避免引发系统异常。

4. 调试原则:初次调试使用低速参数,确认方向、限位逻辑正确后,再逐步提升速度。

5. 第三方伺服适配:若出现使能无反应、指令不执行,优先排查 PDO 映射完整性、控制字 / 状态字地址匹配性。

6. 回零重复触发:本架构通过完成标志锁存 + 复位清零逻辑,解决了标准 MC_Home “已回零后无法重复触发” 的问题,可无限次重复启动回零。

7. 限位安全:调试前确认限位开关有效,避免超程撞机;限位信号接入伺服驱动器,而非 PLC 本体 IO,保证硬件级安全响应。

相关文档