Skip to content

4. 接口参考

说明

  • 完整路径 = /api/mlinkClient + 分组前缀 + Meta path。下文路径一律写完整路径。
  • 「权限」列:需 token 指落在挂了 gtoken 的分组里;免认证 指白名单或未挂 gtoken 的路径。
  • 未特别标注时,Content-Typeapplication/json{DeviceCode} 为路径参数。

4.1 用户与登录

分组前缀:/api/mlinkClient/system(版本接口在 /api/mlinkClient/version)。

4.1.1 登录

  • 方法与路径POST /api/mlinkClient/system/login(注册为 ALL,任意方法均可)
  • 权限:免认证
字段类型必填说明
login_namestring登录账号;为空直接失败「账号或密码不能为空」
passwordstringmd5(明文) 的小写 hex(32 位)
  • 成功响应{"code":200,"msg":"登录成功","data":{"token":"...","user_key":"User:1","user_name":"管理员","login_name":"admin","status":0,"info":"","expire":86400}}
  • 失败响应{"code":-1,"msg":"账号或密码错误","data":""};锁定类见 2.3.1
  • 相关错误码200-1

4.1.2 登出

  • 方法与路径POST /api/mlinkClient/system/logout
  • 权限:需 token
  • 请求字段:无
  • 响应:gtoken 标准登出响应
  • 相关错误码200-1

