文件算术与逻辑 (FAL)

此指令适用于
Compact GuardLogix
5370 和
Compact GuardLogix
5380、
CompactLogix
5370、
CompactLogix
5380 和
ControlLogix
5570、
ControlLogix
5580、ControlLogix 5590 以及
GuardLogix
5570 和
GuardLogix
5580 控制器。
FAL 指令可对数组中存储的数据执行复制、算术、逻辑和函数运算。当 FAL 指令的梯级输入条件由假跳变为真时,将根据指定的迭代模式计算给定的表达式。
在安全应用中允许使用的运算符需要遵从相关规则。请参见“有效运算符”部分。
可用语言
梯形图
File Arithmetic and Logic (FAL) (45)_v31
功能块
此指令不可用于功能块中。
结构化文本
此指令不可用于结构化文本中。
操作数
重要提示: 以下情况下会导致运行出现意外:
  • 输出标签操作数被覆盖。
  • 结构操作数的成员被覆盖。
  • 除非另外指定,否则结构操作数由多条指令共用。
指令中混用数据类型时,需遵从相关的数据转换规则。请参见“数据转换”部分。
梯形图
操作数
数据类型
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370 和
GuardLogix
5570 控制器
数据类型
CompactLogix
5380、
ControlLogix
5580、
Compact GuardLogix
5380、
GuardLogix
5580 和 ControlLogix 5590 控制器
格式
说明
Control
CONTROL
CONTROL
标签
运算的控制结构
Length
DINT
DINT
立即数
表示 CONTROL 结构的 .LEN
Position
DINT
DINT
立即数
表示 CONTROL 结构的 .POS
Mode
DINT
DINT
立即数
显示如何分配运算。
选择 INC、ALL,或者输入范围 1 到 2147483647 内的值
Expression
SINT
INT
DINT
REAL
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
立即数
标签
表达式由标签和/或立即数组成,并以运算符分隔。
Destination
SINT
INT
DINT
REAL
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
标签
表达式的值将存储在目标中。
长度和位置(对应于控制标签中的 .LEN 和 .POS)是伪操作数。有关详细信息,请参见伪操作数初始化
CONTROL 结构
助记符
数据类型
说明
.EN
BOOL
使能位,指示 FAL 指令是否使能。
.DN
BOOL
完成位,指令对数组中最后一个元素进行运算后置位 (.POS = .LEN)。
.ER
BOOL
发生溢出时,两个平台都将 .ER 置位,并停止执行指令。
以下控制器会产生溢出:
  • CompactLogix
    5370
  • ControlLogix
    5570
