EdgeLink RESTful API 与远程运维:让网关触手可及
EdgeLink RESTful API 与远程运维:让网关触手可及

EdgeLink RESTful API 与远程运维:让网关触手可及

前面几篇讲的都是怎么在 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 三部分组成。

基本信息速览

项目说明
基础 URLhttps://<网关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"
        }
    ]
}
响应字段说明
nameTag 名称
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

配置步骤

  1. 创建 VPN 服务器:登录 WISE-PaaS/VPN 网站,创建 OpenVPN 服务器实例
  2. 创建客户端:分别为 PC 和 ECU 网关创建客户端账号,下载各自的 .ovpn 配置文件和证书
  3. PC 端配置
    • 安装 OpenVPN 客户端软件
    • 将 PC.ovpn 文件导入到 C:\Program Files (x86)\OpenVPN\config 目录
    • 运行 OpenVPN GUI,点击连接
    • 待系统托盘图标变为绿色,表示 VPN 连接成功
  4. ECU 网关端配置
    • 打开 EdgeLink Studio,找到”系统设置” → “网络和 Ethernet” → “网络设置” → “OpenVPN”
    • 导入四个认证文件(从 WISE-PaaS 下载的证书和密钥文件)
    • 保存并下载到网关
  5. 验证连接
    • 在 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 网关实现远程程序更新的完整流程:

  1. 建立 VPN 隧道:PC 和 ECU 通过 WISE-PaaS VPN 建立连接
  2. 配置端口转发:将网关 VPN IP 的 102 端口转发到 PLC 的 102 端口(S7 协议端口)
  3. 在 PC 上打开博途:添加设备时,IP 填网关的 VPN IP(而不是 PLC 的实际 IP)
  4. 下载程序:博途通过 VPN 隧道和端口转发,将程序下载到远端 PLC

或者使用桥接模式:

  1. 建立 VPN 隧道
  2. 配置桥接:将 LAN 口和 VPN 接口桥接
  3. 确保 PLC IP 与 VPN IP 同网段(如 PLC 设为 192.168.100.x,VPN 网段也是 192.168.100.x)
  4. 在 PC 上打开博途:直接搜索设备,PLC 会出现在设备列表中
  5. 下载程序

四、北向云服务连接

除了 SimpleMQTT,EdgeLink 还支持直接对接特定云平台,省去手动配置 MQTT 参数的麻烦。

4.1 WISE-PaaS DataHub

WISE-PaaS 是研华自家的物联网云平台。EdgeLink 内置了 WISE-PaaS DataHub 插件,支持 Plug & Play(即插即用)模式。

配置步骤

  1. 在 EdgeLink 的”云服务”中选择 WISEPaaS-DataHub,勾选”启用此连接”
  2. 在 WISE-PaaS 云平台上创建设备,获取以下三个参数:
    • DataHub ID:设备唯一标识
    • Credential Key:认证密钥
    • DCCS API Url:连接参数获取地址
  3. 将这三个参数粘贴到 EdgeLink 配置页面的对应位置
  4. SCADA Name 为选填项,不填则使用工程中配置的网关节点名
  5. 保存并下载到网关

💡 DataHub 的优势:WISE-PaaS/DataHub 的连接参数通过 DCCS API 动态获取,不需要手动填 MQTT 地址和端口。当云平台迁移或 IP 变更时,只需在云端修改,网关会自动获取新的连接参数。

限制说明

  • DataHub 插件支持设备配置数据上传(Plug & Play)
  • 不支持从 DataHub 反向修改设备配置

4.2 阿里云物联网平台

EdgeLink 也内置了阿里云物联网平台插件,配置更简单:

配置步骤

  1. 在阿里云物联网平台创建产品和设备
  2. 为产品添加属性(功能定义),标识符必须与网关中的 Tag 名称完全一致
  3. 发布产品上线
  4. 获取设备的连接信息(ProductKey、DeviceName、DeviceSecret)
  5. 在 EdgeLink 中选择阿里云插件,填入设备信息
  6. MQTT 相关的主机、端口、Client ID、用户名、密码无需手动填写——插件会根据设备信息自动生成
  7. 下载工程后设备自动上线

🔧 关键点:阿里云物联网平台的属性标识符必须与 EdgeLink 中的 Tag 名称一一对应。如果名称不匹配,数据不会上传到对应的属性。建议在配置前先在 Excel 中整理好 Tag 名称与阿里云属性标识符的映射关系。

4.3 云平台对比

对比维度SimpleMQTTWISE-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 的远程运维能力可以归纳为三个层次:

  1. 数据层——通过 MQTT(SimpleMQTT / 阿里云插件 / DataHub)将数据上传到云端
  2. 控制层——通过 RESTful API 和 Modbus TCP Server 在线读写 Tag 值
  3. 网络层——通过 VPN + 端口转发/桥接实现 PLC 远程程序更新

三层配合,基本覆盖了工业物联网运维的所有需求。日常用 MQTT 收数据,偶尔用 API 改参数,出大问题了上 VPN 远程接入。这就是研华网关的完整远程运维体系。


这是 EdgeLink Studio 系列的最后一篇。整个系列从概览、Modbus 配置、VCOM 虚拟串口、SimpleMQTT 连接到 RESTful API 与远程运维,把 EdgeLink 网关的核心功能过了一遍。希望对你有帮助。

系列文章: 

1. [EdgeLink Studio概览:工业网关的万能翻译官]

2. [EdgeLink 网关 Modbus 配置:从南到北打通数据流 ]

3. [EdgeLink VCOM虚拟串口:远程调试的利器与陷阱] 

4. [EdgeLink SimpleMQTT连接EMQX:从配置到验证全流程] 

5. [EdgeLink RESTful API与远程运维:让网关触手可及]