半年前有一天,我接到一个客户的电话,语气很急:”产线停了!工艺参数全乱了,过来的工件尺寸全不对!”
我赶到现场一看,PLC程序被改了。而且不是我们公司的人改的。
查了半天才知道,客户厂里一个新来的电工,觉得某个气缸的动作时间太慢了,自己拿笔记本电脑连上PLC,改了个定时器的值。改完发现不对,又改了几个地方想”恢复”,结果越改越乱,整条线直接停摆。
这件事让我下定决心,必须给PLC程序搞一套靠谱的版本管理方案。今天就跟兄弟们聊聊这个事。
PLC程序版本管理,到底有多乱?
说实话,干了十年工控,我见过太多因为程序版本乱搞出来的事故了:
有同事在现场改了程序忘了备份,回公司才发现电脑里的版本和现场不一样,下一台设备照旧程序做,结果翻车了。
有个项目,甲方半路换了维护团队,新来的不知道程序是哪个版本,随便拉了一个就上,烧了三个伺服驱动器。
还有更离谱的——有人在触摸屏上加了页面,结果下载的时候把PLC里另外一个功能的程序块覆盖了,导致报警系统失灵了三天都没人发现。
你们说说,这些情况是不是很眼熟?
血的教训:那个被改乱的程序后来怎么样了
回到开头那个故事。那次事故导致产线停了将近4个小时,按客户的说法,每小时损失大概1.5万的产值。
我到了现场之后,面对的情况是这样的:
1. 程序里三个定时器的值被改动了,两个DB块的参数也变了
2. 那个电工说他只改了”两三个地方”,但完全不记得改了什么
3. 我们没有给客户留任何程序修改记录
4. 我电脑里的备份版本是一周前的,中间客户自己改过没告诉我们
最后我只能把程序全删了,重新下载最新版,再把一周内的工艺参数变动重新设置一遍。前后花了两个多小时。
那次之后,我跟公司技术总监提了个方案:PLC项目要像软件项目一样做版本管理。
我给PLC项目搞的版本管理方案
下面这套方案是我们团队现在用的,不复杂,小团队也能落地:
第一层:本地开发用Git管理源码
我知道很多兄弟一听Git就头大。但说真的,Git没有你想的那么难。我们只需要学会五个命令就够了:git add、git commit、git push、git pull、git log。
我的做法是:每个项目在Git上建一个仓库,PLC程序(包括TIA Portal、GX Works或者Sysmac Studio的项目文件)、触摸屏程序、电气图纸、IO表、操作说明书全放进去。每次做改动之前,先pull一下确保是最新的,改完之后写清楚改了啥,再push上去。
一开始我们团队也有人觉得麻烦,但用习惯了就好了。关键是commit message要写清楚,比如”某某某项目-20260815-修改传送带启动延时从2秒改为3秒-原因:现场发现工件定位时间不够”。
就这一条规矩,后来至少救了两次场。
第二层:现场程序加写保护
这个简单但很多人忽略。PLC的程序块可以设写保护或者密码保护。把主程序块和关键功能块设成只读,现场维护人员只能通过触摸屏界面调整参数,不能直接动逻辑。
我在西门子S7-1200上是这么做的:在块的属性里勾选”专有技术保护”,设一个密码。这样别人在在线状态下能看到接口变量,但看不到块内部的代码。维护人员修改参数通过HMI背后的配方功能来实现,不进程序本身。
刚开始客户还不乐意,觉得”设备是我们的,凭什么不让我们看程序”。我解释说:”不是不让看,是为了防止误操作。你们要改程序随时找我,我来改或者我教你们改。但不设保护,一个误操作设备就废了。”大部分客户听完都能接受。
第三层:每次现场改动都要留记录
这个看起来最土,但也最管用。我们做了一个简单的程序变更记录表,放在触摸屏背后或者电柜门上,格式如下:
日期 | 修改内容 | 修改人 | 原因 | 确认人
2026-08-15 | 传送带启动延时从2s改3s | 张三 | 工件定位时间不足 | 李四
每次现场改完程序,必须填这个表,然后拍照发到项目群里。不改不让收工钱——这是我们项目经理定的规矩。
后来我们还升级了,做了一个手机小程序,扫码就能查看和填写变更记录,不用纸质的了。
第四层:程序比对工具定期扫
如果是西门子博途的用户,可以用TIA Portal自带的”离线/在线比较”功能,定期把现场程序和服务器上的”基准版本”做对比。发现有差异就报警,然后人工确认这个改动是不是合规的。
三菱的GX Works3也有类似功能。其他品牌的PLC,可以导出源文件后,用Beyond Compare或者Diffinity这种文本比较工具来对比。
我现在每个月让团队做一次全项目的程序健康检查,就是跑一遍比对,看看有没有”幽灵改动”。
大实话:这套方案坚持下来不容易
说了这么多,我跟兄弟们说实话:这套方案推下去最大的阻力不是技术,是人。
很多老工程师做了十几年,习惯了自己管自己的程序,”我改了什么我最清楚”。但问题是,你清楚不代表别人清楚。你一离职,或者一休假,别人接手你的项目就是两眼一抹黑。
我们团队一开始推Git的时候,有个干了15年的老大哥直接说:”我写程序二十年了,没Git也活得好好的。”
后来怎么说服他的?我给他看了那次停产4小时的损失账单。然后我说:”每次git commit只要30秒。4小时停产等于480个30秒。你愿不愿意花30秒,赌一把不会变成4小时?”
他想了半天,说行吧,试试。
现在他比谁都用得勤。
总结一下
说白了,程序版本管理没那么玄乎。核心就三句话:
1. 改之前备份,改完记录
2. 关键程序加保护,防止误操作
3. 定期检查,及时发现”幽灵改动”
我们这行,设备不出问题的时候没人想到程序版本的事。但一出问题就是几万几十万的损失。
你们公司有没有因为程序版本混乱出过事故?你们是怎么管理程序版本的?评论区聊聊,我也想听听大家的办法。