1. mapping脚本说明
- 1. mapping脚本说明
1.1. 文档说明
1.2. 修订记录
日期 | 版本 | 说明 | 编写 |
---|---|---|---|
2020-11-11 | 1.0 R1 | Mapping脚本规范 | cdp |
2021-01-07 | 2.0 R2 | 添加COL/STT类型 | cdp |
1.3. 格式规范
1.3.1. 二维json数组
每一行为一个映射关系,可以同时存在多行。例:
[
["v1", "v1_en_label", "v1的中文标签", "STA", "Changed", "$AprusID-1.L1_3_7_3", "", ""],
["v2", "v2_en_label", "v2的中文标签", "STA", "Changed", "A32017051300249.L1_3_8_15", "", ""],
["COL1", "COL1_en_label", "COL1的中文标签", "COL", "Cycled", "1m", "@Condition", {
"project_id": "887"
}],
["STT1", "STT1", "STT1的中文标签", "STT", "Cycled", "1m", "@Condition", {
"project_id": "887"
}],
["expr", "", "测试计算函数", "FUNC", "Changed", "", "@Expr", {
"expr": "min((v1),(v2))",
"digit": 3
}],
["compare", "", "测试比较函数", "FUNC", "Changed", "", "@Compare", {
"args": [
["v1>v2", "v1"],
["v1<v2", "v2"]
]
}],
["1001", "", "测试事件1", "EVNT", "Changed", "$AprusID-1.L1_3_8_15", "==", "0"],
["1002", "", "测试事件2", "EVNT", "Changed", "v1", "==", "1"]
]
1.3.2. 行说明
一行有8个字段,用于保存适配器和对象的关系,同时可以进行额外的功能。
1.3.2.1. 变量名/统一编码
第一个字段,变量名或统一编码,用于记录生成的数据,也可用于查询。当为EVNT类型时,为统一编码;否则为变量名。
1.3.2.2. 英文标签
第二个字段,变量名/统一编码所对应的英文标签。
1.3.2.3. 中文标签
第三个字段,变量名/统一编码所对应的中文标签。
1.3.2.4. 变量类型
第四个字段,分别为SET,STA,COL,STT,FUNC,EVNT,VEC,MAT,用于将采集的数据做各类型的操作。
变量类型 | 中文说明 | 备注 |
---|---|---|
SET | 设置类变量 | 暂不支持 |
STA | 状态类变量 | 5.0.0 |
COL | 离线类变量 | 5.3.0 |
STT | 统计类变量 | 5.3.0 |
FUNC | 函数类变量 | 5.0.0 |
EVNT | 事件类变量 | 5.0.0 |
VEC | 列表 | 暂不支持 |
MAT | 矩阵 | 暂不支持 |
1.3.2.5. 拼接方式
第五个字段,拼接方式有两种,一种为周期拼接,一种为改变拼接。根据对应类型有对应值,值为"Changed"和"Cycled"。用于选择数据的拼接方式。
变量类型 | 拼接方式 | 备注 |
---|---|---|
SET | Changed | 暂不支持 |
STA | Changed | 5.0.0 |
COL | Cycled | 5.3.0 |
STT | Cycled | 5.3.0 |
FUNC | Changed | 5.0.0 |
EVNT | Changed | 5.0.0 |
VEC | Changed | 暂不支持 |
MAT | Changed | 暂不支持 |
1.3.2.6. 拼接条件
第六个字段,拼接条件根据变量类型的不同,有四种填写方式。
1.终端+终端地址,如"$AprusID-1.L1_2_3456","A32017051300249.L1_2_3456",用小数点"."作为分隔符,小数点之前为终端,小数点之后为终端地址。
终端有两种写法,一种为直接填写终端ID,如"A32017051300249.L1_2_3456"。
另外一种为使用对象表中对象所对应的终端列表的第n个终端。如"$AprusID-1.L1_2_3456"。假设对象的终端列表为"A22017051300249,A32017051300249,AX2017051300249",那"$AprusID-1"实际上对应了"A22017051300249","$AprusID-3"实际上对应了"AX2017051300249"。
2.变量名,如"v1"。
3.时间周期,如"10m"表示10分钟,"1h"表示1小时。
单位 | 中文 | 单位转换 |
---|---|---|
ns | 纳秒 | 1ns |
us | 微秒 | 1000ns |
ms | 毫秒 | 1000us |
s | 秒 | 1000ms |
m | 分钟 | 60s |
h | 小时 | 60m |
4.不填写。
变量类型 | 拼接方式 | 拼接条件 | 例子 | 备注 |
---|---|---|---|---|
SET | Changed | 1 | $AprusID-1.L1_2_3456 |
暂不支持 |
STA | Changed | 1 | A32017051300249.L1_2_3456 | 5.0.0 |
COL | Cycled | 3 | 10m | 5.3.0 |
STT | Cycled | 3 | 1h | 5.3.0 |
FUNC | Changed | 4 | 5.0.0 | |
EVNT | Changed | 1或2 | 5.0.0 | |
VEC | Changed | 未定 | 暂不支持 | |
MAT | Changed | 未定 | 暂不支持 |
1.3.2.7. 逻辑表达式
第七个字段,配合逻辑值/扩展字段使用,可以用于判断是否产生事件,获取离线数据的条件或者计算等。
比较符/函数 | 中文说明 | 适用类型 |
---|---|---|
== | 等于 | EVNT |
> | 大于 | EVNT |
>= | 大于等于 | EVNT |
< | 小于 | EVNT |
<= | 小于等于 | EVNT |
!= | 不等于 | EVNT |
@Condition | 条件函数 | COL/STT |
@Compare | 比较函数 | FUNC |
@Expr | 表达式函数 | FUNC |
1.3.2.8. 逻辑值
逻辑值根据逻辑表达式具体定义
1.4. 类型
1.4.1. SET
1.4.2. STA
直接将终端上报的地址位的数据保存起来。例:
["v1", "v1_en_label", "v1的中文标签", "STA", "Changed", "A32017051300249.L1_1_123", "", ""]
若此时A32017051300249上报了L1_1_123=101,则会保存一条v1=101的数据。
1.4.3. COL
离线数据类型用于定时获取最新的数据到mixiot。
1.4.3.1. 拼接条件
使用时间周期,类似10s代表10秒,1m代表1分钟,1h代表1小时。
1.4.3.2. 逻辑值
用于获取指定项目指定对象的结果。例:
["COL1", "COL1_en_label", "COL1的中文标签", "COL", "Cycled", "1m", "@Condition", {
"project_id": "887",
"object_id": "1001"
}]
该脚本会每1分钟获取一次对象为1001,项目为887的离线数据写入到COL1中。
注意事项:
- 逻辑表达式为:@Condition;逻辑值为json,一定包含一个key为project_id,可选key为object_id,当object_id不存在时,使用自身对象id作为参数。
1.4.4. STT
统计数据类型用于定时获取最新的数据到mixiot。
1.4.4.1. 拼接条件
使用时间周期,类似10s代表10秒,1m代表1分钟,1h代表1小时。
1.4.4.2. 逻辑值
用于获取指定项目指定对象的结果。例:
["STT1", "STT1", "STT1的中文标签", "STT", "Cycled", "1m", "@Condition", {
"project_id": "887",
"object_id": "1001"
}]
该脚本会每1分钟获取一次对象为1001,项目为887的统计数据写入到STT1中。
注意事项:
- 逻辑表达式为:@Condition;逻辑值为json,一定包含一个key为project_id,可选key为object_id,当object_id不存在时,使用自身对象id作为参数。
1.4.5. FUNC
函数类型支持两个类型的函数,一种是表达式计算,另外一种是比较计算。需要在逻辑表达式中填入对应的类型。
1.4.5.1. Expr
用于计算表达式的结果。例:
["expr", "", "测试计算函数", "FUNC", "Changed", "", "@Expr", {
"expr": "min((v1),(v2))"
}]
当v1和v2存在时,计算v1和v2中的最小值,否则不计算。
注意事项:
- 逻辑表达式为:@Expr;逻辑值为json,一定包含一个key为expr,value为表达式的一个属性。
1.4.5.2. Compare
用于多个值的比较,得出一个结果。例:
["compare", "", "测试比较函数", "FUNC", "Changed", "", "@Compare", {
"args": [
["v1>v2", "v1"],
["v1<v2", "v2"]
]
}]
当v1和v2存在时,先比较v1是否大于v2,是的话,返回v1的值,不再进行任何操作。否则比较v1是否小于v2,是的话,返回v2的值。
相当于使用max((v1),(v2))计算,计算v1和v2中的最大值。
注意事项:
- 逻辑表达式为@Compare
- 逻辑值为json,一定包含一个key为args,value为json数组。
- value为二维json数组,第一个参数为判断条件,第二个参数为数值或者为表达式,不支持除数值类型外的结果。
1.4.5.3. 运算符优先级
优先级 | 运算符 | 备注 |
---|---|---|
7 | 函数 |
用于计算结果,可用于任意地方 |
6 | ! |
用于compare的逻辑值中args参数的第一个值 |
5 | * / |
用于计算结果,属于四则运算,可用于任意地方 |
4 | + - |
用于计算结果,属于四则运算,可用于任意地方 |
3 | == != < <= > >= |
用于compare的逻辑值中args参数的第一个值 |
2 | && |
用于compare的逻辑值中args参数的第一个值 |
1 | || | 用于compare的逻辑值中args参数的第一个值 |
1.4.5.4. 支持的通用函数
常量 | 数值 |
---|---|
E | 2.71828182845904523536028747135266249775724709369995957496696763 |
Pi | 3.14159265358979323846264338327950288419716939937510582097494459 |
函数 | 说明 |
---|---|
ceil(x) | 返回不小于x的最小整数(的浮点值) |
floor(x) | 返回不大于x的最小整数(的浮点值) |
trunc(x) | 返回x的整数部分(的浮点值) |
abs(x) | 返回x的绝对值 |
sqrt(x) | 返回x的二次方根 |
cbrt(x) | 返回x的三次方根 |
sin(x) | 求正弦(x是弧度) |
cos(x) | 求余弦(x是弧度) |
tan(x) | 求正切(x是弧度) |
asin(x) | 求反正弦(x是弧度) |
acos(x) | 求反余弦(x是弧度) |
atan(x) | 求反正切(x是弧度) |
sinh(x) | 求双曲正弦(x是弧度) |
cosh(x) | 求双曲余弦(x是弧度) |
tanh(x) | 求双曲正切(x是弧度) |
asinh(x) | 求反双曲正弦(x是弧度) |
acosh(x) | 求反双曲余弦(x是弧度) |
atanh(x) | 求反双曲正切(x是弧度) |
max((x),(y)) | 返回x和y中最大值 |
min((x),(y)) | 返回x和y中最小值 |
dim((x),(y)) | 函数返回x-y和0中的最大值 |
mod((x),(y)) | 取余运算,可以理解为 x-trunc(x/y)*y,结果的正负号和x相同 |
hypot((x),(y)) | 返回Sqrt(p*p + q*q),注意要避免不必要的溢出或下溢 |
pow((x),(y)) | 返回x**y |
1.4.5.5. 其他功能说明及使用注意事项
逻辑值为json,当含有以下key时,有其他的功能
1.4.5.5.1. 当逻辑值中含有key为digit时
当有key为digit时,可以选择结果的小数点后的精度,默认值为3。
1.4.5.5.2. 当逻辑值中含有key为level时
当有key为level时,可以选择计算的优先级,等级越高越优先计算,默认值为0。优先级相同情况下,无序执行。例:当生成了v0的时候,优先计算v2,然后计算v1,最后计算expr的脚本如下。
[
["v0", "v0", "v0", "STA", "Changed", "A3.L1_1L1", "", ""],
["v1", "v1", "v1", "FUNC", "Changed", "", "@Expr", {
"expr": "v0+1",
"level": 10
}],
["v2", "v2", "v2", "FUNC", "Changed", "", "@Expr", {
"expr": "v0+2",
"level": 20
}],
["expr", "", "测试计算函数", "FUNC", "Changed", "", "@Expr", {
"expr": "min((v1),(v2))",
"level": 5
}]
]
1.4.5.5.3. 当逻辑值中含有key为default时
当有key为default时,可以将default的值代替暂时还没有数据的变量名。例:若min((v1),(v2))中,在v1暂时没有数值的情况下,也就是v1不存在时,该表达式不计算。可以按照以下展示进行使用,此时,v1的值会默认改为0,然后进行v1和v2的比较,并获取最小值。
["expr", "", "测试计算函数", "FUNC", "Changed", "", "@Expr", {
"expr": "min((v1),(v2))",
"default":0
}]
1.4.5.5.4. 当逻辑值中含有key为其他变量名时
当有key为其他变量名时,可以将变量名的值代替暂时还没有数据的对应变量名。例:若min((v1),(v2))中,在v1暂时没有数值的情况下,也就是v1不存在时,该表达式不计算。可以按照以下展示进行使用,此时,v1的值会默认改为0,然后进行v1和v2的比较,并获取最小值。
["expr", "", "测试计算函数", "FUNC", "Changed", "", "@Expr", {
"expr": "min((v1),(v2))",
"v1":0
}]
1.4.5.5.5. 若同时存在default和其他变量名
优先使用变量名对应值,如果没有再使用default的值
1.4.5.6. 函数类型没有拼接条件
函数类型没有拼接条件,若表达式或者判断条件中包含的变量名已经生成,则会触发该函数类型的计算或者判断。所以不支持常数的计算或者固定值的表示。
1.4.5.6.1. 表达式中的变量名
表达式中使用的所有变量名都是整个脚本中已经定义好的,若存在脚本中没有的变量名,不进行计算。
若表达式中存在未有数值的变量名,不进行计算。当存在key为default或者对应变量名的情况下,可以继续进行计算。
1.4.6. EVNT
该类型用于生成对象事件,不会生成对象的历史数据。并会以统一编码的形式存储。例:
[
["1001", "", "测试事件1", "EVNT", "Changed", "A32017051300249.L1_3_8_15", "==", "0"],
["1002", "", "测试事件2", "EVNT", "Changed", "v1", "==", "1"]
]
这是两条记录。
若此时A32017051300249上报了L1_3_8_15=0,则会生成一条统一编码为1001的事件记录。
或者当该对象的变量v1生成时,且v1==1,则生成一条统一编码为1002的事件记录。
1.4.6.1. 拼接条件
拼接条件可以用两种方式填写,用于确定判断的数据源。
1.终端+终端地址,如"$AprusID-1.L1_2_3456","A32017051300249.L1_2_3456",用小数点"."作为分隔符,小数点之前为终端,小数点之后为终端地址。
终端有两种写法,一种为直接填写终端ID,如"A32017051300249.L1_2_3456"。
另外一种为使用对象表中对象所对应的终端列表的第n个终端。如"$AprusID-1.L1_2_3456"。假设对象的终端列表为"A22017051300249,A32017051300249,AX2017051300249",那"$AprusID-1"实际上对应了"A22017051300249","$AprusID-3"实际上对应了"AX2017051300249"。
2.变量名,如"v1"。
拼接条件 | 备注 |
---|---|
$AprusID-1.L1_2_3456 |
对象的终端列表中的第1个终端的L1_2_3456的数值会作为判断依据 |
A32017051300249.L1_2_3456 |
A32017051300249的L1_2_3456的数值会作为判断依据 |
v1 |
对象的变量名v1所对应的数值会作为判断依据 |
1.4.6.2. 逻辑表达式
逻辑表达式运算符 | 备注 |
---|---|
== |
等于,需要两个= |
!= |
不等于,暂不支持<> |
< |
小于 |
<= |
小于等于 |
> |
大于 |
>= |
大于等于 |
1.4.7. VEC
暂未实现
1.4.8. MAT
暂未实现