1. Mapping映射表规范
1.1. 修订记录
日 期 | 版本 | 说 明 | 编 写 |
---|---|---|---|
2018-06-26 | 1.0 R1 | 创建 | cdp |
2018-07-10 | 2.0 R2 | 修改标签位置错误 | cdp |
2018-07-26 | 3.0 R3 | 修改函数类型说明 | cdp |
2018-08-27 | 4.0 R4 | 修改函数类型的实现,并添加更多函数 | cdp |
2018-09-10 | 5.0 R5 | 函数类型添加比较功能 | cdp |
2018-11-23 | 6.0 R1 | 函数类型添加fv默认值,设备组可获取设备离线数据 | cdp |
2019-03-01 | 7.0 R1 | V2版本,矩阵,队列,自动更新 | cdp |
2020-05-06 | 7.0 R2 | 文档格式修改 | Roy |
1.2. 概述
1.3. 文档说明
Mapping表中关于Template、script字段的规则说明。
1.4. 适用对象
本文档的目的读者是智物联物联网体系下所有开发人员。
1.5. 术语和缩略词
序号 | 术语名称 | 其它名称 | 术语说明 |
---|---|---|---|
1 | API | Application Programming Interface | 应用编程接口 |
2 | FV | Fidis Variable | FIDIS 变量 |
1.6. Mapping Template规范
Mapping Template脚本主要作用于设备信息的扩展字段,在设备信息信息中需要显示哪些设备字段在此配置即可。
上图显示扩展字段代码模板如下:
[{
"title": "锅炉信息",
"data": [
["燃料类型", "天然气"],
["锅炉重量", "2吨"],
["出厂日期", "2018-03-03"]
]
}, {
"title": "能效指标信息",
"data": [
["热效率", 0.8],
["燃料热值", 7000],
["*吨汽燃料指标*", 0.21]
]
}]
- Title:为段落标题,名称可自定义,即代码中“锅炉信息”、“能效指标信息”可更改。
- Data:为段落中字段内容,字段名和字段值可自定义。
1.7. Mapping Script规范
Mapping Script脚本主要将适配器上报的 key 映射为系统可识别的变量,并将适配器和设备的关系进行关联对应。。
1.7.1. Mapping格式示例
[
["v1", "english_label", "中文标签", "Aprus1", "L1_1_123", "STA"],
["v2", "english_label", "中文标签", "$AprusID-1", "L1_2_456", "STA"],
["v3", "english_label", "中文标签", "$AprusID-2", "L1_2_789", "STA"],
["v4", "english_label ", "中文标签", "", "", "VEC", ["v1", "v2", "v3", 4]],
["v5", "english_label ", "中文标签", "", "", "MAT", [["v1", "v2"],["v3", 44]]],
["v6", "english_label", "中文标签", "$AprusID-1", "L1_2_456", "@Expr",
{
"expr": "max((v1),(v2))+sin(v3/180*Pi)",
"args": [
["v1>=300 && v1<=800", 1],
["v1<300 || v1>800", 0]
]
}
],
["v7","english_label","中文标签","a3","L99","&Collectos",
{
"equipment_id": "2",
"collect_id": "234",
"reply": "float64"
}
]
]
说明:标点符号为英文,是可以解析的json串。所有mapping规则都将添加至中括号[]
中,每一条mapping规则用逗号,
隔开。
1.7.2. 标准类型
标准类型的格式如下:
["v1", "english_label", "中文标签", "Aprus1", "L1_1_123", "STA"]
- 第一个参数为设备FV,用于拼接mosaic的key和页面展示所绑定的key。该值不能为空,且只能由字母数字下划线组成,大小写区分,并且由字母开头。
- 第二个参数为设备FV的英文标签
- 第三个参数为设备FV的中文标签
- 第四个参数为设备FV所对应的适配器
- 第五个参数为设备FV所对应的适配器的KEY
- 第六个参数为设备FV的分类共有 STA, EVNT, FLT, ALT,SET这5种
1.7.3. 队列类型
队列类型的格式如下:
["v1", "english_label", "中文标签", "", "", "VEC", ["S01", "S02", "S03", 4]]
- 第一个参数为设备FV,用于拼接mosaic的key和页面展示所绑定的key。该值不能为空,且只能由字母数字下划线组成,大小写区分,并且由字母开头。
- 第二个参数为设备FV的英文标签
- 第三个参数为设备FV的中文标签
- 第四, 五个参数置空做兼容
- 第六个参数为‘VEC’
- 第七个参数为一维数组,可以填其他单值fv或直接填值
1.7.4. 矩阵类型
矩阵类型的格式如下:
["v1", "english_label", "中文标签", "", "", "MAT",[["S01", "S02"],["S03", 444]]]
- 第一个参数为设备FV,用于拼接mosaic的key和页面展示所绑定的key。该值不能为空,且只能由字母数字下划线组成,大小写区分,并且由字母开头。
- 第二个参数为设备FV的英文标签
- 第三个参数为设备FV的中文标签
- 第四, 五个参数置空做兼容
- 第六个参数为MAT’
- 第七个参数为二维数组,可以填其他单值fv或直接填值
1.7.5. 扩展类型($)
扩展类型的格式如下:
["v1", "english_label", "中文标签", "$AprusID-1", "L1_1_123", "STA"]
- 第四个参数为设备FV所对应的适配器,使用“$AprusID-n”来替代固定适配器,n代表设备的apruslist中的第n个适配器。例如apruslist为[“aprus100”,”aprus200”],则“$AprusID-1”转化为“aprus100“。若n大于apruslist中的个数,则忽略该条mapping规则
- 其余参数和标准类型一致
1.7.6. 函数类型(@)
函数类型的格式如下:
["v4", "english_label", "中文标签", "$AprusID-1", "L1_2_456", "@Expr",
{
"expr": "max((v1),(v2))+sin(v3/180*Pi)",
"args": [
["v1>=300 && v1<=800", 1],
["v1<300 || v1>800", 0]
],
"digit": 3,
"default": 0,
"v1": 1
}
]
- 前五个参数和扩展类型一致,适配器以及适配器key作为触发使用,无实际匹配值
- 具体使用例子:
例子1:
["v4", "english_label", "中文标签", "$AprusID-1", "L1_2_456", "@Expr",
{
"expr": "max((v1),(v2))+sin(v3/180*Pi)",
"digit": 3,
"default": 0,
"v1": 1
}
]
当函数这样写时,代表着v1,v2,v3若更新,则将计算max((v1),(v2))+sin(v3/180 Pi)的结果保存到FVv4中,最后一致保存至mosaic。若v1,v2,v3没有值,则使用配置的值,也就是v1=1,否则默认使用default的值,也就是v2=0,v3=0。*若存在没匹配的值,则不计算。例如在未配置default的情况下,mosaic中没有v2或v3的值,则不计算v4的值。
例子2:
["v4", "english_label", "中文标签", "$AprusID-1", "L1_2_456", "@Compare", {
"args": [
["v1 >=300 && v1 <=800", 1],
["v1 <300 || v1 >800", 0]
],
"digit": 3,
"default": 0,
"v1": 1
}]
当v1大于等于300并且v1小于等于800时,v4=1,不继续执行后续判断;否则按照顺序往下执行,判断v1是否小于300或者大于800,如果是,则v4=0。若v1没有值,则使用v1=1该值。若存在没匹配的值,则不计算。
- 第七个参数为调用函数的表达式。键expr,args,digit不可修改,键对应值可修改。键值内容为数值或FV,支持部分常量,支持四则运算,支持部分函数,digit为返回值位数。
- 运算符优先级(数字越大越优先):
优先级 | 运算符 |
---|---|
7 | 函数 |
6 | ! |
5 | * ,/ |
4 | + ,- |
3 | == ,!= ,< ,<= ,>= ,> |
2 | && |
1 | || |
1.7.6.1. 常量支持
常量 | 数值 |
---|---|
E | 2.71828182845904523536028747135266249775724709369995957496696763 |
Pi | 3.14159265358979323846264338327950288419716939937510582097494459 |
1.7.6.2. 函数支持
1.7.6.2.1. 单参数函数
函数名 | 函数说明 |
---|---|
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是弧度) |
1.7.6.2.2. 双参数函数
函数名 | 函数说明 |
---|---|
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相同 |
remainder((x),(y)) | IEEE 754差数求值,即x减去最接近x/y的整数值(如果有两个整数与x/y距离相同,则取其中的偶数)与y的乘积 |
hypot((x),(y)) | 返回Sqrt(p*p + q*q) ,注意要避免不必要的溢出或下溢 |
pow((x),(y)) | 返回x**y |
1.7.7. 离线数据类型(&)
离线数据类型的格式如下:
["v7", "english_label", "中文标签", "a3", "L99", "&Collectos", {
"equipment_id": "$2",
"collect_id": "234",
"reply": "float64"
}]
- 前五个参数和扩展类型一致,适配器以及适配器key作为触发使用,无实际匹配值,key的含义可参考具体定义的文档
- 第六个参数为所查询的数据库表名,表名前添加&符号。不用加’admin_’前缀。
- 数据库表中一定要含有equipment_id字段,data字段,created字段。
- 第七个参数为所查询的参数,格式为json。
- json中必有reply,作为返回值类型。其余key为字段名,作为查询条件,对应的value为字段值。
- 若该离线数据是针对设备组的,则参数中的equipment_id可以设置为
$n
,n为设备组中自设备的排序号。例如:子设备为1001,1002。则["v7","english_label","中文标签","a3","L99","&Collectos",{"equipment_id":"$2","collect_id":"234","reply":"float64"}],中的equipment_id会替换为1002,设备中不会生效。 - reply代表返回值类型,目前仅支持float64,string两种格式
- 上述mapping对应的sql:select data from admin_collectos where equipment_id = ‘2’ and collect_id = ‘234’ order by created desc limit 1
- 数据表
表名 | 含义 |
---|---|
Collectos | 离线数据 |
Statos | 每小时统计数据 |
Statos_current_day | 当天统计数据 |
Statos_current_month | 当月统计数据 |
Statos_current_year | 当年统计数据 |
Statos_history | 历史统计数据 |
Statos_day | 每天统计数据 |
Statos_month | 每月统计数据 |
Statos_year | 每年统计数据 |
- 可选参数
表名 | 必选参数 | 必选参数 | 可选参数 |
---|---|---|---|
Collectos | collect_id | reply | equipment_id |
Statos | statistics_id | reply | equipment_id |
Statos_current_day | statistics_id | reply | equipment_id |
Statos_current_month | statistics_id | reply | equipment_id |
Statos_current_year | statistics_id | reply | equipment_id |
Statos_history | statistics_id | reply | equipment_id |
Statos_day | statistics_id | reply | equipment_id |
Statos_month | statistics_id | reply | equipment_id |
Statos_year | statistics_id | reply | equipment_id |