文件搜索和比较 (FSC)

此信息适用于
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370、
GuardLogix
5570、
Compact GuardLogix
5380、
CompactLogix
5380、
ControlLogix
5580、
GuardLogix
5580 和 ControlLogix 5590 控制器。在适用的情况下会注明控制器的差异。
FSC 指令用于逐元素比较数组中的值。
可用语言
梯形图
File Search and Compare (FSC) (1)_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
STRING
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
String type
立即数
标签
由标签和/或立即数构成且各部分由运算符分隔的表达式
长度和位置(对应于控制标签中的 .LEN 和 .POS)是伪操作数。有关详细信息,请参阅 伪操作数初始化
CONTROL 结构
助记符
数据类型
说明
.EN
BOOL
使能位,指示 FSC 指令是否使能。
.DN
BOOL
完成位,指令对数组中最后一个元素进行运算后置位 (.POS = .LEN)。
.ER
BOOL
错误位,不修改。
.IN
BOOL
禁用位,指示 FSC 指令检测到结果为真的比较。必须将此位清零才能继续执行搜索操作。
.FD
BOOL
发现位,指示 FSC 指令检测结果为真的比较。
.LEN
DINT
长度,指定数组中参与指令运算的元素数目。
.POS
DINT
位置,包含指令正在访问的当前元素的位置。
说明
当 FSC 指令的 EnableIn 由假跳变为真时,会按指定的迭代模式对表达式求值。
如果所得结果为真,该指令会将 .FD 位置位,而 .POS 值指示指令检测到结果为真的比较对应的数组位置。该指令会将 .IN 位置位,防止进一步迭代。
选择运算模式
对于 FSC 指令,通过模式来指示控制器如何分配数组运算。
执行以下操作:
选择此模式:
对数组中所有指定元素执行运算,然后继续执行下一条指令。
清除
将数组运算分配到若干次扫描中。
输入每次扫描时参与运算的元素数目 (1-2147483647)。
数值
每次 EnableIn 由假跳变为真时,对数组的一个元素执行运算。
增量式
所有模式
在所有模式下,对数组中所有指定元素执行运算,然后继续执行下一条指令。当指令的 EnableIn 由假跳变为真时,开始进行运算。控制结构的位置 (.POS) 值指向指令当前使用的数组元素。在两种情况下运算停止。当 .POS 值大于或大于 .LEN 值时,以及表达式计算结果为真时。
File Search and Compare (FSC) (2)
以下时序图展示状态位与指令运算之间的关系。当指令执行完成时,.DN 位为真。当 EnableIn 为假时,.DN 位、.EN 位和 .POS 值清零。只有这样,才会在 EnableIn 出现假到真跳变时触发指令的再次执行。
All Mode_2_v31
数值模式
数值模式将数组运算分配到若干次扫描中在处理非时间关键型数据或大量数据时,此模式非常实用。输入每次扫描时参与运算的元素数目,这样可缩短扫描时间。
当 EnableIn 由假跳变为真时,触发指令的执行。触发后,指令将在每次扫描时执行,扫描次数为完成整个数组运算所需的次数。触发后,EnableIn 可以反复更改,而不会中断指令的执行。
Numerical Mode
在 .DN 或 .IN 位变为真之前,应避免使用数值模式下文件指令运算的结果。
以下时序图展示状态位与指令运算之间的关系。当指令执行完成时,.DN 位为真。
FSC_Numerical Mode
如果完成时 EnableIn 为真,则在 EnableIn 跳变为假之前,.EN 位和 .DN 位将为真。当 EnableIn 跳变为假后,这些位和 .POS 值都将清零。
如果完成时 EnableIn 为假,会将 .EN 位立即清零。在 .EN 位清零后进行一次扫描,.DN 位和 .POS 值都将清零。
增量模式
在增量模式下,每次指令的 EnableIn 由假跳变为真时,会对数组的一个元素执行运算。
FSC_Incremental Mode
以下时序图展示状态位与指令运算之间的关系。只有扫描时 EnableIn 由假变为真,指令才会执行。每次出现这种情况时,只会对该数组中的一个元素执行运算。如果 EnableIn 在多次扫描期间保持为真,则指令只在第一次扫描期间执行。
Incremental Mode_2
当梯级输入条件为真时,.EN 位置位。对数组中的最后一个元素执行运算后,.DN 位置位。对最后一个元素执行运算并且梯级输入条件跳变为假后,.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、!
5
*,/,MOD
6
-(减),+
7
AND
8
XOR
9
OR
10
<,<=,>,>=,=,<>
11
&&
12
^^
13
||
在表达式中使用字符串
如果在表达式中使用由 ASCII 字符构成的字符串,请遵循以下指导原则:
表达式可以比较两个字符串型标签。
不能将 ASCII 字符直接输入表达式。
只允许使用以下运算符:
运算符
说明
=
等于
<
小于
<=
小于等于
>
大于
>=
大于等于
<>
不等于
如果其字符匹配,则字符串相等。
ASCII 字符区分大小写。大写 A ($41) 不等于小写 a ($61)。
字符的十六进制值可确定两个字符串之间的大小关系。
两个字符串按照电话号码簿方式排序时,它们的大小由字符串的顺序决定。
FSC_use strings in an expression
影响数学状态标志
控制器
影响数学状态标志
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
有关操作数相关的故障,请参见“通用属性”部分。请参见“数组索引编制”,了解关于数组索引故障的信息。
执行
梯形图
条件/状态
执行的操作
预扫描
不适用
梯级输入条件为假
请参见“FSC 流程图(梯级输出条件为假)”
梯级输入条件为真
请参见“FSC 流程图(梯级输出条件为真)”
后扫描
不适用
FSC 流程图(梯级输出条件为假)
FSC Flow Chart EnableIn is False
FSC 流程图(梯级输出条件为真)
FSC Flow Chart EnableIn is True
FSC 流程图(FSC 常规子流程)
FSC Flow Chart (FSC Common Subflow)
FSC 流程图(FSC 常规异常子流程)
FSC Flow Chart FSC Common Exception Subflow
示例
示例 1
搜索两个 DINT 型数组中不相等的元素。
梯形图
File Search and Compare (FSC)_Example1_v31
使能后,FSC 指令逐个对比 array_1 的前 10 个元素与 array_2 的对应元素。当发现不相等的元素时,将 .FD 和 .IN 位置位。.POS 用于标识不相等的元素的位置。将 .IN 位清零后可以搜索数组的其余部分。
FSC_example clear the bit
示例 2
在字符串型数组中搜索字符串。
使能后,FSC 指令可将代码中的各个字符与 code_table 中的 10 个元素进行对比。
当在 code_table 中发现与代码相匹配的字符串时,FD 和 IN 位将置位。POS 用于标识匹配字符串的位置。将 .IN 位清零后可以搜索数组的其余部分。
File Search and Compare (FSC)_Example3_v31
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal