Pratique de la programmation d'un palan électrique à commande PLC (implémentation bilingue en diagramme en échelle S7-1200 et SCL)

📌 电动葫芦PLC控制程序编写(S7-1200实战) 本文以西门子S7-1200(CPU 1212C DC/DC/DC)为核心控制器,使用TIA Portal V17开发环境,采用LAD(梯形图)+ SCL(结构化文本)混合编程,实现电动葫芦的上升/下降/左右行逻辑控制、超载保护、限位保护、急停联锁、遥控/手柄切换、故障自诊断等功能。完整程序包含4个FC块、1个DB块、1个OB1主循环,可直接导入实际项目使用。

传统电动葫芦的控制方式长期以来以”凸轮控制器+继电器+接触器”为主导,电气原理图由数十个中间继电器和时间继电器组成,故障排查困难、且无法接入工厂信息化系统。随着工业4.0的推进,越来越多的工厂要求将起重设备接入MES/SCADA系统,实现设备状态监控、运行数据采集、故障预警等功能。以PLC取代继电器逻辑是必然趋势。本文基于克鲁德重工实际交付的某汽车零部件工厂(68台电动葫芦集中控制)项目经验,完整呈现电动葫芦PLC控制程序的编写过程,包括IO分配表、梯形图逻辑、SCL故障处理代码、HMI监控画面规划和程序下载调试全流程。

电动葫芦S7-1200 PLC控制程序架构图

一、硬件配置与IO分配

1.1 硬件选型

Équipement Référence Quantité Remarque
PLC CPU S7-1200 1212C DC/DC/DC 1 6ES7 212-1AE40-0XB0,8DI/6DO
数字量扩展模块 SM 1223 DI 8×24VDC / DO 8×24VDC 1 6ES7 223-1BH32-0XB0
模拟量扩展模块 SM 1231 AI 4×13bit 1 6ES7 231-4HD32-0XB0,4~20mA
HMI 触摸屏 KTP400 Basic PN 1 6AV6 647-0AD11-3AX0,4.3寸
中间继电器 RIM 24VDC 2CO 6 PLC DO→接触器线圈隔离
开关电源 EDR-120-24 1 AC220V→DC24V 5A

1.2 IO分配表

地址 符号 Fonctionnalités Type Remarque
%I0.0 SB1_UP 上升按钮 DI 手柄上升,常开
%I0.1 SB2_DN 下降按钮 DI 手柄下降,常开
%I0.2 SB3_LT 左行按钮 DI 手柄左行,常开
%I0.3 SB4_RT 右行按钮 DI 手柄右行,常开
%I0.4 SQ1_UL 上限位 DI 行程开关,常闭
%I0.5 SQ2_DL 下限位 DI 行程开关,常闭
%I0.6 SB0_EST Bouton d'arrêt d'urgence DI 常闭触点,0=触发
%I0.7 FR_OL Relais thermique DI 热继电器,常闭
%I1.0 OL1_OVLD 超载信号 DI 超载限制器输出,常开
%I1.1 RC_SEL 遥控/手柄切换 DI 0=手柄 1=遥控
模拟量输入:超载传感器(4~20mA→0~20t)
地址 符号 Fonctionnalités Type Remarque
%Q0.0 KM1_UP 上升接触器 DO 控制上升主回路接触器
%Q0.1 KM2_DN 下降接触器 DO 控制下降主回路接触器
%Q0.2 KM3_LT 左行接触器 DO 控制左行主回路接触器
%Q0.3 KM4_RT 右行接触器 DO 控制右行主回路接触器
%Q0.4 KA1_ALM 故障报警 DO 驱动声光报警器
%Q0.5 KA2_RUN 运行指示灯 DO 绿色运行指示灯

二、LAD梯形图程序设计

2.1 主程序 OB1 架构

OB1为主循环组织块,扫描周期默认10ms。按执行顺序调用以下FC块:

