═══════════════════════════════════════════════════════════════════════════════
罗克韦尔PLC梯形图程序 - 矿用隔爆型永磁伺服电动机控制
SB-100/24Y & SB-200/36Y · Modbus RTU多圈绝对值控制
═══════════════════════════════════════════════════════════════════════════════
【一、系统概述】
本程序用于罗克韦尔CompactLogix/ControlLogix平台,通过Modbus RTU通信控制YZ-AIM
驱动器,驱动矿用隔爆型永磁伺服电动机SB-100/24Y和SB-200/36Y。支持多圈绝对值
位置控制、原点设置、状态监测及故障处理。
【二、PLC标签数据表】
┌────────────────────────┬────────────┬────────────────────────────────┐
│ 标签名称 │ 数据类型 │ 描述 │
├────────────────────────┼────────────┼────────────────────────────────┤
│ Motor1_Enable │ BOOL │ SB-100/24Y 伺服使能 │
│ Motor1_TargetPos │ DINT │ 目标绝对位置(8192脉冲/圈) │
│ Motor1_CurrentPos │ DINT │ 当前绝对位置 │
│ Motor1_AlarmCode │ INT │ 报警代码(地址0x0E) │
│ Motor1_AtTarget │ BOOL │ 到位标志(偏差<5脉冲) │
│ Motor1_Accel │ INT │ 加速度8000 (r/min)/s │
│ Motor2_Enable │ BOOL │ SB-200/36Y 使能 │
│ Motor2_TargetPos │ DINT │ 目标位置脉冲 │
│ Motor2_CurrentPos │ DINT │ 当前位置 │
│ Motor2_AlarmCode │ INT │ 报警码 │
│ Start_System │ BOOL │ 系统启动按钮 │
│ EmergencyStop │ BOOL │ 急停状态 │
│ ParamInit_Done │ BOOL │ 参数初始化完成标志 │
└────────────────────────┴────────────┴────────────────────────────────┘
【三、梯形图主程序】
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0000 - 首扫描初始化参数 (S:FS) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ S:FirstScan +-----------------+ │
│ ----| |----------| JSR InitParams | │
│ +-----------------+ │
│ │
│ // 子程序内通过MSG写驱动器参数:Modbus使能(0x00=1),电子齿轮分子8192, │
│ // 加速度(SB-100:8000, SB-200:5000),位置KP,并保存参数(0x14=1) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0010 - 电机使能逻辑 (安全联锁) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Start_System EmergencyStop ParamInit_Done Motor1_Enable │
│ ----| |------------|/|---------------| |-----------------( )-------------│
│ Motor2_Enable│
│ ------( )-------│
│ │
│ // 当启动按钮触发、急停未按下且参数初始化完成后,使能两台驱动器 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0020 - SB-100/24Y 绝对位置移动 (上升沿触发) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Move_Trigger_M1 Motor1_Enable +----------------------+ │
│ ----|P|-------------| |-------------| MoveAbsolute_M1 | │
│ +----------------------+ │
│ │
│ // 当上位机设定Motor1_TargetPos新值,触发上升沿,执行Modbus功能码0x10 │
│ // 向寄存器0x16/0x17写入32位绝对位置脉冲 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0030 - 周期性读取电机状态 (每200ms) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Timer_Status.DN +---------------------+ │
│ ----| |-------------| Read_Motor1_Status | │
│ +---------------------+ │
│ | Read_Motor2_Status | │
│ +---------------------+ │
│ │
│ // Timer_Status定时器(TON, 200ms)循环触发MSG读取0x16,0x17,0x0E等数据 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0040 - 到位信号生成 (位置窗口比较) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ABS(Motor1_CurrentPos - Motor1_TargetPos) < 5 Motor1_AtTarget │
│ ------------------------| |----------------------------( )---------------│
│ ABS(Motor2_CurrentPos - Motor2_TargetPos) < 5 Motor2_AtTarget │
│ ------------------------| |----------------------------( )---------------│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0050 - 电机报警处理 (堵转/失速/过压) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Motor1_AlarmCode <> 0 Motor1_Enable +-------------------+ │
│ ----| |-------------------|/|-----------| Alarm_Reset_M1 | │
│ +-------------------+ │
│ │
│ // 如果报警代码不为0(非电池掉电0x10),则清除使能,延时2秒重新使能恢复 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0060 - 一键设置当前位置为原点 (多圈零点校准) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ SetHome_PB_M1 +---------------------------------+ │
│ ----|P|-------------| Set_Absolute_Zero (地址1) | │
│ | 1.写0x0A=60006, 2.写0x0A=60016 | │
│ +---------------------------------+ │
│ │
│ // 依据用户手册第7页,发送60006再60016实现当前多圈位置归零 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rung 0070 - 故障指示灯输出 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Motor1_AlarmCode == 16#12 Motor1_Stall_Lamp │
│ ----| |---------------------------( )----- // 堵转报警 │
│ │
│ Motor1_AlarmCode == 16#15 Motor1_OverVoltage_Lamp │
│ ----| |---------------------------( )----- // 过压报警 │
│ │
│ Motor1_AlarmCode == 16#10 Motor1_BatteryWarn │
│ ----| |---------------------------( )----- // 电池掉电(可继续运行) │
└─────────────────────────────────────────────────────────────────────────────┘
【四、MSG指令配置详情】
┌─────────────────────┬───────────────────┬───────────────────────────────┐
│ MSG名称 │ 功能 │ Modbus参数 │
├─────────────────────┼───────────────────┼───────────────────────────────┤
│ Write_Enable_M1 │ 写驱动器使能(06) │ 地址1,寄存器0x01,值1 │
│ Write_Pos_M1 │ 绝对位置写入(0x10)│ 地址1,起始0x0016,数量2 │
│ Read_Status_M1 │ 读位置+报警(03) │ 地址1,起始0x0016,数量3 │
│ Write_Accel_M1 │ 写加速度(06) │ 地址1,0x03,值8000 │
│ Set_Origin_M1 │ 多圈零点设置 │ 连续两次写0x0A:60006/60016 │
└─────────────────────┴───────────────────┴───────────────────────────────┘
【五、驱动器参数初始化值】
┌────────────┬──────────────┬───────────────┬───────────────┬────────────────┐
│ 参数地址 │ 参数名称 │ SB-100/24Y │ SB-200/36Y │ 说明 │
├────────────┼──────────────┼───────────────┼───────────────┼────────────────┤
│ 0x00 │ Modbus使能 │ 1 │ 1 │ 必须为1 │
│ 0x01 │ 输出使能 │ 1 │ 1 │ 伺服使能 │
│ 0x03 │ 电机加速度 │ 8000 │ 5000 │ 根据负载调整 │
│ 0x07 │ 位置环KP │ 2000 │ 1800 │ 适中刚性 │
│ 0x0A │ 电子齿轮分子 │ 8192 │ 8192 │ 8192脉冲/圈 │
│ 0x0B │ 电子齿轮分母 │ 1 │ 1 │ 32768/8192=4:1 │
│ 0x19 │ 特殊功能 │ 0 │ 0 │ 脉冲+方向模式 │
└────────────┴──────────────┴───────────────┴───────────────┴────────────────┘
【六、Modbus报文示例(十六进制)】
>>> 读取SB-100当前位置(地址1)
01 03 00 16 00 02 65 CF
>>> 绝对位置移动到1圈(8192脉冲)地址1
01 10 00 16 00 02 04 00 20 00 00 [CRC]
>>> 使能输出(地址1)
01 06 00 01 00 01 19 CA
>>> 设置当前位置为原点(地址1)
01 06 00 0A EA 76 [CRC] // 写60006
01 06 00 0A EA 80 [CRC] // 写60016
>>> 读取报警代码(地址1)
01 03 00 0E 00 01 E5 CF
【七、报警代码对照表】
┌────────────┬───────────────┬────────────────────┬──────────────────────────┐
│ 报警代码 │ 红灯闪烁 │ 报警原因 │ 处理方式 │
├────────────┼───────────────┼────────────────────┼──────────────────────────┤
│ 0x20 │ 二长闪 │ 通讯掉线报警 │ 重新发送心跳包可恢复 │
│ 0x10 │ 一长闪 │ 电池掉电报警 │ 重新设置多圈原点后恢复 │
│ 0x12 │ 一长闪2短闪 │ 堵转报警 │ EN使能发1或清除报警位 │
│ 0x14 │ 一长闪4短闪 │ 失速报警 │ EN使能发1或清除报警位 │
│ 0x15 │ 一长闪5短闪 │ 过压报警 │ 需加放电模块 │
└────────────┴───────────────┴────────────────────┴──────────────────────────┘
【八、编程注意事项】
◆ 绝对位置使用32位有符号DINT,正反转对应正负脉冲数。
◆ 多圈绝对值电池掉电报警(0x10)无需停机,但应提示更换电池。
◆ SB-200/36Y大扭矩负载加速度建议5000,SB-100/24Y可用8000。
◆ 通讯异常处理:检测MSG错误位,连续失败3次置位通信故障。
◆ 电子齿轮分子分母按8192:1设置,配合编码器32768分辨率。
◆ 修改参数后需对0x14写1保存,重新上电生效。
◆ 堵转报警时间可通过0x18寄存器设置,个位0表示不报警。
◆ 驱动器485内部光耦隔离,可连接多台从机。
【九、多圈绝对值零点设置步骤】
当电池没电或多圈信息丢失时,电机红灯一长闪一短闪,按以下步骤设置零点:
步骤1:向电子齿轮分子(0x0A)发送 60006
步骤2:向电子齿轮分子(0x0A)发送 60016
设置完毕后,电子齿轮分子自动恢复原值,PU总步数变为0,电池掉电报警恢复。
【十、自动找机械原点功能】
如需上电自动找机械原点,设置方法如下:
1. Modbus使能(0x00)发送 1
2. 特殊功能(0x19)发送 1 (立刻自动找机械原点)
3. 参数保存(0x14)发送 1
重新上电后自动反转到电机堵转,然后电机反转36°作为原点。
找原点速度通过电机加速度(0x03)的个位设置,0-9代表100-1000RPM。
───────────────────────────────────────────────────────────────────────────────
※ 程序版本 1.0 | 基于YZ-AIM用户手册v2.56 | 适用于矿用隔爆永磁伺服电动机
※ SB-100/24Y和SB-200/36Y配合YZ-AIM直流一体化力矩伺服驱动器
───────────────────────────────────────────────────────────────────────────────