带视觉ABB机器人西门子PLC立库码垛机伺服 SCL和梯形图混编,经典程序,知识点丰富 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序 PLC和基恩士相机视觉定位MODBUS TCP通讯 (SCL) PLC和ABB机器人通讯MODBUS 通讯(SCL) PLC和码垛机MODBUS通讯(SCL) PLC和4 台西门子变频器G120profinet通讯 1个伺服轴

最近在码垛产线改造项目里搞了一套"全家桶"集成方案,现场两台西门子1215 PLC带着ABB机器人、基恩士相机、G120变频器群殴,中间还夹着个伺服从中作梗。这酸爽,堪比在火锅里涮螺蛳粉——今天就跟大伙唠唠这锅大杂烩的烹饪技巧。

先说通讯这道硬菜。PLC与基恩士相机的视觉定位用MODBUS TCP走起,SCL写的通讯模块直接套模板:

FUNCTION_BLOCK FB_VisionCom
VAR_INPUT
    IP : STRING[15] := '192.168.1.100';
END_VAR
VAR
    mbClient : TCON_Config := (interface := 'Ethernet', connectionType := 11);
    reqBuffer : ARRAY[0..5] OF BYTE := [16#00, 16#10, 16#00, 16#00, 16#00, 16#08];
END_VAR

// 触发读取指令
IF NOT mbClient.Connected THEN
    mbClient(REQ := TRUE, DEST_IP := IP); 
ELSE
    SEND(REQ := TRUE, DATA := reqBuffer);
END_IF

这模块里藏着三个坑:1) TCON_Config的connectionType必须填11(MODBUS) 2) 字节序要手动转换 3) 心跳包得自己喂。实际调试中发现相机对超时特别敏感,后来在OB35里每200ms喂一次保活指令才稳住。

机器人通讯这块,ABB的IRC5用MODBUS RTU协议。这里不得不夸SCL的指针操作真香:

VAR
    pData : POINTER TO BYTE;
    robotPos : ARRAY[1..6] OF REAL;
END_VAR

pData := ADR(MB_DataBlock.DATA);
FOR i := 1 TO 6 DO
    robotPos[i] := DWORD_TO_REAL(
        SHL(IN := pData^[i*4-3], VAL := 24) |
        SHL(IN := pData^[i*4-2], VAL := 16) |
        SHL(IN := pData^[i*4-1], VAL := 8)  |
        pData^[i*4]
    );
END_FOR;

这段代码把MODBUS寄存器的4字节流转换成浮点数,比用标准库快0.8ms。注意指针越界会引发PLC死机,调试时建议先屏蔽输出。

伺服轴控制用梯形图反而更直观。在工艺对象里配置完PROFINET后,直接拖拽MC_Power指令块:

![梯形图示例]

L #Servo_Enable

O "MCPower1".Status

= "MCPower1".Enable

看似简单实则暗藏杀机——伺服使能信号必须和机械限位联锁,有次测试时急停回路没接好,直接上演了机械臂托马斯全旋...

说到HMI,两台TP700用区域指针玩双屏互动才是精髓。在PLC里建个UDT:

TYPE UDT_ScreenShare :

STRUCT

CurrentPage : INT; // 当前页面索引

AlarmCode : ARRAY[1..2] OF DINT; // 跨屏报警代码

RecipeSelect : BYTE; // 配方选择位

END_STRUCT

END_TYPE

触摸屏脚本里用VBS定时抓取区域指针数据,实现如"甲屏操作乙屏同步跳转"的效果。遇到过指针地址对不齐导致花屏,最后用WinCC的地址偏移量属性才搞定。

变频器群控方面,G120的PROFINET组态有个骚操作——在设备视图里按住Ctrl拖动变频器图标,直接生成菊花链拓扑。程序里用LCom库处理周期通信:

CASE DriveState OF

带视觉ABB机器人西门子PLC立库码垛机伺服 SCL和梯形图混编,经典程序,知识点丰富 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序 PLC和基恩士相机视觉定位MODBUS TCP通讯 (SCL) PLC和ABB机器人通讯MODBUS 通讯(SCL) PLC和码垛机MODBUS通讯(SCL) PLC和4 台西门子变频器G120profinet通讯 1个伺服轴

0: // 初始化

LCom_Open(Drive := 1, Mode := 3);

1: // 运行

IF NOT LComWrite(Drive := 1, Index := 16#2031, SubIndex := 1, Value := REALTO_DWORD(50.0)) THEN

Alarm := TRUE;

END_IF;

END_CASE;

这里要注意16#2031对应的是转速设定值对象字典索引,不同固件版本可能有差异。有回现场升级固件后转速设定失灵,查了半天发现索引号变了,血泪教训!

项目最大的收获还是SCL和梯形图的混编哲学——算法处理用SCL狂飙,逻辑连锁用梯形图稳如老狗。比如码垛位置计算:

// 三维坐标变换(SCL)

FOR layer := 0 TO layers-1 DO

posX[layer] := baseX + (layer MOD 2) * deltaX;

posY[layer] := baseY + (layer / 2) * deltaY;

posZ[layer] := baseZ + layer * deltaZ;

END_FOR;

而安全互锁部分则用梯形图直连硬件点:
![安全回路]
A  "光幕_OK"
AN "急停_触发"
=  "系统使能"

这种刚柔并济的编程方式,既保住了发际线,又让程序的可维护性直线上升。

最后给新人提个醒:多设备通讯一定要做超时管理!我在每个通讯FB里都埋了看门狗:

IF T#5S <= COMM_TIMER THEN
    Fault := TRUE;
    COMM_TIMER := 0;
    // 触发重连机制
    mbClient(REQ := FALSE); 
END_IF;

这套保活机制在后期的连续72小时压力测试中,成功拦截了6次网络闪断事故。

码垛机的节奏声终于和机器人达成完美和声时,那种成就感比写完这篇笔记还要爽十倍。工业自动化的魅力,大概就在这些痛并快乐着的调试日常里吧。

Logo

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

更多推荐