--循环发送快捷发送区数据 ---例子一 --发送数据中间间隔时间(单位ms) local sendDelay = 1000 --待发送数据的顺序 local sendList = {1,2,4,1,6,8} --你也可以用下面的代码批量生成 --从2号发到15号数据 --[[ for i=2,15 do table.insert(sendList, i) end ]] sys.taskInit(function () while true do for _,i in pairs(sendList) do local data = apiQuickSendList(i) if data then log.info("send data",apiSendUartData(data),data) end sys.wait(sendDelay) end end end) --[[ ---例子二 --待发送数据的顺序和延时时间 local sendList = { {1,1000}, {3,500}, {2,2000}, {4,300}, {5,6000}, {6,1500}, } sys.taskInit(function () while true do for _,i in pairs(sendList) do local data = apiQuickSendList[i[1] ] if data then log.info("send data",apiSendUartData(data),data) end sys.wait(i[2]) end end end) ]]下面先逐行分析你给出的脚本,再给出“reboot 不在快捷发送区、每 2000 ms 周期性发送”的完整可直接用的脚本。
一、原脚本详细解析
1️⃣ 基础配置
local sendDelay = 1000发送间隔:1000 ms(1 秒)
用于
sys.wait(sendDelay)
2️⃣ 发送队列(例子一)
local sendList = {1,2,4,1,6,8}sendList中存放的是快捷发送区的索引号例如:
1→ 快捷发送区第 1 条2→ 快捷发送区第 2 条
⚠️关键点:
apiQuickSendList(i)👉只能取“快捷发送区已存在的数据”
3️⃣ 批量生成(注释示例)
for i=2,15 do table.insert(sendList, i) end动态生成发送序列
常用于测试或连续指令
4️⃣ 主任务逻辑
sys.taskInit(function () while true do for _,i in pairs(sendList) do local data = apiQuickSendList(i) if data then log.info("send data",apiSendUartData(data),data) end sys.wait(sendDelay) end end end)执行流程
步骤 | 说明 |
|---|---|
| 永久循环 |
| 依次取出索引 |
| 取快捷发送数据 |
| 真正发送 |
| 控制发送节奏 |
✅特点:
顺序发送
自动循环
适合固定快捷数据
二、需求拆解
reboot不在快捷发送区,想每隔2000ms周期发送一次,给出脚本
✅reboot 不在快捷发送区
✅不是快捷索引
✅不能走apiQuickSendList()
✅每 2000 ms 发送一次
✅循环发送
👉 正确做法:直接发送字符串 / 十六进制数据
三、推荐实现方案(最稳妥 ✅)
✅ 方案一:直接发送 reboot 字符串(最常见)
-- 发送间隔(ms) local sendDelay = 2000 sys.taskInit(function () while true do -- reboot 命令(根据你的设备协议调整) local data = "reboot\r\n" -- 通过 UART 发送 apiSendUartData(data) -- 日志 log.info("send reboot", data) -- 等待 2 秒 sys.wait(sendDelay) end end)📌适用场景
AT 指令设备
Linux / MCU 支持
reboot串口终端命令
✅ 方案二:发送十六进制 reboot(工业设备常用)
如果你的设备需要HEX 格式:
local sendDelay = 2000 sys.taskInit(function () while true do -- 示例:reboot 十六进制(按你设备协议改) local data = string.char(0x72,0x65,0x62,0x6F,0x6F,0x74,0x0D,0x0A) apiSendUartData(data) log.info("send reboot hex") sys.wait(sendDelay) end end)✅ 方案三:如果你想“混合快捷区 + reboot”
local sendDelay = 2000 sys.taskInit(function () while true do -- 发送快捷区第 1 条 local d1 = apiQuickSendList(1) if d1 then apiSendUartData(d1) log.info("quick send", d1) end sys.wait(sendDelay) -- 发送 reboot apiSendUartData("reboot\r\n") log.info("send reboot") sys.wait(sendDelay) end end)四、重要提醒(非常关键 ⚠️)
项目 | 说明 |
|---|---|
| 只能用于快捷区 |
reboot | 必须直接发送字符串/HEX |
换行符 | 有些设备必须是 |
波特率 | 确保 UART 参数一致 |
日志 | 用 |