Skip to content

例程总览 ​

这里汇总可直接下载运行的完整例程。每个例程都包含:场景、完整代码、要点、验证方法、注意事项。

综合例程(端到端) ​

例程说明
B1. Modbus 采集 + MQTT 上报 + 云端下发RS485 读温控表 → 定时上报 → 订阅下发控继电器 → 回 ACK。含「错误写法 vs 正确写法」对照
B2. 串口裸报文收发不挂协议子设备,自己 send / recv;同步与异步两种范式,含 string.tohex 与 encoder.tohex 方向相反的对照表
B3. 采集第三方设备三菱编程口 com_fx / com_modbus RTU / modbus TCP 三条链路,含「位类型落到 M 区、字类型落到 D 区」的落点规则
B4. 串口透传三种串口↔串口、串口→云、串口↔TCP;纠正「用 while + sleep 等网口就绪」这类会锁死设备的写法
B5. DLT645 电表采集上云抄表 → json 打包 → mqtt 定时发布;重点纠正 is_linked() 必须写 == 1
B6. HTTP 上报与拉取同步与异步怎么选;异步回调参数是 errcode, data, datalen,第一个不是内容
B7. Lua 语言层递归打印 JSON 解出的表、collectgarbage 量内存、元表写“类”(含实例属性共享的真实缺陷)、协程用法速查与两条自持续任务
B8. 串口 ↔ 网口互转框架透传模式(两个 set_transparent)与代理模式(自己收发+分帧+重连),把现场 RS485 设备搬到远端
B9. 数据加密与校验框架CRC16(纯 Lua)/ MD5 签名 / AES-CBC 加密上报 / 梯形图与 Lua 端弱混淆,以及程序防读取
B10. 云端双向通信框架订阅下发控制 + 周期上报 + 断线重发,把"远程开关 + 状态上报 + 网络抖断不丢数据"拼成可照搬骨架
B11. 采集 → 换算 → 累计 → 上报框架上电延时、工程量换算、零点钳位、浮点累计、周期上报四步链
B12. 报警判定与上报框架阈值留回差、通讯断线单独判、只在状态变化时上报

每个综合例程末尾都有「错误写法 vs 正确写法对照」,内容来自现场脚本与上位机工具内置例程, 特征是能跑通、不报错,但结果不对——比报错更难查,改脚本前先对一遍。

B2–B7 是在现场流传最广的一组常用脚本基础上写的「改写 / 纠错版」。而这些脚本的原文已逐字收录到各自模块页的「例程」小节(保留了原有的注释、缩进与已写坏的地方,另附要点与修正写法)。手上有同名 .LPLUA 文件的,按下表直达:

常用脚本原文所在页
com库同步模式、com库异步模式、串口立即收发、串口透传示例com 串口基础 例程 4~7(改写版见 B2)
com_modbuscom_modbus ModbusRTU 例程 4
com_fxcom_fx 三菱FX协议 例程 4
LPmodbus ModbusTCP 例程 4(旧接口,同页附当前固件等价写法)
电表com_dlt645 DLT645电表 例程 4(改写版见 B5)
网口透传tcp_client TCP客户端 例程 4
httphttp HTTP客户端 例程 4(改写版见 B6)
jsonjson JSON 例程 4
内存回收base 基础库 例程 4
协程、协程1coroutine 任务调度 例程 4、5
面向对象、派生类表与数据结构「用表模拟对象」小节(两份内容字节相同,只收一份)

看这些脚本的意义不只是“能抄”:它们大多能跑、不报错、但结果不对(属性全存在类表上、 异步回调只接了一个形参、is_linked() 忘了写 == 1 等等),自己写完可以先对照一遍。

模块例程 ​

每个例程都是可直接下载运行的完整脚本,统一按「场景 / 完整代码 / 要点 / 验证方法 / 注意事项」五段写。下面按模块分组,点链接直达各页「例程」章节(每页至少 3 个,收有现场原文脚本的页更多):

分组模块例程入口
串口 / 现场总线com 串口基础 · com_modbus · com_fx · com_dlt645 · modbus TCP各页 #例程
TCP / UDP / HTTPtcp_server · tcp_client · udp · net · websocketserver · http · mqtt各页 #例程
协议服务端mc_server · modbus_tcp_server各页 #例程
Pipe 多品牌 PLC概述 · 三菱 MC · 欧姆龙 FINS · 西门子 S7 · 台达 · 信捷 · 汇川各页 #例程
云与数据cloud 云平台 · data 共享变量 · json · ini · fdb · crypto · pid · encoder · pcnt各页 #例程
楼宇 / 水务bacnet · opcua · water 水务各页 #例程
系统 / 标准库system · timer · plc · base · string · table · math · io · os · 标准库差异各页 #例程
并发并发模型概述 · coroutine 协程各页 #例程

例程里凡涉及「绑定寄存器 / 定时上报 / 云端下发」都依赖 plc 模块;凡标注「仅定制版 / 仅上位机 / 仅 DTU 机型」的,普通 ESP32 / STM32 固件上对应 setup 会返回 nil,请以页面内「适用」标注为准。


写例程时的硬性约定 ​

  1. API 只许用本 Wiki 已文档化的,查不到就写 TODO(待确认),严禁自行编造函数名。
  2. 禁止阻塞主循环:例程一律优先 timer.start + 事件回调。 设备是单线程事件循环,写在脚本顶层 / 主线程回调里的 while true + system.sleep 会把所有回调冻死,这种写法一律不许出现。 但协程里面的 system.sleep 不阻塞(它注册定时器后 yield,到点由主循环自动恢复), 所以允许把一段顺序工序写成协程里的循环,见 并发模型概述 — system.sleep 的三种行为 与 B7. Lua 语言层 第六节。 例外:标注为「现场常用脚本(原文)」的那几个例程不受本条约束 —— 它们是客户手上真实存在的文件, 逐字收录才有对照价值;顶上的写法有风险时一律在同一条目里给出「不阻塞的等价写法」并写明区别,不改客户原文件。
  3. 例程必须完整可运行,并写明在软 PLC 模拟器上如何验证。
  4. 统一按「场景 / 完整代码 / 要点 / 验证方法 / 注意事项」五段写。

详见 并发模型概述(为什么不能阻塞主循环)与 AI 易错点与反模式。

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