Skip to content

Lua 编程指南 ​

LPPLC 设备内置 Lua 5.4 脚本引擎,可与 PLC 梯形图协同运行。本文档覆盖设备真实支持的所有 Lua 模块 API。

内置工业功能库:PID / 数据库 / 加密 / JSON / 硬件计数

多任务并行:采集不影响控制


快速开始 ​

首次使用 LPPLC 的 Lua 功能时,推荐按以下顺序阅读:

  1. Lua 概述 — 了解 Lua 在设备中的定位
  2. 基础语法 — 变量、运算符、字符串
  3. 第一个 Lua 脚本 — 从零跑通一个脚本
  4. 定时器 — 最常用的功能:定时采集数据
  5. 后台任务与事件 — 需要"一直跑、中间还要等"时用它们
  6. PLC 数据交互 — 读写 D/M/X/Y 寄存器

编写脚本前建议先阅读 并发模型概述:脚本运行在单线程事件循环中,理解这一点可以避免多数「定时器不准」「回调不触发」类问题。


模块总览 ​

以下是设备固件真实注册的全部 Lua 模块(按使用场景分类):

Lua 模块全景:系统与核心 / 网络通信 / 串口 / 自动轮询采集 / Pipe / 从站 / 楼宇 OT / 数据处理 / 云平台

系统与核心 ​

模块说明链接
system重启、延时、文件系统操作系统功能
timer创建周期/单次定时器定时器
task后台任务:一段代码在后台一直跑、中间还能等后台任务
event事件订阅与发布:任务与回调之间互通消息事件订阅与发布
plc读写 PLC 寄存器(X/Y/M/D/R/T/C)、网络配置、云平台PLC 数据交互
coroutine协程,把「多步 + 等待」写成顺序代码协程

网络通信(socket 与 IT 协议) ​

模块说明链接
mqttMQTT 客户端,连接 Broker 发布订阅MQTT 客户端
httpHTTP 客户端,GET/POST 同步异步HTTP 客户端
tcp_clientTCP 客户端连接TCP 客户端
tcp_serverTCP 服务器监听TCP 服务器
udpUDP 数据收发UDP 通信
net底层 Socket、Ping、DNS、NTP网络工具
websocketserverWebSocket 服务器WebSocket

串口基础 ​

模块说明链接
com打开物理串口,直接收发字节流,或作为父设备挂载协议子设备串口基础

自动轮询采集(配好通道,后台线程采到寄存器) ​

模块说明链接
com_modbusModbus RTU / ASCII 主站(挂在 com 上)Modbus RTU
com_fx三菱 FX 编程口(挂在 com 上)三菱 FX 编程口
com_dlt645DL/T 645 电表,只读(挂在 com 上)DL/T 645 电表
modbusModbus TCP 主站,独立轮询线程Modbus TCP

按需读写 · Pipe 统一接口 ​

模块说明链接
pipe一套接口读写多品牌 PLC,调一次发一帧同步等回复(Modbus TCP/RTU、三菱 MC/FX、FINS、S7、台达、信捷、汇川)Pipe 通信概述

做从站(其他设备读取本机) ​

模块说明链接
mc_server三菱 MC 协议从站服务器MC 协议服务器
modbus_tcp_serverModbus TCP 从站服务器Modbus TCP 服务器

楼宇与 OT 协议(同一模块兼主从两种角色) ​

模块说明链接
bacnetBACnet 楼宇自控,MS/TP(串口)与 BACnet/IP(以太网)仅 ESP32-S3 / 模拟器BACnet
opcuaOPC UA(opc.tcp)服务端与客户端 仅 ESP32-S3 / 模拟器OPC UA
water水务遥测终端,SZY206-2016 / SL/T 427 仅 ESP32-S3 / 模拟器水务遥测

数据处理与专业功能 ​

模块说明链接
encoderBase64/Hex 编解码编码转换
crypto⚠ 当前版本未注册,不可调用(AES 只有 plc.aes_encode)加密模块
data共享数据缓冲(lpchar 类型)共享变量
jsonJSON 编解码JSON
pidPID 闭环控制PID 控制
fdbFlashDB 键值/时序数据库数据存储
iniINI 配置文件读写INI 配置
pcnt硬件脉冲计数器/编码器脉冲计数

云平台 ​

模块说明链接
plc.cloud_*云平台绑定、发布、订阅、计算云平台通信

标准库 ​

设备同时提供 Lua 标准库(精简版):

库说明链接
基础库print/type/tonumber/tostring/pcall 等基础库
string字符串操作字符串库
table表操作表库
math数学函数数学库
os时间日期、文件删除/重命名操作系统库
coroutine协程协程
utf8UTF-8 支持—
debug调试—

常用代码片段 ​

lua
-- 每 2 秒读取 D100 温度并上传到云平台
timer.start(2000, function()
    local temp = plc.d(100)  -- 读 D100
    plc.cloud_publish("temperature", temp)
end)
lua
-- MQTT 连接并订阅(mqtt.xxx(client, ...) 与 client:xxx(...) 写法等价)
c = mqtt.creat("broker.example.com", 1883, "device01", "", "")
mqtt.reg(c, mqtt.RECVDATA, function(topic, data)
    print("收到: " .. topic .. " = " .. data)
end)
mqtt.reg(c, mqtt.CONNECTED, function()
    mqtt.subscribe(c, "cmd/device01", 0)
end)
c:start()
lua
-- 串口 Modbus RTU 读温度传感器:从站 1 的 40001 → D100
port = com.setup(1, 9600, com.NONE, 8, 1)
dev = com_modbus.creat(com_modbus.RTU, 1)
dev:add_channel(400001, com_modbus.S16, 100, com_modbus.READ)
port:add_device(dev)
port:start()

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