Appearance
5. 数据字典
本章解释 DASS2 测点/上传点各字段的含义、取值范围与限制,用于填写点表、构造请求体和解读响应。
口径说明:中文名称取自 DASS2 前端
dasserver-ui的字段标签(src/config/i18N.js的pointEdit段),字段含义取自后端结构体注释(models/repositories/point_repository.go),枚举取值与长度限制取自后端真实校验代码。三者一致时不再分别标注。
5.1 三层 ID:ID / UID / PID 别搞混
这是 DASS2 数据模型里最容易出错的地方——同一个测点有三个「ID」:
| 字段 | 中文名 | 含义 | 谁分配 | 备注 |
|---|---|---|---|---|
ID | ID | DASS2 关系库(SQLite)自增主键 | 系统 | 只在本地库里有意义,用于接口寻址 |
UID | — | 本地实时库(openPlant)测点 ID | 用户填 / 系统分配 | 点表里的 ID 列写的就是它;≥1024 |
PID | — | 云端实时库测点 ID | 云端 | 本机不维护,通常为 0 |
【警告】点表模板里的列名叫
ID,但它对应的是实时库点号UID,不是数据库主键。这是两份「ID」语义打架的地方,导入时不要试图去匹配接口返回的ID。
对照实测:
json
{"ID":226,"UID":1026,"PID":0,"PN":"AX002","GN":"W3.JEN.AX002","SN":"jen"}点表里填的 ID=1026 → 落到接口返回的 UID=1026;接口返回的 ID=226 是本地库自增主键。
GN(全局名称)= 节点名.点名,例如节点 W3.JEN + 点名 AX002 → W3.JEN.AX002,全节点唯一。
5.2 测点字段全表
5.2.1 导入模板的 34 列
实测 POST /v1/point/template/{dasId} 下载的 xlsx,第一个工作表表头为 34 列,顺序如下:
ID PN AN RT ED EU AD SR EVENT REDATA1 PH PL FK FB AP
H4 LC H3 ZH HL LL ZL L3 L4 KR IV FM FQ TV BV KZ DT DB| 列 | 中文名 | 导入时是否必需 | 说明 |
|---|---|---|---|
ID | ID | 条件必需 | 实时库点号(写入 UID)。数字、≥1024、文件内不可重复。isLink=true(自动添加到实时库)时可留空由系统分配;isLink=false 时必填 |
PN | 点名 | 必需 | 节点下唯一。字符集:数字、大小写字母、# : @ - _。长度见 5.4。导入时自动转大写 |
AN | 别名 | 否 | 测点别名 |
RT | 类型(数据类型) | 必需列表头 | 数据存到 openPlant 的类型,见 5.3.1 |
ED | 描述 | 否 | 自由文本 |
EU | 量纲 | 否 | 工程单位,如 kg、s、℃ |
AD | 地址信息 | 否 | 驱动侧地址,格式随驱动而变(如 Modbus 为 1.3.0) |
SR | 采集点类型 | 否 | 由驱动定义,取值受该驱动支持的列表限制,见 5.3.2 |
EVENT | 控制字段 | 否 | 整数,写入 Event |
REDATA1 | 保留字段1 | 否 | 留空时默认写入 "1"(不是空字符串!) |
PH | 测点上限 | 否 | 数值,float64 |
PL | 测点下限 | 否 | 数值,float64 |
FK | 比例系数 | 否 | 数值,默认 1 |
FB | 偏移量 | 否 | 数值,默认 0 |
AP | 报警级别 | 否 | 整数 |
H4 | 报警高4限 | 否 | 数值 |
LC | 报警属性 | 否 | 整数 |
H3 | 报警高3限 | 否 | 数值 |
ZH | 报警高2限 | 否 | 数值 |
HL | 报警高限 | 否 | 数值 |
LL | 报警低限 | 否 | 数值 |
ZL | 报警低2限 | 否 | 数值 |
L3 | 报警低3限 | 否 | 数值 |
L4 | 报警低4限 | 否 | 数值 |
KR | 特征字 | 否 | 文本 |
IV | 初始值 | 否 | 数值 |
FM | 显示格式 | 否 | 整数(int16),枚举由前端 / 实时库定义,后端不校验 |
FQ | 分辨率 | 否 | 整数(int32) |
TV | 量程上限 | 否 | 数值。校验:不得小于 BV |
BV | 量程下限 | 否 | 数值。校验:不得大于 TV |
KZ | 压缩类型 | 否 | 见 5.3.4 |
DT | 死区类型 | 否 | 见 5.3.3 |
DB | 死区 | 否 | 数值,默认 0.2,不可小于 0 |
5.2.2 接口返回但不属于导入模板的字段
GET /v1/point* 返回的测点对象比模板列更多,以下是补充字段:
| 字段 | 中文名 | 说明 |
|---|---|---|
PID | — | 云端实时库测点 ID |
GN | 全局名称 | 节点名.点名,唯一 |
SN | — | 所属采集服务的名称(不是 ID) |
CP | 设备号 | 文本 |
EX | 计算公式 | 计算点使用 |
DS | 当前状态 | 位域,见 5.3.5 |
AV | 实时值 | 类型自适应:可能返回数字或字符串;orm:"-",不落库 |
AS | 状态 | 文本状态 |
TM | 最后更新时间 | Unix 时间戳(秒) |
FLAG | 操作状态 | 云端交互用,新导入的点实测为 "adding" |
SYNC | 操作状态 | 云端交互用 |
UM | 操作状态 | 云端交互用 |
REDATA1 / REDATA2 | 保留字段1 / 2 | 自由使用 |
C1~C8 | 报警限颜色 | 分别对应 LL / ZL / L3 / L4 / HL / ZH / H3 / H4 的颜色 |
PT | 点的来源 | 整数 |
KT | 计算类型 | 整数 |
MAXV MINV MAXTIME MINTIME AVGV FLOW | 统计值 | 最大/最小值与时刻、平均值、流量 |
【注意】
AV(实时值)字段类型不稳定——同一接口在不同测点类型下可能返回数字或字符串。客户端反序列化请用「任意类型」或用字符串兜底,不要强类型绑定成float。
5.3 枚举速查
5.3.1 RT 数据类型(存到 openPlant 的类型)
| 点表填 | 落库值 | 含义 |
|---|---|---|
AX | 0 | 模拟量输入 |
DX | 1 | 开关量输入 |
I2 | 2 | 2 字节整型 |
I4 | 3 | 4 字节整型 |
R8 | 4 | 8 字节浮点 |
LONG | 5 | 长整型 |
TEXT | 6 | 文本 |
BLOB | 7 | 二进制块 |
【注意】比较时大小写不敏感(后端先
ToUpper)。RT是表头必需列——缺这个列整批导入直接失败。
5.3.2 SR 采集点类型
SR 的合法取值由驱动决定,不是全局固定枚举。导入时后端会拿它跟该服务所用驱动支持的列表比对,不在列表内则报 采集点类型不匹配。
正确姿势:先 GET /v1/point/sr 或 GET /v1/driver/conf/{driverId} 拿到该驱动支持的 SR 列表,再填点表。实测模板里出现过 INT16、FLOAT,但不要把它们当成全集。
5.3.3 DT 死区类型
| 点表填 | 落库值 | 含义 |
|---|---|---|
| (任意其它值 / 空) | 0 | 默认 |
ENG | 1 | 工程量死区 |
【注意】后端逻辑是「先置 0,再判断是否等于
ENG」,所以任何非ENG的字符串都会静默变成 0,不会报错。
5.3.4 KZ 压缩类型
| 点表填 | 落库值 | 含义 |
|---|---|---|
| (任意其它值 / 空) | 0 | 默认 |
LINEAR | 1 | 线性压缩 |
NONE | 2 | 不压缩 |
【注意】与
DT同样的问题:非法值静默降级为 0,不报错。
5.3.5 DS 当前状态(位域)
DS 不是枚举,而是位掩码。DASS2 前端据此分三态:
| 状态 | 判定条件 |
|---|---|
Good | (DS & (1 << 15)) == 0 |
Timeout | (DS & (1 << 15)) != 0 |
Bad | (DS & (1 << 9)) != 0 |
实测新导入未取值的测点 DS = -32768(即 1 << 15 置位),属于 Timeout 态,这是正常的,不代表导入失败。
【注意】
/v1/point查询接口支持用DS过滤,传的是状态名(Good/Bad/Timeout)而不是数值;传别的会直接报非法的测点状态。
5.3.6 UM 操作状态
consts/consts.go 中只定义了一个取值:
| 值 | 含义 |
|---|---|
adding | 新增中(导入后尚未与云端同步) |
实测新导入测点的 FLAG 为 "adding"。该字段族(FLAG / SYNC / UM)用于与云平台的状态交互,本地二次开发一般不必关心。
5.3.7 服务状态
| 值 | 含义 |
|---|---|
running | 运行中 |
stop | 已停止 |
error | 异常(此时只能执行退出) |
5.4 长度与数量限制
实测通过 GET /v1/system/conf 读取真机限制:
| 配置项 | 实测值 | 含义 |
|---|---|---|
Base.MaxPnLength | 32 | 点名(PN)长度上限,单位按字符计。conf/dasserver.conf 中对应 pn.length=32 |
Base.MaxLengthServiceName | 11 | 服务名长度上限,与《使用手册》「长度不超过 11 位」一致 |
Service.MaxNumber | 10 | 采集服务最大数量 |
Point.MaxNumber | 2000 | 测点最大数量 |
License.MaxLicense | (密钥串) | 授权信息 |
License.Device | IA-22 | 授权绑定的设备型号前缀 |
【注意】点名上限是 32,不是 60。 DASS2 与 DASS5 的口径不同:DASS5 的点名上限是 60 字节,DASS2 实测为 32(
char(32)的老文档口径对 DASS2 是准确的)。跨版本搬运点表时务必注意。
【注意】测点数量受**授权(License)**约束,不只是Point.MaxNumber。导入前建议核对GET /v1/mqtt/baseInfo的licensePoint/userdPoint。
其它后端常量(consts/consts.go):
| 常量 | 值 | 含义 |
|---|---|---|
QueryLimit | 1000 | 单次查询上限 |
MaxInsertNumber | 10000 | 单次插入上限 |
MaxUpdateNumber | 100000 | 单次更新上限 |
MaxDeleteNumber | 10000 | 单次删除上限 |
MaxCsvRecordLength | 100000 | CSV 记录长度上限 |
DefaultPagenum | 20 | 默认分页条数 |
【警告】点表单批行数受
MaxInsertNumber(10000)约束。超大批量请拆分成多个 xlsx 分批导入,因为导入是同步阻塞的,一个超大文件很容易把请求拖到超时。
5.5 采集点(point)与上传点(upoint)的关系
两者字段结构几乎完全相同(同一套 Point 结构体),区别在「数据流向」与「归属」:
| 维度 | 采集点 point | 上传点 upoint |
|---|---|---|
| 方向 | 从设备/驱动采进来 | 向上一级传出去 |
| 归属服务 | driverType = das 的采集服务 | driverType = upload 的上传服务 |
SN 字段 | 采集服务名 | 上传服务名(两者可以不同!) |
典型 RT | 随采集数据而定 | 需与云端约定一致 |
| 接口 | /v1/point/* | /v1/upoint/* |
实测对照(同一台设备):
json
// GET /v1/point?limit=1 → 采集点,SN=jen
{"ID":226,"UID":1026,"PN":"AX002","GN":"W3.JEN.AX002","SN":"jen","RT":0,"FLAG":"adding"}
// GET /v1/upoint?limit=1 → 上传点,SN=mqtt(上传服务)
{"ID":124,"UID":1029,"PN":"DX001","GN":"W3.JEN.DX001","SN":"mqtt","RT":1,
"CP":"DX001;QZ-TEST-METER-005;METER-005;desc; Nari; PDZ833"}注意上传点的 GN 仍是 W3.JEN.DX001(沿用采集节点名),但 SN 是上传服务 mqtt。
【注意】上传点的
CP(设备号)字段实测承载了分号分隔的复合信息(点号;设备名;设备编号;描述;厂商;型号),格式由上传驱动定义,不是单一设备号。填表时以对应上传驱动的配置说明为准。
5.6 上传点模板格式差异(实测)
两个模板接口返回的文件格式不同,前端下载逻辑也因此不同:
| 接口 | 实测格式 | 表头示例 |
|---|---|---|
POST /v1/point/template/{dasId} | xlsx(响应体以 PK 开头) | 34 列,见 5.2.1 |
POST /v1/upoint/template/{dasId} | CSV(纯文本) | ID,AN,AD,SR,ED,FK,FB,EVENT |
上传点模板实测内容:
csv
ID,AN,AD,SR,ED,FK,FB,EVENT
1046,g02,1.3.0,INT16,22,1,0,0
1047,g023,1.3.0,FLOAT,22,1,0,1【警告】上传点模板列数与采集点不一致(8 列 vs 34 列),且是 CSV。不要把采集点模板直接拿去做上传点导入,也不要用同一个解析器处理两者。
帮助中心