# JuliaFunction
在 Sysblock 模型中调用 Julia 函数。
库: Sysblock 模块库 / Utilities
# 描述
使用 JuliaFunction 可以编写用于 Sysblock 模型的 Julia 函数并将 JuliaFunction 的输入输出数据指定为参数和返回值。
注意
在使用 JuliaObject 模块前,请确认以下前提条件被满足,否则 JuliaObject 不可用:
- 当前的 Sysplorer 由相同版本的 Syslab 启动,且当前 Syslab 处于运行状态;
- Sysplorer 的 Syslab Extension for Sysplorer 插件被加载并启用。
# 编辑 Julia 函数脚本
双击 JuliaFunction 模块, Syslab 窗口将弹出并打开 Julia 函数脚本。您可在该脚本文件中定义多个 Julia 函数,其中第一个函数将被视作对应 JuliaFunction 模块的主函数,其他函数均被视作服务于主函数的辅助函数。
端口:
JuliaFunction 模块的输入、输出端口等信息均取决于主函数的定义情况,而与辅助函数无直接关联。
| 端口类型 | 说明 |
|---|---|
| 输入端口 | 主函数的形参 |
| 输出端口 | 主函数的返回值 |
编写函数脚本文件时,请注意:
- 主函数必须使用 function 定义;
- 主函数的输入不可指定类型,不可指定具名参数;
- 主函数、各个辅助函数的名称,在同一个模型范围中须唯一;
- 主函数的输出必须使用 return 指定,且必须为函数体中已经出现的变量符号(例如,”return y1, y2”为合法,而“return y1 * 2””return 3+3””return 6”等为非法)。
# 在模型中使用 Julia 函数
当您完成函数脚本文件的编辑并保存后,对应的 JuliaFunction 模块的输入与输出端口即被自动更新,您可按需将它们连接到其它模块上。
选中 JuliaFunction 模块,右键单击并在下拉菜单中选择编辑参数,在对话框中配置输入输出端口维度与数据类型。
弹出的对话框中会列出各个输入输出端口的情况,您可在“数据类型”、“维度”列调整各个端口的数据类型与维度。
数据类型为下拉单选框,其中 inherit 选项表示该端口的数据类型由自动推导得到。 维度为输入框:
- 留空表示该端口数据为标量
- -1 表示该端口的维度由自动推导得到
- [d1,d2,...,dn] 表示该端口的维度为 d1 x d2 x ... x dn,其中 d1, d2, ..., dn 为正整数
输入端口的数据类型与维度支持自动推导(根据与之相连的信号),如您希望使用自动推导,请将数据类型置为“inherit”,维度置为“-1”。
输出端口的数据类型与维度暂不支持自动推导,您需要根据模块输入信号以及 Julia 计算逻辑,自行输入正确的类型与维度。
# 示例
参考示例模型
。
JuliaFunction 脚本如下:
# 主函数
function fcn(x1, x2, x3, x4, x5)
y1 = x1.fa
y2 = x1.fb
y3 = helper(x2, x3)
y4 = x4
y5 = [x5.re x5.im]
return y1, y2, y3, y4, y5
end
# 辅助函数
function helper(u1, u2)
y = u1 * u2
return y
end
仿真结果如下:
# 示例说明
- sineWave 模块:生成幅度为 1,频率为 1 的正弦波信号;
- sineWave1 模块:生成幅度为 1,频率为 1 的正弦波信号;
- constant1 模块:生成常量信号,此例中生成的是 3x2 的矩阵;
- constant2 模块:生成常量信号,此例中生成的是 2x1 的矩阵;
- constant3 模块:生成常量信号,此例中生成的是定点类型标量;
- constant4 模块:生成常量信号,此例中生成的是浮点类型标量;
- constant5 模块:生成常量信号,此例中生成的是浮点类型标量;
- realImagToComplex 模块:将 2 个实数信号组合为 1 个复数信号
- juliaFunction 模块:以 Julia 对象所表达的算法,对 3 个输入进行计算,得到 3 个输出;
- outport 模块:计算结果输出端口 1;
- outport1 模块:计算结果输出端口 2;
- outport2 模块:计算结果输出端口 3;
- outport3 模块:计算结果输出端口 4;
- outport4 模块:计算结果输出端口 5。
# 端口
# 输入
u — 输入端口标量 | 向量 | 矩阵
输入端口,指定为标量、向量或矩阵。您创建的每个输入都有一个对应的输入端口。
依存关系
要创建输入端口,请双击模块并在 Syslab 的 Julia 函数脚本中,添加函数入口参数。
数据类型: inherit | double | float | int8 | uint8 | int16 | uint16 | int32 | uint32 | boolean | Bus | fixedPoint
# 输出
y — 输出端口标量 | 向量 | 矩阵
输出端口,指定为标量、向量或矩阵。您创建的每个输出都有一个对应的输出端口。
依存关系
要创建输出端口,请双击模块并在 Syslab 的 Julia 函数脚本中,添加函数返回参数。
数据类型: double | float | int8 | uint8 | int16 | uint16 | int32 | uint32 | boolean | fixedPoint
# 参数
端口数据类型 — 指定输入输出端口数据类型
指定此模块输入输出端口可连接信号的数据类型,可选择数据类型:inherit(仅输入端口) | double | float | int8 | uint8 | int16 | uint16 | int32 | uint32 | boolean | Bus(仅输入端口) | fixedPoint
端口维度—指定输入输出端口数据维度
指定此模块输入输出端口可连接信号的数据维度。
- 设置端口维度由自动推导得到,请输入 -1 。
- 设置端口维度为标量,请不输入任何字符。
- 设置端口维度为向量,请输入 [d],d 为正整数。
- 设置端口维度为矩阵,请输入 [d1,d2,d3,...,dn],其中 d1,d2,d3,...,dn 等均为正整数。
添加触发器 — 创建一个触发信号输入端口
在模块顶部增加一个特殊输入端口,可接收触发信号输入,支持的触发方式包括上升、下降、任一和函数调用四种方式。
# 版本历史记录
- 在 2025a 推出,在 2025b 更新
# 限制信息
- 暂不支持输出端口维度与数据类型的推导,需手动配置。
- 暂不支持设置 Paramter Data 参数和 Data Store Memory 参数。
- 暂不支持 int64、uint64 类型。
- 暂不支持在同一个 Sysblock 模型中包含重名的 Julia 函数(无论是主函数或辅助函数)。