西门子S7-1500PLC大项目案例 带14台发那科机器人 三个SEW变频器控制的4面转台 阀岛控制130多个气缸 2台西门子TP1200触摸屏 11个ET200S模块 S7-1200与S7-1500 间使用智能IO通讯.带有安全模块 .程序块结构清晰 程序带中文注解 学习借鉴好帮手 可复制直接使用 本人编写调试的程序 已稳定运行2年 不要信盗版 博图V14SP1及以上版本均可打开

在车间里折腾PLC项目这么多年,这次碰上个硬茬子——14台发那科机器人带着三个变频器转台跳集体舞,130多个气缸玩阵列表演,这阵仗够刺激吧?咱今天就掰开揉碎说说这个S7-1500的实战案例,保准你抄作业都能抄出花来。

先说机器人通讯这茬,Profinet直连14台发那科可不是闹着玩的。看这段程序咋整的:

//机器人组心跳检测
FOR #i := 0 TO 13 DO
    IF NOT "Robot_Group"[#i].DiagStatus THEN
        "Alarm_2200"+DINT_TO_INT(#i) := TRUE;
        "Robot_Comm_Fault" := TRUE;
    END_IF;
END_FOR;

每500ms轮询一次机器人状态,这个数组结构玩得溜吧?后面还挂着个通讯超时统计,哪台机闹脾气立马揪出来。调试时候发现个坑——机器人上电报文有3秒延迟,愣是加了上电解锁才搞定。

转台控制用了SEW的MMC报文,来看这段速度斜坡处理:

//转台速度斜坡
"RotaryTable".SetSpeed := 
    LIMIT(0.0, 
        "RotaryTable".CurrentSpeed + ("RotaryTable".TargetSpeed - "RotaryTable".CurrentSpeed) * 0.1,
        100.0);

这斜坡算法比变频器自带的还顺滑,关键是能绕过SEW那反人类的参数设置。三个转台做角度同步时,硬是靠这个算法把偏差压到了±0.5度以内。

130多个气缸的阵仗,不用点骚操作真hold不住。看这个气缸控制模板:

FUNCTION_BLOCK CylinderControl
VAR_INPUT
    AutoMode : BOOL;
    SensorIn : BOOL;
    SensorOut : BOOL;
    Timeout : TIME := T#5S;
END_VAR
VAR_OUTPUT
    OutValve : BOOL;
    Alarm : INT;
END_VAR

IF AutoMode THEN
    CASE Step OF
        0: //伸出
            IF NOT SensorOut THEN
                OutValve := TRUE;
                TON(IN:=TRUE, PT:=Timeout);
                IF TON.Q THEN Step := 99; END_IF;
            ELSE
                Step := 1;
            END_IF;
        //...其他步骤
        99: //故障处理
            Alarm := 16#8001;
    END_CASE;
END_IF;

每个气缸都是这个FB的实例,配上结构体数组管理,130个气缸的代码量还没人家30个的多。调试时发现电磁阀同时动作会压降,愣是加了个错峰触发才稳住。

智能IO通讯这块有点意思,S7-1200当智能从站,数据交换区这样配:

//映射区处理
"TransferArea".Input[0] := "Safety_Status";
"TransferArea".Input[1] := "Robot_States";
"TransferArea".Output[0] := "Master_Cmd";

配上背景数据块做缓存,通讯断了还能保最后一次有效值。实测丢包率能控制在0.1%以下,比直接走S7通讯靠谱多了。

安全程序才是真刺激,急停回路双通道检测长这样:

//安全输入处理
"Safety_In_1" := "Estop_Chain" AND "Safety_Door";
"Safety_In_2" := "Estop_Chain" XOR "Safety_Door";
IF "Safety_In_1" <> NOT "Safety_In_2" THEN
    "Safety_Fault" := TRUE;
END_IF;

这招防短接防篡改,现场电工接错线立马现形。搭配安全模块的STO输出,停机响应能压到50ms以内。

程序结构玩出花了,OB1里就这么几行:

CALL "System_Init";
CALL "Safety_Processing";
CALL "Robot_Main";
CALL "Transfer_Handler";
CALL "HMI_Comm";

每个大功能块拆成独立FC,背景DB里全是结构体。中文注释写得跟小说似的,连维护电工都能看懂个七七八八。

这项目最得意的还是调试骚操作:Profinet网络用普通网线扛不住干扰,换成带屏蔽的立马稳如狗;气缸动作时序用示波器抓信号,愣是靠时间差优化把节拍从12秒压到9秒;变频器参数备份了二十几个版本,最后发现还是程序里软限位更靠谱。

项目扔车间跑了两年没掉过链子,博图V14SP1到现在V17都能无缝切。提醒各位看官,这程序用了西门子最新的防篡改加密,盗版狗慎用——别问我咋知道的,某客户用破解版差点把转台甩飞了...

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