主题
4.6 自定义块常见问题
把制作、写 Lua、拖用、加密交付各环节最常见的问题集中在这里。普通逻辑编程的排错见 3.2 常见问题。
制作与保存
| 现象 / 疑问 | 原因与处理 |
|---|---|
| 保存提示「块名称不能为空」 | 块名称是必填项,先填名字再保存 |
| 保存提示「Lua 块必须填写源码」 | Lua 框不能为空,至少保留 return function(I) return 0 end |
| key 能不能用中文 | key 是给 Lua 用的,建议英文 / 数字;显示名可用中文 |
| 输入引脚的「默认值」在哪填 | 输入引脚没有默认值,它的值运行时从接线来;只有参数有默认值 |
| 改了引脚顺序,结果乱了 | 输入按位置序号 I.inputs[1/2/…] 取,拖动输入顺序会改变对应关系;参数按 key 名取、不受顺序影响 |
| 怎么改做好的块 | 「块管理 → 🔓 打开内部」,改完保存覆盖,再回主画布重新「生成 JSON」下发 |
Lua 与运行
| 现象 / 疑问 | 原因与处理 |
|---|---|
| 输出一直是 0 | 先查 return 的个数 / 顺序和输出引脚是否一一对应;再查输入有没有真的接到值(没接线时是 nil,参与运算会报错,输出保持不变) |
| 日志报「功能块 xxx 执行出错」 | Lua 运行期报错,常见是 nil 参与运算、除以 0;该块这一轮不更新输出,但不影响其它块。对照 4.3.7 排查 |
| 块拖出来找不到输入值 | Lua 里用 I.inputs[序号],序号按输入列从上到下从 1 开始;参数要用 I.params.键名 |
| 累计值 / 记忆为什么重启就没了 | I.state 在运行内存里,断电重启或重新下发会重新初始化,这是正常的,见 4.3.4 |
| 同一块拖了两份,数据会串吗 | 不会,每份有独立的 I.state |
能不能用 sleep / 等待 | 不能,块每个扫描周期跑一遍,阻塞会拖慢 / 卡死整个程序 |
| 一个自定义块里能调另一个吗 | 当前版本不支持嵌套,需要的逻辑在同一个块内写完 |
| 想要多个输出怎么办 | 定义多个输出引脚,Lua 里 return 值1, 值2,顺序与输出列一致 |
拖用与下发
| 现象 / 疑问 | 原因与处理 |
|---|---|
| 工具箱找不到「自定义」分类 | 块还没保存到块库,或保存失败;先在块管理里确认块存在 |
| 输出怎么指定送到哪个寄存器 | 拖到画布后,在块上输出那一行用下拉选寄存器类型、地址框填编号 |
| 改了块但设备行为没变 | 改块保存后,必须重新「生成 JSON」并「下发设备」才生效 |
| 打开旧程序报缺块 / 块调用失效 | 程序只记录「用了哪个块」,块本体在块库;换电脑要先「导入块」,见 4.4 加密、导出分享与块管理 的块管理一节 |
| 哪些设备能跑自定义块 | 和逻辑编程完全一致,见 1.1 打开逻辑编程编辑器 的型号与固件版本表 |
加密、导入与交付
| 现象 / 疑问 | 原因与处理 |
|---|---|
| 加密后客户使用要密码吗 | 正常拖用、下发不需要密码;只有「打开内部看源码」需要,见 4.4.3 |
| 客户导入加密块时要密码 | 导入那一次需要输入您给的密码完成解开注册,之后使用不再需要 |
| 加密密码忘了怎么办 | 无法找回,也无法再打开看内部;块仍能使用。请自己另存一份不加密源块 |
| 怎么把块发给客户 / 换电脑 | 「块管理 → 📤 导出文件」得到 .lpblk,对方「导入块」,见 4.4.4 / 4.4.5 |
| 删除块会怎样 | 从块库删除后,画布上已放置的该块调用会失效、生成时报问题;暂时不用建议保留 |
| 怎么给客户升级块 | 改好后递增版本号、重新导出,客户重新「导入块」覆盖再生成下发,见 4.4.7 |