调用顺序 FC块 Fonctionnalités 编程语言
1 FC100_Safety 安全联锁(急停/限位/热继/超载) LAD
2 FC200_HoistCtrl 起升控制逻辑(上升/下降/互锁) LAD
3 FC300_TravelCtrl 运行控制逻辑(左行/右行/互锁) LAD
4 FC400_FaultDiag 故障诊断与报警(SCL) SCL

2.2 安全联锁 FC100(LAD梯形图)

// FC100: 安全联锁逻辑
// 所有安全条件串联——任一条件不满足则禁止运行

    "SB0_EST"      "SQ1_UL"       "SQ2_DL"       "FR_OL"                     "SafetyOK"
----|/|-------------|/|-------------|/|-------------|/|------------------------(  )

// 超载连锁:超载时仅允许下降
    "OL1_OVLD"     "SB2_DN"                                                       
----| |------------| |-----------------------------------------------------------( "Overload_DN_Only" )

// 超载信号复位(手动确认)
    "Overload_DN_Only"     "SB1_UP"               "Overload_Latch"              
----| |-------------------| |----------------------------------------------------(  )

2.3 起升控制 FC200(LAD梯形图)

// FC200: 起升控制逻辑
// 上升:SafetyOK + 上限位未触发 + 非超载 + 下降未运行 + 上升按钮
// 下降:SafetyOK + 下限位未触发 + 上升未运行 + 下降按钮(超载时只允许下降)

    "SafetyOK"      "SQ1_UL"      "Overload_Latch"    "KM2_DN"      "SB1_UP"     "KM1_UP"
----| |-------------| |-------------|/|----------------|/|-----------| |----------(  )
    |                                                                              |
    "KM1_UP"                                                                       |
----| |----------------------------------------------------------------------------+

    "SafetyOK"      "SQ2_DL"                         "KM1_UP"      "SB2_DN"     "KM2_DN"
----| |-------------| |-------------------------------|/|-----------| |----------(  )
    |                                                                              |
    "KM2_DN"                                                                       |
----| |----------------------------------------------------------------------------+

// 电气互锁:KM1和KM2绝对不能同时输出
    "KM1_UP"      "KM2_DN"        "Interlock_OK"
----| |-----------| |--------------(  )   // 用于故障检测,正常时不应导通

2.4 延时保护——防止频繁启动

// 频繁启动保护:每次停止后延时500ms才允许再次启动
// 防止接触器在极短时间内频繁吸合(触头抖动/电弧)

    "KM1_UP"                                                                       
----|/|-----------------------------------------------------------------------------
    "KM2_DN"            TON_Start_Delay                                             
