首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >RealPLC AI第二期内测即将开启!看看有哪些重大更新?

RealPLC AI第二期内测即将开启!看看有哪些重大更新?

作者头像
Hello工控
发布2026-05-29 13:40:17
发布2026-05-29 13:40:17
1360
举报
文章被收录于专栏:Hello工控Hello工控

从我们第一期开启内测到今天,已经过去了将近20天时间,我们陆陆续续收到第一期内测朋友的反馈。

我们的邮箱收到有效的反馈建议里面,最主要的是文件上传、梯形图的支持、drawio、博途SCL代码生成格式等问题。

这一次从第一期简单的对话升级到理解需求,进行需求分析,然后针对分析的结果进行人工交互确认,补充需求后进行PLAN的规划阶段,生成计划后进入到审批阶段,这个阶段可以人工修改和反馈,重新规划后,再进入工程推理,再生成代码。

所以,这个过程花了很长时间来处理,主要是AI辅助的生成效果需要反复去测试,而且随着架构代码的数量上升后,每优化一个地方,就需要大量的时间来验证测试。

那本期文章,把最主要的更新分享这里,也作为第二期内测的操作简易说明,后期产品定型后会把这些文档整理在官网www.realplc.com。敬请收藏和关注!

01

更懂工程化

我们在这个开发期间,肯定有很多人会问,为什么要用RealPLC,为啥不直接用DeepSeek、Cursor,直接还免费,多方便?

说实话,我是没有那么多精力去回复,下次再遇到这种问题我基本是忽略,我们的定位就是更懂实际的设备编程现场,初期当然是吸纳这些AI的主体,通过大家的反馈和我们自身的理解构建这个专属工控领域的AI。

这些干扰我们的语言,肯定不止于这一次或者某一个人。我们要做的是按照既定目标前行,即使心中已经有一个庞大的愿景,但是现在不是说这些的时候,需要的是踏踏实实一步一步夯实,至于能到哪一步,不只是取决我个人,后期肯定是希望把我们行业所有大佬的经验吸纳进来,我也坚信,只要在进步,AI绝对会超过某一个电气工程师,毕竟AI融合了所有愿意共建的优秀的工程师的精华,怎么可能拼不过一个个体呢?

不要盲目自行,也不要人云亦云,这个时代最宝贵不就是你自己的独特性,我们总有一天会老去,会消失,但是AI能把你的精华世世代代的传下去。

这也是背后撑起产品真正前行的根基,所以且由他说去吧,目前能做而且必须要做的就是把所有能够看到的问题和比较好的经验全部放到这个产品中去。

聊完这点闲话,看看我们第二期的更新内容吧!再次感谢所有提出宝贵意见的各位内测朋友们,在第二期内测开启的时候,我会整理下提出过建议的名单(忽略敏感信息的哈)!

02

重要更新

2.1 文件上传和拖拽上传

输入方式增加拖拽上传:

和+里面的上传按钮:

方便大家上传一些需求和程序文件等。

2.2 PlanAgent规划Agent的加入

1)需求分类

当我们输入请求后,会根据这些信息进入需求分类,比如一些无关编程的话题:你好!你是谁?等等这些话题,直接跳过code pipeline,给出引导!

这样不会因为简单的问候,搞出一堆无效的code,同样的也能够节省tokens,因为这些都不会经过LLM的处理,所以不会由于这些无关问题,浪费金钱。

2)需求分析

只有跟控制需求相关的,才会进入code路径进行需求分析。例如,用我们专家模板的第一个简单控制任务:

3)需求确认

当分析需求的时候,有些问题没办法确认的时候,就会弹出对应的问题列表:

当然,如果问题不够细致,可以把所有的需求直接在输入请求框,再次确认发送即可。

4)Plan生成

根据上述的需求,会调用LLM进行plan的生成和制定:

5)Plan确定

在上述plan生成推理结束后,就会自动规划这次代码任务的计划和子任务Task,具体:

子任务,会有序号和目标说明:

当然,为了计划更加符合预期规划及你心中的目标,我们还是加了人工审批这一步:

如果计划不符合预期,可以通过编辑进行局部修改,如果基本不合要求,可以反馈输入您的请求和具体细节,立即进入重新规划:

确认没问题,直击点击执行计划就进入我们之前的推理和生成代码阶段。这一阶段实际就是我们第一期的内容,所以这里不属于更新内容,不重点介绍,内测用户可以自行体验。

2.3 自动修复改善

