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中。

注意事项:

  1. 逻辑表达式为:@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中。

注意事项:

  1. 逻辑表达式为:@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中的最小值,否则不计算。

注意事项:

  1. 逻辑表达式为:@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中的最大值。

注意事项:

  1. 逻辑表达式为@Compare
  2. 逻辑值为json,一定包含一个key为args,value为json数组。
  3. 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

暂未实现

© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2021-03-05 16:09:24

results matching ""

    No results matching ""