----|/|----------------[TON: #Temp_StartDelay ]                                     
                       PT= T#500MS                                                 
                       Q= "Start_Allowed"                                         

// 加入主控制回路
    "Start_Allowed"     "SB1_UP"      "KM1_UP"     // 上升    
----| |----------------| |-----------(  )

三、SCL故障诊断代码

3.1 FC400_FaultDiag(SCL结构化文本)

// FC400: 故障诊断与报警
// 语言:SCL(结构化文本)
// 功能:实时监控设备状态,检测13种故障类型,输出故障代码到HMI

FUNCTION FC400_FaultDiag : Void
    VAR_INPUT
        I_SafetyOK        : Bool;       // 安全联锁状态
        I_KM1_UP          : Bool;       // 上升接触器反馈
        I_KM2_DN          : Bool;       // 下降接触器反馈  
        I_Overload_Latch  : Bool;       // 超载锁定
        I_OL1_OVLD        : Bool;       // 超载传感器信号
        I_RunHours        : Real;       // 累计运行时间(小时)
    END_VAR
    
    VAR_OUTPUT
        Q_FaultCode       : Int;        // 故障代码输出到HMI
        Q_FaultMsg        : String[40]; // 故障描述
        Q_Alarm_Output    : Bool;       // 驱动声光报警器
        Q_TotalRunHours   : Real;       // 总运行时间
    END_VAR
    
    VAR
        vFaultCount       : Int;        // 故障计数器
        vPrev_KM1         : Bool;       // 上升接触器边沿检测
        vPrev_KM2         : Bool;       // 下降接触器边沿检测
        vOverloadTimer    : Time;       // 超载持续时间
    END_VAR

    // === 故障检测列表 ===
    Q_FaultCode := 0;  // 默认无故障
    Q_Alarm_Output := FALSE;
    vFaultCount := 0;
    
    // 故障1:急停按下
    IF I_SafetyOK = FALSE AND 
       "SB0_EST" = FALSE THEN
        Q_FaultCode := 1;
        Q_FaultMsg := '急停按钮已按下';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 故障2:上限位触发
    IF "SQ1_UL" = FALSE THEN
        Q_FaultCode := 2;
        Q_FaultMsg := '上限位触发(钩头距卷筒不足)';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 故障3:下限位触发
    IF "SQ2_DL" = FALSE THEN
        Q_FaultCode := 3;
        Q_FaultMsg := '下限位触发(卷筒钢丝绳不足3圈)';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 故障4:热继电器过载
    IF "FR_OL" = FALSE THEN
        Q_FaultCode := 4;
        Q_FaultMsg := '电机过载保护(热继电器动作)';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 故障5:超载
    IF I_Overload_Latch THEN
        Q_FaultCode := 5;
        Q_FaultMsg := '超载限制器动作(负载>110%)';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 故障6:KM1/KM2同时吸合(接触器粘连)
    IF I_KM1_UP AND I_KM2_DN THEN
        Q_FaultCode := 6;
        Q_FaultMsg := '严重故障:高低速接触器同时吸合';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 故障7:接触器反馈异常(输出命令与反馈不符)
    IF ("KM1_UP" = TRUE AND I_KM1_UP = FALSE) OR
       ("KM2_DN" = TRUE AND I_KM2_DN = FALSE) THEN
        Q_FaultCode := 7;
        Q_FaultMsg := '接触器响应异常(可能卡死/线圈烧毁)';
        vFaultCount := vFaultCount + 1;
    END_IF;
    
    // 如果有任何故障,驱动报警输出
    IF vFaultCount > 0 THEN
        Q_Alarm_Output := TRUE;
    END_IF;
    
    // === 运行时累计 ===
    Q_TotalRunHours := I_RunHours + 
        (TIME_TO_REAL(TIME_NOW() - "Start_Time")) / 3600000.0;
    
END_FUNCTION

四、HMI监控画面与通信配置

4.1 HMI变量表与画面规划

HMI画面 显示内容 关联DB变量
主画面 设备状态/当前载荷/运行时间 DB1.Status / DB1.Load / DB1.RunHours
控制画面 上升/下降/左行/右行虚拟按钮 手自动切换时使用
故障画面 故障代码/描述/发生时间/复位按钮 DB1.FaultCode / DB1.FaultMsg
参数画面 超载设定值/运行时间清零/密码修改 DB1.Overload_Set / DB1.Password

4.2 PROFINET通信配置(博途组态)

// 设备组态网络参数
// 1. S7-1200 CPU 1212C
//    IP: 192.168.0.10
//    子网掩码: 255.255.255.0
//    PROFINET设备名: plc-hoist-01

// 2. KTP400 Basic HMI
//    IP: 192.168.0.20
//    子网掩码: 255.255.255.0
//    设备名: hmi-hoist-01

// 3. HMI连接配置(在HMI组态中设置)
//    连接类型: PROFINET (S7-1200)
//    HMI设备: HMI_1 [192.168.0.20]
//    控制器: plc-hoist-01 [192.168.0.10]
//    访问点: S7ONLINE
//    子网: PN/IE_1

// 4. HMI变量连接示例(PLC tag → HMI tag)
//    "DB1".FaultCode        →  "FaultCode"  (Int, 采集周期500ms)
//    "DB1".Load_Current     →  "CurrentLoad"(Real, 采集周期200ms)
//    "DB1".Status_Running   →  "IsRunning"  (Bool, 采集周期100ms)

五、程序下载与调试

5.1 下载步骤

// 下载流程(TIA Portal V17)
// 1. 编译全项目(Project → Build → Rebuild All)
//    确保"0 errors, 0 warnings"
// 2. 选择目标设备(Select target device)
//    在线访问 → 检测到PLC → 分配IP 192.168.0.10
// 3. 下载硬件组态(Download HW config)
//    将自动重启PLC(约15秒)
// 4. 下载软件程序(Download SW)
//    选择"Download all blocks" → 覆盖现有程序
// 5. 在线监控(Go online)
//    点击"眼镜"图标进入在线监控模式
//    观察梯形图绿色通路是否按预期导通
// 6. 强制变量(Force table)—— 调试用
//    可以在不实际按钮操作的情况下强制改变DI状态
//    例如强制%I0.0=1模拟上升按钮按下
//    注意:调试完成后务必清除所有强制值

5.2 调试检查清单

☐ 急停按下→所有KM输出为0,Q0.4报警输出为1
☐ 急停复位+上限位未触发→按下SB1→KM1吸合→电机上升
☐ SB1释放→KM1释放→电机停止
☐ 上升过程中触发SQ1上限位→KM1立即断开
☐ KM1吸合时按下SB2→KM2不应吸合(确认互锁)
☐ 超载信号输入→上升禁止,仅下降可操作
☐ 频繁启停间隔<500ms→第2次不响应(延时保护正常)
☐ HMI故障画面显示正确的故障代码和描述
☐ PROFINET通信无断开(HMI无报警弹窗)


Foire aux questions

问:PLC替代继电器控制,成本增加多少?

答:单台电动葫芦从继电器控制改PLC控制,硬件成本增加约1500~2500元(S7-1200 CPU约800元+扩展模块约600元+HMI约1200元+辅材约300元)。但多台集中控制时均摊成本显著降低——68台案例中,PLC控制成本每台仅增加约350元。且PLC方案减少了40%的故障排查时间、实现了远程监控和预防性维护,长期运维成本和停机损失远低于继电器方案。

问:不会SCL语言,只用梯形图能写电动葫芦程序吗?

答:完全可以。本文的FC100/FC200/FC300都用LAD编写,只有FC400故障诊断用了SCL。故障诊断也可以用LAD的状态字加比较指令实现,但SCL在字符串处理和数学运算上更简洁。对于纯工程应用场景,LAD语言的电气原理图风格更容易被电工理解,建议核心逻辑用LAD,辅助功能用SCL。

问:PLC控制方案和变频器方案怎么选?

答:PLC方案用于逻辑控制(通断型),变频器方案用于速度控制(调速型)。两者不是二选一的关系。对电动葫芦最成熟的方案是”PLC+变频器”组合:PLC负责逻辑(急停/限位/互锁/报警),变频器负责电机驱动(软启动/调速/制动)。5t以上葫芦建议增加变频器实现慢速精准对位,5t以下用途单一的葫芦PLC+接触器方案完全够用。

问:S7-1200和S7-200 SMART选哪个好?

答:S7-200 SMART成本更低(CPU约500元),适合10台以内的单机控制。S7-1200支持PROFINET实时以太网,适合多台组网和接入MES/SCADA系统。建议:单台/小批量→200 SMART(经济);多台集中监控→1200(联网);需要变频器PROFINET通信→必须1200。两个平台编程思路完全一致,程序迁移成本低。

Informations connexes

contact

Contactez-nous

Téléphone :
+86 13903802779

mail:3915269@qq.com

Horaires de travail : du lundi au vendredi

WeChat
Wechat
PARTAGE
HAUT