1.1 什么是历程

历程的含义是广泛的,它可以是一个故障、可以是一个报警、可以是一个生产计划、可以是一个工作任务、也可以是一个订单流程。

历程记录了事件的开始时间、结束时间、持续时长、流水记录等过程,同时还可以对相关的数据进行统计。

假设一个高温报警历程,温度高于100时历程开始、温度低于100时历程结束,期间统计温度的平均值。

历程流程示意图

参考上图,流程说明如下:

  • 终端采集设备温度数据,20秒一次向系统上报;
  • 系统拼接数据,温度大于100发布一个高温事件、温度小于100发布一个常温事件;
  • 历程服务收到高温事件开启历程,并发布一个历程开放事件;
  • 终端持续上报数据,历程服务进行温度平均值统计;
  • 历程服务收到常温事件关闭历程,并发布一个历程关闭事件。

1.2 开始结束

历程(Retainer)的开始和结束由马赛克服务(Mpapping)事件驱动,其中马赛克服务发布的是逻辑条件事件(比如温度大于100或温度小于100等);历程开始或关闭时历程服务也会发布历程开放和历程关闭事件。

历程服务发布的事件消息会驱动更多的业务:显示板(Dashboard)可以实时监控历程信息,信使服务(Messenger)收到事件将发送通知消息,工单服务(workflow)收到信息将生成工单等。

历程功能应用示意图

1.3 统计函数

历程数据统计是一个数据的垂直统计,比如在一次生产中数据取样上报了 n 次,需要统计生产期间某个参数的平均值、最大值、最小值等。

1.3.1 函数支持

函数名 函数说明
sum 求和,返回参数的总和
avg 平均值,返回参数平均值
count 计数,返回参数的个数
first 起始值,返回第一个值
last 最新值,返回最后一个值
max 最大值,返回最大值
min 最大值,返回最小值
spread 极差值,返回最大值减最小值的差
stddev 标准差,返回参数的标准差

1.3.2 函数示例

假设一个历程中,数据(x)按时间先后顺序上报分别为:1、2、3、4、5。

  • 求和(sum)
sum(x) = 1+2+3+4+5 = 15 // 根据公式计算结果为 15
  • 平均值(avg)
avg(x) = (1+2+3+4+5)/5 = 3 // 根据公式计算结果为 3
  • 计数(count)
count(x) = 5 // 共5个数据,结果为 5
  • 起始值(first)
first(x) = 1 // 第一个数为 1,结果为 1
  • 最新值(last)
last(x) = 5 // 最后一个数为 5, 结果为 5
  • 最大值(max)
max(x) = 5 // 最大值为 5, 结果为 5
  • 最小值(min)
min(x) = 1 // 最小值为 1, 结果为 1
  • 极差值(spread)
spread(x) = 5-1 = 4 // 最大值减最小值, 结果为 4
  • 标准差(stddev)
    // 已知x的平均值为3
    spread(x) = (((1-3)^2+(2-3)^2+(3-3)^2+(4-3)^2+(5-3)^2)/5)^1/2 = 2^1/2 = 1.41 // 根据公式计算结果为 1.41
    

1.4 历程脚本

Mixiot中,一个历程通过7列的Json脚本定义。

1.4.1 脚本规范

[ RV,Label_En,Label_Cn,EventCode_Start,EventCode_Stop,Statistics,FV ]
  • RV为历程变量(又叫历程编码),定义时不能重复、且不超过64个字符
  • Label_En为历程的英文注释
  • Label_Cn为历程的中文注释
  • EventCode_Start为历程开始事件code,是马赛克的条件事件code(需预先在映射表脚本配置)
  • EventCode_Stop为历程结束时间code,是马赛克的条件事件code(需预先在映射表脚本配置)
  • Statistics为统计函数,统计支持见函数支持列表,如果不需要统计则不填写
  • FV为需要统计变量,是马赛克的FV变量(需预先在映射表脚本配置),如果不需要统计则不填写

1.4.2 脚本示例

  1. 假设映射表(Mapping)脚本中:S01为采集的温度数据,当温度S01大于100发布高温事件C1001、当温度S01小于100发布常温事件C1002
[
    ["S01", "Temperature", "温度", "STA", "$AprusID-1", "L1_2_3", "", "", {}],
    ["C1001", "HighTemperature", "高温事件", "EVNT", "$AprusID-1", "L1_2_3", "", "S01>100", {}],
    ["C1002", "RoomTemperature", "常温事件", "EVNT", "$AprusID-1", "L1_2_3", "", "S01<100", {}]
]
  • 当S01值为200,则马赛克发布事件数据如下(code字段为定义的C1001):
{
    "event": "trigger_event",
    "block": "mosaic",
    "uniqueid": "PUB1323431200006",
    "datetime": "2021-10-28 10:15:34",
    "object_id": "OBJ1315925700001",
    "terminal_id": "AX202110080001",
    "code": "C1001",
    "label_en": "HighTemperature",
    "label_local": "高温事件",
    "value": {
        "S01": 200
    }
}
  • 当S01值为80,则马赛克发布事件数据如下(code字段为定义的C1002):
{
    "event": "trigger_event",
    "block": "mosaic",
    "uniqueid": "PUB1323431200123",
    "datetime": "2021-10-28 12:15:34",
    "object_id": "OBJ1315925700001",
    "terminal_id": "AX202110080001",
    "code": "C1002",
    "label_en": "RoomTemperature",
    "label_local": "常温事件",
    "value": {
        "S01": 80
    }
}
  1. 历程(Retainer)脚本中,历程R1001为一个报警历程,该历程根据马赛克事件C1001开始、根据马赛克事件C1002结束,历程期间统计数据S01的平均值。
[
    ["R1001", "AlarmProcess", "报警历程", "C1001", "C1002", "avg", "S01"]
]
  • 历程记录如下

历程记录示意图

© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2022-03-10 10:36:39

results matching ""

    No results matching ""

    results matching ""

      No results matching ""