4.1.3 版本信息

  • 方法与路径GET /api/mlinkClient/version/get
  • 权限免认证
  • 请求字段:无
  • 响应{"code":200,"msg":"ok","version":{"major":1,"minor":2,"patch":3,"commit":"..."}}
  • 相关错误码:通用(200 / -1 / 51

4.1.4 注册用户

  • 方法与路径POST /api/mlinkClient/system/user/create
  • 权限免认证(白名单,用于首次初始化)
  • 请求体
字段类型必填说明
login_namestring用户登录名;命中服务端黑名单时返回「该账户为系统特殊账户,禁止注册」
password1string密码(MD5 hex)
password2string确认密码;与 password1 不一致返回「两次密码不相同」
  • 成功响应{"code":200,"msg":"ok","data":{"id":2}}
  • 失败响应账号已存在当天注册账户数量已达上限,请于[xx]后重试注册请求频繁,请稍后重试
  • 相关错误码200-151

4.1.5 删除用户

  • 方法与路径DELETE /api/mlinkClient/system/user/delete
  • 权限:需 token
字段类型必填说明
idint用户 ID,要求不小于 1
  • 响应{"err":{"code":200,"msg":"ok"}}
  • 相关错误码200-1

4.1.6 修改用户信息

  • 方法与路径PUT /api/mlinkClient/system/user/update
  • 权限:需 token
字段类型必填说明
idint用户 ID
user_namestring显示名
infostring备注
phonestring手机号
emailstring邮箱
  • 响应{"err":{"code":200,"msg":"ok"}};用户不存在 → 用户不存在
  • 相关错误码200-1

4.1.7 修改密码

  • 方法与路径PUT /api/mlinkClient/system/user/update/password
  • 权限:需 token
字段类型必填说明
password1string旧密码,md5(明文) 小写 hex
password2string新密码,md5(明文) 小写 hex
  • 响应{"err":{"code":200,"msg":"ok"}};用户不存在 → 用户不存在
  • 相关错误码200-1

4.1.8 用户列表

  • 方法与路径GET /api/mlinkClient/system/user/list
  • 权限:需 token
字段类型必填说明
pageint页码
sizeint每页数量
idint按用户 ID 筛选
user_namestring按显示名筛选
login_namestring按登录名筛选
phonestring按手机号筛选
creatorstring按创建者筛选
  • 响应{"code":200,"msg":"ok","data":{"list":[...],"total":1}}
  • 相关错误码:通用(200 / -1 / 51

4.1.9 当前用户

  • 方法与路径GET /api/mlinkClient/system/user/info
  • 权限:需 token
  • 请求字段:无
  • 响应{"code":200,"msg":"ok","data":{"id":1,"login_name":"admin"}}
  • 相关错误码:通用(200 / -1 / 51

4.1.10 操作记录查询

  • 方法与路径POST /api/mlinkClient/system/operate/record
  • 权限:需 token
字段类型必填说明
pageint页码
sizeint每页数量
beginTimeint开始时间,Unix 秒
endTimeint结束时间,Unix 秒
userIdint⚠️ 该筛选条件被服务端硬编码为 0 忽略,传了不生效
typestring类型筛选
modulestring模块筛选
descriptionstring描述关键字
  • 响应{"list":[...],"total":0}
  • 相关错误码:通用(200 / -1 / 51

【注意】当前审计触发点只覆盖登录、连接、恢复等少数动作,用户增删改、服务命令、配置下发尚未覆盖。

4.2 连接管理

分组前缀:/api/mlinkClient/system。连接即被管理的 DASS 网关。

4.2.1 创建连接

  • 方法与路径POST /api/mlinkClient/system/conn/create
  • 权限:需 token
字段类型必填说明
nick_namestring连接别名。不能含星号、问号、小于号、大于号、竖线、冒号、双引号、正斜杠、反斜杠;为空时自动取 host.port
hoststring网关 IP 或域名,需通过 IP/域名合法性校验
user_namestringDAS 连接账号;为空时用内置默认值(新版本 sysadmin,旧版 admin
passwordstringDAS 密码,须为 AES-CBC 加密后的结果;为空时用内置默认值(新版本 rsas@2024,旧版 sis
portstring端口号(字符串)
tlsbool是否启用 TLS
groupstring设备分组名,不存在时自动创建
  • 成功响应
json
{
  "code": 200,
  "msg": "连接创建成功",
  "data": {
    "id": 4,
    "deviceCode": "4",
    "nickName": "测试网关A",
    "host": "192.168.1.100",
    "password": "<密文>",
    "port": "8090",
    "userName": "sysadmin",
    "creator": "1",
    "create_time": "2026-09-01 10:00:00",
    "tls": "true",
    "model": "DASS5-XXX",
    "platform": "linux-amd64",
    "version": "5.0.1",
    "groupId": 1
  }
}
  • 失败响应InvalidIPv4Address(无效地址)、ConnAlreadyExist(同用户下 host+port 重复)、OccupiedNickName(别名重复)、当前机器[host]设备码[deviceCode]已由[nick]使用您所操作边缘智能终端管理平台版本[xx]过低,请升级软件重试{"code":-1,"msg":"服务未启动"}设备已离线,请稍后再试
  • 相关错误码-151 与 《用户手册》附录「错误码」→「连接管理」 全部连接类文案

【警告】data.deviceCode 就是后续所有 {DeviceCode} 要填的值。
【警告】生产环境务必显式传 user_namepassword,不要依赖内置默认凭据。
【存疑】连接密码 AES 加密所用的 key/IV 与前端约定一致,但二次开发若自实现加密,建议以真机联调结果为准(待真机确认) (与前端约定一致即可,二次开发建议以真机联调为准)

4.2.2 删除连接

  • 方法与路径DELETE /api/mlinkClient/system/conn/delete
  • 权限:需 token
  • 请求体(⚠️ 是 body,不是路径参数)
字段类型必填说明
deviceCodestring连接 ID
hoststring网关地址
portstring端口
tlsbool是否 TLS
idint连接主键 ID
  • 成功响应{"code":200,"msg":"删除成功","data":{}}
  • 相关错误码200-1NonexistentData

【警告】删除连接不级联:网关上的服务/通道/测点不受影响,只是控制台不再展示该网关的配置树。

4.2.3 更新连接

  • 方法与路径PUT /api/mlinkClient/system/conn/update
  • 权限:需 token
字段类型必填说明
deviceCodestring连接 ID(body 字段,用于定位)
nick_namestring别名;重复返回 OccupiedNickName
hoststring网关地址;改后与已有连接重复返回 ConnAlreadyExist
user_namestringDAS 账号
passwordstringDAS 密码(AES 加密)
portstring端口
tlsbool是否 TLS
groupstring分组名
  • 响应{"code":200,"msg":"...","data":{}}
  • 相关错误码200-1NonexistentDataConnAlreadyExistOccupiedNickName

4.2.4 连接列表

  • 方法与路径GET /api/mlinkClient/system/conn/list
  • 权限:需 token
  • 请求字段:无
  • 响应结构
code, msg
data.all      { total, list[] }   全部(本用户)
data.add      { total, list[] }   已添加
data.discover { total, list[] }   待发现
list[] = { id, status, deviceCode, nickName, host, userName, password(密文), port,
           version, creator, modifier, create_time, update_time, tls, model, platform, group, flag }
  • 相关错误码:通用(200 / -1 / 51

已实测(2026-09-12,31 条连接的现场)data三个分组都存在 ——
data.all.total=31(全部连接)、data.add.total=31(可添加/已纳管)、data.discover.total=0(待发现)。
deviceCodedata.all.list[].deviceCode
【注意】列表接口会原样回显密码密文,客户端需自行脱敏。

4.2.5 首页连接列表

  • 方法与路径POST /api/mlinkClient/system/conn/list/refer
  • 权限:需 token
字段类型必填说明
keywordsstring关键字。⚠️ 前端两处写法不一致(keyWordskeywords),本指南采用 API 结构体的 keywords
groupstring分组名
  • 响应alladddiscoveroffline 四组,每组 {total,list[]}
  • 相关错误码:通用(200 / -1 / 51

4.2.6 测试连接

  • 方法与路径POST /api/mlinkClient/system/conn/test
  • 权限:需 token
字段类型必填说明
nick_namestring别名
hoststring网关地址
user_namestringDAS 账号
passwordstringDAS 密码(AES 加密)
portstring端口
tlsbool是否 TLS
  • 响应{"major":5,"minor":0,"patch":1}
  • 相关错误码-151

4.2.7 重新连接并刷新状态

  • 方法与路径POST /api/mlinkClient/system/conn/fresh/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"code":200,"msg":"ok","data":{"baseInfo":{},"flowInfo":{},"interInfo":{},"monitorInfo":{},"netInfo":{},"runningInfo":{}}}
  • 相关错误码-1NonexistentDataHostIsDown

4.2.8 查询 TLS 状态

  • 方法与路径GET /api/mlinkClient/system/conn/tls/status
  • 权限:需 token
字段类型必填说明
deviceCodestringquery 参数,连接 ID
  • 响应{"code":200,"msg":"ok","data":{...}}(连接基础信息结构)
  • 相关错误码:通用(200 / -1 / 51

4.2.9 gRPC 连接缓存

  • 方法与路径GET /api/mlinkClient/system/conn/cache
  • 权限:需 token
  • 请求字段:无
  • 响应{"table":{"<deviceCode>":"<host:port>"}}
  • 相关错误码:通用(200 / -1 / 51

4.2.10 云平台设备码设置

  • 方法与路径POST /api/mlinkClient/system/conn/setting/{DeviceCode}
  • 权限:需 token
字段类型必填说明
cloud_keystring云平台 Key;为空返回 EmptyCloudKey
protocolstring协议类型
  • 响应{"code":200,"msg":"ok","data":{"device_code":"...","cloudKey":"...","protocol":"..."}}
  • 相关错误码-1EmptyCloudKeyEmptyHostOccupiedDeviceCode设备码[%v]已由用户[%v]绑定至[%v],请使用其他设备码进行绑定

4.2.11 云平台 Key 校验

  • 方法与路径POST /api/mlinkClient/system/conn/setting/test/{DeviceCode}
  • 权限:需 token
字段类型必填说明
cloud_keystring待校验的云平台 Key
  • 响应{"code":200,"msg":"ok","data":{...}}
  • 相关错误码-151

4.2.12 获取云平台设备码

  • 方法与路径POST /api/mlinkClient/system/conn/cloudKey
  • 权限:需 token
字段类型必填说明
deviceCodestringbody 字段,连接 ID
  • 响应{"data":{"device_code":"...","cloudKey":"...","protocol":"..."}}
  • 相关错误码-1EmptyDeviceCodeNonexistentData

4.2.13 获取云平台鉴权 URL

  • 方法与路径POST /api/mlinkClient/system/conn/cloudKey/url
  • 权限:需 token
字段类型必填说明
cloud_keystring云平台 Key
  • 响应{"data":{"device_code":"...","cloudCenterUrl":"...","cloudKey":"..."}}
  • 相关错误码-151

4.2.14 设备分组列表

  • 方法与路径GET /api/mlinkClient/system/conn/group/query
  • 权限:需 token
  • 请求字段:无
  • 响应{"code":200,"msg":"ok","data":["组A","组B"]}
  • 相关错误码:通用(200 / -1 / 51

4.2.15 新增分组

  • 方法与路径POST /api/mlinkClient/system/conn/group/add
  • 权限:需 token
字段类型必填说明
groupstring分组名
  • 响应{"Id":1}
  • 相关错误码:通用(200 / -1 / 51

4.2.16 更新分组

  • 方法与路径PUT /api/mlinkClient/system/conn/group/update
  • 权限:需 token
字段类型必填说明
oldGroupstring原分组名
newGroupstring新分组名
  • 响应data(分组数组)
  • 相关错误码:通用(200 / -1 / 51

4.2.17 删除分组

  • 方法与路径DELETE /api/mlinkClient/system/conn/group/delete
  • 权限:需 token
字段类型必填说明
groupstring待删除的分组名
  • 响应data(分组数组)
  • 相关错误码:通用(200 / -1 / 51

4.2.18 未注册的路径

路径状态
GET /api/mlinkClient/system/conn/host/{DeviceCode}未注册:请求结构体存在但无处理器,调用会 404。已确证废弃

4.3 采集服务

分组前缀:/api/mlinkClient/config。采集服务对应界面的「数据采集 → 采集服务」。

服务对象的关键约定:

约定
服务名长度不超过 11 字节(中文按 UTF-8 3 字节计,即最多 3 个汉字)
服务名唯一性全局唯一
das_typedas=采集服务,upload=上传服务
接口一次处理几条只取 app[0]一次一个服务

4.3.1 创建服务(JSON)

  • 方法与路径POST /api/mlinkClient/config/das/insert/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray服务数组,仅取 app[0];空数组会静默返回 {"app":null} 且不报错
app[].namestring服务名,不超过 11 字节,全局唯一;API 层无长度校验,超长由设备端拒绝
app[].typestring驱动名,须为网关已安装驱动(POST /config/driver/list/{dc} 可查)
app[].das_typestringdas=采集服务,upload=上传服务
app[].flagstring标志位。⚠️ 代码全程未读取该字段,传了不生效【存疑】
app[].log_levelstring日志级别,取值是设备端 proto 枚举的字符串 key【存疑】合法枚举值未在代码中列举(待真机确认)
app[].descstring服务描述。文档写不超过 200 字符,代码无校验
app[].paraobject驱动配置。字段名来自驱动动态表单(GET /config/driver/conf/{dc}?name=<驱动>)。⚠️ 为空时设备端返回「创建服务驱动配置不能为空」
  • 成功响应(裸结构):
json
{ "app": [ { "id": "", "name": "SVC_A", "err": { "code": 200, "msg": "ok" }, "channels": null } ] }
  • 失败响应:空 app{"app":null}(HTTP 200,不报错);gRPC 错误 → {"code":-1,"msg":"..."}
  • 相关错误码-151、「创建服务驱动配置不能为空」、「服务未启动」

【警告】成功响应没有外层 code/msg,判成功看 app[0].err.code == 200
【警告】app[0].id 恒为空、channels 恒为 null,不要用于定位。
【警告】部分成功风险:das_type=das 且网关版本低于 5.0.0 时服务端会自动创建默认通道 DEC;若 DEC 建失败,接口报错但服务已经建成

4.3.2 创建服务(表单,含驱动动态字段)

  • 方法与路径POST /api/mlinkClient/config/das/form/insert/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
namestring服务名,不超过 11 字节
typestring驱动名
das_typestringdasupload
flagstring标志位,代码未使用
app_log_levelstring日志级别
descstring描述
驱动动态字段string视驱动而定由服务端从请求中动态提取,构成 para
  • 响应:同 4.3.1
  • 相关错误码:同 4.3.1

【注意】表单路径不判断网关版本就创建 DEC 通道,与 JSON 路径行为不一致。

4.3.3 更新服务

  • 方法与路径POST /api/mlinkClient/config/das/update/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅取 app[0]
app[].namestring服务名(定位用)
app[].typestring⚠️ 送入设备端的更新结构体不含该字段,实际不可改
app[].das_typestring⚠️ 同上,实际不可改
app[].log_levelstring可改
app[].descstring可改
app[].keywordsstring关键字
app[].paraobject驱动配置,可改
  • 响应{"app":[{"name":"SVC_A","err":{"code":200,"msg":"ok"}}]}
  • 相关错误码-151

4.3.4 更新服务(表单)

  • 方法与路径POST /api/mlinkClient/config/das/form/update/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
  • 字段nametypedas_typeapp_log_leveldesckeywords + 驱动动态字段
  • 响应:同 4.3.3
  • 相关错误码-151

4.3.5 删除服务

  • 方法与路径DELETE /api/mlinkClient/config/das/delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅需 app[].namelen(app)==0 返回「参数不能为空」
  • 响应{"app":[{"name":"SVC_A","err":{"code":200,"msg":"ok"}}]}
  • 相关错误码-1、「参数不能为空」

【警告】删除服务前没有引用保护:服务端不检查该服务是否被上传服务引用。删除前请自行确认引用关系,或收回人工确认。

4.3.6 服务启停 / 重启

  • 方法与路径POST /api/mlinkClient/config/das/cmd/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅取 app[0]len(app)==0 返回「参数不能为空」
app[].namestring服务名
app[].cmdstring仅识别 startstoprestart;其它值静默什么都不做
  • 响应{"app":[{"id":"","name":"SVC_A","keywords":"","cmd":"start","err":{"code":200,"msg":"ok"}}]}start / stop / restart 三个分支都会解析设备端返回的错误码,非空时 code 取首个错误码、msg 取标志位
  • 相关错误码-1200、「参数不能为空」、设备端返回的具体错误码

【注意】对已启动服务再 start、已停止服务再 stop 的行为由设备端决定,接口本身不保证幂等。

4.3.7 服务 / 通道状态

  • 方法与路径GET /api/mlinkClient/config/das/state/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名
channelstringquery 参数,通道名
  • 响应纯文本 runningstopapp 为空时返回文本 服务参数为空;未找到时返回空 JSON
  • 相关错误码:无错误码(纯文本)

4.3.8 服务树

  • 方法与路径GET /api/mlinkClient/config/das/tree/{DeviceCode}
  • 权限:需 token
  • 请求字段:无

响应为节点数组:

[]{
  nodeId: "App" + 服务名,
  entityId: 服务名,
  entityType: "App",
  text, leaf: false,
  code(仅网关 5.0.0 及以上返回),
  extend: { devicecode, text, driverType, driverVersion, status, up, realtimeLog, cpuUsage, memUsage },
  children: []{
    nodePid, nodeId, entityId, entityType: "Channel", text, leaf,
    extend: { ..., down, realtimeLog }
  }
}
  • 相关错误码-1NonexistentData

【注意】服务树只返回 das_type=das 的采集服务,上传服务不在其中,请用 GET /config/upload/tree/{dc}
【警告】通道 nodeId 是「服务名 + 通道名」无分隔符拼接。若服务名与通道名互为前缀(如 MC06MC0606),自行做映射时会误匹配;请在命名上避免互为前缀。

4.3.9 服务存在性校验

  • 方法与路径POST /api/mlinkClient/config/das/check/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名;为空返回「请求服务名不能为空」
  • 响应纯文本 truefalse
  • 相关错误码:「请求服务名不能为空」

【注意】该接口是建服务前做幂等判断的推荐手段。

4.3.10 服务配置详情

  • 方法与路径GET /api/mlinkClient/config/das/get/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名,必填校验
  • 响应{"name":"SVC_A","type":"...","das_type":"das","log_level":"...","desc":"...","para":{...},"_sys_points":[...]}
  • 相关错误码-1、「服务不存在」

4.3.11 历史数据回补

  • 方法与路径POST /api/mlinkClient/config/das/data/history/{DeviceCode}
  • 权限:需 token
字段类型必填说明
svcstring服务名
beginint开始时间,毫秒时间戳(服务端除以 1000 转秒下发)
endint结束时间,毫秒时间戳
  • 响应{"err":{"code":200,"msg":"ok"}}
  • 失败响应begin 大于 end{"code":-1,"msg":"时间不正确 开始时间不能大于结束时间"};服务不存在 → {"code":-1,"msg":"服务不存在<svc>"}
  • 相关错误码200-1

4.3.12 上行状态

  • 方法与路径GET /api/mlinkClient/config/das/up_status/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名,必填校验
  • 响应{"up":100}
  • 相关错误码-1、「服务不存在」

4.3.13 下行状态

  • 方法与路径GET /api/mlinkClient/config/das/down_status/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名,必填校验
channelstringquery 参数,通道名
  • 响应:采集服务返回 {"down":...};上传服务返回 {"up":...,"down":...}
  • 相关错误码-1、「服务不存在」、「通道不存在」

4.3.14 非上传服务树

  • 方法与路径GET /api/mlinkClient/config/transfer/tree/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"code":0,"msg":"ok","data":[{"serviceId":"...","serviceName":"SVC_A","channelList":[{"channelId":"...","channel":"CH1"}]}]}
  • 相关错误码:通用(200 / -1 / 51

4.4 采集通道

分组前缀:/api/mlinkClient/config。通道对应界面的「数据采集 → 采集服务 → 通道」。

通道对象的关键约定:

约定
通道名长度不超过 12 字节,同服务下唯一
保留名不能为 dec(不区分大小写)、导入路径下还不能为 driverchannel
一次处理几条服务端只取 channels[0]一次只能建 1 个通道
别名字段名创建用 alisa,更新用 alias不一致

4.4.1 创建通道(JSON)

  • 方法与路径POST /api/mlinkClient/config/das/channel/insert/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅取 app[0];空数组静默返回 {}
app[].namestring所属服务名(须已存在)
app[].channelsarray只取 channels[0];⚠️ 传空数组会触发服务端 panic
app[].channels[].namestring通道名;不区分大小写地拦截 dec(返回 {"code":-1,"msg":"不允许创建DEC通道"}
app[].channels[].alisastring通道别名。字段名是 alisa
app[].channels[].descstring描述。⚠️ 代码未使用,传了被丢弃
app[].channels[].paraobject驱动通道配置,字段名来自驱动动态表单
  • 成功响应(控制器自写,无外层包装):
json
{ "code": 200, "msg": "ok", "app": "SVC_A", "channelName": "CH1" }
  • 失败响应
    • HTTP 500 + {"code":"APP:BOX:CHANNEL:CREATE","error":"默认通道不可操作","method":"POST","request":"/das/channel/insert/{DeviceCode}"}(服务为 HTTP 驱动时)
    • {"code":-1,"msg":"不允许创建DEC通道"}
    • HTTP 500 + {"code":"APP:BOX:CHANNEL:CREATE","error":"<gRPC 错误>",...}
  • 相关错误码200-1500默认通道不可操作APP:BOX:CHANNEL:CREATE不允许创建DEC通道

4.4.2 创建通道(表单)

  • 方法与路径POST /api/mlinkClient/config/das/channel/form/insert/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
servicestring所属服务名
alisastring通道别名
namestring通道名
chan_alisastring通道别名(备用键)
descstring描述
驱动动态字段string视驱动而定构成 para
  • 响应:同 4.4.1
  • 相关错误码:同 4.4.1

4.4.3 更新通道(JSON)

  • 方法与路径POST /api/mlinkClient/config/das/channel/update/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅取 app[0]
app[].namestring所属服务名
app[].channelsarray只取 channels[0]
app[].channels[].namestring通道名(定位用)
app[].channels[].aliasstring通道别名。⚠️ 这里是 alias,与创建接口的 alisa 不同
app[].channels[].statusobjectstatus / up / down。⚠️ 代码未使用,被丢弃
app[].channels[].keywordsstring⚠️ 被丢弃
app[].channels[].descstring⚠️ 被丢弃
app[].channels[].log_levelstring⚠️ 被丢弃
app[].channels[].paraobject驱动配置,实际生效
  • 响应{"code":200,"msg":"ok","app":"SVC_A","channelName":"CH1"}
  • 失败响应:HTTP 驱动服务 → HTTP 500 + {"code":"APP:BOX:CHANNEL:UPDATE",...};注意其 request 字段被误写成 /das/channel/insert/{DeviceCode}
  • 相关错误码200-1500APP:BOX:CHANNEL:UPDATE

【警告】更新通道时只有 name / alias / para 会下发到设备端,statuskeywordsdesclog_level 全部被静默丢弃。

4.4.4 更新通道(表单)

  • 方法与路径POST /api/mlinkClient/config/das/channel/form/update/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
  • 字段servicenamealiaskeywordsdescchannel_log_level + 驱动动态字段
  • 响应{"app":[{"name":"SVC_A","channelName":"CH1","err":{"code":200,"msg":"ok"}}]}
  • 相关错误码200-1500

4.4.5 删除通道

  • 方法与路径DELETE /api/mlinkClient/config/das/channel/delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparrayapp[]{id, name, keywords, channels[]{id, name, keywords}}
  • 成功响应{"code":200,"msg":"ok"}
  • 失败响应:HTTP 驱动服务 → HTTP 500 + {"code":"APP:BOX:CHANNEL:DELETE","error":"默认通道不可操作",...}
  • 相关错误码200500APP:BOX:CHANNEL:DELETE

【注意】默认通道 DEC 不可创建、不可删除;HTTP 驱动的服务其通道增删改会被整体拦截。

4.4.6 通道启停 / 重启

  • 方法与路径POST /api/mlinkClient/config/das/channel/cmd/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparrayapp[]{name, channels[]{name, cmd}}len(app)==0 返回「驱动名字不能为空」,len(channels)==0 返回「管道为空」
app[].channels[].cmdstring仅识别 startstoprestart
  • 响应{"app":[{"name":"SVC_A","channels":[{"name":"CH1","cmd":"start","err":{"code":200,"msg":"ok"}}]}]}
    • start / stop:设备端错误码为 0 → code=200,否则 code=-1msg 取标志位
    • restart:⚠️ 设备端返回值被丢弃,err.code 恒为 0、msg 恒为空
  • 相关错误码200-1、「驱动名字不能为空」、「管道为空」

【警告】通道重启接口的 err.code 恒为 0,客户端会误判失败。建议改用 stop + start 两步

4.4.7 通道列表

  • 方法与路径POST /api/mlinkClient/config/das/channel/list/{DeviceCode}
  • 权限:需 token
字段类型必填说明
limitint每页数量
pageint⚠️ 直接作为 Offset 传给设备端,不是页码
filter.appstring按服务名筛选
filter.statusstring⚠️ 代码未使用
filter.channelstring按通道名筛选
filter.keywordsstring⚠️ 代码未使用
  • 响应{"count":1,"channels":[{"app":"SVC_A","name":"CH1","alias":"1#线","status":1,"createTime":1700000000000,"updateTime":1700000000000,"downStatus":1}]}
  • 相关错误码:通用(200 / -1 / 51

4.4.8 通道存在性校验

  • 方法与路径GET /api/mlinkClient/config/das/channel/check/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名
channelstringquery 参数,通道名
  • 响应纯文本 truefalseappchannel 为空时返回空响应
  • 相关错误码:无错误码(纯文本)

4.4.9 通道配置详情

  • 方法与路径GET /api/mlinkClient/config/das/channel/get/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名,必填校验
channelstringquery 参数,通道名,必填校验
  • 响应{"app":[{"name":"SVC_A","channels":[{"name":"CH1","para":{...},"alias":"1#线"}]}]}
  • 相关错误码-151

4.4.10 导入通道模板

  • 方法与路径POST /api/mlinkClient/config/das/channel/import/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
driverstring驱动名,须与模板内 sheet 一致
versionstring驱动版本,须与模板内 sheet 一致
filefile通道模板 xlsx

Excel 结构:sheet driver(A1 驱动名、B1 版本号);sheet channel(A1 通道名、B1 别名、C1 点表 sheet 名、D1 起为驱动配置 key);每个通道一个 sheet。

  • 响应{"count":1,"channels":[{"name":"CH1","alias":"1#线","para":{...},"point_sheet":"xxx.Sheet1"}]}
  • 失败响应不合法的通道文件: driver sheet 存在错误不合法的通道文件: channel sheet 存在错误通道名不得为空通道名不能为 driver 或 channel点表(Sheet)名不能为 driver 或 channel驱动 config.json 存在错误
  • 相关错误码-151 与上述文案

【注意】导入接口只解析不创建,解析结果需要再调 4.4.13 的批量建通道接口。
【存疑】驱动 config.json 存在错误 的精确触发行未定位(待真机确认) (需在真机执行写操作才能触发,本文档未做该类验证)

4.4.11 导出通道

  • 方法与路径POST /api/mlinkClient/config/das/channel/export/{DeviceCode}
  • 权限:需 token
字段类型必填说明
servicestring服务名
driverstring驱动名
versionstring驱动版本
  • 响应文件流application/octet-stream,文件名 {服务名}.xlsx
  • 相关错误码-151

【注意】导出文件中的测点表头在第 2 行(第 1 行为空),共 21 列。回导时不要按第 1 行取表头。

4.4.12 批量建通道

  • 方法与路径POST /api/mlinkClient/config/das/channel/batch/insert/{DeviceCode}
  • 权限:需 token
  • Content-Typeapplication/json
字段类型必填说明
servicestring目标服务名
driverstring驱动名
import[]byte通道模板 Excel 的原始字节(base64 传输)
channelsarray[]{name, alias, para{}, point_sheet, point_file}
channels[].point_sheetstring格式为 {文件名}.{Sheet名},由 4.4.10 导入接口返回;与 point_file 二选一
channels[].point_file[]byte测点 Excel 原始字节;与 point_sheet 二选一
  • 响应{"job_token":"<uuid>"}
  • 相关错误码-151找不到使用驱动 %s,名为 %s 的服务

4.4.13 批量进度

  • 方法与路径GET /api/mlinkClient/config/das/channel/batch/progress/{DeviceCode}
  • 权限:需 token
字段类型必填说明
job_tokenstringquery 参数,4.4.12 返回的任务 token
  • 响应
json
{
  "finished": 0,
  "bar": 0.5,
  "progress": [
    { "job_name": "CH1", "job_status": 0, "reason": "", "failed_file_path": "" }
  ]
}
字段类型说明
finishedint0=进行中,1=完成,-1=失败
barfloat进度,取值 0 ~ 1
progress[].job_statusint0 / 1 / -1
progress[].reasonstring失败原因
progress[].failed_file_pathstring失败文件路径
  • 失败响应:token 无效或过期 → 错误的 token 或已经过期
  • 相关错误码-1、「错误的 token 或已经过期」

4.4.14 通道克隆

  • 方法与路径POST /api/mlinkClient/config/das/channel/clone/{DeviceCode}
  • 权限:需 token
字段类型必填说明
dst_namestring目标通道名
src_namestring源通道名
service_namestring服务名
aliasstring目标通道别名
paraobject目标通道驱动配置
  • 响应{"code":200,"msg":"ok"}
  • 相关错误码-151

【警告】克隆失败时 code 不是 -1 而是 0(服务端未赋值),容易误判为成功。判成功请用 code == 200

4.4.15 通道运行信息

  • 方法与路径GET /api/mlinkClient/config/das/channel/info/{DeviceCode}
  • 权限:需 token
字段类型必填说明
Namestringquery 参数,通道名。⚠️ 首字母大写
  • 响应大写字段名且全为字符串
json
{ "Code": "200", "Msg": "ok", "Pid": "1234", "CPUPercent": "0.5", "MemoryPercent": "1.2", "CreateTime": "1700000000" }
  • 相关错误码:通用(200 / -1 / 51

【注意】该接口字段风格与其它接口不一致,解析时注意大小写。

4.5 采集测点

分组前缀:/api/mlinkClient/config。测点对应界面的「数据采集 → 采集服务 → 测点」。

4.5.1 测点导入(推荐路径)

  • 方法与路径POST /api/mlinkClient/config/point/import/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
filefile测点表 xlsx。列名与长度约束见第 5 章;必填列为点名与点的类型
snstringquery 参数,服务名
cnstringquery 参数,通道名
  • 成功响应
json
{ "total": 1000, "successNum": 998, "failNum": 2, "tempFileName": "data/point_reason/<uuid>/SVC_A_CH1failure.xlsx" }
  • 失败报告:xlsx 中 A ~ U 列为原始 21 列,V 列为 code-1),W 列为失败原因
  • 相关错误码-151 与第 5 章各字段校验文案

【注意】导入按 5000 点/批 分片,通过 gRPC 流式下发。
【警告】该路径是二次开发的首选:一次可导入大量测点,且能用失败报告精确定位问题。逐点 JSON 新增仅适合少量补录。

4.5.2 测点新增(JSON,逐点)

  • 方法与路径POST /api/mlinkClient/config/point/insert/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅取 app[0]app[0].name 为空时静默返回
app[].namestring服务名
app[].channelsarray仅取 channels[0]
app[].channels[].namestring通道名
app[].channels[].pointsarray测点数组
points[].pnstring点名。不超过 60 字节,不能含 .
points[].anstring别名,不超过 256 字节
points[].rtstring点的类型,取值 0 ~ 7(见 5.2)
points[].eustring量纲,不超过 12 字节
points[].edstring描述,不超过 512 字节
points[].adstring地址信息,不超过 4096 字节
points[].srstring采集点类型(如 INT16FLOAT32),取值由 GET /config/driver/sr/sn/{dc}?app=<服务名> 给出
points[].aestring控制属性。⚠️ 只可靠地接受数字字符串 "0""1""2";传中文会静默变成 0。空值被拦,「控制属性不能为空」
points[].fkstring比例系数。解析失败报「比例系数(FK) float类型,不能为0, 默认为1」
points[].fbstring偏移量。解析失败报「偏移量(FB) float类型,默认为0」
points[].bvstring量程下限。解析失败报「量程下限(BV) float类型,默认为0」
points[].tvstring量程上限。解析失败报「量程上限(TV) float类型,默认为100」;tv 小于等于 bv 报「tv <= bv 不合法
points[].fqstring分辨率。解析失败或为负报「分辨率不能为负整数」
points[].krstring特征字,不超过 16 字节
points[].kzint32压缩类型,0=死区、1=线性、2=无压缩
points[].fmint32显示格式(见 5.5;枚举取值以真机为准
points[].dbfloat32死区,非负数
points[].dtint32死区类型,0=PCT、1=ENG
points[].idstring测点 ID。有值时须不小于 1024;留空由设备端实时库自增分配
  • 成功响应
json
{
  "app": [
    { "name": "SVC_A",
      "channels": [
        { "name": "CH1", "err": { "code": 200, "msg": "ok" },
          "points": [ { "id": 1024, "pn": "TAG01", "err": { "code": 200, "msg": "ok" } } ] } ] }
  ]
}
  • 相关错误码-1200、「控制属性不能为空」、「tv <= bv 不合法」、「分辨率不能为负整数」及第 5 章各类型错误文案

【警告】points[].ae 在 API 结构体中声明为 string,但服务端用整数转换读取。传「读」「写」「读写」时转换失败会静默得到 0(读),「写」也被当成「读」。JSON 路径请只传 "0""1""2";中文枚举只适用于文件导入路径。
【警告】成功时响应可能是 {"app":[]}(服务端仅在设备端返回错误码时才填充 app),不要据此判定失败。

4.5.3 测点更新

  • 方法与路径POST /api/mlinkClient/config/point/update/{DeviceCode}
  • 权限:需 token
  • 请求体:与 4.5.2 同构,另外支持扩展字段 unsncngnflagumptktexaplch4h3zhhlllzll3l4ctastmavredata1 ~ redata3create_timeupdate_time
  • 校验规则:同 4.5.2
  • 响应app[]{id,name,err,channels[]{id,name,err,points[]{id,pn,gn,err}}}
  • 相关错误码:同 4.5.2

4.5.4 测点删除

  • 方法与路径DELETE /api/mlinkClient/config/point/delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparray仅取 app[0]
app[].idint服务 ID(定位用)
app[].namestring服务名
app[].das_typestring服务类型
app[].keywordsstring关键字
app[].channelsarraychannels[]{id, name, keywords, points[]{id, pn, gn}}
app[].channels[].pointsarray待删除测点,可按 idpn 指定
  • 响应app[]{name,channels[]{name,err{code,msg}}}
  • 相关错误码-151

4.5.5 测点清空

  • 方法与路径DELETE /api/mlinkClient/config/point/clear/{DeviceCode}
  • 权限:需 token
字段类型必填说明
apparrayapp[]{name, channels[]{name}};清空指定通道下的全部测点
  • 响应app[]{name,err,channels[]{name,err{code,msg}}}
  • 相关错误码-151

4.5.6 测点清洗

  • 方法与路径POST /api/mlinkClient/config/point/erase/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"err":{"code":200,"msg":"OK"}}
  • 相关错误码-151

【警告】删除与清空接口是 DELETE 方法(旧文档写成 POST 是错的)。
已实测(2026-09-12)point/erase 不是恒成功——响应体是 {"err":{"code":…,"msg":…}}
err 包裹,不是标准 {code,msg,data});DeviceCode 不存在时返回
{"err":{"code":-1,"msg":"sql: no rows in result set"}}。判成败要读 err.code

4.5.7 测点查询

  • 方法与路径POST /api/mlinkClient/config/point/select/{DeviceCode}
  • 权限:需 token
字段类型必填说明
limit.pagestring页码
limit.limitstring每页数量
limit.orderstring排序字段
limit.sortstring排序方向
filter.appstring按服务名筛选
filter.channelstring按通道名筛选
filter.keywordstring关键字
filter.idstring按测点 ID 筛选
filter.gnstring按点组筛选
filter.rtstring按点的类型筛选,只认中文名模拟量/开关量/短整数/长整数/浮点数/长整型/文本/二进制)。实测:"模拟量"count=170"0"{"code":50,"msg":"invalid filter RT: 0"}"zzz" → 同样报错。传数字会失败
filter.dsstring按数据状态筛选,取值 GoodBadTimeoutsFirstUnknown;非法值报 invalid filter DS: <值>
controlstringsinglegroup(<点组名>)
  • 响应count + points[](字段较多,含 unsncnpngnedrtsradaeredata1 ~ redata3create_timeupdate_time 等),字段值均为字符串
  • 相关错误码-151invalid filter RT: %sinvalid filter DS: %s

4.5.8 测点导出

  • 方法与路径POST /api/mlinkClient/config/point/export/{DeviceCode}
  • 权限:需 token
字段类型必填说明
filter.appstring服务名
filter.channelstring通道名
filter.keywordstring关键字
filter.rtstring点的类型
filter.dsstring数据状态
  • 响应文件流,文件名 {服务名}_{通道名}.xlsx,21 列,RT / KZ / DT 转为中文枚举
  • 相关错误码-151

4.5.9 失败报告下载

  • 方法与路径POST /api/mlinkClient/config/point/export/errInfo
  • 权限:需 token
字段类型必填说明
tempFileNamestring导入响应中的 tempFileName
  • 响应文件流
  • 相关错误码-151

4.5.10 导入模板下载

  • 方法与路径POST /api/mlinkClient/config/point/import/template
  • 权限:需 token
  • 请求字段:无
  • 响应文件流 collect-template.xlsx(21 列表头 + 1 行示例)
  • 相关错误码:通用(200 / -1 / 51

4.5.11 分类查询(含上传关联)

  • 方法与路径POST /api/mlinkClient/config/point/select/filter/{DeviceCode}
  • 权限:需 token
字段类型必填说明
filter.appstring服务名
filter.channelstring通道名
filter.dsstring数据状态
filter.keywordstring关键字
filter.usnstring上传服务名筛选
limit.pageint页码
limit.limitint每页数量
limit.orderstring排序字段
limit.sortstring排序方向
  • 响应{"count":0,"points":[{"sn":"...","cn":"...","pn":"...","gn":"...","ed":"...","rt":"...","sr":"...","ad":"...","ae":"...","an":"...","id":"...","bv":"...","tv":"...","fk":"...","fb":"...","fq":"...","create_time":"...","update_time":"..."}]}
  • 相关错误码-151

4.5.12 可控点分类查询

  • 方法与路径POST /api/mlinkClient/config/point/control/select/filter/{DeviceCode}
  • 权限:需 token
  • 请求体:同 4.5.9
  • 响应:同 4.5.9
  • 相关错误码-151

4.5.13 点名存在性检查

  • 方法与路径GET /api/mlinkClient/config/das/channel/point/check/{DeviceCode}
  • 权限:需 token
字段类型必填说明
namestringquery 参数,服务名
channelstringquery 参数,通道名
pointstringquery 参数,点名
  • 响应纯文本 truefalse
  • 相关错误码:无错误码(纯文本)

【注意】该接口是测点导入前做幂等判断的推荐手段。

4.5.14 新建测点后触发监控

  • 方法与路径POST /api/mlinkClient/config/point/data/monitor/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:纯文本(返回 deviceCode)
  • 相关错误码:无错误码(纯文本)

4.5.15 报警规则列表

  • 方法与路径POST /api/mlinkClient/config/point/alarm/list/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"list":[{"id":1,"ED":"...","gn":"...","ex":"...","h4":"...","h3":"...","ZH":"...","hl":"...","l4":"...","l3":"...","ZL":"...","LL":"..."}]}
  • 相关错误码-1数据不合法

4.5.16 单条报警规则

  • 方法与路径POST /api/mlinkClient/config/point/alarm/select/{DeviceCode}
  • 权限:需 token
字段类型必填说明
idint报警规则 ID
  • 响应:同 4.5.15 的单条结构
  • 相关错误码-1数据不合法

4.5.17 实时点接口

功能方法与路径备注
实时点 WS / 导出GET /api/mlinkClient/config/point/realtime/{DeviceCode}【存疑】响应结构体为空结构,实际写出内容未确证(待真机确认)
点表 WSGET /api/mlinkClient/config/point/ws/{DeviceCode}【存疑】同上(待真机确认)

4.5.18 系统点导入

  • 方法与路径POST /api/mlinkClient/config/sys/point/import/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
filefile系统点表 xlsx
  • 响应{"code":200,"msg":"ok"}
  • 相关错误码-151、「点表文件不包含任何工作簿」

4.5.19 系统点导出

  • 方法与路径POST /api/mlinkClient/config/sys/point/export/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:【存疑】响应结构体为空,实际写出内容未确证(待真机确认) (需 WebSocket 客户端连接设备才可观察)
  • 相关错误码:【存疑】(本轮真机验证为只读探测,未覆盖此项)

4.6 上传服务与上传测点

分组前缀:/api/mlinkClient/config。上传服务对应界面的「数据采集 → 上传服务」。

4.6.1 创建上传服务

与采集服务共用同一接口POST /api/mlinkClient/config/das/insert/{DeviceCode},请求体把 app[0].das_type 置为 "upload"。字段表、响应与错误码见 4.3.1。

【注意】上传服务不会自动创建默认通道(默认通道只在 das_type=das 时创建)。

4.6.2 上传服务树

  • 方法与路径GET /api/mlinkClient/config/upload/tree/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应
[]{
  nodeId, entityId, entityType(默认 "App"), text(上传服务名), leaf(默认 false),
  code(网关 5.0.0 及以上返回;【存疑】是否为服务进程名待真机确认),(本轮真机验证为**只读探测**,未覆盖此项)
  extend: { driverType, status, up, down, realtimeLog, driverVersion }
}
  • 相关错误码-1NonexistentData

4.6.3 从采集服务 / 通道批量生成上传点(核心链路推荐)

  • 方法与路径POST /api/mlinkClient/config/point/upload/{DeviceCode}
  • 权限:需 token
字段类型必填说明
unamestring目标上传服务名
apparrayapp[]{name, channels[]{name}}channels 为空 → 按整个采集服务导;channels 非空 → 按通道
  • 响应{"err":{"code":200,"msg":"ok"}}恒定返回成功
  • 相关错误码-1(但响应不可信,见下方警告)

【警告】该接口的 gRPC 结果被丢弃,响应恒为成功。必须用 4.6.4 的 upoint/list 回查确认。

4.6.4 上传测点列表

  • 方法与路径POST /api/mlinkClient/config/upoint/list/{DeviceCode}
  • 权限:需 token
字段类型必填说明
limit.limitint每页数量
limit.pageint页码
limit.orderstring排序字段
limit.sortstring排序方向
filter.snstring上传服务名
filter.channelstring通道名
filter.anstring别名
filter.asstring上传服务 / 通道归属
filter.gnstring点组
filter.idstring测点 ID
filter.rtstring点的类型
filter.dsstring数据状态
filter.keywordstring关键字
  • 响应count + points[],字段含 unsncnpngnedrtsradaeflagumanidbvtvfkfbfmptktexaplch4h3zhhlllzll3l4krfqeudbdtkzctastmavredata1 ~ redata3create_timeupdate_time全部为字符串
  • 相关错误码-151

4.6.5 上传测点新增(逐点)

  • 方法与路径POST /api/mlinkClient/config/upoint/insert/{DeviceCode}
  • 权限:需 token
字段类型必填说明
namestring上传服务名
pointsarray上传测点数组
points[].snstring源采集服务名。⚠️ 若为 calcsys(不区分大小写),fk / tv / bv 会被强制为 1 / 100 / 0 且跳过校验
points[].cnstring源通道名
points[].pnstring点名
points[].gnstring点组
points[].edstring描述
points[].rtint点的类型
points[].srstring采集点类型
points[].adstring地址信息,不超过 4096 字节
points[].aeint控制属性
points[].anstring别名
points[].idint源采集 / 计算测点的测点 ID(外键引用,不是新 ID)
points[].bvfloat32量程下限
points[].tvfloat32量程上限;tv 小于等于 bv 报「tv <= bv 不合法
points[].fkfloat32比例系数;为 0 报「比例系数(FK) float类型,不能为0, 默认为1」
points[].fbfloat32偏移量
points[].fqfloat32分辨率
points[].create_timeint64创建时间
points[].update_timeint64更新时间
  • 响应{"points":[{"id":1024,"err":{"code":200,"msg":"ok"}}]}恒定成功
  • 相关错误码-1(响应不可信)

【警告】该接口的 gRPC 结果被丢弃,响应恒为成功,必须回查。
【存疑】um(同步属性)在新增接口中没有对应字段,只能在更新或文件导入时设置(待真机确认)。

4.6.6 上传测点更新

  • 方法与路径POST /api/mlinkClient/config/upoint/update/{DeviceCode}
  • 权限:需 token
字段类型必填说明
namestring上传服务名
typestring注释写 uploaddas。⚠️ 代码完全未使用该字段【存疑】
pointsarray⚠️⚠️ 不能传空数组,否则服务端 panic(先取 [0] 再判长度)
points[].umint同步属性,取值见 5.6
points[].tvfloat量程上限
points[].bvfloat量程下限
points[].adstring地址信息,不超过 4096 字节
points[].srstring采集点类型
points[].fkfloat比例系数,不能为 0
points[].fbfloat偏移量
points[].fqstring分辨率
points[].rtstring点的类型
points[].aestring控制属性
points[].idint上传测点 ID
  • 校验:非 calc / sys 时校验 tv 大于 bv、地址信息不超过 4096 字节、fk 不为 0
  • 响应{"points":[{"id":1024,"err":{"code":200,"msg":"ok"}}]}恒定成功
  • 相关错误码-1、「tv <= bv 不合法」、「验证地址信息长度不能超过4096」、「比例系数(FK) float类型,不能为0, 默认为1」

【警告】points 传空数组会导致服务端 panic(HTTP 500),客户端必须保证至少 1 个点。
【警告】该接口的 gRPC 结果被丢弃,响应恒为成功,必须回查。

4.6.7 上传测点删除

  • 方法与路径DELETE /api/mlinkClient/config/upoint/delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
namestring上传服务名
typestring类型。⚠️ 代码未使用
pointsarraypoints[]{sn, pn, id},按源服务名、点名、测点 ID 定位
  • 响应{"err":{"code":200,"msg":"ok"}}恒定成功
  • 相关错误码-1(响应不可信)

4.6.8 上传测点清空

  • 方法与路径DELETE /api/mlinkClient/config/upoint/clear/{DeviceCode}
  • 权限:需 token
字段类型必填说明
namestring上传服务名,清空该服务下的全部上传点
  • 响应{"err":{"code":200,"msg":"CLEAR_SUCCESS"}}恒定成功
  • 相关错误码-1(响应不可信)

【警告】删除与清空的 gRPC 结果同样被丢弃,响应恒为成功,必须用 4.6.4 的 upoint/list 回查。

4.6.9 上传测点导入

  • 方法与路径POST /api/mlinkClient/config/upoint/import/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
filefile上传测点表 xlsx,共 11 列:ID点名同步属性量程上限量程下限地址信息(AD)上传点类型(SR)比例系数(FK)偏移量(FB)redata1redata2
appstringquery 参数,上传服务名
  • 必填列ID不小于 1024,是已存在的采集 / 计算测点 ID 的外键引用,无自增语义
  • 默认值FK=1TV=100BV=0FB=0
  • 分片:5000 点/批
  • 响应{"total":100,"successNum":100,"failNum":0,"tempFileName":""}
  • 失败报告:与采集测点共用 POST /config/point/export/errInfo
  • 相关错误码-1、「ID不能为空」、「同步属性不能为空」、「量程上限不能为空」、「量程下限不能为空」、「比例系数不能为空」、「偏移量不能为空」、「点表文件不包含任何工作簿」

4.6.10 上传测点导出

  • 方法与路径POST /api/mlinkClient/config/upoint/import/export/{DeviceCode}
  • 权限:需 token
字段类型必填说明
filter.appstring上传服务名
filter.channelstring通道名
filter.keywordstring关键字
filter.rtstring点的类型
filter.dsstring数据状态
  • 响应:文件流
  • 相关错误码-151

4.6.11 上传测点模板下载

  • 方法与路径POST /api/mlinkClient/config/upoint/import/template
  • 权限:需 token
  • 请求字段:无
  • 响应:文件流(11 列传空模板)
  • 相关错误码-151

4.6.12 外部上传按钮显示判定

  • 方法与路径GET /api/mlinkClient/config/upoint/upload/external/display/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"display":true}
  • 相关错误码-151

4.6.13 外部数据库节点列表

  • 方法与路径GET /api/mlinkClient/config/upoint/upload/external/nodes/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"nodes":["node1","node2"]}
  • 相关错误码-151

4.6.14 按外部节点添加上传点

  • 方法与路径POST /api/mlinkClient/config/upoint/upload/external/insert/{DeviceCode}
  • 权限:需 token
字段类型必填说明
unamestring上传服务名
nodesarray外部数据库节点名数组(字符串数组)
  • 响应:空响应
  • 相关错误码-151

4.6.15 系统点 / 计算点导图

  • 方法与路径POST /api/mlinkClient/config/upoint/system/insert/{DeviceCode}
  • 权限:需 token

⚠️ 本接口当前不可用(实测 404,2026-09-12):路由在真机上未注册
依据:api/config/upoint.go:312 定义了 UPointSystempointReq,但该结构体在 internal/ 全仓零引用
GoFrame 是按 controller 方法反查 API 结构体注册路由的,没有实现方法就不会注册。
全仓同类死路由共 6 条(/backup/{dc}/off/{dc}/reset/{dc}/point/ws/:dc、本接口、PointWsRes),
其中只有本接口被写进了本文档。调用方不要依赖它;如需该能力,请先在后端补 controller 实现。

字段类型必填说明
namestring上传服务名
typestring类型
pointsarraypoints[]{pn,ed,rt,an,id,kt,ex,eu,update_time}
  • 响应:【存疑】未在控制器中定位到对应实现,响应结构未确证(待真机确认)
  • 相关错误码:【存疑】(本轮真机验证为只读探测,未覆盖此项)

4.7 应用包管理

本节覆盖驱动 / 应用包的上传、下载、删除,以及应用市场查询。

4.7.1 驱动 / 系统服务包上传

  • 方法与路径POST /api/mlinkClient/system/driver/upload/{DeviceCode}
  • 权限:需 token
  • Content-Typemultipart/form-data
字段类型必填说明
filefile.tar.gz 包,内含 Version.ini 与可执行文件;为空返回「请选择需要上传的文件」
  • 响应{"name":"...","type":"das","code":...,"msg":"..."}
  • 相关错误码平台验证失败升级包版本不兼容,请检查后重试上传包类型验证失败,请上传系统升级包类型不存在版本验证失败当前设备上已存在该版本[..]驱动[..],无需下载或导入驱动不支持跨大版本升(降)级,请删除已有驱动后重试

Version.ini 关键字段

字段说明
platform与设备平台比对,all 直接放行
typesystem 走系统服务上传;uploaddas 都归类为驱动上传(响应中的 type 被强制写成 das
version与设备已装驱动比对;同版本提示「无需下载或导入」;主版本不同提示「不支持跨大版本升(降)级」

【警告】只有 /api/mlinkClient/system/driver/upload/{DeviceCode} 是可用路径/api/mlinkClient/config/driver/upload/{DeviceCode} 未注册(请求结构体存在但无处理器)。若调用后者会 404。

4.7.2 驱动列表

  • 方法与路径POST /api/mlinkClient/config/driver/list/{DeviceCode}
  • 权限:需 token
字段类型必填说明
filter.typestring驱动类型
filter.namestring驱动名
filter.descstring描述
limit.limitint每页数量
limit.pageint页码
limit.orderstring排序字段
limit.dirstring排序方向
  • 响应{"count":1,"drivers":[{"name":"...","version":"...","upload_time":"...","interface":"...","type":"das","desc":"..."}]}
  • 相关错误码:通用(200 / -1 / 51

4.7.3 驱动动态表单

  • 方法与路径GET /api/mlinkClient/config/driver/conf/{DeviceCode}
  • 权限:需 token
字段类型必填说明
namestringquery 参数,驱动名
typestringquery 参数,传 system 表示查询系统服务表单
  • 响应原始 JSON 文本(驱动表单定义,其中的字段名即 para 的 key)
  • 失败响应驱动不存在type=system 时查不到返回 系统服务不存在
  • 相关错误码-151、「驱动不存在」、「系统服务不存在」

【注意】这是二次开发必调的接口:只有拿到动态表单,才知道 para 里应该填哪些字段。

4.7.4 驱动删除

  • 方法与路径DELETE /api/mlinkClient/config/driver/delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
driverstringquery 参数,驱动名
  • 响应{"name":"...","err":{"code":200,"msg":"ok"}};失败时 HTTP 500 + PopupWindow
  • 相关错误码-150051

4.7.5 驱动 SR 枚举

  • 方法与路径GET /api/mlinkClient/config/driver/sr/sn/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appstringquery 参数,服务名
  • 响应{"sr":{"KEY":"显示名", ...}}(采集点类型枚举,与具体驱动相关)
  • 相关错误码-151

【注意】测点的 sr 字段取值必须来自该接口,不要硬编码。

4.7.6 驱动框架版本

  • 方法与路径GET /api/mlinkClient/config/driver/framework/{DeviceCode}
  • 权限:需 token
字段类型必填说明
driverstringquery 参数,驱动名
  • 响应{"Protocol":"...","Version":"..."}
  • 相关错误码-151

4.7.7 拉取在线应用

  • 方法与路径POST /api/mlinkClient/config/app/online/pull/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"total":1,"apps":[...]}
  • 相关错误码-1、「应用下载信息获取失败」

4.7.8 查询在线应用

  • 方法与路径POST /api/mlinkClient/config/app/online/list/{DeviceCode}
  • 权限:需 token
字段类型必填说明
filter.typestring应用类型
filter.namestring应用名
filter.descstring描述
limit.limitint每页数量
limit.pageint页码
  • 响应{"code":200,"msg":"ok","data":{"count":1,"drivers":[...]}}
  • 相关错误码-151

4.7.9 删除在线应用

  • 方法与路径DELETE /api/mlinkClient/config/app/online/delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appIdstring应用 ID
appNamestring应用名
  • 响应{"code":200,"msg":"ok","data":{}}
  • 相关错误码-151

4.7.10 应用下载状态判定

  • 方法与路径GET /api/mlinkClient/config/app/download/status/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appIdstringquery 参数,应用 ID
  • 响应{"download":true}
  • 相关错误码-151

4.7.11 应用市场:应用列表

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/app-list/{DeviceCode}
  • 权限:需 token
字段类型必填说明
typestring应用类型
mainGroupNamestring主分组名
groupNamestring分组名
keywordstring关键字
pageint页码
limitint每页数量
  • 响应{"code":200,"msg":"ok","count":1,"data":[{"appName":"...","version":"...","type":"...","download":true,"update":false,"delete":false}]}
  • 相关错误码-1、「未找到应用列表接口」、「访问应用列表接口失败」

4.7.12 应用市场:应用分组树

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/group-tree/{DeviceCode}
  • 权限:需 token
字段类型必填说明
typestring应用类型
  • 响应{"code":200,"msg":"ok","data":{...}}
  • 相关错误码-151

4.7.13 应用市场:刷新应用列表

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/app-list-update/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:空响应
  • 相关错误码-151

4.7.14 应用市场:应用详情

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/app-detail/{DeviceCode}
  • 权限:需 token
字段类型必填说明
typestring应用类型
appNamestring应用名
  • 响应:应用对象
  • 相关错误码-151

4.7.15 应用市场:应用下载链接

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/app-download-link/{DeviceCode}
  • 权限:需 token
字段类型必填说明
appNamestring应用名
platformstring目标平台
dasVersionstringDASS 版本
versionNostring应用版本号
  • 响应{"url":"...","outUrl":"...","md5":"...","fileName":"..."}
  • 相关错误码-151

4.7.16 应用市场:应用下载并导入

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/app-download/{DeviceCode}
  • 权限:需 token
字段类型必填说明
linkstring下载链接(取自 4.7.15)
md5string包 MD5 校验值
fileNamestring包文件名
typestring取值 dasuploadedge
appNamestring应用名
  • 响应{"code":...,"name":"...","type":"...","msg":"..."}
  • 相关错误码-151

4.7.17 应用市场:应用删除

  • 方法与路径POST /api/mlinkClient/config/driver/app-gallery/app-delete/{DeviceCode}
  • 权限:需 token
字段类型必填说明
typestring应用类型
appNamestring应用名
  • 响应:空响应(response.Ok
  • 相关错误码-151

【警告】应用删除在控制器层不做「被引用」校验,删除前请人工确认该应用没有被服务使用。

4.7.18 未注册的路径

路径状态
POST /api/mlinkClient/config/driver/upload/{DeviceCode}未注册,请改用 4.7.1 的 system 组路径

4.8 实时库与数据查询

4.8.1 实时库测点查询

  • 方法与路径POST /api/mlinkClient/config/data/point/list/{DeviceCode}
  • 权限:需 token
字段类型必填说明
limit.pageint页码
limit.limitint每页数量
limit.orderstring排序字段
limit.sortstring排序方向
filter.nodestring实时库节点
filter.keywordstring关键字
filter.IDstring测点 ID
filter.DSstring数据状态
  • 响应{"count":1,"points":[{"pn":"...","gn":"...","ed":"...","rt":"...","sr":"...","ad":"...","ae":"...","flag":"...","an":"...","id":"...","kt":"...","ex":"...","db":"...","dt":"...","kz":"..."}]}
  • 相关错误码-151

4.8.2 实时库节点树

  • 方法与路径GET /api/mlinkClient/config/data/node/list/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"Tree":[...]}
  • 相关错误码-151

4.8.3 设备基础信息(含授权点数)

  • 方法与路径GET /api/mlinkClient/monitor/base/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应box_nameversionhard_versionmirror_versiondev_codesnexpirelicense_pointused_pointplatformmax_service_numbermax_point_number
  • 相关错误码-1NonexistentDataHostIsDown

【注意】license_pointused_point授权容量的判据:大批量建测点前应先核对余量,否则会中途失败。

4.8.4 首页基础信息

  • 方法与路径GET /api/mlinkClient/monitor/info/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:设备运行时基础信息(网络、内存、磁盘等)
  • 相关错误码-1HostIsDown

4.8.5 监控概览:异常事件列表

  • 方法与路径POST /api/mlinkClient/monitor/unusualEvent/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:事件数组,字段为 event_levelevent_codeevent_namecontenttimestamp
  • 相关错误码-1HostIsDown

4.8.6 监控概览:服务概览

  • 方法与路径GET /api/mlinkClient/monitor/unusualService/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应{"code":200,"msg":"ok","data":{"list":[...],"total":0}}
  • 相关错误码-1HostIsDown

4.8.7 监控概览:通道概览

  • 方法与路径GET /api/mlinkClient/monitor/unusualChannel/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:结构同 4.8.6
  • 相关错误码-1HostIsDown

4.8.8 监控概览:测点概览

  • 方法与路径GET /api/mlinkClient/monitor/unusualPoint/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:结构同 4.8.6
  • 相关错误码-1HostIsDown

4.8.9 网口流量

  • 方法与路径GET /api/mlinkClient/monitor/flowInfo/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:网口流量信息
  • 相关错误码-1HostIsDown

4.8.10 授权 / 服务信息

  • 方法与路径GET /api/mlinkClient/monitor/license/service/info/{DeviceCode}
  • 权限:需 token
  • 请求字段:无
  • 响应:授权与服务信息
  • 相关错误码-1HostIsDown

4.8.11 WebSocket 实时推送

功能方法与路径说明
服务树实时推送GET /api/mlinkClient/websocket/servicetree/tree/{DeviceCode}?token=<token>帧格式 {"type":"snapshot" 或 "diff" 或 "error","data":...}
实时日志GET /api/mlinkClient/websocket/log/realtime/{DeviceCode}?token=<token>日志帧
监控异常事件GET /api/mlinkClient/websocket/monitor/unusualEvent/{DeviceCode}?token=<token>事件帧
应用下载流GET /api/mlinkClient/websocket/app/download/{DeviceCode}?token=<token>
  • 鉴权:WebSocket 无法设置请求头,token 只能放 query 参数

【注意】服务树推送的 snapshot 帧适合做首次全量对齐,diff 帧适合做增量维护。收到 error 帧应重连并重新拉取一次快照。

4.8.12 已注册 STOMP topic

  • 方法与路径GET /api/mlinkClient/topics/get
  • 权限免认证(白名单)
  • 请求字段:无
  • 响应:已注册 topic 列表
  • 相关错误码:通用(200 / -1 / 51

4.8.13 STOMP 端点

  • 方法与路径/api/mlinkClient/stomp/*(全部方法)
  • 权限:需 token(挂 Ctx 与 Auth 中间件)
  • 响应:STOMP 帧协议
  • 相关错误码:同 STOMP 协议

4.8.14 动态表单远程调用

  • 方法与路径POST /api/mlinkClient/remote/dataSource/{DeviceCode}
  • 权限:需 token
  • 请求字段:驱动动态表单定义的远程数据源参数
  • 响应:驱动动态表单所需的远程数据
  • 相关错误码-151

4.8.15 Ping 调试

  • 方法与路径POST /api/mlinkClient/debugger/ping/{DeviceCode}
  • 权限:需 token
字段类型必填说明
hoststring待 Ping 的主机地址或域名
  • 响应data 为字符串数组(Ping 输出行)
  • 相关错误码-151