主题
通信功能
LPPLC提供丰富的通信能力,支持串口和网口两种通信方式。

串口通信

这张截图只画到模式号 K7
上位机「设备参数 → 串口」的模式下拉框实际有 12 项(还含 8 串口 MC 协议、9 N:N 协议、10 信号板、11 BACnet MS/TP), 并且每个模式下哪些参数被协议固定住也各不相同。逐条对照表见 串口工作模式一览,以那张表为准。
| 模式 | 说明 |
|---|---|
| 编程口模式 | 默认模式,支持GX Works2连接 |
| 专用协议 | 专用协议通信 |
| N:N网络 | PLC间N:N网络通信 |
| 无协议 | 自由口通信 |
| Modbus RTU | Modbus RTU主站/从站 |
BACnet MS/TP
ESP32-S3 机型(LP3232 / LP3288)还可以用 Lua 把 485 口配成 BACnet MS/TP 主站, 去读写暖通、空调机组等楼宇设备,见 Lua · BACnet 楼宇自控。
网口通信

| 协议 | 功能 |
|---|---|
| Modbus TCP | 支持Server和Client模式 |
| MC协议 | 三菱MC协议 |
| MQTT | 物联网通信 |
| HTTP | Web服务 |
| WebSocket | 实时通信 |
| TCP/UDP | 套接字通信 |
| BACnet/IP | UDP 47808,从站与主站双角色(仅 ESP32-S3 机型) |
| OPC UA | 端口 4840,服务端与客户端(仅 ESP32-S3 机型) |
BACnet / OPC UA 的限制
两者都需要与上位系统在同一网段,不支持 BBMD 跨子网;OPC UA 当前只提供 SecurityPolicy None (可配用户名 / 密码),暂不支持证书加密。对外暴露的 BACnet 对象最多 64 个。
以太网默认配置
| 接口 | 默认协议 |
|---|---|
| 网口 7 | Modbus TCP Server |
| 网口 8 | Modbus TCP Server |
| 网口 9 | FX3U-ENET-ADP MELSOUT 协议(编程口) |
网口协议可在上位机里改,见 网口与 WiFi 参数。
Modbus 地址映射
对接 Modbus 主站(组态王 / MCGS / 触摸屏 / SCADA)时,用下面的表查 PLC 软元件对应的 Modbus 地址。
Modbus TCP / RTU / ASCII 共用同一张表,共 16 段已开放地址。 对接前先弄清两个编号口径:「Modbus 地址」是组态软件里填的五位寄存器编号,帧里实际发的是「通讯地址」,两者相差 1(例如 40001 对应报文里的 0)。
0 区 · 线圈(读写 · 功能码 01 / 05 / 15)
| 软元件 | Modbus 地址 | 通讯地址(十进制) | 通讯地址(十六进制) | 点数 | 数据类型 |
|---|---|---|---|---|---|
| Y0-Y377 | 00001-00256 | 0000-0255 | 0X0000-0X00FF | 256 | 位 |
| T0-T255 | 00257-00512 | 0256-0511 | 0X0100-0X01FF | 256 | 位 |
| C0-C255 | 00513-00768 | 0512-0767 | 0X0200-0X02FF | 256 | 位 |
| M0-M3071 | 01001-04072 | 1000-4071 | 0X03E8-0X0FE7 | 3072 | 位 |
| M8000-M8255 | 04073-04328 | 4072-4327 | 0X0FE8-0X10E7 | 256 | 位 |
| S0-S999 | 05001-06000 | 5000-5999 | 0X1388-0X176F | 1000 | 位 |
| X0-X377 | 08001-08256 | 8000-8255 | 0X1F40-0X203F | 256 | 位 |
| T256-T511 | 未开放 | 未开放 | 未开放 | — | 位 |
| M3072-M7679 | 未开放 | 未开放 | 未开放 | — | 位 |
| M8256-M8511 | 未开放 | 未开放 | 未开放 | — | 位 |
| S1000-S4095 | 未开放 | 未开放 | 未开放 | — | 位 |
1 区 · 输入状态(只读 · 功能码 02)
| 软元件 | Modbus 地址 | 通讯地址(十进制) | 通讯地址(十六进制) | 点数 | 数据类型 |
|---|---|---|---|---|---|
| X0-X377 | 10001-10256 | 0000-0255 | 0X0000-0X00FF | 256 | 位 |
3 区 · 输入寄存器(只读 · 功能码 04)
| 软元件 | Modbus 地址 | 通讯地址(十进制) | 通讯地址(十六进制) | 点数 | 数据类型 |
|---|---|---|---|---|---|
| AI0-AI255 | 30001-30256 | 0000-0255 | 0X0000-0X00FF | 256 | 有符号 16 位整数 |
4 区 · 保持寄存器(读写 · 功能码 03 / 06 / 16 / 23)
| 软元件 | Modbus 地址 | 通讯地址(十进制) | 通讯地址(十六进制) | 点数 | 数据类型 |
|---|---|---|---|---|---|
| D0-D7999 | 40001-48000 | 0000-7999 | 0X0000-0X1F3F | 8000 | 有符号 16 位整数 |
| D8000-D8255 | 48001-48256 | 8000-8255 | 0X1F40-0X203F | 256 | 有符号 16 位整数 |
| T0-T255 | 48257-48512 | 8256-8511 | 0X2040-0X213F | 256 | 有符号 16 位整数 |
| C0-C199 | 48513-48712 | 8512-8711 | 0X2140-0X2207 | 200 | 有符号 16 位整数 |
| C200-C255 | 48713-48824 | 8712-8823 | 0X2208-0X2277 | 56 | 有符号 32 位整数(占 2 个地址) |
| AO0-AO99 | 49001-49100 | 9000-9099 | 0X2328-0X238B | 100 | 有符号 16 位整数 |
| AI0-AI91 | 49101-49192 | 9100-9191 | 0X238C-0X23E7 | 92 | 有符号 16 位整数 |
| D8256-D8511 | 未开放 | 未开放 | 未开放 | — | 有符号 16 位整数 |
| T256-T511 | 未开放 | 未开放 | 未开放 | — | 有符号 16 位整数 |
| AO100-AO127 | 未开放 | 未开放 | 未开放 | — | 有符号 16 位整数 |
| R0-R32767 | 未开放 | 未开放 | 未开放 | — | 有符号 16 位整数 |
模拟量地址窗比实际路数宽
AI0-AI255、AI0-AI91 的地址窗比固件支持的宽:最多 85 路模拟量,实际装了几路看机型与硬件配置。读超出实际路数的地址不会报错,拿到的是无效值。
表外的地址不会报非法,只会静默换个软元件
每个区都留了兜底:0 区越界读写 M8255、1 区回绕到 X0、 3 区回绕到 AI0、4 区落到 D8031。 所以「读到的值莫名其妙」通常是地址填错而不是通信坏了 —— 先对照上表确认这一路功能码的区间。
「未开放」那一类
这些软元件在 PLC 里真实存在、程序里能用,只是没有接进 Modbus 地址表,主站读写不到它们。 需要把这部分数据送出去时,用 Lua 脚本先搬到已开放的 D 区,见 Lua · Modbus RTU。 整族都不在表上的是扩展寄存器 R(R0-R32767 那一行):它和 D 区不是一片连续内存,按编号逐个存放, 所以没有任何一段 Modbus 地址对应它 —— 要对外给值就别只放 R,同步写一份到 D 区。
读 32 位计数器(C200 以上)时的字序
一个计数器占连续两个地址:低地址那一格是低 16 位,高地址那一格是高 16 位,每个寄存器内部仍是 Modbus 标准的高字节在前。 组态软件里对应「32 位 / DWORD,字序低字在前」(各家叫法不同,常见写作 CDAB)。选错字序的表现是数值巨大或忽正忽负。
更多通信详情
- Modbus TCP 主站:Lua · Modbus TCP
- Modbus RTU:Lua · Modbus RTU
- MQTT:Lua · MQTT 客户端
- 串口通信:Lua · 串口基础
- TCP/UDP:Lua · TCP 客户端
- BACnet:Lua · BACnet 楼宇自控
- OPC UA:Lua · OPC UA