前面几篇讲的都是怎么在 EdgeLink Studio 里配置网关。但实际项目中,你不可能每次想看个数据值都打开 Studio、连上网关、进入在线监控——太慢了,也不现实。
EdgeLink 网关还提供了一套 RESTful API,通过 HTTP 请求就能读写 Tag 值、获取设备状态。再配合 VPN 远程访问和端口转发,坐在办公室就能管理千里之外的设备。
这篇把 RESTful API 调用、远程运维方案和云平台对接三块内容一次讲完。
一、RESTful API 概览
研华的 iRTU 系列网关(ADAM-3600、ECU-1000 系列)搭载 EdgeLink 软件,内置 RESTful API 接口。它基于标准的 HTTP 协议,由 URL、HTTP Method 和 Content 三部分组成。
基本信息速览
| 项目 | 说明 |
|---|---|
| 基础 URL | https://<网关IP>/ |
| 协议 | HTTPS(使用自签名证书) |
| 数据格式 | JSON |
| 认证方式 | Cookie-based Session(登录后获取 ADAMSID) |
| 默认端口 | 443(HTTPS) |
⚠️ HTTPS 证书说明:网关使用自签名 SSL 证书,调用 API 时需要忽略证书验证。在 Postman 中关闭”SSL certificate verification”,在 curl 中加
-k参数,在代码中设置verify=False。
支持的 HTTP 方法
| 方法 | 用途 |
|---|---|
| PUT | 登录、修改 Tag 值 |
| GET | 获取 Tag 信息 |
🔧 注意:EdgeLink 的 API 设计比较特殊——登录用的是 PUT 而不是 POST。这是研华的实现方式,不要按常规 RESTful 惯例来。
二、API 调用流程
完整的 API 调用分三步:登录获取 Session → 获取 Tag 信息 → 修改 Tag 值。
2.1 第一步:登录获取 Session ID
请求:
PUT https://192.168.1.99/sys/log_in/
Headers:
Content-Type: application/json
Referer: https://192.168.1.99/
Body:
json
{
"password": "00000000"
}
⚠️ 注意:Referer Header 是必填项,不填会导致登录失败。值就是网关的 URL 地址。密码
00000000是网关的出厂默认密码,生产环境中务必修改。
响应:
服务器返回的响应 Headers 中会包含 Set-Cookie: ADAMSID=<session_id>。这个 session_id 就是后续所有 API 调用的认证凭证。
curl 示例:
bash
# 登录并保存 Cookie
curl -k -X PUT \
-H "Content-Type: application/json" \
-H "Referer: https://192.168.1.99/" \
-d '{"password":"00000000"}' \
-c cookies.txt \
https://192.168.1.99/sys/log_in/
🔧 调试技巧:如果用 Postman 等工具测试,第一步发送请求后,从响应 Headers 中复制
Set-Cookie的值(ADAMSID=xxx),在后续请求的 Header 中添加Cookie: ADAMSID=xxx。
2.2 第二步:获取 Tag 信息
请求:
GET https://192.168.1.99/data/tags/
Headers:
Cookie: ADAMSID=<上一步获取的session_id>
Body:无(GET 请求不需要 Body)
curl 示例:
bash
# 使用上一步保存的 Cookie 获取 Tag 信息
curl -k -X GET \
-b cookies.txt \
https://192.168.1.99/data/tags/
响应(简化示例):
json
{
"tags": [
{
"name": "temperature",
"value": 25.6,
"quality": 0,
"timestamp": "2024-06-15T10:30:00+0800"
},
{
"name": "pressure",
"value": 101.3,
"quality": 0,
"timestamp": "2024-06-15T10:30:00+0800"
}
]
}
| 响应字段 | 说明 |
|---|---|
name | Tag 名称 |
value | 当前值 |
quality | 质量值(0 = Good,非 0 = 异常) |
timestamp | 数据时间戳 |
2.3 第三步:修改 Tag 值
通过 API 可以远程修改 Tag 值,实现反向控制。
方式一:修改单个 Tag 值
PUT https://192.168.1.99/data/tags/<Tag名称>/value/
Headers:
Cookie: ADAMSID=<session_id>
Content-Type: application/json
Body:
json
{
"value": 100
}
curl 示例:
bash
curl -k -X PUT \
-b cookies.txt \
-H "Content-Type: application/json" \
-d '{"value": 100}' \
https://192.168.1.99/data/tags/temperature/value/
方式二:批量修改 Tag 设置
PUT https://192.168.1.99/data/tags/
Body(修改输出精度等设置):
json
{
"digits": 4
}
2.4 完整 Python 调用示例
python
import requests
import urllib3
# 禁用 SSL 警告(网关使用自签名证书)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
GATEWAY_IP = "192.168.1.99"
PASSWORD = "00000000"
BASE_URL = f"https://{GATEWAY_IP}"
session = requests.Session()
session.verify = False # 忽略 SSL 证书验证
# 第一步:登录
login_response = session.put(
f"{BASE_URL}/sys/log_in/",
json={"password": PASSWORD},
headers={"Referer": BASE_URL + "/"}
)
if login_response.status_code == 200:
print("登录成功")
# Session 会自动保存 Cookie,无需手动处理
# 第二步:获取所有 Tag 信息
tags_response = session.get(f"{BASE_URL}/data/tags/")
if tags_response.status_code == 200:
tags = tags_response.json()
print(f"共获取到 {len(tags.get('tags', []))} 个 Tag")
for tag in tags.get("tags", []):
print(f" {tag['name']}: {tag['value']} (quality: {tag['quality']})")
# 第三步:修改 Tag 值(示例)
tag_name = "temperature"
new_value = 50.0
set_response = session.put(
f"{BASE_URL}/data/tags/{tag_name}/value/",
json={"value": new_value}
)
if set_response.status_code == 200:
print(f"已将 {tag_name} 的值设置为 {new_value}")
else:
print(f"设置失败: {set_response.status_code} - {set_response.text}")
else:
print(f"登录失败: {login_response.status_code}")
⚠️ 安全提醒:
- 生产环境中务必修改默认密码
00000000- API 使用 HTTPS 但证书是自签名的,确保只在内网或 VPN 通道中使用
- 修改 Tag 值会直接影响现场设备控制,操作前确认 Tag 的作用和影响范围
- 建议在 API 调用中加入异常处理和重试机制
三、远程运维方案
RESTful API 解决了”读写 Tag 值”的问题,但如果你需要远程访问网关背后的 PLC(比如远程下载 PLC 程序),光有 API 不够。这时候需要用到 EdgeLink 的远程网络功能。
研华提供了两种远程运维方案:WISE-PaaS VPN 和 端口转发/桥接。
3.1 方案一:WISE-PaaS VPN
WISE-PaaS/VPN 基于 OpenVPN 技术,提供 server 和 client 的创建管理服务。通过 VPN 隧道,你的 PC 可以像在局域网内一样访问远端网关及其下挂的 PLC。
架构:
PC (OpenVPN Client) ←→ VPN 隧道 ←→ ECU 网关 (OpenVPN Client) ←→ PLC
↑
WISE-PaaS VPN Server
配置步骤:
- 创建 VPN 服务器:登录 WISE-PaaS/VPN 网站,创建 OpenVPN 服务器实例
- 创建客户端:分别为 PC 和 ECU 网关创建客户端账号,下载各自的
.ovpn配置文件和证书 - PC 端配置:
- 安装 OpenVPN 客户端软件
- 将
PC.ovpn文件导入到C:\Program Files (x86)\OpenVPN\config目录 - 运行 OpenVPN GUI,点击连接
- 待系统托盘图标变为绿色,表示 VPN 连接成功
- ECU 网关端配置:
- 打开 EdgeLink Studio,找到”系统设置” → “网络和 Ethernet” → “网络设置” → “OpenVPN”
- 导入四个认证文件(从 WISE-PaaS 下载的证书和密钥文件)
- 保存并下载到网关
- 验证连接:
- 在 PC 上 Ping 网关的 VPN IP,验证连通性
- 确认 VPN 隧道建立成功
🔧 重要说明:VPN 建立后,PC 和网关在同一个虚拟局域网中。但如果要访问网关背后的 PLC,还需要额外的网络配置——桥接或端口转发。
3.2 方案二:桥接(Bridging)
桥接是将网关的 LAN 口和 VPN 虚拟接口桥接在一起,使 PC 和 PLC 处于同一个二层网络。
配置路径:EdgeLink Studio → 系统设置 → 网络和 Internet → 网络设置 → 桥接
关键要求:
- 与网关 LAN 口相连的 PLC 的 IP 地址,必须与网关的 OpenVPN IP 在同一网段
适用场景:PLC 编程软件需要二层广播发现设备时(如西门子博途的设备搜索功能)
⚠️ 桥接的限制:桥接模式将两个网络接口合并为一个广播域,如果 PLC 网络中有大量广播流量,可能会影响 VPN 隧道的性能。
3.3 方案三:端口转发(Port Forwarding)
端口转发是将 PC 发往网关 VPN IP 某端口的数据,转发到 PLC 的对应端口。
配置路径:EdgeLink Studio → 系统设置 → 网络和 Internet → 端口转发
关键要求:
- PLC 的 IP 与网关 LAN 口 IP 在同一网段
- PLC 不需要与网关的 OpenVPN IP 在同一网段(这是端口转发与桥接的主要区别)
适用场景:只需要通过特定端口访问 PLC(如西门子 S7 协议的 102 端口)
3.4 桥接 vs 端口转发对比
| 对比维度 | 桥接 | 端口转发 |
|---|---|---|
| 网络层级 | 二层(数据链路层) | 三层/四层(网络/传输层) |
| PLC IP 要求 | 与 VPN IP 同网段 | 与网关 LAN 口同网段 |
| 广播支持 | ✅ 支持 | ❌ 不支持 |
| 性能影响 | 较大(广播域扩大) | 较小(仅转发指定端口) |
| 配置复杂度 | 简单 | 需要知道 PLC 使用的端口号 |
| 适用场景 | 需要广播发现设备的编程软件 | 通过特定端口访问 PLC |
🔧 选型建议:
- 西门子博途等需要设备自动发现的场景 → 用桥接
- 只需要通过固定端口远程下载程序的场景 → 用端口转发
- 不确定用哪个 → 先试端口转发,不行再试桥接
3.5 实际案例:西门子 PLC 远程程序更新
以西门子 S7-1200 PLC 为例,通过 ECU 网关实现远程程序更新的完整流程:
- 建立 VPN 隧道:PC 和 ECU 通过 WISE-PaaS VPN 建立连接
- 配置端口转发:将网关 VPN IP 的 102 端口转发到 PLC 的 102 端口(S7 协议端口)
- 在 PC 上打开博途:添加设备时,IP 填网关的 VPN IP(而不是 PLC 的实际 IP)
- 下载程序:博途通过 VPN 隧道和端口转发,将程序下载到远端 PLC
或者使用桥接模式:
- 建立 VPN 隧道
- 配置桥接:将 LAN 口和 VPN 接口桥接
- 确保 PLC IP 与 VPN IP 同网段(如 PLC 设为 192.168.100.x,VPN 网段也是 192.168.100.x)
- 在 PC 上打开博途:直接搜索设备,PLC 会出现在设备列表中
- 下载程序
四、北向云服务连接
除了 SimpleMQTT,EdgeLink 还支持直接对接特定云平台,省去手动配置 MQTT 参数的麻烦。
4.1 WISE-PaaS DataHub
WISE-PaaS 是研华自家的物联网云平台。EdgeLink 内置了 WISE-PaaS DataHub 插件,支持 Plug & Play(即插即用)模式。
配置步骤:
- 在 EdgeLink 的”云服务”中选择
WISEPaaS-DataHub,勾选”启用此连接” - 在 WISE-PaaS 云平台上创建设备,获取以下三个参数:
- DataHub ID:设备唯一标识
- Credential Key:认证密钥
- DCCS API Url:连接参数获取地址
- 将这三个参数粘贴到 EdgeLink 配置页面的对应位置
- SCADA Name 为选填项,不填则使用工程中配置的网关节点名
- 保存并下载到网关
💡 DataHub 的优势:WISE-PaaS/DataHub 的连接参数通过 DCCS API 动态获取,不需要手动填 MQTT 地址和端口。当云平台迁移或 IP 变更时,只需在云端修改,网关会自动获取新的连接参数。
限制说明:
- DataHub 插件支持设备配置数据上传(Plug & Play)
- 不支持从 DataHub 反向修改设备配置
4.2 阿里云物联网平台
EdgeLink 也内置了阿里云物联网平台插件,配置更简单:
配置步骤:
- 在阿里云物联网平台创建产品和设备
- 为产品添加属性(功能定义),标识符必须与网关中的 Tag 名称完全一致
- 发布产品上线
- 获取设备的连接信息(ProductKey、DeviceName、DeviceSecret)
- 在 EdgeLink 中选择阿里云插件,填入设备信息
- MQTT 相关的主机、端口、Client ID、用户名、密码无需手动填写——插件会根据设备信息自动生成
- 下载工程后设备自动上线
🔧 关键点:阿里云物联网平台的属性标识符必须与 EdgeLink 中的 Tag 名称一一对应。如果名称不匹配,数据不会上传到对应的属性。建议在配置前先在 Excel 中整理好 Tag 名称与阿里云属性标识符的映射关系。
4.3 云平台对比
| 对比维度 | SimpleMQTT | WISE-PaaS DataHub | 阿里云物联网平台 |
|---|---|---|---|
| 配置复杂度 | 中(需手动填所有参数) | 低(通过 DCCS API 自动获取) | 低(自动生成 MQTT 参数) |
| 平台绑定 | 不绑定,任何 MQTT Broker | 研华 WISE-PaaS | 阿里云 |
| Plug & Play | ❌ | ✅ | ✅ |
| 反向控制 | ✅(通过 Command Topic) | ❌(不支持修改设备配置) | ✅(通过属性设置) |
| 适用场景 | 自建 MQTT 服务器、EMQX | 研华生态项目 | 阿里云生态项目 |
五、综合远程运维架构
把以上技术组合起来,一个完整的远程运维架构如下:
┌─────────────────────────────────────────┐
│ 云平台 / 上位机 │
│ (MQTT接收 / RESTful API / SCADA) │
└────────────┬────────────────────────────┘
│ MQTT / HTTP
┌────────────┴────────────────────────────┐
│ ECU 网关 (EdgeLink Runtime) │
│ │
│ ┌─────────┐ ┌──────────┐ ┌─────────┐ │
│ │MQTT北向 │ │Modbus TCP│ │RESTful │ │
│ │(SimpleMQTT│ │Server │ │API │ │
│ │/阿里云) │ │(502端口) │ │(443端口)│ │
│ └─────────┘ └──────────┘ └─────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ 南向采集 (Modbus RTU 等) │ │
│ └──────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────────────┐ │
│ │OpenVPN │ │端口转发/桥接 │ │
│ │Client │ │(PLC远程运维) │ │
│ └──────────┘ └──────────────────┘ │
└────────┬──────────────────┬──────────────┘
│ RS485 │ Ethernet
┌────────┴────────┐ ┌──────┴──────────────┐
│ 现场设备 │ │ PLC │
│ (电表/传感器等) │ │ (西门子/三菱等) │
└─────────────────┘ └─────────────────────┘
日常运行:
- 现场设备数据通过南向 Modbus RTU 采集到网关
- 网关通过北向 MQTT 上传到云平台
- 上位机通过 Modbus TCP 或 RESTful API 读取/控制 Tag 值
远程维护:
- 通过 WISE-PaaS VPN 建立安全隧道
- 通过端口转发或桥接远程访问 PLC
- 通过 RESTful API 在线修改 Tag 值
- 通过 VCOM 远程调试串口设备(注意串口独占限制)
六、安全最佳实践
| 层面 | 措施 |
|---|---|
| 网络层 | VPN 隧道加密,不暴露网关端口到公网 |
| 认证层 | 修改所有默认密码,API 启用 Session 认证 |
| 传输层 | HTTPS + SSL/TLS 加密,MQTT 启用认证 |
| 访问控制 | 限制客户端 IP,配置 MQTT ACL 规则 |
| 审计层 | 开启操作日志,定期审查异常访问 |
| 固件层 | 及时更新 EdgeLink Runtime 和网关固件 |
🔴 绝对禁止:
- 不要将网关的 502 端口(Modbus TCP)直接映射到公网
- 不要将网关的 443 端口(RESTful API)直接映射到公网
- 不要使用默认密码
00000000- 不要在未加密的网络中传输敏感数据
小结
EdgeLink 的远程运维能力可以归纳为三个层次:
- 数据层——通过 MQTT(SimpleMQTT / 阿里云插件 / DataHub)将数据上传到云端
- 控制层——通过 RESTful API 和 Modbus TCP Server 在线读写 Tag 值
- 网络层——通过 VPN + 端口转发/桥接实现 PLC 远程程序更新
三层配合,基本覆盖了工业物联网运维的所有需求。日常用 MQTT 收数据,偶尔用 API 改参数,出大问题了上 VPN 远程接入。这就是研华网关的完整远程运维体系。
这是 EdgeLink Studio 系列的最后一篇。整个系列从概览、Modbus 配置、VCOM 虚拟串口、SimpleMQTT 连接到 RESTful API 与远程运维,把 EdgeLink 网关的核心功能过了一遍。希望对你有帮助。
系列文章:
1. [EdgeLink Studio概览:工业网关的万能翻译官]
2. [EdgeLink 网关 Modbus 配置:从南到北打通数据流 ]
3. [EdgeLink VCOM虚拟串口:远程调试的利器与陷阱]
