首页 罗克韦尔(A. 正文

回复

罗克韦尔PLC控制伺服电机程序

罗克韦尔(AB)PLC 浏览:30 回复:0 收藏

新怡机电  2026-06-06 20:48

═══════════════════════════════════════════════════════════════════════════════

                   罗克韦尔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直流一体化力矩伺服驱动器

───────────────────────────────────────────────────────────────────────────────


我知道了