阿里云首页 工业大脑开放平台

自定义Python脚本

Python脚本组件支持直接在画布上随拖随写代码、定义输入输出字段,形成一个代码黑盒。本文为您介绍如何自定义Python脚本算法组件。

使用流程说明

  1. 实时算法编排的画布中,将Python脚本组件从左侧平台组件 > 自定义列表中拖入画布编辑区。

    拖拽python组件
  2. 在右侧配置栏组件名称处设置组件名称,以便区分画布中多个Python脚本。

  3. 在右侧配置栏IN1输入~IN4输入四个配置项设置每个端口的参数。四个Python输入配置按钮,分别对应Python脚本卡片上IN1IN2IN3IN4四个输入端口。

    端口对应

    参数名

    描述

    输入参数

    自定义端口的参数字段

    中文描述

    自定义端口的参数字段名称

    参数值

    自定义端口的参数字段默认值

    参数映射

    可取值上级组件输出字段。

    说明

    参数值和参数映射可根据实际情况考虑是否配置,两者至少配置一个。如果该输入参数只需要一个默认值,可以不配置参数映射;反之则需要映射上游组件输出字段值。

  4. Python代码编辑器编写代码。

    在Python代码编辑器中,只需遵循以下编码规范,即可实现任意自定义代码逻辑。

    以下编码规范中的#import start### customer code startdef main(input_data, context):### customer code end 4行代码不可删除,其他代码均可自行调整。

    #import start
    
    ### customer code start
    def main(input_data, context):
        IN1 = input_data["IN1"] or None
        OUT1 = {
            "dataKey":{
                "value": 0,
                "keyName":"keyName",
                "quality":192
            }
        }
        return OUT1
    ### customer code end
  5. 动态输出配置设置输出端口的参数。

输入JSON说明

main方法的输入参数:input_data

{
  "UPLOAD": {
    "default": {
      "value": "/newPythonCode/20210331/15/6/51/107642/测试数据.csv",
      "quality": -1
    }
  },
  "SYSTEM_CONFIG": {
    "expression": "600",
    "runCycle": 10,
    "experimentId": 100726,
    "projectId": 100726
  },
  "IN2": {
    "mv3": {
      "value": "2",
      "quality": -1
    }
  },
  "IN1": {
    "mv2": {
      "keyName": "生料磨压差",
      "time": 1617173685702,
      "value": 8.07,
      "key": "tenant_123456.filter_node.pres_diff_filter",
      "quality": 192
    },
    "mv1": {
      "value": "1",
      "quality": -1
    }
  },
  "IN4": {},
  "IN3": {}
}

关键参数说明

参数

说明

UPLOAD

上传控件参数。若上传了文件,其中value的值为该文件上传后的地址,可以通过该地址下载该文件;若不上传文件,UPLOAD={}

SYSTEM_CONFIG

系统参数。其中runCycle是画布调度的时间间隔周期。例如"runCycle": 10,表示画布发布后每隔10s运行一次。

IN1IN2IN3IN4

分别为4个输入端口的参数,每个端口都有一个标识符。其中的key就是配置的输入参数名称,例如mv1、mv2是IN1端口的输入参数,mv3是IN2端口的输入参数。不配置输入参数就是空字典。

输出JSON示例

{
  "dataKey": {
    "keyName": "dataKey1",
    "value": "1",
    "quality": 192
  },
  "dataKey1": {
    "keyName": "dataKey2",
    "value": 3,
    "quality": 192
  },
  "nodeInstanceId": "111243"
}

Python脚本开发示例

  1. 拖拽并连接组件。

    截屏2021-04-26 上午10
  2. 输入端口配置。

    截屏2021-04-26 上午10
  3. Python代码配置。

    将下面脚本填入Python代码编辑器,根据自己的业务需求可以对脚本做改动,其中main方法必须存在。

    ### customer code start
    def main(input_data, context):
        # 上游输出获取 这里的IN1是指组件搭建的时候端口绑定控件的参数标识
        IN1 = input_data["IN1"] or None
        # python脚本组件有4个输入端口,输入宽口参数标识分别为IN1、IN2、IN3、IN4
        IN2 = input_data["IN2"] or None
        IN3 = input_data["IN3"] or None
        IN4 = input_data["IN4"] or None
        # 获取输入参数的值,mv1/mv2 是输入端口配置的输入参数的key
        mv1Value = IN1["mv1"]["value"]
        mv2Value = IN1["mv2"]["value"]
    
        # 文件下载 UPLOAD是组件搭建的时候配置的参数标识
        """有文件上传时去掉注释
        UPLOAD = input_data["UPLOAD"] or None
        path = UPLOAD["default"]["value"]
        httpResponse = sdk.download(path)
        logger.info(str(httpResponse,'UTF-8'))
        """
    
        dataKey2_value = test1(float(mv1Value), float(mv2Value))
        # 当前输出 dataKey1 dataKey2是输出配置的key
        OUT1 = {
            "dataKey1": {
                "value": mv1Value,
                "keyName": "dataKey1",
                "quality": 192
            },
            "dataKey2": {
                "value": dataKey2_value,
                "keyName": "dataKey2",
                "quality": 192
            }
        }
        return OUT1
    ### customer code end
  4. 输出端口配置。

    此处根据上面的Python代码,可知输出OUT中的输出参数为dataKey1和dataKey2。

    截屏2021-04-26 上午10
  5. 运行并查看输出。