主题
附录 F. 内建扩展与模拟器专有库
本页收录还没有独立库页的 Lua 库:utf8/debug/package/bit32 是解释器内建扩展, com2*/thread/pahomqtt/xml/miniz 只在软 PLC 模拟器 / 上位机上有, dog/fdb 一类则已在部分机型上提供。某个机型到底有没有这个库,一律以 Lua 库总表 的「可用机型」列为准。 各库先给方法速查表,再逐函数一小节说明调用形态、参数与可用机型。
一、xml 与 miniz:先确认你手上有没有
这两个库只在软 PLC 模拟器 / 上位机的内置软设备上注册,四款设备固件(ESP32 机型、4G 机型、103、750) 里都没有这两个名字。同一份脚本在模拟器里跑通、烧进设备就报 attempt to call a nil value (global 'xml') —— 这不是固件的 bug,是这两个库没有设备端实现。
先跑这一句自查你手上这套环境有没有(写进程序开头最省事):
lua
if type(xml) ~= "table" or type(miniz) ~= "table" then
print("当前环境没有 xml / miniz,这段只能在模拟器里跑")
return
end软 PLC 模拟器是从 2026-10-10 起构建的版本才开始提供这两个库;更早拿到的版本里它们仍是 nil, 用上面那句一测就知道。要解析 XML 或压缩数据、又必须跑在设备上,请改用设备端有的库 (HTTP/MQTT 上报 + data 库自己拼格式),或联系我们评估。
二、xml 的四条边界(2026-10-10 在软 PLC 模拟器上逐条实测)
解析结果是一棵树:标签名在 [0],子节点从 [1] 往后排,属性直接当键,文本内容在该节点的 [1]。
lua
local t = xml.eval('<root atr="x"><i>1</i><i>2</i><sub k="1"><d>9</d></sub></root>')
print(t[0]) -- root
print(t.atr) -- x (属性 atr='y' 这种单引号写法同样能取)
print(#t) -- 3 子节点个数
print(t[1][0], t[1][1]) -- i 1 第一个子节点的标签名与文本
print(t[3][1][1]) -- 9 孙子节点的文本| 你以为的行为 | 实测行为 | 怎么办 |
|---|---|---|
xml.eval 会把 & 还原成 & | 不会。没注册码表时,文本里的 &b 原样保留 | 需要还原就自己 s:gsub("&","&") |
xml.encode(s) 会自动做 XML 转义 | 不会。没注册码表时它原样返回你传进去的串 | 先 xml.registerCode("&","&") 再 xml.encode(s),此时 a&b → a&b |
registerCode 随时能调 | 码表是整个程序共用的一份,注册第二个同名编码会直接报错 LuaXML ERROR: code already exists.;而且注册之后 xml.eval 会跟着做反向替换,把已经解析好的文本又转义一遍(实测 &b → &amp;b) | 只在程序最开始注册一次、且注册完不要再回头用 eval 解析同一批数据;解析与转义二选一 |
xml.load(文件名) 找不到文件会返回 nil | 直接报错终止脚本:LuaXML ERROR: "xxx.xml" file error or file not found! | 要么先确保文件存在,要么用 pcall(xml.load, 文件名) 兜住 |
| 相对路径按脚本所在目录算 | 按模拟器的工作目录算。实测在模拟器里 "Simulator/probe.xml" 能读到,"probe.xml" 报 file not found | 写相对路径时带上 Simulator/ 这一段,或改用 xml.eval(字符串) 绕开文件 |
另外两点容易误判:xml.encode 只接受一个字符串参数——传两个参数它返回 0 个值(不报错,静默), 传表会直接报 string expected, got table;解析出来的节点 tostring() 打印的是 table: 0xxxxx, 不是 XML 文本,别拿它当序列化结果。
三、miniz 的四条边界(同批实测)
lua
local data, len = miniz.compress("hello hello hello hello") -- 返回两个值:压缩结果、字节数
local back, blen = miniz.uncompress(data) -- 返回两个值:原文、字节数
print(blen, back == "hello hello hello hello") -- 21 true| 事项 | 实测结果 |
|---|---|
| 解压上限 4096 字节 | 解压缓冲写死 4096。原文 4000、4096 字节都能原样解回;原文 5000 字节时压缩成功、解压返回 nil, 0(不报错) |
| 数据坏了 / 传输丢包 | 喂进不是它压出来的串、或把压缩结果截掉几个字节,都返回 nil, 0,不会崩 |
| 压缩结果是二进制 | 里面含 0x00 等不可见字节,不能当文本塞进 JSON、串口 ASCII 帧或 MQTT 文本属性;要走这些通道请先 base64 |
| 空字符串 | miniz.compress("") 得到 8 字节,uncompress 回来是空串、长度 0(不报错) |
超过 4 KB 的数据不要用它整包压缩:要么分段,要么改用平台侧压缩。 这一条限制在模拟器与上位机上是一样的。
函数速查表
下表列出本库全部函数与方法(含尚未单独成节的),点「说明」可跳转到对应小节。签名按通用记法:括号内按顺序列全参数,方括号里的可以省略(不传走默认值),... 表示还可继续传同类参数;h: 开头的是对象方法,先用库级函数拿回句柄再冒号调用。
库 bit32
| 方法与签名 | 作用 | 说明 |
|---|---|---|
bit32.arshift(integer) | — | 跳转 |
bit32.band(…) | — | 跳转 |
bit32.bnot(…) | — | 跳转 |
bit32.bor(...) | — | 跳转 |
bit32.btest(…) | — | 跳转 |
bit32.bxor(...) | — | 跳转 |
bit32.extract(…) | — | 跳转 |
bit32.lrotate(integer) | — | 跳转 |
bit32.lshift(integer) | — | 跳转 |
bit32.replace(…) | — | 跳转 |
bit32.rrotate(integer) | — | 跳转 |
bit32.rshift(integer) | — | 跳转 |
库 com2
| 方法与签名 | 作用 | 说明 |
|---|---|---|
com2.get(string) | — | 跳转 |
com2.mock(string) | — | 跳转 |
com2.set(string, number) | — | 跳转 |
com2.start(integer, ...) | — | 跳转 |
com2.stats(…) | — | 跳转 |
com2.stop(…) | — | 跳转 |
com2.tag(string) | — | 跳转 |
com2.tick(integer) | — | 跳转 |
库 com2_dlt645
| 方法与签名 | 作用 | 说明 |
|---|---|---|
com2_dlt645.create(…) | — | 跳转 |
库 com2_fx
| 方法与签名 | 作用 | 说明 |
|---|---|---|
com2_fx.create(…) | — | 跳转 |
库 com2_modbus
| 方法与签名 | 作用 | 说明 |
|---|---|---|
com2_modbus.master(…) | — | 跳转 |
com2_modbus.slave(…) | — | 跳转 |
库 debug
| 方法与签名 | 作用 | 说明 |
|---|---|---|
debug.debug(…) | 进入交互式调试命令行 | 跳转 |
debug.gethook(…) | 查询当前调试钩子 | 跳转 |
debug.getinfo(…) | 'lua_getinfo'. | 跳转 |
debug.getlocal(…) | 读函数的局部变量 | 跳转 |
debug.getmetatable(...) | 取元表(调试版,绕过 __metatable) | 跳转 |
debug.getregistry(…) | 取内部注册表(高级用法) | 跳转 |
debug.getupvalue(…) | 读函数的外部局部变量(upvalue) | 跳转 |
debug.getuservalue(…) | 读 userdata 上挂的关联值 | 跳转 |
debug.setcstacklimit(integer) | 设置 C 调用栈深度上限 | 跳转 |
debug.sethook(…) | 设置调试钩子(按行/调用触发) | 跳转 |
debug.setlocal(…) | 修改函数的局部变量 | 跳转 |
debug.setmetatable(…) | 设置元表(调试版) | 跳转 |
debug.setupvalue(...) | 修改函数的外部局部变量 | 跳转 |
debug.setuservalue(...) | 给 userdata 挂一个关联值 | 跳转 |
debug.traceback(…) | 生成当前调用栈的文本(出错定位常用) | 跳转 |
debug.upvalueid(…) | 取 upvalue 的唯一标识 | 跳转 |
debug.upvaluejoin(…) | 让两个函数共享同一个 upvalue | 跳转 |
库 dog
| 方法与签名 | 作用 | 说明 |
|---|---|---|
dog.new() | 创建新的看门狗对象 | 跳转 |
h:feed() | 喂狗操作 | 跳转 |
h:get_name() | 获取看门狗名称 | 跳转 |
h:get_remaining_time() | 获取剩余时间 | 跳转 |
h:get_timeout() | 获取超时时间 | 跳转 |
h:init(name, timeout_ms, [auto_start]) | 初始化看门狗 | 跳转 |
h:is_active() | 检查是否激活 | 跳转 |
h:set_timeout(timeout_ms) | 设置超时时间 | 跳转 |
h:start() | 启动看门狗 | 跳转 |
h:stop() | 停止看门狗 | 跳转 |
库 miniz
| 方法与签名 | 作用 | 说明 |
|---|---|---|
miniz.compress(…) | — | 跳转 |
miniz.uncompress(…) | — | 跳转 |
库 package
| 方法与签名 | 作用 | 说明 |
|---|---|---|
package.cpath | C 库的搜索路径(字符串变量) | 跳转 |
package.loaded | 已加载模块的登记表 | 跳转 |
package.loadlib(string, string) | 载入一个 C 库(设备上一般不可用) | 跳转 |
package.path | Lua 模块的搜索路径(字符串变量) | 跳转 |
package.preload | 模块预加载函数表 | 跳转 |
package.require(string) | 加载并返回一个模块(同全局 require) | 跳转 |
package.searchers | 模块查找器列表 | 跳转 |
package.searchpath(string, string) | 按搜索路径查找模块文件的实际位置 | 跳转 |
库 pahomqtt
| 方法与签名 | 作用 | 说明 |
|---|---|---|
pahomqtt.client(string, string, integer) | 创建MQTT客户端 | 跳转 |
h:connect(…) | 连接到MQTT代理 | 跳转 |
h:disconnect(…) | 断开连接 | 跳转 |
h:is_connected(…) | 检查连接状态 | 跳转 |
h:publish(string) | 发布消息 | 跳转 |
h:subscribe(string, integer) | 订阅主题 | 跳转 |
库 thread
| 方法与签名 | 作用 | 说明 |
|---|---|---|
thread.createmutex([recursive]) | 创建互斥锁 | 跳转 |
thread.resume(thread_id) | 恢复线程 | 跳转 |
thread.self() | 获取当前线程ID | 跳转 |
thread.start(func, [stack_size, priority, name]) | 创建并启动新线程 | 跳转 |
thread.stop(thread_id) | 停止线程 | 跳转 |
thread.suspend(thread_id) | 挂起线程 | 跳转 |
h:lock() | 互斥锁加锁 | 跳转 |
h:unlock() | 互斥锁解锁 | 跳转 |
库 utf8
| 方法与签名 | 作用 | 说明 |
|---|---|---|
utf8.char(...) | 按 Unicode 码点拼出 UTF-8 字符 | 跳转 |
utf8.charpattern | 匹配单个 UTF-8 字符的模式串 | 跳转 |
utf8.codepoint(…) | characters that start in the range [i,j] | 跳转 |
utf8.codes(string) | 逐个迭代字符串中的码点 | 跳转 |
utf8.len(…) | well formed in that interval | 跳转 |
utf8.offset(integer) | 取第 n 个字符的字节位置 | 跳转 |
库 xml
| 方法与签名 | 作用 | 说明 |
|---|---|---|
xml.encode(...) | — | 跳转 |
xml.eval(...) | xml.eval(xml字符串) 将xml字符串转table | 跳转 |
xml.load(string) | xml.load(文件名) 将xml文件转table | 跳转 |
xml.registerCode(string, string) | — | 跳转 |
bit32.arshift
- 调用形态:
bit32.arshift(integer)(库级函数) - 参数:1 个参数:第 2 个为整数(必填)
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.band
- 调用形态:
bit32.band(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.bnot
- 调用形态:
bit32.bnot(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.bor
- 调用形态:
bit32.bor(...)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.btest
- 调用形态:
bit32.btest(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.bxor
- 调用形态:
bit32.bxor(...)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.extract
- 调用形态:
bit32.extract(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.lrotate
- 调用形态:
bit32.lrotate(integer)(库级函数) - 参数:1 个参数:第 2 个为整数(必填)
- 可用机型:ESP32 机型
bit32.lshift
- 调用形态:
bit32.lshift(integer)(库级函数) - 参数:1 个参数:第 2 个为整数(必填)
- 可用机型:ESP32 机型
bit32.replace
- 调用形态:
bit32.replace(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型
bit32.rrotate
- 调用形态:
bit32.rrotate(integer)(库级函数) - 参数:1 个参数:第 2 个为整数(必填)
- 可用机型:ESP32 机型
bit32.rshift
- 调用形态:
bit32.rshift(integer)(库级函数) - 参数:1 个参数:第 2 个为整数(必填)
- 可用机型:ESP32 机型
com2.get
- 调用形态:
com2.get(string)(库级函数) - 参数:1 个参数:第 1 个为字符串(必填)
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
com2.mock
- 调用形态:
com2.mock(string)(库级函数) - 参数:1 个参数:第 1 个为字符串(必填)
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
com2.set
- 调用形态:
com2.set(string, number)(库级函数) - 参数:2 个参数:第 1 个为字符串(必填)、第 2 个为数值(必填)
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
com2.start
- 调用形态:
com2.start(integer, ...)(库级函数) - 参数:1 个参数:第 1 个为整数(必填),其后还有可变参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
com2.stats
- 调用形态:
com2.stats(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
com2.stop
- 调用形态:
com2.stop(…)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
com2.tag
- 调用形态:
com2.tag(string)(库级函数) - 参数:1 个参数:第 1 个为字符串(必填)
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
com2.tick
- 调用形态:
com2.tick(integer)(库级函数) - 参数:1 个参数:第 1 个为整数(必填)
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
com2_dlt645.create
- 调用形态:
com2_dlt645.create(…)(库级函数) - 参数:无参数
- 可用机型:软 PLC 模拟器 / 上位机
com2_fx.create
- 调用形态:
com2_fx.create(…)(库级函数) - 参数:无参数
- 可用机型:软 PLC 模拟器 / 上位机
com2_modbus.master
- 调用形态:
com2_modbus.master(…)(库级函数) - 参数:无参数
- 可用机型:软 PLC 模拟器 / 上位机
com2_modbus.slave
- 调用形态:
com2_modbus.slave(…)(库级函数) - 参数:无参数
- 可用机型:软 PLC 模拟器 / 上位机
debug.debug
- 作用:进入交互式调试命令行
- 调用形态:
debug.debug(…)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.gethook
- 作用:查询当前调试钩子
- 调用形态:
debug.gethook(…)(库级函数) - 参数:无参数
- 返回:3 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.getinfo
- 作用:'lua_getinfo'.
- 调用形态:
debug.getinfo(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.getlocal
- 作用:读函数的局部变量
- 调用形态:
debug.getlocal(…)(库级函数) - 参数:无参数
- 返回:2 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.getmetatable
- 作用:取元表(调试版,绕过 __metatable)
- 调用形态:
debug.getmetatable(...)(库级函数) - 参数:1 个参数:第 1 个为任意(必填)
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.getregistry
- 作用:取内部注册表(高级用法)
- 调用形态:
debug.getregistry(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.getupvalue
- 作用:读函数的外部局部变量(upvalue)
- 调用形态:
debug.getupvalue(…)(库级函数) - 参数:无参数
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.getuservalue
- 作用:读 userdata 上挂的关联值
- 调用形态:
debug.getuservalue(…)(库级函数) - 参数:无参数
- 返回:2 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.setcstacklimit
- 作用:设置 C 调用栈深度上限
- 调用形态:
debug.setcstacklimit(integer)(库级函数) - 参数:1 个参数:第 1 个为整数(必填)
- 返回:1 个值
- 可用机型:ESP32 机型
debug.sethook
- 作用:设置调试钩子(按行/调用触发)
- 调用形态:
debug.sethook(…)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.setlocal
- 作用:修改函数的局部变量
- 调用形态:
debug.setlocal(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.setmetatable
- 作用:设置元表(调试版)
- 调用形态:
debug.setmetatable(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.setupvalue
- 作用:修改函数的外部局部变量
- 调用形态:
debug.setupvalue(...)(库级函数) - 参数:1 个参数:第 3 个为任意(必填)
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.setuservalue
- 作用:给 userdata 挂一个关联值
- 调用形态:
debug.setuservalue(...)(库级函数) - 参数:1 个参数:第 2 个为任意(必填)
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.traceback
- 作用:生成当前调用栈的文本(出错定位常用)
- 调用形态:
debug.traceback(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.upvalueid
- 作用:取 upvalue 的唯一标识
- 调用形态:
debug.upvalueid(…)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
debug.upvaluejoin
- 作用:让两个函数共享同一个 upvalue
- 调用形态:
debug.upvaluejoin(…)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.new
- 作用:创建新的看门狗对象
- 调用形态:
dog.new()(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.feed
- 作用:喂狗操作
- 调用形态:
h:feed()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.get_name
- 作用:获取看门狗名称
- 调用形态:
h:get_name()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.get_remaining_time
- 作用:获取剩余时间
- 调用形态:
h:get_remaining_time()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.get_timeout
- 作用:获取超时时间
- 调用形态:
h:get_timeout()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.init
- 作用:初始化看门狗
- 调用形态:
h:init(name, timeout_ms, [auto_start])(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:
name(string):看门狗名称 - 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.is_active
- 作用:检查是否激活
- 调用形态:
h:is_active()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.set_timeout
- 作用:设置超时时间
- 调用形态:
h:set_timeout(timeout_ms)(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:
timeout_ms(number):新的超时时间(毫秒) - 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.start
- 作用:启动看门狗
- 调用形态:
h:start()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
dog.stop
- 作用:停止看门狗
- 调用形态:
h:stop()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
miniz.compress
- 调用形态:
miniz.compress(…)(库级函数) - 参数:无参数
- 返回:2 个值
- 可用机型:软 PLC 模拟器 / 上位机
miniz.uncompress
- 调用形态:
miniz.uncompress(…)(库级函数) - 参数:无参数
- 返回:2 个值
- 可用机型:软 PLC 模拟器 / 上位机
package.cpath
- 作用:C 库的搜索路径(字符串变量)
- 形态:
package.cpath不是可调用函数(不要加括号),按变量使用 - 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.loaded
- 作用:已加载模块的登记表
- 形态:
package.loaded不是可调用函数(不要加括号),按变量使用 - 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.loadlib
- 作用:载入一个 C 库(设备上一般不可用)
- 调用形态:
package.loadlib(string, string)(库级函数) - 参数:2 个参数:第 1 个为字符串(必填)、第 2 个为字符串(必填)
- 返回:3 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.path
- 作用:Lua 模块的搜索路径(字符串变量)
- 形态:
package.path不是可调用函数(不要加括号),按变量使用 - 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.preload
- 作用:模块预加载函数表
- 形态:
package.preload不是可调用函数(不要加括号),按变量使用 - 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.require
- 作用:加载并返回一个模块(同全局 require)
- 调用形态:
package.require(string)(库级函数) - 参数:1 个参数:第 1 个为字符串(必填)
- 返回:2 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.searchers
- 作用:模块查找器列表
- 形态:
package.searchers不是可调用函数(不要加括号),按变量使用 - 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
package.searchpath
- 作用:按搜索路径查找模块文件的实际位置
- 调用形态:
package.searchpath(string, string)(库级函数) - 参数:2 个参数:第 1 个为字符串(必填)、第 2 个为字符串(必填)
- 返回:2 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
pahomqtt.client
- 作用:创建MQTT客户端
- 调用形态:
pahomqtt.client(string, string, integer)(库级函数) - 参数:3 个参数:第 1 个为字符串(必填)、第 2 个为字符串(必填)、第 3 个为整数(必填)
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
pahomqtt.connect
- 作用:连接到MQTT代理
- 调用形态:
h:connect(…)(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
pahomqtt.disconnect
- 作用:断开连接
- 调用形态:
h:disconnect(…)(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
pahomqtt.is_connected
- 作用:检查连接状态
- 调用形态:
h:is_connected(…)(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
pahomqtt.publish
- 作用:发布消息
- 调用形态:
h:publish(string)(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:1 个参数:第 2 个为字符串(必填)
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
pahomqtt.subscribe
- 作用:订阅主题
- 调用形态:
h:subscribe(string, integer)(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:2 个参数:第 2 个为字符串(必填)、第 3 个为整数(必填)
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
task / event
task(3 个)与 event(6 个)是配套的统一并发库,签名与参数见 后台任务 与 事件订阅与发布。
- 可用机型:ESP32 机型 · 4G 机型 · 软 PLC 模拟器 / 上位机
- 旧接口已被取代:早期模拟器上的
task.post_event/task.run_task/task.wait_event已不在库里,等价写法是event.emit(name, key, a, b)/task.start(fn)/system.sleep(ms)。
thread.createmutex
- 作用:创建互斥锁
- 调用形态:
thread.createmutex([recursive])(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
thread.resume
- 作用:恢复线程
- 调用形态:
thread.resume(thread_id)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
thread.self
- 作用:获取当前线程ID
- 调用形态:
thread.self()(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
thread.start
- 作用:创建并启动新线程
- 调用形态:
thread.start(func, [stack_size, priority, name])(库级函数) - 参数:
stack_size(number, 可选):线程栈大小,单位字节,默认8192 - 可用机型:软 PLC 模拟器 / 上位机
thread.stop
- 作用:停止线程
- 调用形态:
thread.stop(thread_id)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
thread.suspend
- 作用:挂起线程
- 调用形态:
thread.suspend(thread_id)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
thread.lock
- 作用:互斥锁加锁
- 调用形态:
h:lock()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
thread.unlock
- 作用:互斥锁解锁
- 调用形态:
h:unlock()(对象方法,h为本库函数返回的句柄,冒号调用不传自身) - 参数:无参数
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机
utf8.char
- 作用:按 Unicode 码点拼出 UTF-8 字符
- 调用形态:
utf8.char(...)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
utf8.charpattern
- 作用:匹配单个 UTF-8 字符的模式串
- 形态:
utf8.charpattern不是可调用函数(不要加括号),按变量使用 - 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
utf8.codepoint
- 作用:characters that start in the range [i,j]
- 调用形态:
utf8.codepoint(…)(库级函数) - 参数:无参数
- 返回:无
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
utf8.codes
- 作用:逐个迭代字符串中的码点
- 调用形态:
utf8.codes(string)(库级函数) - 参数:1 个参数:第 1 个为字符串(必填)
- 返回:3 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
utf8.len
- 作用:well formed in that interval
- 调用形态:
utf8.len(…)(库级函数) - 参数:无参数
- 返回:2 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
utf8.offset
- 作用:取第 n 个字符的字节位置
- 调用形态:
utf8.offset(integer)(库级函数) - 参数:1 个参数:第 2 个为整数(必填)
- 返回:2 个值
- 可用机型:ESP32 机型 · 软 PLC 模拟器 / 上位机
xml.encode
- 调用形态:
xml.encode(...)(库级函数) - 参数:无参数
- 返回:1 个值
- 可用机型:软 PLC 模拟器 / 上位机
xml.eval
- 作用:xml.eval(xml字符串) 将xml字符串转table
- 调用形态:
xml.eval(...)(库级函数) - 参数:无参数
- 可用机型:软 PLC 模拟器 / 上位机
xml.load
- 作用:xml.load(文件名) 将xml文件转table
- 调用形态:
xml.load(string)(库级函数) - 参数:1 个参数:第 1 个为字符串(必填)
- 可用机型:软 PLC 模拟器 / 上位机
xml.registerCode
- 调用形态:
xml.registerCode(string, string)(库级函数) - 参数:2 个参数:第 1 个为字符串(必填)、第 2 个为字符串(必填)
- 返回:无
- 可用机型:软 PLC 模拟器 / 上位机