实测 AI 生成PLC 梯形图

AI PLC代码目前在业界讨论中无处不在,但它真的能在实际机器上运行吗?与其猜测,我设下了一个陷阱。我给了ChatGPT和Claude完全相同的CLICK PLC电机控制任务——这个任务中埋设了一个经典的接线陷阱——然后检查它们返回的AI PLC代码是否真的能运行。我本来预计至少能抓住其中一个的错误。但两个都没有上当。两者都编写了可以工作的程序,只是采用了两种不同的方式。在这篇文章中,我将展示这个任务、每个AI的产出、为什么两者都是正确的、我仍然会添加的一个东西,以及我对AI是否真的能编程PLC的诚实评价。

你可以免费跟着做。CLICK编程软件是免费下载的,你可以在实际接触硬件之前,用免费的在线梯形图模拟器验证逻辑。

1、我为AI设置的测试

我想要一个足够小可以解释、但又足够真实能抓住偷懒答案的任务。以下是我让两个AI在CLICK PLC上编程的完整要求:

启动和停止一个电机。启动按钮是输入X1上的常开触点。停止按钮接线为常闭触点,连接到输入X2,因此X2在未按下时是接通状态。电机过载触点接线为常闭触点,连接到输入X3,因此X3在电机健康时是接通状态。电机接触器是输出Y1,绿色运行指示灯是输出Y2。还有一个额外要求:当我按下启动时,我希望输出Y3上的警告蜂鸣器先响两秒,然后电机才启动。

陷阱在于停止和过载的常闭接线。偷懒的答案会在梯形图中使用常闭触点来匹配"常闭按钮",这是双重否定——这些输入在静止时已经是接通状态,所以电机永远无法启动。这正是我预计AI会出错的地方。这个任务包含一个自保持电路、一个定时器、一个过载保护,以及一个小型顺序控制。这是一个公平的测试。

2、ChatGPT的输出

ChatGPT在几秒钟内给出了回应,包括地址列表、七行梯形图逻辑,以及对每一行的解释。

CLICK PLC — 带2秒预启动警告的电机启动/停止控制

输入:
X1 = 启动按钮(常开)
X2 = 停止按钮(常闭)→ 未按下时接通
X3 = 电机过载(常闭)→ 电机健康时接通

输出:
Y1 = 电机接触器
Y2 = 绿色运行指示灯
Y3 = 警告蜂鸣器

内部:
C1 = 电机启动/运行请求
T1 = 2秒警告定时器

第1行 — 启动/运行自保持
X2 X3 X1
──| |─────────| |─────────| |──────────( SET C1 )
停止正常 过载正常 启动

第2行 — 停止复位电机请求
X2
──|/|──────────────────────────────────( RST C1 )
停止
(按下停止时X2断开)

第3行 — 过载复位电机请求
X3
──|/|──────────────────────────────────( RST C1 )
过载
(过载跳闸时X3断开)

第4行 — 2秒警告定时器
C1
──| |──────────────────────[ T1 2.0 s ]
启动请求

第5行 — 警告蜂鸣器
C1 T1
──| |─────────|/|──────────────────────( Y3 )
请求 定时器未完成
蜂鸣器开启

第6行 — 电机接触器
C1 T1 X2 X3
──| |─────────| |─────────| |─────────| |────( Y1 )
请求完成 停止正常 过载正常

第7行 — 绿色运行指示灯
Y1
──| |──────────────────────────────────( Y2 )
电机开启

它的方法是SET/RST自保持电路。第一行将启动按钮与停止和过载串联,当三个条件都满足时,它SET一个启动请求位C1。然后它给了停止和过载各自独立的复位行,每个都能复位该位。之后它用C1运行一个两秒定时器,在定时器未完成时响蜂鸣器,完成后启动电机,并随电机一起点亮绿灯。

关键点:它在梯形图中为停止和过载使用了常开触点,这对于常闭现场接线是完全正确的。它没有掉进双重否定的陷阱。这是正确的、可工作的AI PLC代码。

3、Claude的输出

我给了Claude相同的提示。它给出了地址列表、五行梯形图,以及自己的解释。

它的方法是经典的自保持锁存电路。它没有将逻辑分成设置和复位行,而是将启动按钮与C1位并联形成保持,然后将停止和过载串联,这样任何一个都能断开锁存。其余部分匹配——两秒定时器、定时器运行时的蜂鸣器、定时器完成后的电机,以及随电机一起的绿灯。

