Skip to content

1.4 HTTP ​

「HTTP」子标签把寄存器定时发到 HTTP 服务器(POST / GET),同时按点位表把响应 JSON 的字段落进寄存器。一次请求往返同时完成上报和拉取,不需要写一行 Lua。

当前只放出软 PLC 模拟器

HTTP 是配置式 DTU 第一期的两个新标签之一,第一期只放出 LP6666 软 PLC 模拟器。真机(ESP32 / ESP32-S3)二期逐个平台放开。 看不到这个标签说明当前固件还没编进 HTTP 模块,对照 支持哪些设备与能力。

这一页在做什么 ​

HTTP 是请求 / 响应模型:一行 URL 就是一次往返,没有连接需要保持。所以这一页只有一个分组——请求组,每组里同时配上行(发什么)和下行(收什么)。

  • GET:参数拼在 URL 的问号后面,常用于拉取服务器配置
  • POST:参数放在请求体里,常用于上报数据

GET 没有请求体,「仅变化时发送」对 GET 无效(POST 才有请求体可比)。HTTP 没有「连接」,链路状态通过请求计数与错误计数判断。

怎么配 ​

路径:上位机 → 设备详情页 → DTU 功能 → HTTP 子标签 → 打开「启用 HTTP DTU」。

打开后出现两块:连接参数(共用一份)和 请求组。

连接参数(必填) ​

字段填什么备注
服务器地址必须以 http:// 开头,如 http://192.168.1.100:8080第一期不支持 https,详见下方提示
设备标识模板里 {id} 的取值写 {id} 占位符会在写入时替换成设备序列号

点 「连接参数」 卡里的 「展开高级选项」 能看到设备标识(client_id)字段。

全局 HTTP 头(所有请求共享) ​

最常用的一条是 POST Content-Type:

字段典型填法
启用勾选
名称Content-Type
值application/json

也可以加 Authorization: Bearer xxxx 做简单的鉴权。值留空等于删掉这条头,是合法用法不是漏填。

上限 16 条头。

第一期只支持 http://

设备上的 HTTP 客户端走裸 socket,没有 TLS。https:// 在连接阶段就会失败——不是返回错误码、是连接根本起不来。需要加密传输的场景请改用 1.3 MQTT 走 TLS Broker 或自建反向代理。

请求组(一次往返完成上报 + 下行) ​

点「添加请求组」展开一组卡片:

字段填什么
名称卡片标题
请求方法GET / POST,第一期只支持这两个
请求路径必须以 / 开头,可含 {占位符};GET 把参数写在问号后面,POST 把参数写在请求体里
请求周期默认 5000ms,最小 1000ms,最大 24 小时
仅变化时发送仅 POST 生效(GET 没请求体可比);模板里有 ts / ms / datetime 时永远不同,相当于未启用
请求体模板仅 POST 显示
收到标志位默认留空,要写必须是位软元件(M / S / X / Y / TS / CS)
响应点位列表关键字段,5 个属性见下表

上限 16 个请求组,每组占一个定时器。

请求体模板怎么写(仅 POST) ​

模板是 JSON 字符串,里面用 {地址:类型} 占位符替换寄存器的当前值:

占位符含义
{id}设备序列号
{ts}当前 Unix 时间戳(秒)
{ms}毫秒时间戳
{datetime}YYYY-MM-DD HH:MM:SS
{D200}读 D200 的 16 位整型
{D210:int32}读 D210(占 D210/D211)的 32 位整型
{D200:float}读 D200(占 D200/D201)的浮点
{M0}读线圈 M0(0 / 1)

输入框下面是实时样例预览(按类型填典型值)。改一个字符就能看到设备将要发的请求体。

GET 的参数写在路径里的问号后面,例如 /api/status?dev={id}&t={D200:float}。{id} 同样在写入时被替换。

响应点位(5 个属性) ​

字段填什么
启用勾选才生效
JSON 路径从响应体取值的路径,如 data.setpoint,数组用 values.1(从 1 起)
目标寄存器D400 / M10 等;建议后续在梯形图里读它
类型int16 / int32 / float;int32 / float 占两个连续 D,只能在 D 区
缩放值乘以这个系数再写入;scale=100 表示服务器发 25.5 实际写 2550
最小值 / 最大值都填 0 表示不钳位;只填下限(上限 0)会把值再钳一次到 0,小心恒 0

上限 每组 64 条响应点位。

收到标志位有 "配了不用" 的情况

recv_flag 只在该请求组至少有 1 条启用的响应点位时才被置位。固件在解析前会先判断 response_points 是否为空;为空时不发起请求(直接返回),标志位永远不变 —— 配了反而让人以为设备没收到响应。

一键添加响应点位 ​

卡片里有 「粘贴 JSON 样例」 输入框,粘贴一段服务器返回的 JSON,点 「解析」 自动列出所有可写字段,每行右侧 「+ 添加」 直接挂到 response_points 上。无需手工抄写 path。

写入并重启 ​

配完点 💾 写入配置 → 🔄 重启生效。不重启,HTTP 客户端还在按旧配置跑。

怎么算成功 ​

按顺序检查三处,任一处不通就在那一处停:

检查点看到什么算成功
配置没被拒面板顶部红色 错误清单 为空(http:// 开头、路径以 / 开头、占位符语法都过)
服务器被请求到「已发请求」> 0,间隔到了就 +1
响应落进寄存器给对应接口发一条请求,看「收到响应」+1;recv_flag 线圈通,对应寄存器被改写
不是错配「错误次数」始终是 0,最后一条错误框为空

运行状态每 2 秒刷新一次,且仅在 HTTP 子页可见时轮询,离开本页面就停。

常见误区 ​

本节列出最常见的几类错配,详细排查见 A. 常见问题与排查。

看到的现象通常原因
配置一点就报红错误清单有提示,常见的是 https:// 没改成 http://、路径漏 / 开头、占位符花括号没闭合
服务器收不到请求服务器地址 https:// 没改 http://;端口错;服务器防火墙拦截;URL 拼出来是 http://192.168.1.100:8080api/data —— 路径漏了开头的 /
收到了但寄存器不变path 写错(大小写或层级错),先在「解析」处粘贴回放的 JSON 看能不能列出字段
配了 recv_flag 但从来不亮该请求组没有任何启用的响应点位
「仅变化时发送」开了流量没省模板里有 ts / ms / datetime,每次渲染都不同;GET 上该开关无效
响应慢 / 寄存器滞后周期低于 1000ms + 服务器响应慢,请求堆在 Lua 消息队列里。第一期周期下限 1000ms

相关文档 ​

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