雷赛 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,保证硬件级安全响应。