S7-1500PLC通过工艺对象实现V90总线伺服定位控制(105报文)
以下是 S7-1500 PLC 通过工艺对象实现 V90 总线伺服定位控制(105 报文)的详细步骤,涉及硬件组态、参数设置、程序编写及调试等关键环节:
一、硬件与网络组态
1. 硬件连接
- 设备清单:
- S7-1500 PLC(需支持 PROFINET 接口,如 CPU 1511T-1 PN)。
- V90 PN 伺服驱动器 + 伺服电机。
- PROFINET 通信电缆及接头。
- 网络拓扑:
- 将 PLC 的 PROFINET 接口与 V90 驱动器的 PROFINET 接口通过网线连接,构成 PROFINET 网络。
2. TIA Portal 组态
- 添加设备:
- 在 TIA Portal 中新建项目,添加 S7-1500 CPU 和 V90 PN 驱动器(需安装 V90 GSD 文件)。
- 为 V90 分配 PROFINET 设备名称(需与驱动器实际配置一致)。
- 选择报文:
- 双击 V90 驱动器,在 “属性> 常规 > 接口” 中选择 “报文 105”(包含位置控制所需的设定值、状态字等)。
- 配置工艺对象:
- 在 PLC 项目中添加 “工艺对象> 轴”,选择 “TO_Positioning”(定位轴)。
- 为轴分配硬件接口(PROFINET 接口),并关联 V90 驱动器的设备名称。
二、V90 驱动器参数设置
通过 V-ASSISTANT 软件或驱动器操作面板设置以下关键参数(需与 PLC 组态一致):
参数 | 说明 | 示例值 |
---|---|---|
P29010 | PROFINET 设备名称(需与 TIA 中分配的名称一致) | “V90_PN_01” |
P29011 | PROFINET 节点地址(需与 TIA 中分配的 GSD 文件地址一致) | 3 |
P29240 | 报文类型选择 | 105 |
P29241[0] | 控制模式(1 = 位置控制模式) | 1 |
P29242[0] | 参考点模式(如 0 = 无参考点,需根据实际需求设置) | 0 |
P29256 | 正限位开关输入(若使用硬件限位,需对应驱动器数字输入端口) | DI1 |
P29257 | 负限位开关输入 | DI2 |
P29281 | 位置设定值来源(1 = 通过 PROFINET 报文接收) | 1 |
三、PLC 程序编写(TIA Portal)
1. 工艺对象参数配置
在工艺对象的 “属性> 组态” 中设置轴参数:
- 机械参数:
- 齿轮比(如电机每转脉冲数、丝杠螺距等,需根据实际机械结构计算)。
- 位置范围(软限位,需小于硬件限位范围)。
- 驱动参数:
- 最大速度、加速度、减速度等(需与 V90 驱动器参数匹配)。
2. 编写控制程序
使用 “TO_Positioning” 工艺对象的官方功能块(如 MC_Power、MC_MoveAbsolute 等)编写控制逻辑:
ladder
// 示例程序:绝对定位控制
Network 1: 使能轴
CALL "MC_Power" , DB100 // 轴使能Axis := "Positioning_Axis" // 工艺对象名称Enable := TRUE // 使能信号Status => #Axis_Status // 状态反馈Network 2: 绝对定位
CALL "MC_MoveAbsolute" , DB101 // 绝对定位Axis := "Positioning_Axis"Position := MD200 // 目标位置(工程单位,如毫米)Velocity := MD204 // 运行速度Acceleration := MD208 // 加速度Deceleration := MD212 // 减速度Done => #Move_Done // 定位完成标志Busy => #Move_Busy // 忙状态Error => #Move_Error // 错误标志ErrorID => #Error_ID // 错误代码
3. 报文映射(105 报文)
105 报文包含 16 字节输入(驱动器状态) 和 16 字节输出(PLC 控制命令),需在工艺对象中自动映射,无需手动编写 I/O 地址。关键信号对应关系:
- 输出信号(PLC→驱动器):
- 控制字 1(STW1):启动、复位、急停等命令(如 0x047E 为运行使能,0x04F3 为定位启动)。
- 位置设定值(NSW):以工程单位表示的目标位置(通过工艺对象自动转换为脉冲数)。
- 输入信号(驱动器→PLC):
- 状态字 1(ZSW1):驱动器就绪(0x0006)、定位完成(0x0013)等状态。
- 实际位置(ZSW2/ZSW3):以工程单位反馈的当前位置。
四、调试与故障排除
1. 基本测试
- 网络通信测试:
- 使用 TIA Portal 的 “在线诊断” 功能检查 PROFINET 网络是否正常,驱动器是否在线。
- 驱动器手动控制:
- 通过 V-ASSISTANT 软件手动操作驱动器(如点动、回零),确认硬件和参数设置无误。
- PLC 单步调试:
- 逐步测试轴使能、点动、绝对定位等功能块,观察驱动器状态和工艺对象反馈值。
2. 常见故障处理
故障现象 | 可能原因 | 解决方法 |
---|---|---|
驱动器无就绪信号 | PROFINET 通信中断、控制字错误 | 检查网线、设备名称 / 地址,确认 STW1 为 0x047E |
定位不动作 | 使能未激活、限位触发、设定值超范围 | 检查 MC_Power 输出、硬件限位和软限位 |
位置偏差过大 | 齿轮比错误、脉冲丢失、机械间隙 | 重新计算齿轮比,检查机械连接 |
报文数据异常 | 报文类型不匹配、I/O 地址冲突 | 确认 V90 和工艺对象均使用报文 105 |
五、扩展功能与优化
- 回零操作:
- 配置参考点模式(如使用原点开关 + 编码器零脉冲),调用 MC_Home 功能块实现回零。
- 多轴同步控制:
- 使用 S7-1500T 的同步工艺对象(如 TO_SynchronizedMotion)实现多轴协调运动。
- 诊断与报警:
- 通过工艺对象的错误代码(ErrorID)和驱动器报警代码(如 A0401 为超程)开发故障诊断画面。
注意事项
- 安全机制:务必配置硬件限位开关和急停回路,避免设备失控。
- 参数一致性:PLC 与驱动器的单位(如毫米、脉冲)、控制模式必须完全一致。
- 电磁兼容:PROFINET 电缆需远离动力线,驱动器接地需可靠,减少干扰。
通过以上步骤,可实现 S7-1500 与 V90 的 105 报文定位控制,满足高精度运动控制需求。实际应用中需结合具体机械结构和工艺要求进行参数微调与功能扩展。
六、以下附代码
(* S7-1500 PLC通过工艺对象控制V90伺服驱动器(105报文) *)PROGRAM Main
VAR// 轴控制变量AxisEnable : BOOL := FALSE; // 轴使能AxisHome : BOOL := FALSE; // 回零命令AxisMoveAbs : BOOL := FALSE; // 绝对定位命令AxisMoveRel : BOOL := FALSE; // 相对定位命令AxisStop : BOOL := FALSE; // 轴停止命令// 定位参数TargetPosition : LREAL := 0.0; // 目标位置(mm)MoveVelocity : LREAL := 100.0; // 移动速度(mm/s)MoveAcceleration : LREAL := 500.0; // 加速度(mm/s²)MoveDeceleration : LREAL := 500.0; // 减速度(mm/s²)Jerk : LREAL := 1000.0; // 加加速度(mm/s³)// 状态反馈AxisReady : BOOL; // 轴就绪AxisHomed : BOOL; // 轴已回零AxisMoving : BOOL; // 轴正在运动AxisError : BOOL; // 轴错误ErrorID : WORD; // 错误代码CurrentPosition : LREAL; // 当前位置(mm)// 功能块实例DBDB_Power : MC_Power; // 轴使能功能块DB_Home : MC_Home; // 回零功能块DB_MoveAbs : MC_MoveAbsolute; // 绝对定位功能块DB_MoveRel : MC_MoveRelative; // 相对定位功能块DB_Stop : MC_Stop; // 轴停止功能块
END_VAR// 轴使能控制
DB_Power(Axis := Axis_1, // 工艺对象轴名称Enable := AxisEnable,Execute := TRUE,Status => AxisReady,Error => AxisError,ErrorID => ErrorID
);// 回零控制
DB_Home(Axis := Axis_1,Mode := 1, // 回零模式选择(1=主动回零)Execute := AxisHome,CommandAborted => ,Done => AxisHomed,Error => AxisError,ErrorID => ErrorID
);// 绝对定位控制
DB_MoveAbs(Axis := Axis_1,Position := TargetPosition,Velocity := MoveVelocity,Acceleration:= MoveAcceleration,Deceleration:= MoveDeceleration,Jerk := Jerk,Override := 100.0, // 速度百分比ContinuousPathMode := FALSE,Execute := AxisMoveAbs,CommandAborted => ,Done => ,Busy => AxisMoving,Error => AxisError,ErrorID => ErrorID
);// 相对定位控制
DB_MoveRel(Axis := Axis_1,Position := TargetPosition,Velocity := MoveVelocity,Acceleration:= MoveAcceleration,Deceleration:= MoveDeceleration,Jerk := Jerk,Override := 100.0,ContinuousPathMode := FALSE,Execute := AxisMoveRel,CommandAborted => ,Done => ,Busy => AxisMoving,Error => AxisError,ErrorID => ErrorID
);// 轴停止控制
DB_Stop(Axis := Axis_1,Mode := 0, // 停止模式(0=按减速时间停止)Execute := AxisStop,CommandAborted => ,Done => ,Error => AxisError,ErrorID => ErrorID
);// 读取当前位置
CurrentPosition := Axis_1.ActualPosition;
// V90伺服控制功能块 - 手动模式
NETWORK 1
TITLE=轴使能控制
// 轴使能信号上升沿触发
A "AxisEnable"
FP "M0.0"
= "DB_Power.Execute"// 轴就绪状态
A "DB_Power.Status"
= "AxisReady"NETWORK 2
TITLE=回零控制
// 回零信号上升沿触发
A "AxisHome"
FP "M0.1"
= "DB_Home.Execute"// 回零完成状态
A "DB_Home.Done"
= "AxisHomed"NETWORK 3
TITLE=绝对定位控制
// 绝对定位信号上升沿触发
A "AxisMoveAbs"
FP "M0.2"
= "DB_MoveAbs.Execute"// 轴运动状态
A "DB_MoveAbs.Busy"
= "AxisMoving"NETWORK 4
TITLE=错误处理
// 轴错误状态
A "DB_Power.Error"
O "DB_Home.Error"
O "DB_MoveAbs.Error"
O "DB_MoveRel.Error"
O "DB_Stop.Error"
= "AxisError"// 获取错误代码
L "DB_Power.ErrorID"
L "DB_Home.ErrorID"
A "DB_Home.Error"
JC _GET_ERROR_ID
L "DB_MoveAbs.ErrorID"
A "DB_MoveAbs.Error"
JC _GET_ERROR_ID
L "DB_MoveRel.ErrorID"
A "DB_MoveRel.Error"
JC _GET_ERROR_ID
L "DB_Stop.ErrorID"
A "DB_Stop.Error"
JC _GET_ERROR_ID
_GET_ERROR_ID:
T "ErrorID"