Claude也为停止和过载使用了常开触点,所以它也正确处理了常闭接线。这也是正确的、可工作的AI PLC代码——只是构建方式不同。

4、两者都通过了陷阱——这就是为什么这很重要

这是诚实的头条。我设计这个任务是为了让AI在常闭接线方面出错,但两个都做对了。这本来也是初学者最容易犯的错误,但两个AI都没有犯。在像这样明确指定的任务上,今天的AI PLC代码确实可以运行。

这让我很惊讶,我认为应该坦诚相告,而不是假装不是这样。

5、有趣的部分——两种有效的风格

我发现最有用的不是它们通过了,而是它们通过的方式有多么不同。ChatGPT使用了SET和RST;Claude使用了自保持电路。两者都是正确的,这个差异是PLC设计的真实教训。

SET/RST版本为每个停止条件分配了独立的行。这使得很容易看出电机为什么停止,也很容易以后添加另一个故障——你只需要添加另一个复位行。代价是多几行梯形图。

自保持版本是每个电工都从继电器逻辑中认识的传统电机启动器电路。它很紧凑;锁存的所有内容都在一个地方,而且立即熟悉。如果你想添加另一个停止条件,你编辑那一行即可。

两者都没有错。对于简单的电机,我倾向于自保持电路,因为它紧凑且熟悉。对于有许多停止和故障源的机器,SET/RST风格扩展得更干净。两个AI给我提供了教科书上的两种方法,这是教授权衡的好方式。

6、为什么AI PLC代码能工作?提示词做了主要工作

在任何人认为AI已经解决这个问题之前,这里有一个关键点。两个AI PLC代码都返回了正确的结果,因为我告诉了AI它需要的一切:精确的输入输出地址、停止和过载是常闭接线且静止时接通,以及我想要的精确顺序。我给了它和给同事相同的信息。

给AI一个模糊的请求——"给我写一个电机启停程序"——你会得到模糊的、通用的逻辑,不匹配你的接线,而且很可能掉进双重否定的陷阱。让这个测试成功的技能不是AI的。而是编写清晰、具体的提示词。这才是值得练习的部分。

7、我仍然会添加的一样东西

两个AI PLC代码在逻辑上都是正确的,但我仍然会修改其中一个,而且这与代码无关。两个都将电机过载通过PLC处理——在复位行或锁存中——作为条件之一。这对于指示和控制是可以的,但它不应该是故障时停止电机的唯一方式。

电机过载还应该硬接线到接触器线圈电路中,这样即使PLC停止或输出卡故障,电机也能断开。两个AI都没有提到这一点,因为两个AI都不知道你的控制柜是如何接线的,也不知道你的风险是什么。这个判断是你的。逻辑可以监视过载;硬件必须能够在没有逻辑的情况下停止电机。

8、我仍然在信任之前测试了它

纸上的正确与经过验证是不同的,所以我运行了它。我在免费的CLICK软件中输入了其中一个AI PLC代码程序,由于CLICK软件没有离线模拟器,我连接了PLC,上线,并在数据视图窗口中强制输入,断开现场接线。

按下启动——蜂鸣器响起,两秒过去,电机输出接通,绿色指示灯随之亮起。断开停止输入,然后断开过载输入,每个都能杀死电机。我首先在免费的在线梯形图模拟器中证明了逻辑形状,这是在接线之前很好的无硬件检查。

只有在通过所有这些检查之后,我才会让它靠近真正的电机——即便如此,过载也要硬接线作为后备。

9、我对AI PLC代码的评价

是的,AI可以编写它。我本来预计会抓住它的错误,但ChatGPT和Claude都为真实任务编写了正确的、可工作的梯形图逻辑,每个都采用了可靠且不同的风格。对于起草、学习和第二双眼睛来说,AI现在确实很擅长这个,我不会假装不是这样。

但为我完美指定的任务编写正确的代码,与编程你的机器是不同的。它不知道你的接线,没有考虑硬接过载,也永远不会为你的程序负责。限制不再是AI能否编写一行梯形图。限制是它看不到你的机器,也无法承担结果。你可以,而且你确实这样做。

所以像我一样使用它。编写清晰具体的提示词,让AI起草逻辑,然后验证每一行,在输出隔离的情况下测试,将安全功能保留在硬件中,只有在你理解它时才署上你的名字。这样做,AI会让你成为更快的程序员。跳过它,它最终会让你付出代价。


原文链接:AI PLC Code: I Tested ChatGPT and Claude on a Click PLC

汇智网翻译整理,转载请标明出处