.LEN
DINT
长度,指定参与 FAL 指令运算的数组元素数目。
.POS
DINT
该位置会在指令启动时初始化为 0,并在每次运行回路时递增。
表达式的值将存储在指定的目标标签中。发生溢出时,ER 位置位并停止执行命令。一旦 FAL 完成所有配置的迭代,.DN 位将置位。
选择运算模式
对于 FAL 指令,通过模式来指示控制器如何分配数组运算。
若:
选择此模式:
对数组中的所有指定元素执行运算,然后继续执行下一条指令。
清除
将数组运算分配到若干次扫描中。
输入每次扫描时参与运算的元素数目 (1-2147483647)。
数值
每次 EnableIn 由假跳变为真时,对数组的一个元素执行运算。
增量式
所有模式
在“所有”模式中,指令将对数组中所有指定元素执行运算,然后再继续执行下条指令。当指令的 EnableIn 由假跳变为真时,开始进行运算。控制结构的位置 (.POS) 值指向指令当前使用的数组元素。当 .POS 值等于或大于 .LEN 值时,运算停止,当表达式发生溢出时,将 .ER 位设置为真。
FAL_All Mode
以下时序图展示状态位与指令运算之间的关系。当指令执行完成时,.DN 位为真。当 EnableIn 为假时,.DN 位、.EN 位和 .POS 值清零。只有这样,才会在 EnableIn 出现假到真跳变时触发指令的再次执行。
FAL_All Mode 2
数值模式
数值模式将数组运算分配到若干次扫描中在处理非时间关键型数据或大量数据时,可使用此模式。输入每次扫描时参与运算的元素数目,这样可缩短扫描时间。
当 EnableIn 由假跳变为真时,触发指令的执行。触发后,指令将在每次扫描时执行,扫描次数为完成整个数组运算所需的次数。触发后,EnableIn 可以反复更改,而不会中断指令的执行。
FAL_numerical mode
在 .DN 位置位之前,应避免使用数值模式下文件指令运算的结果。
以下时序图展示状态位与指令运算之间的关系。当指令执行完成时,.DN 位置位。
FAL numerical mode 2
如果完成时 EnableIn 为真,则在 EnableIn 跳变为假之前,.EN 位和 .DN 位将为真。当 EnableIn 跳变为假后,这些位和 .POS 值都将清零。
如果完成时 EnableIn 为假,会将 .EN 位立即清零。在 .EN 位清零后进行一次扫描,.DN 位和 .POS 值都将清零。
增量模式
在增量模式下,每次指令的 EnableIn 由假跳变为真时,会对数组的一个元素执行运算。
FAL_Incremental Mode
以下时序图展示状态位与指令运算之间的关系。只有扫描时 EnableIn 由假变为真,指令才会执行。每次出现这种情况时,只会对该数组中的一个元素执行运算。如果 EnableIn 在多次扫描期间保持为真,则指令只在第一次扫描期间执行。
FAL_Incremental Mode 2
当 EnableIn 为真时,.EN 位置位。对数组中的最后一个元素执行运算后,.DN 位置位。处理完最后一个元素并且 EnableIn 跳变为假后,.EN 位、.DN 位和 .POS 值将清零。
当每次扫描只对一个元素执行运算时,增量模式与数值模式的不同之处在于:
数值模式每次扫描时可对任意数目的元素执行运算,只需 EnableIn 的一次假到真跳变即开始执行。指令在每次扫描时都将继续对指定数目的元素执行运算,直至完成,而与 EnableIn 的状态无关。
增量模式需要 EnableIn 由假跳变为真才能对数组中的一个元素执行运算。
确定表达式格式
对于表达式中使用的每个运算符,必须提供一到两个操作数(标签或立即数)。可使用下表规范表达式中运算符和操作数的格式。
对如下数量的操作数进行运算的运算符:
使用此格式:
示例
一个操作数
运算符(操作数)
ABS(tag)
两个操作数
operand_a 运算符 operand_b
tag_b + 5
tag_c AND tag_d
(tag_e**2) MOD (tag_f / tag_g)
确定运算顺序
表达式中的运算由指令按预定顺序执行,而不是必须按显示顺序执行。可以用圆括号括起一些内容,以此指定运算顺序,这样指令就会先执行括号内的运算,然后再执行其他运算。
相同顺序的运算从左至右执行。
Order
操作
1
( )
2
ABS, ACOS, ASIN, ATAN, COS, DEG, BCD_TO, LN, LOG, RAD, SIN, SQRT, TAN, TO_BCD, TRUNC
3
**
4
-(取反),NOT
*,/,MOD
6
-(减),+
7
AND
8
XOR
9
OR
影响数学状态标志
控制器
影响数学状态标志
CompactLogix
5380、
ControlLogix
5580、
Compact GuardLogix
5380、
GuardLogix
5580 和 ControlLogix 5590 控制器
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370 和
GuardLogix
5570 控制器
严重/轻微故障
在以下情况下会发生严重故障:
故障类型
故障代码
.POS < 0 或 .LEN < 0
4
21
请参见“数组索引编制”,了解关于数组索引故障的信息。
执行
梯形图
条件/状态
执行的操作
预扫描
不适用
梯级输入条件为假
将梯级输出条件设置为梯级输入条件。
请参见“FAL 流程图(梯级输出条件为假)”
梯级输入条件为真
将梯级输出条件设置为梯级输入条件。
请参见“FAL 流程图(梯级输出条件为真)”
后扫描
不适用
FAL 流程图(梯级输出条件为假)
FAL FLOW CHART ENABLEIN IS FALSE
FAL 流程图(梯级输出条件为真)
FAL Flow Chart EnableIn is True
FAL 流程图(所有模式)
AllModeFlowChart
FAL 流程图(数值模式)
NumModeFlowChart
FAL 流程图(增量模式)
IncModeFlowChart
示例
示例 1
数组到数组。
梯形图
File Arithmetic and Logic (FAL) (54)_v31
使能后,FAL 指令将 array_2 中的每个元素复制到 array_1 中的相同位置。
FAL_example 1_array
示例 2
元素到数组复制。
梯形图
File Arithmetic and Logic (FAL) (56)_v31
使能后,FAL 指令将 value_1 复制到 array_2 第二维的前 10 个位置。
FAL_example 2_array
示例 3:
数组到元素复制。
File Arithmetic and Logic (FAL) (58)_v31
每次 FAL 指令使能时,会将 array_1 的当前值复制到 value_1 中。FAL 指令使用增量模式,因此每次指令使能时仅复制一个数组值。下次指令使能时,指令将用 array_1 中的下一个值覆盖 value_1 值。
FAL_example 3_array
示例 4:
算术运算:数组/数组到数组
File Arithmetic and Logic (FAL) (60)_31
使能后,FAL 指令将 array_2 当前位置的值除以 array_3 当前位置的值,并将结果存储到 array_1 中的当前位置。
FAL_example 4
示例 5:
算术运算:数组/数组到数组
File Arithmetic and Logic (FAL) (62)_v31
使能后,FAL 指令将 value_1 和 value_2 相加,并将结果存储到 array_1 中的当前位置。
RSLogix500 Linked Icons PNG File Template
示例 6:
算术运算:数组 + 元素到数组
File Arithmetic and Logic (FAL) (64)_v31
使能后,FAL 指令将 array_1 当前位置的值与 value_1 相加,并将结果存储到 array_3 的当前位置。该指令必须执行 10 次才能处理完整的 array_1 和 array_3。
FAL_example 6
示例 7:
算术运算:(元素 + 数组)到元素
File Arithmetic and Logic (FAL) (66)_v31
每次 FAL 指令使能时,会将 value_1 与 array_1 的当前值相加,并将结果存储到 value_2 中。FAL 指令使用增量模式,因此每次指令使能时仅将一个数组值与 value_1 相加。下次指令使能时,指令将覆盖 value_2。
FAL_example 7
示例 8:
算术运算:(数组 * 数组)到元素
File Arithmetic and Logic (FAL) (68)_v31
使能后,FAL 指令将 array_1 的当前值与 array_3 的当前值相乘,并将结果存储到 value_1 中。FAL 指令使用增量模式,因此每次指令使能时仅将一对数组值相乘。下次指令使能时,指令将覆盖 value_1。
L5K_FAL_example 8
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal