主题
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 从制作到使用的完整流程
整个过程都在逻辑编程编辑器里完成,不需要改动主程序、也不需要懂设备底层:
- 点工具栏 「制作块」,填基本信息;
- 定义输入引脚、输出引脚、参数;
- 用一小段 Lua 写清内部算法(工具会预填一个能运行的例子,照着改即可);
- 点 「💾 保存到块库」;
- 左侧工具箱最下方出现 「自定义」分类,把块拖进主循环,接好线、随程序一起下发。
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数组,把这份程序用到的每个自定义块各带一份(块名、引脚、内部算法都在里面)。
所以有三条要守住:
libs由编辑器自动收集,不用手写。 点「生成 JSON」时它会把画布上用到的块逐个收集进去。自己拼或让 AI 拼 JSON 时最容易漏这一份,漏了下发前会报调用的自定义功能块 "块名" 未随程序携带(libs 缺失)。- AI 无法读取您的块库:它不知道这台机器上做过的块叫什么、有几个引脚。让 AI 写之前,把「块名 + 输入引脚名与个数 + 输出引脚名与个数 + 参数名」原样告诉它。
- AI 给的 JSON 必须回编辑器点「生成 JSON」核对,右侧「问题」面板会指出引脚数对不对、输出目标是不是寄存器;确认「校验通过」再下发。