4.5.3 DFF边定义
DFF边定义部分的配置内容包括DFF ID、首尾节点、边名称、边描述、边类型及其参数。
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| <u64> | <u64>;<u64> | <String> | <String> | None Eval Sql Onnx OnnxUrl Nnef NnefUrl WriteFile WriteSql | < \ > <String> <String> <String> <String> <String> <String> <String> <String> |
-
DFF ID:声明边属于哪个DFF,用<u64>(64位无符号整数)表示。
-
首尾节点:边需要声明首尾节点,用一对正整数表示,格式为:<尾节点ID>;<首节点ID>。边的方向为:尾节点→首节点。节点ID与DFF节点定义中相对应。
-
边名称:便于理解边内容,往往是对边的动作做简要文字解释,用<String>(表示字符串类型)表示。
-
边描述:用于解释边动作的具体作用,用<String>(表示字符串类型)表示。
-
边类型:用约定的类型声明表示,包含如下类型:None、Eval、Sql、Onnx、OnnxUrl、Nnef、NnefUrl、WriteFile、WriteSql。
-
边参数:不同边类型的参数配置要求不同,具体要求如下。
边类型示例说明
一、None
边类型为None时,边不动作。特殊的,当边名称设置为需要传递的变量名,可以传递变量(只能传递一个变量)。
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 1;2 | bus | None |
边含义:将节点1中获得的变量bus传递给节点2,作为节点2的输入变量。
二、Eval
边类型为Eval时,边可执行张量计算。举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 1;2 | 数据转换 | Eval | select(alias(cast(col(value),f32),r_1_1_672)); |
边含义:将名为value的数据进行强制类型转换为f32类型,并改名为r_1_1_672。
三、SQL
边类型为SQL时,可对边首节点输入的DataFrame执行SQL操作,具体配置方法举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 1;2 | query_df | SQL | SQL语句(如:select col1,col2 from `` order by col1;) |
边首节点输出的DF名称未进行配置时,默认为空字符串。
四、Onnx
边类型为Onnx时,边读取Onnx神经网络模型并执行。举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 2;3 | 负荷预测 | Onnx | model.onnx |
边含义:节点2输入的数据作为神经网络的输入,经过model.onnx后输出数据至节点3。
注:
- 参数为Onnx文件的路径。
- 节点2输入的DF数据需要和
model.onnx的输入维度对应。
具体例子:负荷预测。
五、OnnxUrl
边类型为OnnxUrl时,边通过url获取Onnx神经网络模型并执行。举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 2;3 | 负荷预测 | Onnx | http://127.0.0.1:80/forecast/model_96_96.onnx |
注:
- 参数为Onnx模型的url。
- 节点2输入的DF数据需要和Onnx模型的输入维度对应。
六、Nnef
边类型为Nnef时,边读取Nnef神经网络模型并执行。举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 2;3 | do_Nnef | Nnef | model.nnef |
边含义:节点2输入的数据作为神经网络的输入,经过model.nnef后输出数据至节点3。
注:
- 参数为Nnef文件的路径。
- 节点2输入的DF数据需要和
model.nnef的输入维度对应。
七、NnefUrl
边类型为NnefUrl时,边通过url获取Nnef神经网络模型并执行。举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 2;3 | do_nnef | Nnef | Nnef模型的Url |
注:
- 参数为Nnef模型的url。
- 节点2输入的DF数据需要和Nnef模型的输入维度对应。
八、WriteFile
边类型为WriteFile时,边可将DataFrame流数据写至指定路径文件中保存,或用DataFrame更新指定数据源id的量测值。对于这两种动作模式,WriteFile动作逻辑如下:如果参数为“meas://x”, 表示用DataFrame更新数据源id为x的量测值;其他形式的参数表示文件路径,表示将DataFrame写到文件。需要注意的点:
-
对于“meas://x”,输入的DataFrame需包含“point”和“discete或analog”两列信息。其中,“point”的列表示测点号,如果有“discete”的列表示更新离散量,如果有“analog”的列表示更新模拟量,注意discrete或analog不能同时出现。
-
WriteFile动作通过“meas://x”,一般设置数据源非0的量测,或者数据源为0的本地测点,不可以设置数据源为0的远方测点,远方测点只能间接通过AOE设置。
-
WriteFile动作通过“meas://x”更新量测值后,后续的节点或边如果需要用到该动作设置后的量测的数据,由于异步的关系,并不能保证是更新后的值。
-
DataFrame写到文件支持输出
xlsx或csv格式。文件可指定路径,若未指定则默认mems.exe所在文件夹。
举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 3;4 | 结果输出 | WriteFile | output.csv |
边含义:将节点2输入的数据写至output.csv文件中保存。
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数 |
|---|---|---|---|---|---|
| 65536 | 3;4 | 结果输出 | WriteFile | meas://1 |
边含义:用DataFrame更新数据源id为1的量测值,注意此时节点2输入数据需包含“point”列和“discete/analog”列。
九、WriteSQL
边类型为WriteSQL时,可将边首节点输入的DataFrame数据写入数据库,或对数据库执行sql操作。WriteSQL边有2个参数,其中第1个参数填写数据库连接URL,支持mysql、sqlite和postgres数据库,对应填写格式如下:
- mysql://user:password@host:port/database
- sqlite:///path/to/database.db
- postgres://user:password@host:port/database
第2个参数填写对数据库的操作,用参数字符串前缀区分操作类型:
| 前缀 | 作用 | 是否依赖输入DataFrame | 示例 |
|---|---|---|---|
| sql:// | 执行原生SQL | 否 | sql://TRUNCATE TABLE table_in_db |
| insert:// | 把 DataFrame 每行插入表 | 是 | insert://table_in_db |
| UPDATE:// | 按主键更新表 | 是 | update://table_in_db?key=key1,key2 |
| 无前缀 | 默认按 insert 处理 | 是 | table_in_db |
具体配置方法举例如下:
| DFF ID | 首尾节点 | 边名称 | 描述 | 边类型 | 参数1 | 参数2 |
|---|---|---|---|---|---|---|
| 65536 | 1;2 | write_df | WriteSQL | 数据库URL(如:sqlite://./my_database.db;) | insert://t1 |