函数生成器 (FGEN)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。函数生成器 (FGEN) 指令用于基于分段线性函数对输入进行转换。
可用语言
梯形图

功能块

结构化文本
FGEN(FGEN_tag,X1,Y1,X2,Y2);
操作数
梯形图
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
FGEN tag | FUNCTION_ GENERATOR | 结构 | FGEN 结构 |
In | REAL | 标签/立即数 | 指令的模拟信号输入。 有效值 = 任意浮点值 |
X1 | REAL | 数组 | X 轴数组,表 1。同 Y 轴数组结合使用,表 1 定义第一条分段线性曲线的点。 有效值 = 任意浮点值 |
Y1 | REAL | 数组 | Y 轴数组,表 1。同 X 轴数组结合使用,表 1 定义第一条分段线性曲线的点。 有效值 = 任意浮点值 |
X2 | REAL | 数组 | (可选) X 轴数组,表 2。同 Y 轴数组结合使用,表 2 定义第二条分段线性曲线的点。 有效值 = 任意浮点值 |
Y2 | REAL | 数组 | (可选) Y 轴数组,表 2。同 X 轴数组结合使用,表 2 定义第二条分段线性曲线的点。 有效值 = 任意浮点值 |
功能块
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
FGEN tag | FUNCTION_ GENERATOR | 结构 | FGEN 结构 |
X1 | REAL | 数组 | X 轴数组,表 1。同 Y 轴数组结合使用,表 1 定义第一条分段线性曲线的点。 有效值 = 任意浮点值 |
Y1 | REAL | 数组 | Y 轴数组,表 1。同 X 轴数组结合使用,表 1 定义第一条分段线性曲线的点。 有效值 = 任意浮点值 |
X2 | REAL | 数组 | (可选) X 轴数组,表 2。同 Y 轴数组结合使用,表 2 定义第二条分段线性曲线的点。 有效值 = 任意浮点值 |
Y2 | REAL | 数组 | (可选) Y 轴数组,表 2。同 X 轴数组结合使用,表 2 定义第二条分段线性曲线的点。 有效值 = 任意浮点值 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
FGEN tag | FUNCTION_ GENERATOR | 结构 | FGEN 结构 |
X1 | REAL | 数组 | X 轴数组,表 1。同 Y 轴数组结合使用,表 1 定义第一条分段线性曲线的点。 有效值 = 任意浮点值 |
Y1 | REAL | 数组 | Y 轴数组,表 1。同 X 轴数组结合使用,表 1 定义第一条分段线性曲线的点。 有效值 = 任意浮点值 |
X2 | REAL | 数组 | (可选) X 轴数组,表 2。同 Y 轴数组结合使用,表 2 定义第二条分段线性曲线的点。 有效值 = 任意浮点值 |
Y2 | REAL | 数组 | (可选) Y 轴数组,表 2。同 X 轴数组结合使用,表 2 定义第二条分段线性曲线的点。 有效值 = 任意浮点值 |
有关结构化文本中表达式语法的详细信息,请参见
结构化文本语法
部分。FUNCTION_GENERATOR 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果为假,指令不会执行,也不会更新输出。 默认值为真。 |
In | REAL | 指令的模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
XY1Size | DINT | 要从表 1 中使用的分段线性曲线上的点的数量。如果该值小于 1 且 Select 已清零,此指令会将 Status 中的相应位置位且输出不发生更改。 有效值 = 1 到(X1 和 Y1 数组大小中的最小值) 默认值 = 1 |
XY2Size | DINT | 要从表 2 中使用的分段线性曲线上的点的数量。如果该值小于 1 且 Select 已置位,此指令会将 Status 中的相应位置位且输出不发生更改。 有效值 = 0 到(X2 和 Y2 数组大小中的最小值) 默认值 = 0 |
Select | BOOL | 此输入确定使用哪个表。清零时,指令会使用表 1;置位时,指令会使用表 2。 默认清零。 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。溢出时设置为假 |
Out | REAL | 指令的输出。 |
Status | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 指令生成了故障。 |
XY1SizeInv (Status.1) | BOOL | 表 1 的大小无效或与数组大小不兼容。 |
XY2SizeInv (Status.2) | BOOL | 表 2 的大小无效或与数组大小不兼容。 |
XisOutofOrder (Status.3) | BOOL | X 参数未进行排序。 |
说明
下图说明 FGEN 指令转换一条十二段曲线的方式。

X 轴参数必须遵循以下关系:
X[1] < X[2] < X[3] < ...< X[XY<n>Size],
其中 XY<n>Size > 1,表示分段线性曲线上的点数,其中 n 为 1 或 2,具体取决于所选的表。必须在 X 数组中创建经过排序的 X 轴元素。
Select 输入确定指令使用哪个表。当指令基于其中一个表执行时,可对另一个表中的值进行修改。更改 Select 的状态后,可基于另一个表执行指令。
计算 Out 之前,将扫描 X 轴参数。如果这些参数未按升序排序,会将 Status 中的相应位置位,Out 保持不变。同样,如果 XY1Size 或 XY2Size 无效,此指令也会将 Status 中的相应位置位且 Out 保持不变。
该指令会使用以下算法根据 In 来计算 Out:
- 当 In
X[1] 时,设置 Out = Y[1] - 当 In > X[XY<n>Size] 时,设置 Out = Y[XY<n>Size]
- 当 X[n] < In
X[n+1] 时,计算 Out = ((Y[n+1]-Yn)/ (X[n+1]-Xn))*(In-Xn)+Yn
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 通用属性。
执行
梯形图
条件 | 功能块操作 |
|---|---|
预扫描 | 梯级输出条件设置为假。 |
梯级输入条件为假 | 将梯级输出条件设置为梯级输入条件。 |
梯级输入条件为真 | 将梯级输出条件设置为梯级输入条件。 |
后扫描 | 梯级输出条件设置为假。 |
功能块图
条件 | 功能块操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。执行 FGEN 算法。 |
指令首次运行 | 不适用 |
指令首次扫描 | 将内部 Out 设置为 0.0 执行 FGEN 算法。 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
条件/状态 | 执行的操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
正常执行 | EnableIn 和 EnableOut 位设置为真。 执行 FGEN 算法。 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
示例
示例 1
在本例中,FGEN 指令采用流量信号形式,然后通过 TOT 指令累加流量信号。FGEN_01X1 和 FGEN_01Y1 数组均为具有 10 个元素的 REAL 数组,每个数组最多可支持 9 段曲线。可以使用任意大小的数组来支持需要任意段数的曲线。
功能块

梯形图

示例 2
此示例将可选参数传递给 FGEN 指令。
功能块

梯形图

提供反馈