Skip to content

4.1 自定义功能块(概览) ​

前面 2.1 程序类~2.6 显示模块 讲的都是工具自带的功能块,它们解决的是通用需求。自定义功能块解决的是「您自己的专属工艺」:把一段反复使用、或者体现您调试经验的计算 / 判断逻辑,用一小段 Lua 封装成一个带名字、带输入输出的方块,之后即可像自带块一样反复拖用。

这是逻辑编程中扩展性最强的一项能力,本章适合集成商深入使用:您可以把多年调试出来的控制算法封成块、加上密码,再交付给终端客户。客户拖出来、填几个参数就能用,却看不到、也改不了您的核心算法——既降低了现场使用门槛,又保护了您的工艺积累。

4.1.1 它能帮您做什么 ​

价值不用自定义块用自定义块
复用同样一段逻辑,每个项目都重新搭一堆方块做好一次,以后拖一个块、填参数即可
封装客户看到一大片方块,容易误改客户只看到一个块和几个参数,简单不易错
保密算法完全暴露在画布里可加密码,别人打不开内部,正常使用不受影响
交付只能发整份程序可单独导出一个块文件发给客户 / 同事导入

典型场景

  • 专用算法产品化:把您擅长的某类机组控制(专用换算、分段限值、节能策略、累加计时)封成标准块,不同项目反复交付。
  • 给客户减负:现场人员不懂编程,您做好块,他只需要接输入、填几个参数、选输出寄存器。
  • 保护 know-how:加密后交付,客户能用但看不到源码;换电脑、换人也不依赖您现场操作。

4.1.2 五个核心概念(先混个脸熟) ​

概念一句话理解详细见
输入引脚块左侧的接线孔,运行时从外部接进来的值4.2
输出引脚块算完后,把结果送到哪个寄存器4.2
参数块身上可填的数字,每个拖出来的块能单独设4.2
Lua 源码块内部「怎么算」,用一小段 Lua 写4.3
块库做好的块存在本机的地方,工具箱「自定义」分类从这里取4.4

4.1.3 从制作到使用的完整流程 ​

自定义功能块从制作到使用的完整流程

整个过程都在逻辑编程编辑器里完成,不需要改动主程序、也不需要懂设备底层:

  1. 点工具栏 「制作块」,填基本信息;
  2. 定义输入引脚、输出引脚、参数;
  3. 用一小段 Lua 写清内部算法(工具会预填一个能运行的例子,照着改即可);
  4. 点 「💾 保存到块库」;
  5. 左侧工具箱最下方出现 「自定义」分类,把块拖进主循环,接好线、随程序一起下发。

4.1.4 两种角色:做块的人和用块的人 ​

自定义块的使用天然分成两个角色,本章也是按这两条线组织的:

  • 做块的人(工程商 / 集成商):负责制作、写 Lua、测试、加密、导出。对应 4.2、4.3、4.4。
  • 用块的人(终端客户 / 现场人员):拿到导出的块文件,点「导入块」,然后拖出来接好线就能用,完全不需要懂 Lua。导入与使用见 4.4。

4.1.5 建议学习路径 ​

您的情况建议顺序
第一次接触,想先跑通一个直接做 4.2 手把手做第一个自定义块,约 10 分钟
要写有记忆 / 多输出 / 较复杂的算法再读 4.3 Lua 接口与编写详解
要把块加密后发给客户看 4.4 加密、导出分享与块管理
想直接抄现成例子改4.5 实战案例集
块不工作 / 有疑问4.6 自定义块常见问题

4.1.6 支持的设备与当前边界 ​

自定义块运行在逻辑编程引擎里,所以支持的设备与逻辑编程完全一致(型号与所需固件版本只在 1.1 打开逻辑编程编辑器 列一份,那里是唯一口径)。

当前版本还有几条边界(都会在对应小节展开):

  • 块内部只做数值计算,暂不支持在一个自定义块里再调用其它自定义块(不能嵌套);
  • Lua 为受控运行环境,禁止 sleep、死循环、超长运算(见 4.3);
  • 加密密码只保护「打开看内部」,不影响正常使用和下发,但忘记密码无法再查看内部(见 4.4)。

4.1.7 让 AI 帮您写「用到自定义块」的程序 ​

自定义块在程序文件(ddc.json)里是两样东西,缺一不可:

  • 调用:主循环里的一条 {"op":"call","fn":"块名","args":[…],"outs":[…]}。args 按输入引脚的顺序排,outs 按输出引脚的顺序排,并且每一项都必须是一个寄存器——写成常量或算式,校验会报 功能块 "块名" 第 N 个输出目标不是寄存器引用。
  • 定义:文件里的 libs 数组,把这份程序用到的每个自定义块各带一份(块名、引脚、内部算法都在里面)。

所以有三条要守住:

  1. libs 由编辑器自动收集,不用手写。 点「生成 JSON」时它会把画布上用到的块逐个收集进去。自己拼或让 AI 拼 JSON 时最容易漏这一份,漏了下发前会报 调用的自定义功能块 "块名" 未随程序携带(libs 缺失)。
  2. AI 无法读取您的块库:它不知道这台机器上做过的块叫什么、有几个引脚。让 AI 写之前,把「块名 + 输入引脚名与个数 + 输出引脚名与个数 + 参数名」原样告诉它。
  3. AI 给的 JSON 必须回编辑器点「生成 JSON」核对,右侧「问题」面板会指出引脚数对不对、输出目标是不是寄存器;确认「校验通过」再下发。

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研