ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DeepSeek辅助PLC编程实战:从梯形图到SCL的提效指南

DeepSeek辅助PLC编程实战:从梯形图到SCL的提效指南 写程序这行干久了会不自觉地对重复性劳动产生“生理性厌恶”。尤其是PLC程序哪怕逻辑再简单也得一个网络一个网络地敲梯形图一个变量一个变量地命名、注释、管理。碰到那种几十个工位、上百个IO点的项目光是机械重复的编写工作就足够让人头大。所以当我第一次看到有人用DeepSeek这样的AI工具直接生成PLC代码的时候第一反应是“这玩意能行吗”干工控的老法师都知道现场设备不听PPT忽悠程序错了是要出安全事故的。但等我花了两周时间从简单的启停控制到复杂的模拟量处理、变频器通讯认认真真跑了一遍流程之后我的结论变了DeepSeek这种大语言模型确实没法直接给你端出一套能跑的生产级程序但它作为“PLC编程的加速器”作用被严重低估了。这篇文章我不谈那些虚头巴脑的“AI取代工程师”论调就从一个干了十来年设备维护和程序开发的老兵视角聊聊我是怎么一步步把DeepSeek“调教”成我的PLC编程助手的。全程干货没有废话包含了我踩过的坑和验证过的技巧希望能给你一些实在的参考。1. 整体设计思路AI不是替代你而是替你干“脏活累活”先说句扎心的大实话现在的AI包括DeepSeek并不具备真正的“工业逻辑思维”。它不知道你的设备有几个限位开关不知道你的工艺要求是“快进-工进-快退”还是“多点定位”更不知道你用的是国产某品牌200块一个的简易PLC还是西门子S7-1500。但这并不妨碍它成为一个好用的工具关键在于你怎么用它。我用下来的理解是DeepSeek这类AI在PLC编程中的角色更像是一个“精通语法但不懂工艺的编程老手”。你负责把设备的“灵魂”工艺流程、控制逻辑、安全联锁告诉它它负责帮你把这些需求翻译成“机器听得懂的话”梯形图、结构化文本ST、指令表IL。它最擅长的是什么是处理那些重复性极高、语法规则严格、但毫无创造性的代码。比如几十个相同的模拟量输入通道的量程转换和报警处理。严格按照某种格式编写的Modbus RTU通讯报文。大批量变量的命名、注释和DB块的生成。把一套成熟的FB功能块从西门子STL语言“翻译”成三菱的ST语言。这活让工程师干纯属浪费时间而且容易因为疲劳而出错。让AI干只要你的指令清晰准确它能在十几秒内给你一个正确率极高的初稿。你要做的是去检查和修改这个初稿而不是从零开始敲键盘。所以我把AI辅助编程的流程设计成了三个层级需求翻译-代码生成-验证迭代。首先我用自然语言把我要的东西给AI说清楚说得越细越好然后它给我生成代码最后我把它生成的代码拿到软件里去编译、仿真、验证。这个流程里人始终是主导者AI是执行者。这样既利用了AI的高效也保证了工业控制最重要的“可靠性”。1.1 核心需求解析到底什么场景下AI最好用很多人一上来就让AI“写一个电机正反转控制程序”然后看着AI生成了一个类似“教科书答案”的代码觉得“就这我也行啊”。但这是对AI使用的误解。像我上文提到的AI的优势在于“批量”和“翻译”而不是给你写一个简单的起保停电路。我实际测试下来这三类活儿让DeepSeek干幸福感提升最明显代码的“语言转换”与格式统一。比如把一段三菱Written的ST语言程序转成西门子博途里的SCL语言人工核对虽然也需要检查但AI转换后的基础语法、变量定义格式基本挑不出大毛病省了很笨的重复工作。复杂数学模型的实现。像PID参数整定的辅助计算、模拟量线性转换、甚至一些简单的运动控制插补算法你只需要把公式给AI它能帮你用SCL或ST语言写得明明白白还能顺手给你加上异常保护。功能块的标准化封装。把你的控制逻辑比如“一个气缸的伸出缩回控制”写成带输入输出参数、带背景数据块的功能块FB。AI生成的代码结构通常非常清晰初始化、主逻辑、复位逻辑分得清清楚楚比我见过不少工程师写的“一坨式”代码好维护多了。听到这你应该明白了让DeepSeek写PLC程序你首先得是个“明白人”。你得懂工艺、懂设备、懂编程逻辑。它帮你提效但不可能帮你从零“无中生有”。如果你是个刚入行的新手用它来学习怎么组织代码结构、怎么写规范的注释也是个不错的老师但千万别拿它当现场调试的万能钥匙。2. 实操过程实录从需求到代码的四步法接下来就是重头戏了我是怎么一步步的通过DeepSeek把程序“逼”出来的。我用一个最简单的案例——“用西门子S7-1200控制三个电机顺序启动逆序停止”——来带你完整走一遍我的操作流程。这个过程本质上就是把你的大脑接入AI的大脑。2.1 第一步像写招标书一样向AI“描述需求”我发现很多人用不好AI就是因为直接把AI当成了百度知道输入“电机顺序启动PLC程序”就想要个标准答案。结果得到的代码自然是通用得不能再通用甚至逻辑还有错。正确的做法是给AI提供包含足够约束条件的“招标说明书”。我通常会把需求拆成几个部分像清单一样列出来。比如这个案例硬件信息我指定使用西门子S7-1200系列编程软件是TIA Portal博途程序语言用SCL。IO规划我用三个普通的数字量输入接启动按钮和停止按钮三个数字量输出接三个接触器分别控制三台电机M1、M2、M3。控制需求按下启动按钮后M1立即启动5秒后M2自动启动再过5秒M3自动启动。按下停止按钮后M3立即停止5秒后M2停止再过5秒M1停止。安全保护需要包含急停处理一旦急停被按下所有输出复位。附加要求程序需要带有清晰的注释方便现场维护。我把这段描述原封不动地丢给DeepSeek注意我是用“写一段SCL程序”作为结尾。很快它就返回了一段结构完整的代码。效果比我预想的好不少变量的定义、定时器的使用TONR、注释一个不少。但你如果认为这就完了那就大错特错了。2.2 第二步追问与迭代榨干AI的“逻辑能力”第一版程序能跑吗能。但缺少一些工程上的细节。比如说它生成的程序里急停按钮是用的常开触点只考虑了程序里把输出置位清零没有考虑硬接线的安全回路。还比如说顺序启动时如果M1的接触器没有吸合比如热继电器跳闸了程序应该怎么办这就是关键所在。AI生成完代码后你不能直接拿过来用而是要像审核下属的方案一样不断向它提问、挑战它。我会这么问它“如果M2启动时它的热继电器反馈信号没来程序应该如何报警并停止后续动作”“我需要添加一个运行指示功能当M1启动时一个指示等亮起该怎么做”“如果启动途中按下停止整个逻辑应该怎么处理”每一次提问DeepSeek都会基于它“学到的”海量工业案例给我的程序添加相应的逻辑片段。通过这种“提问-修改-再提问-再修改”的迭代最初那个光秃秃的骨架被我一点点地补上了安全联锁、故障诊断、手动自动切换等功能。最后生成的程序已经相当接近一个可以上线的版本了。这个过程中我干的工作看起来只是打打字但实际上我是在重新梳理整个控制系统应有的功能逻辑这就是AI无法替代工程师的核心价值。2.3 第三步格式“翻译”让AI替你干跨平台的苦力活厂里设备用得很杂有西门子的有三菱的还有老式欧姆龙的。每次维修别的品牌的PLC光查指令手册都头大。这里又体现出AI的一大好处跨平台翻译。有一次我需要把一台西门子200 SMART的老程序移植到公司新买的三菱FX5U上。程序不算复杂但里面用了好几个定时器、计数器加上启保停逻辑人工照着改得小半天。我用DeepSeek直接把这台老程序的梯形图对应的指令表STL复制了一部分给它然后告诉它“把这套逻辑用三菱FX5U的ST语言重新实现输入输出映射关系如下……”。它生成的代码虽然有部分语法细节需要调整毕竟三菱和西门子的ST在功能块调用上有区别但整体的逻辑架构、变量对应关系几乎不用动。我只需要在GX Works3里把这段代码粘贴进去补充一下变量表编译一次通过。你敢信这要是放在以前光是研究三菱的TMR和西门子的TON的定时器精度差异就得花半天时间。2.4 第四步用AI“倒推”程序看懂老外写的“天书”咱们搞维护的最怕看别人写的又臭又长的老程序尤其是老外写的那变量命名一个随便逻辑跳转绕来绕去看半小时能看睡着你信不信。我以前的办法是硬啃现在我会把程序的关键段落直接丢给DeepSeek让它用大白话给我讲这段程序是干什么的。比如我丢给它一段用STL写的模拟量PID调节程序它就能告诉我“这段程序先做了工程量转换然后计算偏差再调用PID功能块输出结果经过限幅后送到模拟量输出模块。其中某个参数如果大于100程序会进入手动模式。”这功能对于现场设备维修绝了。它相当于带了个随时翻译的“副手”能帮你快速理解你不熟悉的程序风格和逻辑思路。当然它偶尔也会“一本正经地胡说八道”所以在关键结论上我最终还是会按照它的理解方向亲自去监控几个关键的变量验证一下。不过即便如此这也能把排查故障的范围缩小一大半。3. 核心细节解析这些参数和坑你必须知道别以为知道了上面那几步你就能愉快的使用AI编程了。实际上这里面的门道多了。我在前面反复提到你要“会提问”但实际上提问只是表面功夫真正的功力在于你“怎么把工艺翻译成AI能听懂的约束条件”。其中有几个细节我觉得最值得拿出来单独聊聊。3.1 变量名和注释AI帮你建立“编程洁癖”我们很多工程师自己写程序就有个毛病懒得起名。AI的话它也是基于统计的你如果不在需求里明确它默认生成的变量名大多是Temp_1、Station_2这种毫无意义的符号。这会导致程序可读性极差。我的习惯是在向AI提问之前我会先规划好IO分配表和变量命名规则然后把这张表直接复制给AI。比如符号表 - I0.0: 设备急停按钮常闭 - I0.1: 循环启动按钮 - I0.2: 循环停止按钮 - Q0.0: 1号电机运行接触器 - Q0.1: 2号电机运行接触器 - M0.0: 自动模式标志 - T37: 顺序启动时间继电器告诉AI“遵循以上变量命名生成SCL代码且每个变量在代码中必须带有中文注释。”这样生成的程序真的是又规范又漂亮。它替你守住了代码格式的底线你只需要负责工艺逻辑的正确性。对于要交付给甲方运维的项目这套规范化的代码能省去后续无尽的扯皮。3.2 梯形图与SCL到底该让AI生成哪种语言西门子博途里支持LAD梯形图、FBD功能块图、SCL结构化控制语言和STL语句表。刚开始用AI时我也喜欢让它生成梯形图或者生成STL毕竟看起来更“硬核”。但用下来我强烈建议除非有强制要求否则都让它生成SCL。原因很简单AI对文本语言的理解更精准。SCL本质上是一种高级语言逻辑结构清晰AI生成这种文本形式的代码比生成图形化的梯形图准确率高得多。便于审查和比对。生成SCL代码后我可以直接肉眼审查逻辑也可以用文本编辑器进行关键字搜索效率比在密密麻麻的梯形图里找触点高多了。可复用性最强。SCL代码块可以直接复制到其他项目稍微改改变量名就能用。当然如果你有强烈的“梯形图信仰”或者现场工人师傅只看梯形图作业那你可以用另一种方式让AI生成SCL逻辑然后你在博途里通过“生成块”功能把SCL转换成梯形图。不过转换出来的梯形图有时会带上一些隐性的中间变量结构不如原生梯形图那么好看。但作为参考足够了。3.3 模拟量与通讯AI最容易被“坑”的地方前面说的都是逻辑控制属于AI的舒适区。一旦涉及模拟量处理比如温度采集、变频器通讯那就要格外小心了。因为这些地方充满了“量程”、“数据格式”、“字节顺序”等细节。我试过让AI写一个“读取智能温控表Modbus RTU温度值并滤波的程序”。它生成的代码结构是对的初始化通讯发送读请求接收数据然后做高低字节交换最后计算成工程值。但问题出在“高低字节交换”上。AI不一定知道国产的温控表像宇电、台达里面的Modbus寄存器存储模式和进口的欧姆龙可能不一样。如果你照着AI给的代码去写读上来的温度大概率是个错得离谱的乱码。所以在处理这类代码时我的原则是仅仅把AI看作是“框架生成器”它能帮你搭好通讯状态机、定时器管理这些外围框架。至于数据的解析、转换的核心公式你必须亲自根据仪表手册的技术规格去核对和修改。切勿直接使用AI生成的模拟量线性转换指令NORM_X和SCALE_X必须先搞清楚模拟量模块的实际测量范围0~27648还是-27648~27648AI可不知道你买的是哪个型号的模块。4. 常见问题与排查技巧实录AI写代码也不是百分之百靠谱尤其是当它试图“创造”一些不存在的功能时。用久了我也练就了一双火眼金睛整理了几个最常踩的坑供你参考。4.1 “AI幻觉”生成不存在的指令或功能块这是最坑的。有时候你问一个比较冷门的功能比如“用S7-1200读取第三方编码器SSI接口的数据”或者“调用某个特定版本的工艺模块”DeepSeek为了回答你可能会一本正经地捏造一个完全不存在的FC功能块名称或系统指令。你拿到博途里一编译一下报错几十个全查无此物。我的排查心得拿到AI代码后先别急着往程序里粘贴。先在博途的指令树里搜索一下它用到的那些指令。如果找不到赶紧删了或者把这句话给它打回去警告它“该指令不存在请重新生成”它通常会换个思路给你重新写。记住AI是概率预测模型它最喜欢的不是“准确”而是“像那么回事儿”。4.2 语法正确但逻辑死循环AI对于循环处理比如批量处理数据的代码容易写出“死循环”或者“死等”的逻辑。特别是在使用SCL的FOR循环或WHILE循环时它可能会忽视PLC扫描周期的限制写出一个等待时间无限长的循环直接导致PLC看门狗超时CPU停机报错。我的排查心得凡是AI生成的代码里带有循环语句的必须亲手检查循环次数有没有上限循环体内有没有退出条件。如果涉及到等待一定把“程序卡死”的情况模拟出来。对于运动控制和安全回路永远记得硬接线安全回路是最后一道防线程序逻辑里的“等待”最好用定时器去解决而不要用死循环去死等。4.3 与外围硬件“水土不服”就像我前面说的AI是“纸上谈兵”的高手。它根本不知道你用的变频器是ABB的还是国产英威腾的也不明白为什么你的模拟量模块读上来的值是7200对应的是0V。它会理所当然地认为所有的变频器通讯地址都一样是2000H开头的标准地址。我的排查心得涉及到任何第三方设备通讯时必须把设备的Modbus寄存器手册或是PROFINET GSD文件里的模块说明截图或者复制文字给到AI这样它才能“按图索骥”。另外也要把设备里设置的波特率、数据位、校验位直接告诉它否则生成的通讯初始化代码大概率对不上。5. 一些想对你说的实在话文章写到这心里其实挺感慨。我刚入行那会儿公司里一位老师傅画了张梯形图当宝贝一样锁在抽屉里别人问两句他都藏着掖着。那个时代经验就是壁垒。但现在不一样了DeepSeek把“怎么用代码实现一个复杂逻辑”的门槛瞬间拉低了只要你有清晰的思路就能借助AI快速落地。但我还是想说AI这把“倚天剑”不是谁都能耍好的。你可以让它帮你写启停程序但你不能不搞懂为什么电机启动要星三角转换你可以让它帮你生成通讯程序但你必须知道CRC校验是干嘛的。AI给你的是一块块积木而你必须是那个知道积木要搭成什么样的人。最后我再分享一个小技巧。当你准备把AI生成的代码用到生产设备上时不妨让它先给你写一套完备的测试用例。比如“告诉我如何验证这个电机顺序启动的逻辑输入什么信号、观察什么输出”。这个功能很多时候比生成代码本身还有用。它能逼着你站在测试者的角度重新审视程序提前发现逻辑漏洞。这一点不少朋友可能还没试过。实践是检验真理的唯一标准。拿着这篇文章的方法找个空闲的时间在虚拟机或者仿真软件里试一试我相信你一定能感受到这种“人机协作”的乐趣。别怕报错报错越多你成长越快。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进