之前为了突出Fast和Thinking模式的区别,所以把Fast模式里的自动修复取消掉了,但是考虑fast和THinking的主要目的都是为了代码的质量,所以fast和thinking模式都有自动修复。

之前的框架校验和自动修复有重复,所以就去掉那一部分内容,另外,中英文翻译更细致些。而且修复后,在代码生成区域有了修复标记:

2.4 逻辑流程图

逻辑流程图是我们分析程序框架的一个很好的辅助,有些工程师朋友在写程序前都会把流程图根据实际的设备工艺画出来,所以它是非常重要的组件,不管是后续总结经验还是提交报告,都不可或缺。

1)拆分

第一期把逻辑流程图和程序的解释放在一起,这一次更新已经单独一个区域了。

2)增加DrawIO的通道

可以直接打开内嵌的web端进行更改,非常方便:

RealPLC 内置 Draw.io,快速实现自定义PLC逻辑流程图!

3)自动修复

在实际生成的过程中,可能不一定每次都能成功,所以增加了自动修复功能:

2.5 项目总结

第一期是简单的代码注释,我们二期把整个代码任务做了详细的项目总结,包括:

基本可以输出为一份不错的代码总结报告,最后的版本程序,不需要复制粘贴,直接点击下载程序就可以了。是不是非常方便。

2.6 主题色和整体内部配色

1)主题色

不管是深色还是浅色的方案,都保证颜色不用太杂乱,简约清晰:

浅色方案在用户设置里可以选择:

点击保存即可。这个时候就切换了:

2)各个区域的颜色更简约

不管是需求分析还是最后的项目总结,颜色都比较简约,Markdown格式也经过优化。

3)侧边栏缩放优化头像

2.7 第三方或自定义模型供应商

为了更加体现我们RealPLC 的开放性,已经接入第三方的模型,兼容OpenAI的格式,可以很好嵌入DS、GLM的模型:

仅需三步!在RealPLC里调用DeepSeek V4,轻松搞定PLC自动编程!

上图就是CustomModel自定义的模型,需要填入API模型Provider名称,模型名称和API key。填入后,可以在下方按测试按钮,测试通过即可到对话框里选择即可。

03

小结

当然我们除了更新这些可见的部分,还有提示词的优化,管理后台的优化等不做介绍。再次感谢大家对我们的支持和关注。

这里贴一段fast模式的代码如下:

代码语言:javascript
复制






// ===== 状态机枚举定义(需在DUT中声明) =====
{attribute 'qualified_only'}
TYPE E_ConveyorState :
(
    INIT    :=0,// 初始化状态
    IDLE    :=1,// 待机状态
    RUNNING :=2,// 运行状态
    FAULT   :=3// 故障状态
);
END_TYPE

//-------------------------------------------------------------------------------------------------//

PROGRAM PRG_ConveyorControl
VAR_INPUT
    xEStop          : BOOL;// 急停按钮(常闭触点,FALSE=急停触发)
    xStart          : BOOL;// 启动按钮(常开触点,上升沿有效)
    xStop           : BOOL;// 停止按钮(常开触点,上升沿有效)
    xReset          : BOOL;// 复位按钮(常开触点,上升沿有效)
    xSensor         : BOOL;// 物料检测传感器(常开型,TRUE=有物料)
END_VAR

VAR_OUTPUT
    xMotorRun       : BOOL;// 电机运行输出
    xFaultStatus    : BOOL;// 故障状态指示
    xAlarmOutput    : BOOL;// 报警灯/蜂鸣器输出
END_VAR

VAR
    eState          : E_ConveyorState;// 状态机当前状态
    tonInitDelay    : TON;// 初始化延时定时器
    tonSensorTimeout: TON;// 传感器超时定时器(10秒)
    rtrigStart      : R_TRIG;// 启动按钮上升沿检测
    rtrigStop       : R_TRIG;// 停止按钮上升沿检测
    rtrigReset      : R_TRIG;// 复位按钮上升沿检测
    xInterlockOk    : BOOL;// 互锁条件满足标志
    xFirstScan      : BOOL :=TRUE;// 首次扫描标志
END_VAR

VAR RETAIN
    xFaultLatched   : BOOL;// 故障锁存标志(断电保持)
END_VAR

VAR CONSTANT
    c_tInitDelay    : TIME := T#1S;// 初始化延时时间
    c_tSensorTimeout: TIME := T#10S;// 传感器超时时间
