S7-1200 调试的翻车经历:就因为那个 MOV 指令,我半年奖金没了
去年冬天,在苏州的某个自动化产线调试的时候,我用 S7-1200 写了个自己觉得特别完美的搬运程序。谁能想到,凌晨三点的时候,机械臂突然像发了疯一样,把一托盘的精密零件一下子甩出去三米远。好家伙,价值八万的传感器碎得满地都是。项目经理气坏了,抄起万用表指着 MOV 指令就开骂:“这东西能随便乱用吗?!”
那晚,我蹲在控制柜前面算是明白了:西门子 PLC 这东西,要是能玩得转那就是神器,要是玩不转那就是凶器。
一、硬件选型:省下的钱都是医药费
血泪案例:
2020 年在某个汽车厂的项目里,为了节省预算,用 6ES7214-1AG40 去带动 32 个伺服轴。谁知道这下可坏了,扫描周期一下子飙升到 200 毫秒,结果焊接机器人的轨迹跑偏了,三台车架都焊穿了,还得重新返工。
保命三原则:
- CPU 选型的那些黑话“1214 带小车,1217 扛大梁”——意思就是 12 个轴以下就用 1214,超过了就直接上 1217。还有啊,内存占用可别超过 70%,OB1 周期得控制在 100 毫秒以内(要是超了就等着丢包吧)。
- 模块布局的玄学 电源模块和通讯模块必须得隔开两个槽位,要不然到了夏天能热得能煎鸡蛋。数字量输出模块要放在最右侧,这样要是烧了方便带电更换。
- 端子接线的坑 急停回路一定得用硬线继电器,就算 PLC 程序再可靠也救不了命。模拟量线得穿镀锌管,别为了省钱不穿,有一次省了这钱,结果温度信号飘得跟心电图似的。
二、TIA Portal暗雷:这些操作会死人
作死实录:
固件版本的坑 用 V17 写的程序下载到 V15 的 PLC 里,好家伙,直接就让整条线瘫痪了两个小时。
变量命名的惨案 把 M0.0 用作急停信号,交接的时候新人把它当成普通标志位给复位了。
在线修改的翻车 没存档就去改 FB 块,结果让码垛机堆出了金字塔的造型。
老鸟的保命操作:
遇到通讯故障的时候,拿一根交叉网线直接连到 PLC 的 X150 口,能解决九成那些稀奇古怪的问题。
在 OB100 里把所有中间变量初始化,这可比在 OB1 里胡乱初始化靠谱十倍。
每天下班之前,用“项目>归档”把工程打包,就算硬盘炸了也不用慌(有一次丢了三个月的工程,改得头都秃了)
三、梯形图禁忌:从入门到入土
死亡代码大赏:
// 错误示范:用MOV狂魔
Network1
| I0.0 MOV 100 MW10
|——] [———————( )——————
// 正确姿势:沿触发防数据轰炸
Network1
| I0.0 P MOVE 100 MW10
|——] [——] [———————( )——————
段位对照表:
菜鸟就只会用 TON 来做延时,熟手会用 S7-Graph 写状态机。大神能在 FB 里封装带自整定的 PID 算法。妖怪能用 SCL 写模糊控制,把德国原厂的工程师都惊得直呼内行。
常用移位指令
移动值指令(MOVE):当使能(EN)为真时,实现相同数据类型(不包括位、字符串、Variant)变量间的传送。MOVE指令允许有多个输出。
块移动指令(MOVE_BLK):当EN条件满足时,将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。使用输入COUNT可以指定移动到目标范围中的元素个数。
块填充指令(FILL_BLK):当EN条件满足时,实现用输入变量批量填充输出区域的功能。
四、现场玄学:比技术更重要的手艺
诡异故障档案:现象是 Q0.0 随机输出,可程序监控却啥事儿没有,一片平静。
真相是电工把信号线和变频器线穿在同一根金属软管里了……
老师傅的锦囊:兜里永远揣着两个终端电阻(这可是 PROFINET 断网时的免死金牌)。
遇到干扰先查查柜门接地——有一次扁铁松动,导致 DI 点集体抽风。
随身带着一截网线做环回检测,三分钟就能锁定断点,这可比用诊断软件快多了。
西门子PLC S7-1200调试翻车实录:那个让我赔了半年奖金的MOV指令 PLC论坛-全力打造可编程控制器专业技术论坛 -
西门子PLC S7-1200调试翻车实录:那个让我赔了半年奖金的MOV指令
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=505487&fromuid=42656
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)