|
|
@@ -2,7 +2,7 @@
|
|
|
|
|
|
# 1. 采集网关接口说明
|
|
|
|
|
|
-当前接口仅支持通过 HTTP 调用 Modbus TCP 设备,暂不支持 Modbus RTU 或其他设备类型
|
|
|
+当前采集网关接口支持通过 HTTP 调用 Modbus TCP 和 Siemens S7 TCP 设备。Modbus RTU、S7 串口或其他协议设备不属于采集网关当前 HTTP 直连范围。
|
|
|
|
|
|
## 采集网关服务器请求地址
|
|
|
|
|
|
@@ -56,7 +56,7 @@ Content-Type: application/json
|
|
|
|
|
|
### HTTP 状态码说明
|
|
|
|
|
|
-接口校验失败、设备连接失败、Modbus 通信失败时,通常仍返回 HTTP `200`,业务是否成功由响应体中的 `code` 判断。
|
|
|
+接口校验失败、设备连接失败、Modbus/S7 通信失败时,通常仍返回 HTTP `200`,业务是否成功由响应体中的 `code` 判断。
|
|
|
|
|
|
AI 调用接口时应按以下规则判断结果:
|
|
|
|
|
|
@@ -72,8 +72,19 @@ AI 调用接口时应按以下规则判断结果:
|
|
|
| 原始 Modbus 读取 | `POST` | `/api/dc-gateway/modbus/read` | 读取 Modbus 数据,但不解析为业务值,只返回 Tx/Rx 通信报文。 |
|
|
|
| 点位读取并转换 | `POST` | `/api/dc-gateway/modbus/read_points` | 按点位定义读取 Modbus 数据,并按数据类型转换为业务值。 |
|
|
|
| 点位读取并转换别名 | `POST` | `/api/dc-gateway/modbus/read-points` | 与 `/api/dc-gateway/modbus/read_points` 等价,建议优先使用下划线版本。 |
|
|
|
+| 原始 S7 读取 | `POST` | `/api/dc-gateway/s7/read` | 读取一段 S7 地址数据,只返回语义化 `communication`。 |
|
|
|
+| S7 点位读取并转换 | `POST` | `/api/dc-gateway/s7/read_points` | 按点位定义读取 S7 数据,并返回转换后的业务值和 `communication`。 |
|
|
|
+| S7 连接扫描 | `POST` | `/api/dc-gateway/s7/connect_scan` | 只传 IP,扫描可用的 `rock`、`slot`、`tsap_conn_type` 组合。 |
|
|
|
|
|
|
-## 通用设备字段
|
|
|
+## 网关接口目录
|
|
|
+
|
|
|
+| 部分 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 通用部分 | 请求格式、返回格式、HTTP 状态码、健康检查。 |
|
|
|
+| Modbus 网关接口 | Modbus TCP 通用设备字段、地址规则、功能码、原始读取、点位读取并转换。 |
|
|
|
+| S7 网关接口 | S7 TCP 通用设备字段、地址字段、语义化通信记录、原始读取、点位读取并转换、连接扫描。 |
|
|
|
+
|
|
|
+## Modbus 通用设备字段
|
|
|
|
|
|
以下字段用于描述要连接的 Modbus TCP 设备,出现在 `/modbus/read` 和 `/modbus/read_points` 请求体的顶层。
|
|
|
|
|
|
@@ -182,9 +193,10 @@ Rx:002-00 00 33 00 00 00 0B 01 03 08 00 01 42 A8 00 00 40 F8
|
|
|
curl http://127.0.0.1:8000/api/dc-gateway/health
|
|
|
```
|
|
|
|
|
|
-## 接口:原始 Modbus 读取
|
|
|
+## Modbus 网关接口说明
|
|
|
+### 接口:原始 Modbus 读取
|
|
|
|
|
|
-### 基本信息
|
|
|
+#### 基本信息
|
|
|
|
|
|
| 项 | 值 |
|
|
|
|---|---|
|
|
|
@@ -194,7 +206,7 @@ curl http://127.0.0.1:8000/api/dc-gateway/health
|
|
|
| Content-Type | `application/json` |
|
|
|
| 用途 | 向 Modbus TCP 设备发起一次读取请求,只返回通信报文,不返回解析后的业务值。 |
|
|
|
|
|
|
-### 请求体结构
|
|
|
+#### 请求体结构
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
@@ -223,7 +235,7 @@ curl http://127.0.0.1:8000/api/dc-gateway/health
|
|
|
| `read.address` | integer | 是 | 无 | `>= 0` | 起始地址。实际协议地址为 `read.address + address_base`。 |
|
|
|
| `read.quantity` | integer | 是 | 无 | `1..125` | 读取数量。功能码 `1`、`2` 表示读取 bit 数量;功能码 `3`、`4` 表示读取 register 数量。 |
|
|
|
|
|
|
-### 成功返回示例
|
|
|
+#### 成功返回示例
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
@@ -261,7 +273,7 @@ curl http://127.0.0.1:8000/api/dc-gateway/health
|
|
|
| `data.device.slave_id` | integer | 本次请求使用的 Modbus 从站 ID。 |
|
|
|
| `data.communication` | string[] | 本次 Modbus TCP 原始 Tx/Rx 报文列表。 |
|
|
|
|
|
|
-### 失败返回示例
|
|
|
+#### 失败返回示例
|
|
|
|
|
|
设备无响应或通信失败:
|
|
|
|
|
|
@@ -306,7 +318,7 @@ curl http://127.0.0.1:8000/api/dc-gateway/health
|
|
|
| `data.device` | object | 如果请求已经通过基础校验,通常会回显设备参数。 |
|
|
|
| `data.communication` | string[] | 失败前已经捕获到的通信报文。字段校验失败时通常为空数组。 |
|
|
|
|
|
|
-### 调用示例
|
|
|
+#### 调用示例
|
|
|
|
|
|
```bash
|
|
|
curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
@@ -326,9 +338,9 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
}'
|
|
|
```
|
|
|
|
|
|
-## 接口:点位读取并转换
|
|
|
+### 接口:modbus点位读取并转换
|
|
|
|
|
|
-### 基本信息
|
|
|
+#### 基本信息
|
|
|
|
|
|
| 项 | 值 |
|
|
|
|---|---|
|
|
|
@@ -339,7 +351,7 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
| Content-Type | `application/json` |
|
|
|
| 用途 | 按点位定义逐个读取 Modbus 数据,并把原始 bit/register 转换为 `bool`、`int16`、`float32` 等业务值。 |
|
|
|
|
|
|
-### 请求体结构
|
|
|
+#### 请求体结构
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
@@ -387,7 +399,7 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
| `points[].type` | string | 是 | 无 | `bool`、`int16`、`uint16`、`int32`、`uint32`、`int64`、`uint64`、`float32`、`float64` | 当前点位的数据类型。接口会按该类型决定读取寄存器数量和转换方式。输入会被转换为小写。 |
|
|
|
| `points[].bit` | integer 或 null | 否 | `null` | `0..15` | 仅寄存器点位支持。用于从一个 16 位寄存器中取某一位并返回布尔值。功能码 `1`、`2` 不允许传 `bit`。 |
|
|
|
|
|
|
-### 点位类型和读取长度
|
|
|
+#### 点位类型和读取长度
|
|
|
|
|
|
| `type` | 读取长度 | 可用功能码 | 返回 JSON 类型 | 含义 |
|
|
|
|---|---:|---|---|---|
|
|
|
@@ -401,7 +413,7 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
| `uint64` | 4 registers | `3`、`4` | integer | 无符号 64 位整数。 |
|
|
|
| `float64` | 4 registers | `3`、`4` | number | IEEE 754 双精度浮点数。 |
|
|
|
|
|
|
-### 点位校验规则
|
|
|
+#### 点位校验规则
|
|
|
|
|
|
| 规则 | 说明 |
|
|
|
|---|---|
|
|
|
@@ -411,7 +423,7 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
| 寄存器点位可以使用 `bit` | 当 `function_code` 为 `3` 或 `4` 且 `type` 为 `bool` 时,可用 `bit` 读取寄存器指定位。 |
|
|
|
| 不允许额外字段 | 请求对象中出现未定义字段会校验失败。 |
|
|
|
|
|
|
-### 成功返回示例
|
|
|
+#### 成功返回示例
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
@@ -459,7 +471,7 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
| `data.points[].bit` | integer | 仅当请求点位传入 `bit` 时返回。 |
|
|
|
| `data.points[].value` | boolean、integer 或 number | 转换后的点位值。具体 JSON 类型由 `type` 决定。 |
|
|
|
|
|
|
-### 失败返回示例
|
|
|
+#### 失败返回示例
|
|
|
|
|
|
设备连接失败:
|
|
|
|
|
|
@@ -517,7 +529,7 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read \
|
|
|
| `data.device` | object | 如果请求已经通过基础校验,通常会回显设备参数。 |
|
|
|
| `data.points` | object[] | 失败前已成功读取的点位。字段校验失败或连接失败时通常为空数组。 |
|
|
|
|
|
|
-### 调用示例
|
|
|
+#### 调用示例
|
|
|
|
|
|
```bash
|
|
|
curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read_points \
|
|
|
@@ -549,6 +561,428 @@ curl -X POST http://127.0.0.1:8000/api/dc-gateway/modbus/read_points \
|
|
|
}'
|
|
|
```
|
|
|
|
|
|
+## S7 网关接口说明
|
|
|
+
|
|
|
+### S7 网关目标
|
|
|
+
|
|
|
+S7 网关接口通过 HTTP 连接 Siemens S7 TCP 设备,支持连接组合扫描、原始字节读取、点位读取并转换。
|
|
|
+
|
|
|
+当前 S7 接口使用 `python-snap7` 实现。返回的 `communication` 是语义化通信记录,用于说明本次连接、读取和断开过程;它不是 Wireshark 中的 `TPKT + COTP + S7Comm` 原始网络帧。
|
|
|
+
|
|
|
+### S7 通用设备字段
|
|
|
+
|
|
|
+以下字段用于 `/api/dc-gateway/s7/read` 和 `/api/dc-gateway/s7/read_points` 请求体顶层。
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 默认值 | 允许值或范围 | 含义 |
|
|
|
+|---|---|---:|---|---|---|
|
|
|
+| `device_type` | string | 否 | `S7TCP` | 只能是 `S7TCP` | 设备协议类型。 |
|
|
|
+| `ip` | string | 是 | 无 | 合法 IPv4 或 IPv6 地址 | S7 设备 IP 地址。 |
|
|
|
+| `port` | integer | 否 | `102` | `1..65535` | S7 TCP 端口,通常固定为 `102`。 |
|
|
|
+| `rock` | integer | 是 | 无 | `0..31` | PLC 机架号。字段名沿用汇采 S7 设备接口。 |
|
|
|
+| `slot` | integer | 是 | 无 | `0..31` | PLC 槽号。 |
|
|
|
+| `tsap_conn_type` | string | 否 | `PG` | `PG`、`OP`、`BASIC` | Snap7 连接类型。大小写不敏感,服务内部统一转为大写。 |
|
|
|
+
|
|
|
+连接类型映射:
|
|
|
+
|
|
|
+| `tsap_conn_type` | Snap7 值 |
|
|
|
+|---|---:|
|
|
|
+| `PG` | `0x01` |
|
|
|
+| `OP` | `0x02` |
|
|
|
+| `BASIC` | `0x03` |
|
|
|
+
|
|
|
+### S7 地址字段
|
|
|
+
|
|
|
+| 字段 | 适用位置 | 必填 | 默认值 | 允许值或范围 | 含义 |
|
|
|
+|---|---|---:|---|---|---|
|
|
|
+| `area` | `read`、`points[]` | 是 | 无 | `DB`、`M`、`I`、`Q` | 读取区域。 |
|
|
|
+| `db` | `read`、`points[]` | `area=DB` 时必填 | `0` | `>=0` | DB 块号。`area=DB` 时必须大于 `0`。 |
|
|
|
+| `start` | `read`、`points[]` | 是 | 无 | `>=0` | 起始字节偏移。 |
|
|
|
+| `size` | `read` | 是 | 无 | `1..65535` | 原始读取的字节数。 |
|
|
|
+| `type` | `points[]` | 是 | 无 | 见 S7 点位类型表 | 点位数据类型。 |
|
|
|
+| `bit` | `points[]` | 否 | `null` | `0..7` | 仅 `type=bool` 支持,用于读取指定 bit。 |
|
|
|
+
|
|
|
+区域说明:
|
|
|
+
|
|
|
+| `area` | 含义 |
|
|
|
+|---|---|
|
|
|
+| `DB` | 数据块 Data Block。 |
|
|
|
+| `M` | Merker 标志位区。 |
|
|
|
+| `I` | 输入区 Inputs。 |
|
|
|
+| `Q` | 输出区 Outputs。 |
|
|
|
+
|
|
|
+### S7 communication 格式
|
|
|
+
|
|
|
+`communication` 是字符串数组,记录连接、读取和断开过程。
|
|
|
+
|
|
|
+示例:
|
|
|
+
|
|
|
+```text
|
|
|
+Tx:S7_CONNECT ip=192.168.1.10 port=102 rock=0 slot=1 tsap_conn_type=PG
|
|
|
+Rx:S7_CONNECTED pdu_length=480
|
|
|
+Tx:S7_READ area=DB db=1 start=0 size=4
|
|
|
+Rx:11 22 33 44
|
|
|
+Tx:S7_DISCONNECT
|
|
|
+Rx:S7_DISCONNECTED
|
|
|
+```
|
|
|
+
|
|
|
+说明:
|
|
|
+
|
|
|
+| 片段 | 含义 |
|
|
|
+|---|---|
|
|
|
+| `Tx:S7_CONNECT` | 网关准备发起 S7 连接,包含 IP、端口、机架号、槽号和 TSAP 连接类型。 |
|
|
|
+| `Rx:S7_CONNECTED` | S7 连接成功,可能包含协商后的 `pdu_length`。 |
|
|
|
+| `Tx:S7_READ` | 网关准备读取指定区域、DB、起始偏移和字节数。 |
|
|
|
+| `Rx:11 22 33 44` | 读取返回的原始数据字节,十六进制大写,空格分隔。 |
|
|
|
+| `Tx:S7_DISCONNECT` | 网关准备断开连接。 |
|
|
|
+| `Rx:S7_DISCONNECTED` | 连接已断开。 |
|
|
|
+| `Rx:S7_ERROR` | 连接或读取失败,后面带错误消息。 |
|
|
|
+
|
|
|
+### 接口:原始 S7 读取
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+| 项 | 值 |
|
|
|
+|---|---|
|
|
|
+| 方法 | `POST` |
|
|
|
+| 路径 | `/api/dc-gateway/s7/read` |
|
|
|
+| 完整地址 | `http://127.0.0.1:8000/api/dc-gateway/s7/read` |
|
|
|
+| Content-Type | `application/json` |
|
|
|
+| 用途 | 向 S7 TCP 设备读取一段地址数据,只返回语义化 `communication` 和原始十六进制字节,不返回解析后的业务值。 |
|
|
|
+
|
|
|
+#### 请求体结构
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG",
|
|
|
+ "read": {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 0,
|
|
|
+ "size": 4
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+顶层字段说明见“S7 通用设备字段”。`read` 字段说明见“S7 地址字段”。
|
|
|
+
|
|
|
+#### 成功返回示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 0,
|
|
|
+ "msg": "success",
|
|
|
+ "data": {
|
|
|
+ "device": {
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG"
|
|
|
+ },
|
|
|
+ "communication": [
|
|
|
+ "Tx:S7_CONNECT ip=192.168.1.10 port=102 rock=0 slot=1 tsap_conn_type=PG",
|
|
|
+ "Rx:S7_CONNECTED pdu_length=480",
|
|
|
+ "Tx:S7_READ area=DB db=1 start=0 size=4",
|
|
|
+ "Rx:11 22 33 44",
|
|
|
+ "Tx:S7_DISCONNECT",
|
|
|
+ "Rx:S7_DISCONNECTED"
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 失败返回示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 1,
|
|
|
+ "msg": "TCP : Unreachable peer",
|
|
|
+ "data": {
|
|
|
+ "device": {
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG"
|
|
|
+ },
|
|
|
+ "communication": [
|
|
|
+ "Tx:S7_CONNECT ip=192.168.1.10 port=102 rock=0 slot=1 tsap_conn_type=PG",
|
|
|
+ "Rx:S7_ERROR message=TCP : Unreachable peer"
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 调用示例
|
|
|
+
|
|
|
+```bash
|
|
|
+curl -X POST http://127.0.0.1:8000/api/dc-gateway/s7/read \
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
+ -d '{
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG",
|
|
|
+ "read": {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 0,
|
|
|
+ "size": 4
|
|
|
+ }
|
|
|
+ }'
|
|
|
+```
|
|
|
+
|
|
|
+### 接口:S7 点位读取并转换
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+| 项 | 值 |
|
|
|
+|---|---|
|
|
|
+| 方法 | `POST` |
|
|
|
+| 路径 | `/api/dc-gateway/s7/read_points` |
|
|
|
+| 完整地址 | `http://127.0.0.1:8000/api/dc-gateway/s7/read_points` |
|
|
|
+| Content-Type | `application/json` |
|
|
|
+| 用途 | 按点位定义逐个读取 S7 数据,并把原始字节转换为 `bool`、`int16`、`float32` 等业务值。 |
|
|
|
+
|
|
|
+#### 请求体结构
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG",
|
|
|
+ "points": [
|
|
|
+ {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 0,
|
|
|
+ "type": "float32"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 4,
|
|
|
+ "type": "bool",
|
|
|
+ "bit": 0
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+顶层字段说明见“S7 通用设备字段”。`points[]` 字段说明见“S7 地址字段”。
|
|
|
+
|
|
|
+#### 支持的数据类型
|
|
|
+
|
|
|
+| `type` | 读取长度 | 返回 JSON 类型 | 含义 |
|
|
|
+|---|---:|---|---|
|
|
|
+| `bool` | 1 byte | boolean | 布尔值。传 `bit` 时读取指定 bit;不传 `bit` 时整个字节非 0 为 `true`。 |
|
|
|
+| `byte` | 1 byte | integer | 无符号 8 位整数。 |
|
|
|
+| `int8` | 1 byte | integer | 有符号 8 位整数。 |
|
|
|
+| `int16` | 2 bytes | integer | 有符号 16 位整数。 |
|
|
|
+| `uint16` | 2 bytes | integer | 无符号 16 位整数。 |
|
|
|
+| `int32` | 4 bytes | integer | 有符号 32 位整数。 |
|
|
|
+| `uint32` | 4 bytes | integer | 无符号 32 位整数。 |
|
|
|
+| `float32` | 4 bytes | number | IEEE 754 单精度浮点数。 |
|
|
|
+| `int64` | 8 bytes | integer | 有符号 64 位整数。 |
|
|
|
+| `uint64` | 8 bytes | integer | 无符号 64 位整数。 |
|
|
|
+| `float64` | 8 bytes | number | IEEE 754 双精度浮点数。 |
|
|
|
+
|
|
|
+S7 多字节数值按大端字节序解析。
|
|
|
+
|
|
|
+#### 点位校验规则
|
|
|
+
|
|
|
+| 规则 | 说明 |
|
|
|
+|---|---|
|
|
|
+| `area` 必须合法 | 只能是 `DB`、`M`、`I`、`Q`,输入会转为大写。 |
|
|
|
+| DB 区必须传有效 DB 号 | 当 `area=DB` 时,`db` 必须大于 `0`。 |
|
|
|
+| `type` 必须合法 | 只能使用上表列出的 S7 网关点位类型。 |
|
|
|
+| `bit` 只支持布尔点 | `type=bool` 时可传 `bit`,非布尔点传 `bit` 会校验失败。 |
|
|
|
+| 不允许额外字段 | 请求对象中出现未定义字段会校验失败。 |
|
|
|
+
|
|
|
+#### 成功返回示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 0,
|
|
|
+ "msg": "success",
|
|
|
+ "data": {
|
|
|
+ "device": {
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG"
|
|
|
+ },
|
|
|
+ "points": [
|
|
|
+ {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 0,
|
|
|
+ "type": "float32",
|
|
|
+ "value": 12.34
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 4,
|
|
|
+ "type": "bool",
|
|
|
+ "value": true,
|
|
|
+ "bit": 0
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+成功返回字段说明:
|
|
|
+
|
|
|
+| 字段 | 类型 | 含义 |
|
|
|
+|---|---|---|
|
|
|
+| `code` | integer | `0` 表示所有点位读取和转换成功。 |
|
|
|
+| `msg` | string | 成功时为 `success`。 |
|
|
|
+| `data.device` | object | 本次请求实际使用的设备连接参数。 |
|
|
|
+| `data.points` | object[] | 点位读取结果数组,顺序与请求体 `points` 一致。 |
|
|
|
+| `data.points[].area` | string | 点位读取区域。 |
|
|
|
+| `data.points[].db` | integer | DB 块号;非 DB 区通常为 `0`。 |
|
|
|
+| `data.points[].start` | integer | 起始字节偏移。 |
|
|
|
+| `data.points[].type` | string | 点位类型,返回为小写。 |
|
|
|
+| `data.points[].bit` | integer | 仅当请求点位传入 `bit` 时返回。 |
|
|
|
+| `data.points[].value` | boolean、integer 或 number | 转换后的点位值。具体 JSON 类型由 `type` 决定。 |
|
|
|
+
|
|
|
+#### 失败返回说明
|
|
|
+
|
|
|
+失败时 `code=1`,`msg` 为连接失败、读取失败或字段校验错误原因。若读取部分点位后失败,`data.points` 中会保留失败前已成功读取的点位,`data.communication` 中会包含失败前的语义化记录。
|
|
|
+
|
|
|
+#### 调用示例
|
|
|
+
|
|
|
+```bash
|
|
|
+curl -X POST http://127.0.0.1:8000/api/dc-gateway/s7/read_points \
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
+ -d '{
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG",
|
|
|
+ "points": [
|
|
|
+ {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 0,
|
|
|
+ "type": "float32"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "area": "DB",
|
|
|
+ "db": 1,
|
|
|
+ "start": 4,
|
|
|
+ "type": "bool",
|
|
|
+ "bit": 0
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }'
|
|
|
+```
|
|
|
+
|
|
|
+### 接口:S7 连接扫描
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+| 项 | 值 |
|
|
|
+|---|---|
|
|
|
+| 方法 | `POST` |
|
|
|
+| 路径 | `/api/dc-gateway/s7/connect_scan` |
|
|
|
+| 完整地址 | `http://127.0.0.1:8000/api/dc-gateway/s7/connect_scan` |
|
|
|
+| Content-Type | `application/json` |
|
|
|
+| 用途 | 只传设备 IP,扫描可连接成功的 `rock`、`slot`、`tsap_conn_type` 组合。 |
|
|
|
+
|
|
|
+#### 请求体结构
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "ip": "192.168.1.10"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+端口固定使用 S7 TCP 默认端口 `102`。
|
|
|
+
|
|
|
+#### 扫描范围
|
|
|
+
|
|
|
+| 字段 | 扫描值 |
|
|
|
+|---|---|
|
|
|
+| `rock` | `0`、`1`、`2` |
|
|
|
+| `slot` | `0`、`1`、`2` |
|
|
|
+| `tsap_conn_type` | `PG`、`OP`、`BASIC` |
|
|
|
+
|
|
|
+总计扫描 `27` 种组合。接口只返回可以连接成功的组合。
|
|
|
+
|
|
|
+#### 成功返回示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 0,
|
|
|
+ "msg": "success",
|
|
|
+ "data": {
|
|
|
+ "device": {
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102
|
|
|
+ },
|
|
|
+ "available": [
|
|
|
+ {
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "OP"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+如果没有任何组合可连接,`available` 为空数组:
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 0,
|
|
|
+ "msg": "success",
|
|
|
+ "data": {
|
|
|
+ "device": {
|
|
|
+ "device_type": "S7TCP",
|
|
|
+ "ip": "192.168.1.10",
|
|
|
+ "port": 102
|
|
|
+ },
|
|
|
+ "available": []
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 调用示例
|
|
|
+
|
|
|
+```bash
|
|
|
+curl -X POST http://127.0.0.1:8000/api/dc-gateway/s7/connect_scan \
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
+ -d '{
|
|
|
+ "ip": "192.168.1.10"
|
|
|
+ }'
|
|
|
+```
|
|
|
+
|
|
|
## AI 调用决策指南
|
|
|
|
|
|
AI 或自动化程序选择接口时遵循以下规则:
|
|
|
@@ -558,6 +992,9 @@ AI 或自动化程序选择接口时遵循以下规则:
|
|
|
| 只想检查网关是否启动 | `GET /api/dc-gateway/health` | 不访问 Modbus 设备,只检查 HTTP 服务。 |
|
|
|
| 需要查看原始 Modbus Tx/Rx 报文 | `POST /api/dc-gateway/modbus/read` | 返回 `communication`,适合调试通信、对比 Modbus Poll 报文。 |
|
|
|
| 需要得到点位业务值 | `POST /api/dc-gateway/modbus/read_points` | 返回 `points[].value`,自动按类型转换。 |
|
|
|
+| 需要查看 S7 语义化连接和原始字节 | `POST /api/dc-gateway/s7/read` | 返回 S7 连接、读取、断开的 `communication`,不解析为业务值。 |
|
|
|
+| 需要得到 S7 点位业务值 | `POST /api/dc-gateway/s7/read_points` | 返回 `points[].value`,自动按 S7 类型转换。 |
|
|
|
+| 不确定 S7 连接参数 | `POST /api/dc-gateway/s7/connect_scan` | 扫描可用的 `rock`、`slot`、`tsap_conn_type` 组合。 |
|
|
|
|
|
|
AI 构造请求时必须区分两个地址:
|
|
|
|
|
|
@@ -565,6 +1002,7 @@ AI 构造请求时必须区分两个地址:
|
|
|
|---|---|---|
|
|
|
| 网关服务器地址 | `http://127.0.0.1:8000` | HTTP API 服务地址,用于拼接请求 URL。 |
|
|
|
| Modbus 设备地址 | 请求体 `ip` 和 `port` | 实际被读取的 Modbus TCP 设备地址。 |
|
|
|
+| S7 设备地址 | 请求体 `ip`、`port`、`rock`、`slot`、`tsap_conn_type` | 实际被读取的 S7 TCP 设备连接参数。 |
|
|
|
|
|
|
AI 构造 `/modbus/read_points` 点位时应按以下步骤:
|
|
|
|
|
|
@@ -575,6 +1013,15 @@ AI 构造 `/modbus/read_points` 点位时应按以下步骤:
|
|
|
5. 如果读取保持寄存器或输入寄存器中的某一位,设置 `type` 为 `bool` 并填写 `bit`。
|
|
|
6. 发送请求后检查响应体 `code`,不要只检查 HTTP 状态码。
|
|
|
|
|
|
+AI 构造 `/s7/read_points` 点位时应按以下步骤:
|
|
|
+
|
|
|
+1. 如果不确定 S7 连接参数,先调用 `/s7/connect_scan` 获取可用的 `rock`、`slot`、`tsap_conn_type`。
|
|
|
+2. 根据设备点表选择 `area`,DB 区传 `area=DB` 且填写大于 `0` 的 `db`。
|
|
|
+3. 将 S7 地址换算为字节偏移,填入 `start`。
|
|
|
+4. 根据点位数据类型设置 `type`,S7 网关类型与汇采 S7 点位类型不完全一致:网关 8 位无符号类型为 `byte`,汇采创建点位常用 `uint8`。
|
|
|
+5. 如果读取布尔位,设置 `type=bool` 并填写 `bit=0..7`;非布尔点不要传 `bit`。
|
|
|
+6. 发送请求后检查响应体 `code`,不要只检查 HTTP 状态码。
|
|
|
+
|
|
|
|
|
|
|
|
|
# 2. 模方登录接口
|
|
|
@@ -1200,6 +1647,365 @@ http://192.168.75.110:32080
|
|
|
| 同一设备下 `point_id` 重复 | `{"state":2,"state_info":"point_id 重复, point_id: {point_id}"}` |
|
|
|
| 数据库更新失败 | `{"state":2,"state_info":"编辑失败"}` |
|
|
|
|
|
|
+## S7 创建设备与创建点位接口文档
|
|
|
+
|
|
|
+### 枚举汇总
|
|
|
+
|
|
|
+- S7 设备类型 `device_type`
|
|
|
+
|
|
|
+| 值 | 含义 |
|
|
|
+|---:|---|
|
|
|
+| `1` | S7-1200 |
|
|
|
+| `2` | S7-1500 |
|
|
|
+| `3` | S7 Smart 200 |
|
|
|
+
|
|
|
+- S7 TSAP 连接类型 `tsap_conn_type`
|
|
|
+
|
|
|
+| 值 | 含义 |
|
|
|
+|---|---|
|
|
|
+| `PG` | PG 连接,未识别值在底层连接库中也会按 PG 处理。 |
|
|
|
+| `OP` | OP 连接。 |
|
|
|
+| `BASIC` | Basic 连接。 |
|
|
|
+
|
|
|
+- S7 点位寄存器区域 `register_type`
|
|
|
+
|
|
|
+| 值 | 区域 | 含义 |
|
|
|
+|---:|---|---|
|
|
|
+| `1` | `I` | 输入区。 |
|
|
|
+| `2` | `Q` | 输出区。 |
|
|
|
+| `3` | `M` | 位存储区。 |
|
|
|
+| `4` | `DB` | 数据块区。 |
|
|
|
+| `5` | `V` | V 区,底层按 DB1 访问。 |
|
|
|
+| `6` | `AI` | 模拟输入区。 |
|
|
|
+
|
|
|
+- S7 点位数据类型 `data_type`
|
|
|
+
|
|
|
+| 值 | 含义 | 读取字节数 |
|
|
|
+|---|---|---:|
|
|
|
+| `bool` | 布尔值 | 1 |
|
|
|
+| `uint8` | 8 位无符号整数 | 1 |
|
|
|
+| `int8` | 8 位有符号整数 | 1 |
|
|
|
+| `uint16` | 16 位无符号整数 | 2 |
|
|
|
+| `int16` | 16 位有符号整数 | 2 |
|
|
|
+| `uint32` | 32 位无符号整数 | 4 |
|
|
|
+| `int32` | 32 位有符号整数 | 4 |
|
|
|
+| `float32` | 32 位浮点数 | 4 |
|
|
|
+| `float64` | 64 位浮点数 | 8 |
|
|
|
+
|
|
|
+### S7 地址格式
|
|
|
+
|
|
|
+S7 点位 `address` 是字符串,不是纯数字。采集时会按 `register_type` 和 `data_type` 解析:
|
|
|
+
|
|
|
+| 区域 | 非 bool 地址格式 | bool 地址格式 | 示例 |
|
|
|
+|---|---|---|---|
|
|
|
+| `I`、`Q`、`M` | `byte` | `byte.bit` | `10`、`10.2` |
|
|
|
+| `DB` | `db.byte` | `db.byte.bit` | `1.10`、`1.10.2` |
|
|
|
+| `V` | `byte` | `byte.bit` | `10`、`10.2` |
|
|
|
+| `AI` | `byte` | 不建议使用 bool | `10` |
|
|
|
+
|
|
|
+`bool` 点位位下标范围为 `0..7`。DB 区必须包含 DB 号;例如 DB1 的第 10 字节第 2 位写为 `1.10.2`。
|
|
|
+
|
|
|
+### 1. 创建 S7 设备
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+- URL:`/api/collector/device`
|
|
|
+- 方法:`POST`
|
|
|
+- 处理函数:`AddS7Device`
|
|
|
+- 请求结构:`ReqAddS7Device`
|
|
|
+
|
|
|
+说明:S7 创建设备在 MCP 中与 Modbus 创建设备共用 `/api/collector/device` 地址,但请求体固定带 `type=s7`,其余字段仍使用 S7 入参。
|
|
|
+
|
|
|
+#### 请求字段
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 默认/行为 | 含义 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| `type` | string | MCP 自动补齐 | 固定为 `s7` | 协议类型,用于在共用创建设备接口中区分 S7 设备。 |
|
|
|
+| `name` | string | 是 | 会 `strings.TrimSpace`;trim 后为空返回 `名称不能为空` | 设备名称。 |
|
|
|
+| `ip` | string | 是 | 会 `strings.TrimSpace`;为空返回 `IP地址不能为空` | S7 PLC IP 地址。 |
|
|
|
+| `port` | int | 建议传 | 保存到设备配置;底层 gos7 连接实际使用 `ip` 中端口或默认 `102` | 端口,常用 `102`。 |
|
|
|
+| `device_type` | int | 建议传 | 缺失时为 `0` | S7 设备类型,见枚举。 |
|
|
|
+| `rock` | int/null | 是 | nil 返回 `轨道号或槽号不能为空` | 机架号。字段名沿用实现中的 `rock`。常见 S7-1200/1500 为 `0`。 |
|
|
|
+| `slot` | int/null | 是 | nil 返回 `轨道号或槽号不能为空` | 槽号。常见 S7-1200/1500 为 `1`。 |
|
|
|
+| `tsap_conn_type` | string | 否 | 底层未识别值按 PG 处理 | TSAP 连接类型,可传 `PG`、`OP`、`BASIC`。 |
|
|
|
+| `is_persistent` | bool | 否 | Go 零值 `false` | 是否持久化写入点位数据。 |
|
|
|
+| `device_group_id` | int | 否 | Go 零值 `0` | 父设备分组 ID。`0` 表示顶层设备。 |
|
|
|
+| `timeout` | int | 否 | 创建接口请求结构包含该字段,但当前创建逻辑未写入内部配置 | 超时时间,单位秒。 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "type": "s7",
|
|
|
+ "name": "s7_1200_1",
|
|
|
+ "ip": "127.0.0.1",
|
|
|
+ "port": 102,
|
|
|
+ "device_type": 1,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG",
|
|
|
+ "is_persistent": true,
|
|
|
+ "device_group_id": 0,
|
|
|
+ "timeout": 3
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 成功响应
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "state": 0,
|
|
|
+ "state_info": "成功"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 主要失败响应
|
|
|
+
|
|
|
+| 场景 | 响应 |
|
|
|
+|---|---|
|
|
|
+| JSON 绑定失败、`name` 缺失等 | `{"state":2,"state_info":"无效参数"}` |
|
|
|
+| `ip` 为空 | `{"state":2,"state_info":"IP地址不能为空"}` |
|
|
|
+| `rock` 或 `slot` 为 null/缺失 | `{"state":2,"state_info":"轨道号或槽号不能为空"}` |
|
|
|
+| `name` trim 后为空 | `{"state":2,"state_info":"名称不能为空"}` |
|
|
|
+| 名称或 IP 已存在 | `{"state":101,"state_info":"名称或IP已被占用"}` |
|
|
|
+| 数据库插入失败 | `{"state":2,"state_info":"新增失败"}` |
|
|
|
+
|
|
|
+### 2. 编辑 S7 设备
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+- URL:`/api/collector/s7/device/update`
|
|
|
+- 方法:`POST`
|
|
|
+- 处理函数:`UpdateS7Device`
|
|
|
+- 请求结构:`ReqUpdateS7Device`
|
|
|
+
|
|
|
+#### 重要说明
|
|
|
+
|
|
|
+- 该接口是全量更新语义,未传字段会按 Go 零值写入,例如 `port=0`、`is_persistent=false`、`alarm_interval=0`、`collect_interval=0`。
|
|
|
+- 编辑前设备不能处于已连接或采集状态。若状态不允许编辑,会返回设备需先停止相关错误。
|
|
|
+- 编辑成功后会同步更新内存设备对象和数据库配置。
|
|
|
+
|
|
|
+#### 请求字段
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 默认/行为 | 含义 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| `id` | int | 是 | 绑定时必填 | 要编辑的 S7 设备 ID。 |
|
|
|
+| `name` | string | 是 | 保存前 trim;为空返回 `名称不能为空` | 设备名称。 |
|
|
|
+| `ip` | string | 是 | trim 后为空返回 `IP地址不能为空` | S7 PLC IP 地址。 |
|
|
|
+| `port` | int | 建议传 | 缺失时写入 `0` | 设备端口,常用 `102`。 |
|
|
|
+| `device_type` | int | 建议传 | 缺失时写入 `0` | S7 设备类型。 |
|
|
|
+| `rock` | int/null | 是 | nil 返回 `轨道号或槽号不能为空` | 机架号。 |
|
|
|
+| `slot` | int/null | 是 | nil 返回 `轨道号或槽号不能为空` | 槽号。 |
|
|
|
+| `tsap_conn_type` | string | 否 | 空字符串会保存,底层连接按 PG 默认处理 | TSAP 连接类型。 |
|
|
|
+| `is_persistent` | bool | 否 | 缺失时写入 `false` | 是否持久化。 |
|
|
|
+| `device_group_id` | int | 否 | 缺失时写入 `0` | 父设备分组 ID。 |
|
|
|
+| `alarm_interval` | int | 否 | 缺失时写入 `0` | 告警间隔。 |
|
|
|
+| `collect_interval` | int | 否 | 缺失时写入 `0` | 采集周期。 |
|
|
|
+| `timeout` | int | 否 | 缺失时写入 `0` | 超时时间,单位秒。 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "id": 1,
|
|
|
+ "name": "s7_1200_1_edited",
|
|
|
+ "ip": "127.0.0.1",
|
|
|
+ "port": 102,
|
|
|
+ "device_type": 1,
|
|
|
+ "rock": 0,
|
|
|
+ "slot": 1,
|
|
|
+ "tsap_conn_type": "PG",
|
|
|
+ "is_persistent": true,
|
|
|
+ "device_group_id": 0,
|
|
|
+ "alarm_interval": 90,
|
|
|
+ "collect_interval": 5,
|
|
|
+ "timeout": 3
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 成功响应
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "state": 0,
|
|
|
+ "state_info": "成功"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 主要失败响应
|
|
|
+
|
|
|
+| 场景 | 响应 |
|
|
|
+|---|---|
|
|
|
+| JSON 绑定失败、`id` 缺失等 | `{"state":2,"state_info":"无效参数"}` |
|
|
|
+| `ip` 为空 | `{"state":2,"state_info":"IP地址不能为空"}` |
|
|
|
+| `rock` 或 `slot` 为 null/缺失 | `{"state":2,"state_info":"轨道号或槽号不能为空"}` |
|
|
|
+| `name` trim 后为空 | `{"state":2,"state_info":"名称不能为空"}` |
|
|
|
+| 设备不存在或数据库查询失败 | 通常返回设备不存在或未知错误响应 |
|
|
|
+| 设备名称已存在 | `{"state":2,"state_info":"设备名称已存在"}` |
|
|
|
+| 数据库更新失败 | `{"state":2,"state_info":"编辑失败"}` |
|
|
|
+
|
|
|
+### 3. 创建 S7 采集点位
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+- URL:`/api/collector/s7/point/add`
|
|
|
+- 方法:`POST`
|
|
|
+- 处理函数:`AddS7CollectPoint`
|
|
|
+- 请求结构:`ReqAddS7CollectPoint`
|
|
|
+
|
|
|
+#### 请求字段
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 默认/行为 | 含义 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| `device_id` | int | 是 | 缺失时通常因找不到设备返回 `检测设备ID失败` | 所属 S7 设备 ID。 |
|
|
|
+| `name` | string | 是 | trim 后为空返回 `名称不能为空` | 点位名称。 |
|
|
|
+| `point_id` | string | 否 | 空字符串允许 | 外部点位标识。非空时,同一设备下不能重复。 |
|
|
|
+| `register_type` | int | 是 | 缺失时为 `0`,后续采集校验会失败 | S7 寄存器区域,见枚举。 |
|
|
|
+| `data_type` | string | 是 | 无显式默认值,后续采集校验会检查合法性 | S7 数据类型,见枚举。 |
|
|
|
+| `address` | string | 是 | binding 必填 | S7 地址字符串,见地址格式。 |
|
|
|
+| `scale_ratio` | float64 | 否 | Go 零值 `0`,采集/写值时缩放系数为 0 会导致异常;建议传 `1` | 缩放系数。 |
|
|
|
+| `value_offset` | float64 | 否 | Go 零值 `0` | 值偏移。 |
|
|
|
+| `describe` | string | 否 | 空字符串 | 点位描述。 |
|
|
|
+| `group_Id` | int | 否 | Go 零值 `0` | 点位分组 ID。注意当前请求 JSON 字段名是 `group_Id`。 |
|
|
|
+| `invalid_values` | string | 否 | 空字符串解析为空数组 | 无效值列表,逗号分隔。 |
|
|
|
+| `valid_range_start` | number/null | 否 | `null` | 合法范围最小值。 |
|
|
|
+| `valid_range_end` | number/null | 否 | `null` | 合法范围最大值。 |
|
|
|
+
|
|
|
+#### 请求示例:DB 区 float32
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "device_id": 1,
|
|
|
+ "name": "db1_real_10",
|
|
|
+ "point_id": "DB1_REAL_10",
|
|
|
+ "register_type": 4,
|
|
|
+ "data_type": "float32",
|
|
|
+ "address": "1.10",
|
|
|
+ "scale_ratio": 1,
|
|
|
+ "value_offset": 0,
|
|
|
+ "describe": "DB1.DBD10 real 示例",
|
|
|
+ "group_Id": 0,
|
|
|
+ "invalid_values": "",
|
|
|
+ "valid_range_start": null,
|
|
|
+ "valid_range_end": null
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 请求示例:M 区 bool
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "device_id": 1,
|
|
|
+ "name": "m10_2",
|
|
|
+ "point_id": "M10_2",
|
|
|
+ "register_type": 3,
|
|
|
+ "data_type": "bool",
|
|
|
+ "address": "10.2",
|
|
|
+ "scale_ratio": 1,
|
|
|
+ "value_offset": 0,
|
|
|
+ "group_Id": 0,
|
|
|
+ "invalid_values": "",
|
|
|
+ "valid_range_start": null,
|
|
|
+ "valid_range_end": null
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 成功响应
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "state": 0,
|
|
|
+ "state_info": "成功"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 主要失败响应
|
|
|
+
|
|
|
+| 场景 | 响应 |
|
|
|
+|---|---|
|
|
|
+| JSON 绑定失败、`address` 缺失等 | `{"state":2,"state_info":"无效参数"}` |
|
|
|
+| `invalid_values` 中存在非数字项 | `{"state":2,"state_info":"无效参数"}` |
|
|
|
+| `name` trim 后为空 | `{"state":2,"state_info":"名称不能为空"}` |
|
|
|
+| 设备不存在或不在内存中 | `{"state":2,"state_info":"检测设备ID失败"}` |
|
|
|
+| 同一设备下 `point_id` 重复 | `{"state":2,"state_info":"point_id 重复, point_id: {point_id}"}` |
|
|
|
+| 数据库插入失败 | `{"state":2,"state_info":"新增失败"}` |
|
|
|
+
|
|
|
+### 4. 编辑 S7 采集点位
|
|
|
+
|
|
|
+#### 基本信息
|
|
|
+
|
|
|
+- URL:`/api/collector/s7/point/update`
|
|
|
+- 方法:`POST`
|
|
|
+- 处理函数:`s7PointEdit`
|
|
|
+- 请求结构:`ReqUpdateS7Point`
|
|
|
+
|
|
|
+#### 重要说明
|
|
|
+
|
|
|
+- 该接口是全量更新语义,除 `id` 外的点位配置应按完整点位对象提交。
|
|
|
+- `id` 是要编辑的采集点位内部 ID,对应查询设备点位列表返回的 `data.point[].id`。
|
|
|
+- 请求结构包含 `device_id`,编辑逻辑不会迁移点位所属设备,但会用请求中的 `device_id` 做重复 `point_id` 校验并刷新内存点位,因此应传原所属设备 ID。
|
|
|
+
|
|
|
+#### 请求字段
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 默认/行为 | 含义 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| `id` | int | 是 | binding 必填 | 要编辑的原采集点位 ID。 |
|
|
|
+| `device_id` | int | 建议必填 | 缺失时可能导致重复校验和内存刷新异常 | 所属 S7 设备 ID。 |
|
|
|
+| `name` | string | 是 | trim 后为空返回 `名称不能为空` | 点位名称。 |
|
|
|
+| `point_id` | string | 否 | 空字符串允许 | 外部点位标识。 |
|
|
|
+| `register_type` | int | 是 | 缺失时写入 `0` | S7 寄存器区域。 |
|
|
|
+| `data_type` | string | 是 | 缺失时写入空字符串 | S7 数据类型。 |
|
|
|
+| `address` | string | 是 | 缺失时绑定失败 | S7 地址字符串。 |
|
|
|
+| `scale_ratio` | float64 | 否 | 缺失时写入 `0`,建议传 `1` | 缩放系数。 |
|
|
|
+| `value_offset` | float64 | 否 | 缺失时写入 `0` | 值偏移。 |
|
|
|
+| `describe` | string | 否 | 空字符串 | 点位描述。 |
|
|
|
+| `group_Id` | int | 否 | 缺失时写入 `0` | 点位分组 ID。 |
|
|
|
+| `invalid_values` | string | 否 | 空字符串解析为空数组 | 无效值列表。 |
|
|
|
+| `valid_range_start` | number/null | 否 | `null` | 合法范围最小值。 |
|
|
|
+| `valid_range_end` | number/null | 否 | `null` | 合法范围最大值。 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "id": 101,
|
|
|
+ "device_id": 1,
|
|
|
+ "name": "db1_real_10_edited",
|
|
|
+ "point_id": "DB1_REAL_10_EDITED",
|
|
|
+ "register_type": 4,
|
|
|
+ "data_type": "float32",
|
|
|
+ "address": "1.10",
|
|
|
+ "scale_ratio": 1,
|
|
|
+ "value_offset": 0,
|
|
|
+ "describe": "编辑后的 DB1.DBD10 real 示例",
|
|
|
+ "group_Id": 0,
|
|
|
+ "invalid_values": "",
|
|
|
+ "valid_range_start": null,
|
|
|
+ "valid_range_end": null
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 成功响应
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "state": 0,
|
|
|
+ "state_info": "成功"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 主要失败响应
|
|
|
+
|
|
|
+| 场景 | 响应 |
|
|
|
+|---|---|
|
|
|
+| JSON 绑定失败、`id` 缺失、`address` 缺失等 | `{"state":2,"state_info":"无效参数"}` |
|
|
|
+| `invalid_values` 中存在非数字项 | `{"state":2,"state_info":"无效参数"}` |
|
|
|
+| `name` trim 后为空 | `{"state":2,"state_info":"名称不能为空"}` |
|
|
|
+| 原点位查询失败 | `{"state":2,"state_info":"查询点位失败"}` |
|
|
|
+| 原点位不存在 | `{"state":2,"state_info":"当前设备不存在该点位"}` |
|
|
|
+| 同一设备下 `point_id` 重复 | `{"state":2,"state_info":"point_id 重复, point_id: {point_id}"}` |
|
|
|
+| 数据库更新失败 | `{"state":2,"state_info":"点位更新失败"}` |
|
|
|
+
|
|
|
## 连接/断开设备接口
|
|
|
|
|
|
### 基本信息
|