『7x24小时有问必答』
那对于我们RealPLC而言,必须实时更新下,把这个模型都接入进来。那么,如果有类似应用或者也需要接入这款模型融入自己产品的可以参考。

01
申请DeepSeek API

我们首先到DeepSeek开发者平台,获取到API KEY。这是最重要的一步。

Step1:登录DeepSeek官网。
Step2:进入充值界面,可以按照需求充值。
Step3:选择金额和支付方式:
Step4:充值过程中,可能需要认证,这里选择二代居民身份证,填写对应的姓名和身份证的号码,一定要是有效的身份证明哦。号码和姓名要完全对应。

Step5:申请API KEY
在左侧选择API keys这栏,右侧直接创建:
创建的过程中需要输入名称,自己定义一个即可。

生成的API Key最好复制保存下来备用。到这里,恭喜你已经有一个专属的API KEY了。

02
接入RealPLC

我们之前主要是V3.2模型,这次直接把这两款新的模型都加入进来。方法实际很简单。

直接用AI软件,让他自己改善下即可。详细的对话如下:

这里直接用的是Opencode来实现模型的添加。最终实现添加:

03
示例测试

登录我们的RealPLC后,可以直接选择和配置API KEY,具体步骤如下。在设置界面里:

AI提供方选择DeepSeek,模型任选一个,DeepSeek的API密钥填写刚刚保存备用的KEY。BaseURL填写:

确定好保存更改即可。然后我们可以用专家场景里面的PID应用来测试下DeepSeek V4 Pro生成西门子PLC程序效果:

我们进入服务器后台可以看到,Job ID已经生成了,说明DeepSeek成功响应:

再回到我们的web页面,可以看到,已经在生成PLC程序。

具体代码我贴这了,我们至少优化了SCL语言的一些明显的语法等问题:

FUNCTION_BLOCK "PID_Temp_Clamped"

VAR_INPUT

      rSetpoint           :  REAL;// 温度设定值 [°C]

      rProcessValue     :  REAL;// 过程值 [°C]

      rKp                    :  REAL;// 比例增益

      rTi                    :  REAL;// 积分时间 (0 = 禁止积分)

      rTd                    :  REAL;// 微分时间 (0 = 禁止微分)

      rTs                    :  REAL;// 采样时间 (>0)

      rOutputMax         :  REAL;// 输出上限 [0..100%]

      rOutputMin         :  REAL;// 输出下限 [0..100%]

      xEnable              :  BOOL;// 使能控制

      xManualMode        :  BOOL;// 手动模式 (TRUE=手动)

      rManualOutput     :  REAL;// 手动设定输出

END_VAR

VAR_OUTPUT

      rControlOutput   :  REAL;// 控制输出 [%]

      xSaturated         :  BOOL;// 输出饱和标志

END_VAR

VAR

      rIntegralTerm     :  REAL;// 积分项

      rDerivativeTerm  :  REAL;// 微分项

      rProportionalTerm:  REAL;// 比例项

      rError               :  REAL;// 当前误差

      rPreviousError   :  REAL;// 前次误差

      rDErrorFiltered  :  REAL;// (未使用,保留)

      xInitDone           :  BOOL;// 初始化完成标志

      rTsafe               :  REAL;// 安全副本

END_VAR

VAR_TEMP

      rRawOutput         :  REAL;// 限幅前计算值

      xIntegrateEn      :  BOOL;// 积分使能

      rIntIncrement     :  REAL;// 积分增量

END_VAR

BEGIN

// ---- 输入保护 ----

       rTsafe  :=  rTs;

IF  rTsafe  <=0.0THEN

             rTsafe  :=0.1;// 防零除错,默认0.1s

      END_IF;

// ---- 误差计算 (加热回路: e = SP - PV, 正向输出加热) ----

       rError  :=  rSetpoint  -  rProcessValue;

// ---- 比例项 ----

       rProportionalTerm  :=  rKp  *  rError;

// ---- 微分项 (后向差分 + 安全处理) ----

IF  rTd  >0.0THEN

             rDerivativeTerm  :=  rKp  *  rTd  /  rTsafe  *(rError  -  rPreviousError);

ELSE

             rDerivativeTerm  :=0.0;

      END_IF;

// ---- 手动/自动处理 ----

IF  xEnable  AND NOT  xManualMode  THEN

// 自动模式

// 抗积分饱和条件:输出未饱和 或 (饱和但误差指向远离饱和方向)

// 先计算期望输出方向

             rRawOutput  :=  rProportionalTerm  +  rIntegralTerm  +  rDerivativeTerm;

// 判断是否需要冻结积分

             xIntegrateEn  :=TRUE;

IF  rRawOutput  >=  rOutputMax  AND  rError  >0.0THEN

                   xIntegrateEn  :=FALSE;// 正饱和且误差仍要求加热,冻结

            ELSIF  rRawOutput  <=  rOutputMin  AND  rError  <0.0THEN

                   xIntegrateEn  :=FALSE;// 负饱和且误差要求冷却,冻结

            END_IF;

// 积分更新 (条件积分)

IF  rTi  >0.0  AND  xIntegrateEn  THEN

                   rIntIncrement  :=  rKp  *  rTsafe  /  rTi  *  rError;

                   rIntegralTerm  :=  rIntegralTerm  +  rIntIncrement;

            END_IF;

// 合成最终输出并限幅

             rRawOutput  :=  rProportionalTerm  +  rIntegralTerm  +  rDerivativeTerm;

             rControlOutput  :=  rRawOutput;

IF  rControlOutput  >  rOutputMax  THEN

                   rControlOutput  :=  rOutputMax;

            ELSIF  rControlOutput  <  rOutputMin  THEN

                   rControlOutput  :=  rOutputMin;

            END_IF;

// 饱和标志

             xSaturated  :=(rRawOutput  >  rOutputMax)  OR  (rRawOutput  <  rOutputMin);

ELSE

// 手动或未使能:输出跟随手动值,并反向计算积分项以实现无扰动切换

             rControlOutput  :=  rManualOutput;

// 极限限制

IF  rControlOutput  >  rOutputMax  THEN

                   rControlOutput  :=  rOutputMax;

            ELSIF  rControlOutput  <  rOutputMin  THEN

                   rControlOutput  :=  rOutputMin;

            END_IF;

// 反向计算积分项,确保下次切回自动时输出连续

// I = 当前输出 - P - D

             rIntegralTerm  :=  rControlOutput  -  rProportionalTerm  -  rDerivativeTerm;

             xSaturated  :=FALSE;// 手动下无饱和标志

      END_IF;

// ---- 保存误差用于下一周期计算微分 ----

       rPreviousError  :=  rError;

END_FUNCTION_BLOCK
代码质量如何,交给我们的工程师朋友去判断吧。我们的网站即将开启内测,敬请关注。

参考链接:

【1】api.deepseek.com

【2】www.realplc.com

  ▊  阅读更多(戳下方图片)
   

请长按下方二维码关注Hello工控

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码