Skip to content

4.5 调用示例 ​

完整可运行的对接示例。所有请求都是 POST /web,body 是带 cmd 的 JSON,认证靠 body 里的 username/password(详见 4.1)。

没有登录接口、没有 Token

服务器不提供 /api/login,也不使用 Bearer Token。每个请求自带账号密码即可。

4.5.1 curl ​

bash
# 读取两个数据点
curl -X POST http://192.168.1.100/web \
  -H "Content-Type: application/json" \
  -d '{
    "cmd": "get_real",
    "username": "linpan",
    "password": "你的密码",
    "project": "main",
    "data": ["车间1/1号机/温度", "车间1/1号机/湿度"]
  }'

# 写入一个数据点(远程启停设备)
curl -X POST http://192.168.1.100/web \
  -H "Content-Type: application/json" \
  -d '{
    "cmd": "set_real",
    "username": "linpan",
    "password": "你的密码",
    "project": "main",
    "data": [{"name":"车间1/1号机/启停","value":"1"}]
  }'

4.5.2 Python ​

python
import requests

URL = "http://192.168.1.100/web"        # 公网请用 https://
AUTH = {"username": "linpan", "password": "你的密码"}

def call(cmd, **kw):
    r = requests.post(URL, json={"cmd": cmd, **AUTH, **kw}, timeout=10)
    r.raise_for_status()
    data = r.json()
    if data.get("cmdreq") != "ok":       # 业务成功要看 cmdreq,不是 HTTP 状态码
        raise RuntimeError(f"{cmd} 失败: {data.get('cmdreq')}")
    return data

# 读
res = call("get_real", project="main",
           data=["车间1/1号机/温度", "车间1/1号机/湿度"])
for p in res["data"]:
    print(p["name"], p["value"])

# 写(远程控制)
call("set_real", project="main",
     data=[{"name": "车间1/1号机/启停", "value": "1"}])

# 直读 PLC 寄存器:D0 起 7 个,16 位整数
res = call("plc_data_read", id="11315751", reg="D0", type=1, length=7)
print(res["data"])

4.5.3 Node.js ​

javascript
const URL = 'http://192.168.1.100/web'      // 公网请用 https://
const AUTH = { username: 'linpan', password: '你的密码' }

async function call(cmd, extra = {}) {
  const resp = await fetch(URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ cmd, ...AUTH, ...extra }),
  })
  const data = await resp.json()
  if (data.cmdreq !== 'ok') throw new Error(`${cmd} 失败: ${data.cmdreq}`)
  return data
}

// 读
const res = await call('get_real', {
  project: 'main',
  data: ['车间1/1号机/温度'],
})
console.log(res.data)

// 写
await call('set_real', {
  project: 'main',
  data: [{ name: '车间1/1号机/启停', value: '1' }],
})

4.5.4 常见对接场景 ​

MES / ERP 定时抓取产量

python
# 每分钟拉一次关键数据点,写入自己的数据库
res = call("get_real", project="main",
           data=["产线1/产量", "产线1/良品数", "产线1/OEE"])
save_to_my_db(res["data"])

后台程序下发批次配方

python
# 把一批设定值一次性写下去
call("set_real", project="main", client="MES", data=[
    {"name": "产线1/温度设定", "value": "180"},
    {"name": "产线1/速度设定", "value": "45"},
    {"name": "产线1/批次号",  "value": "B20260814"},
])

看板系统定时刷新

python
# 不知道有哪些点时先列出来,再挑需要的
lst = call("get_real_list", project="main", limit=200, offset=0)

4.5.5 对接要点 ​

  • 判断成功看 cmdreq == "ok",不要只看 HTTP 200
  • 值都是字符串,数值比较前需先转换类型
  • 高频刷新(秒级)应改用 WebSocket 或 MQTT,不要循环轮询 HTTP
  • 给对接程序单独开子账号,公网必须走 HTTPS

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