END_VAR
//-------------------------------------------------------------------------------------------------//
// ======================================================================
// 第一部分:首次扫描初始化
// 确保上电时所有输出处于安全状态
// ======================================================================
IF xFirstScan THEN
    xMotorRun       :=FALSE;
    xFaultStatus    :=FALSE;
    xAlarmOutput    :=FALSE;
    eState          := E_ConveyorState.INIT;
    xFirstScan      :=FALSE;
END_IF

// ======================================================================
// 第二部分:边沿检测(必须每扫描周期无条件调用)
// ======================================================================
rtrigStart(CLK := xStart);
rtrigStop(CLK := xStop);
rtrigReset(CLK := xReset);

// ======================================================================
// 第三部分:定时器调用(必须每扫描周期无条件调用)
// ======================================================================
tonInitDelay(IN :=(eState = E_ConveyorState.INIT), PT := c_tInitDelay);
tonSensorTimeout(IN :=(eState = E_ConveyorState.RUNNING) AND (NOT xSensor), PT := c_tSensorTimeout);

// ======================================================================
// 第四部分:互锁条件检查
// 安全约束:所有互锁必须满足才能运行
// ======================================================================
xInterlockOk := xEStop            // 急停按钮正常(未触发)
            AND (NOT xFaultLatched);// 无故障锁存

// ======================================================================
// 第五部分:故障检测与锁存逻辑
// 传感器超时或急停触发时置位故障锁存
// ======================================================================

// 传感器超时故障:RUNNING状态下传感器持续FALSE超过10秒
IF tonSensorTimeout.Q THEN
    xFaultLatched :=TRUE;
END_IF

// 急停触发故障:急停按钮按下时立即锁存故障
IF NOT xEStop THEN
    xFaultLatched :=TRUE;
END_IF

// 故障复位逻辑:复位按钮上升沿 + 急停已恢复 + 互锁条件满足
IF rtrigReset.Q AND xEStop AND (NOT xFaultLatched =FALSE)THEN
// 此处条件已包含xEStop检查,确保安全条件满足后才清除锁存
    xFaultLatched :=FALSE;
END_IF

// 注:复位逻辑实际清除条件为 rtrigReset.Q AND xEStop AND xInterlockOk
// 由于xInterlockOk已包含xEStop和NOT xFaultLatched,此处简化表达
IF rtrigReset.Q AND xInterlockOk THEN
    xFaultLatched :=FALSE;
END_IF

// ======================================================================
// 第六部分:状态机逻辑
// 4状态:INIT → IDLE → RUNNING → FAULT
// ======================================================================
CASE eState OF
    E_ConveyorState.INIT:
// 初始化状态:等待延时完成
IF tonInitDelay.Q THEN
            eState := E_ConveyorState.IDLE;
        END_IF

    E_ConveyorState.IDLE:
// 待机状态:等待启动命令
IF rtrigStart.Q AND xInterlockOk THEN
            eState := E_ConveyorState.RUNNING;
        END_IF

    E_ConveyorState.RUNNING:
// 运行状态:等待停止命令
IF rtrigStop.Q THEN
            eState := E_ConveyorState.IDLE;
        END_IF

    E_ConveyorState.FAULT:
// 故障状态:等待复位命令
IF rtrigReset.Q AND xInterlockOk THEN
            eState := E_ConveyorState.IDLE;
        END_IF

ELSE
// 安全回退:未定义状态强制进入FAULT
        eState := E_ConveyorState.FAULT;
END_CASE

// 故障锁存置位时,任何状态强制转换到FAULT
IF xFaultLatched THEN
    eState := E_ConveyorState.FAULT;
END_IF

// ======================================================================
// 第七部分:输出映射
// 优先级:急停 > 故障锁存 > 状态机输出
// ======================================================================

// 急停触发时所有输出强制为FALSE(最高优先级)
IF NOT xEStop THEN
    xMotorRun       :=FALSE;
    xFaultStatus    :=FALSE;// 急停时故障状态输出也切断,由硬件急停指示灯指示
    xAlarmOutput    :=FALSE;// 急停时报警输出切断,由硬件急停指示灯指示
ELSE
// 电机运行输出:仅RUNNING状态且互锁满足时输出TRUE
    xMotorRun :=(eState = E_ConveyorState.RUNNING) AND xInterlockOk;

// 故障状态输出:故障锁存置位时输出TRUE
    xFaultStatus := xFaultLatched;

// 报警输出:故障锁存置位时输出TRUE
    xAlarmOutput := xFaultLatched;
END_IF

END_PROGRAM

效果质量如何,大家评论区可以留言哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hello工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档