ARRAY of BOOL 比较数据类型为ARRAY OF BOOL 的两个操作数时,需要从下拉列表中选择数据类型 VARIANT,如果元素的个数不能被 8整除,还会比较填充位。这可能会影响比较结果。 如果待比较结构中的某个元素为无效STRING/WSTRING、无效时间日期或无效浮点数,则 RLO (逻辑运算结果)中的比较结果将返回信号状态“0”。下表举例说明了一个结构比较:比较硬件数据类型 为了能够比较 PORT 数据类型的操作数,需要从指令框的下拉列表中选择 WORD数据类型。 但如果要比较这两种数据类型,则需先在块接口的“Temp”部分创建一个 HW_ANY 数据类型 的变量,之后再将数据类型为HW_DEVICE 的 LADDR 复制到该变量中。之后,才能对 HW_ANY 和 HW_IO 进行比较。 比较结构 说明结构比较的可用性 结构比较功能仅适用于固件版本为 V4.2 及以上版本的 S7-1200 系列 CPU,以及固件版本为 V2.0及以上版本的 S7-1500 系列 CPU。 如果两个变量的结构数据类型相同,则可以比较这两个结构化操作数的值。比较结构化变量时,待比较操作数的数据类型必须相同,而无需考虑具体的“IEC 检查”(IEC Check) 设置。但 两个操作数中的一个为VARIANT,而另一个为 ANY 时除外。如果编程时数据类型未知,则 可使用 VARIANT数据类型。这样,就可比较任意数据类型的结构化变量操作数。还 可以比较 VARIANT 或 ANY 数据类型的变量。可以从指令框的下拉列表中选择该比较指令的数据类型 VARIANT。支持以下数据类型的变 量: • PLC 数据类型 (UDT) •STRUCT(STRUCT 数据类型的结构需包含在 PLC 数据类型中,或者待比较的两个结构需为 ARRAY of STRUCT的两个元素。不支持背景数据块和匿名结构的变量。) • PLC 数据类型的数据块 • ANY 指向的变量 • VARIANT 指向的变量要比较选定数据类型 ARRAY 和 VARIANT 的两个变量,需满足以下要求: • 元素的数据类型必须相同。 • 两个 ARRAY的维数必须相同。 • 所有维数的元素数量必须相同,而具体的 ARRAY 限值无需相同。并非所有时间类型都可以直接相互比较,如S5TIME。此时,需要将其显式转换为其它时间 类型(如,TIME),再进行比较。如果要比较不同数据类型的日期和时间,则需将较小的日期或时间数据类型显式转换为较大 的日期或时间数据类型。例如,比较日期和时间数据类型DATE 和 DTL 时,将基于 DTL 进行 比较。 如果显式转换失败,则比较结果为 FALSE。 比较 WORD 数据类型的变量与S5TIME 数据类型的变量 将 WORD 数类型的变量与 S5TIME 数据类型的变量进行比较时,这两种变量都将转换为 TIME数据类型。WORD 变量将解释为一个 S5TIME 值。如果这两个变量中的某个变量无法转换, 则不进行比较且输出结果FALSE。如果转换成功,则系统将基于所选的比较指令进行比较操 作。
CMP <>:不等于(S7-1200, S7-1500) 说明 可以使用指令“不等于”查询输入 IN1 的值是否不等于输入 IN2 的值。如果满足比较条件,则指令返回逻辑运算结果 (RLO)“1”。如果不满足比较条件,则该指令返 回 RLO“0”。 如果启用了 IEC检查,则要比较的操作数必须属于同一数据类型。如果未启用 IEC 检查,则 操作数的宽度必须相同。 比较浮点数 如果要比较数据类型REAL 或 LREAL,则可使用指令“CMP <>:不等于”。建议使用指令 “OUT_RANGE:值超出范围”。如果要比较浮点数,则无论 IEC 检查的设置如何,要比较的操作数都必须属于相同数据类型。 对于无效运算的运算结果(如,-1的平方根),这些无效浮点数 (NaN) 的特定位模式不可 比较。即,如果一个操作数的值为 NaN,则指令“CMP<>:不等于”的结果为 FALSE。也可以对字符串中的各个字符进行比较。在操作数名称旁的方括号内,指定了待比较的字符位数。例如,“MyString[2]”与“MyString”字符串的第二个字符进行比较。 说明执行“inactive”指令,仍会显示状态 请注意以下要求: • 执行指令“CMP <>:不等于”(数据类型STRING、WSTRING 或 VARIANT)之前,系统将查询 程序段中的条件(如,常开触点的值)。 • “开启监视”已启用。 •该条件的新结果将程序段复位为 FALSE。指令“CMP <>:不等于”将取消激活。 结果: 对于指令“CMP<>:不等于”(数据类型 STRING、WSTRING 或 VARIANT),程序段中仍然 显示之前的状态。仅当关闭“开启监视”功能后再重新启用或移动到其它程序段中时,指令“CMP <>:不等 于”(数据类型STRING、WSTRING 或 VARIANT)的状态才会正确显示。指令“CMP <>:不等于”将在程序段中灰显为取消激活状态。 比较定时器、日期和时间系统无法比较无效定时器、日期和时间的位模。即,如果某个操作数的值无效,则指令“CMP <>:不等于”的结果为 TRUE。并非所有时间类型都可以直接相互比较,如 S5TIME。此时,需要将其显式转换为其它时间类型(如,TIME),再进行比较。如果要比较不同数据类型的日期和时间,则需将较小的日期或时间数据类型显式转换为较大的日期或时间数据类型。例如,比较日期和时间数据类型 DATE 和 DTL 时,将基于 DTL 进行 比较。如果显式转换失败,则比较结果为 FALSE。 比较 WORD 数据类型的变量与 S5TIME 数据类型的变量 将 WORD数类型的变量与 S5TIME 数据类型的变量进行比较时,这两种变量都将转换为 TIME 数据类型。WORD 变量将解释为一个S5TIME 值。如果这两个变量中的某个变量无法转换, 则不进行比较且输出结果FALSE。如果转换成功,则系统将基于所选的比较指令进行比较操 作。 比较硬件数据类型 为了能够通过“不等于”指令比较 PORT数据类型的操作数,需要从指令功能框的下拉列表 中选择 WORD 数据类型。 如果要比较这两种硬件数据类型 HW_IO 和HW_DEVICE,则需先在块接口的“Temp”区域创建 一个 HW_ANY 数据类型的变量,将数据类型为 HW_DEVICE 的LADDR 复制到该变量中。 之后,才能对 HW_ANY 和 HW_IO 进行比较。 比较结构 说明 结构比较的可用性结构比较功能仅适用于固件版本为 V4.2 及以上版本的 S7-1200 系列 CPU,以及固件版本为 V2.0 及以上版本的S7-1500 系列 CPU。 如果两个变量的结构数据类型相同,则可以比较这两个结构化操作数的值。比较结构化变量时,待比较操作数的数据类型必须相同,而无需考虑具体的“IEC 检查”(IEC Check) 设置。但 两个操作数中的一个为VARIANT,而另一个为 ANY 时除外。如果编程时数据类型未知,则 可使用 VARIANT数据类型。这样,就可比较任意数据类型的结构化变量操作数。还 可以比较 VARIANT 或 ANY 数据类型的变量。可以从指令框的下拉列表中选择该比较指令的数据类型 VARIANT。支持以下数据类型: • PLC 数据类型 • STRUCT(数据类型STRUCT 的结构需包含在 PLC 数据类型 (UDT) 中,或两个结构为 ARRAY of STRUCT中待比较的两个元素。不支持匿名结构。)要比较选定数据类型 ARRAY 和 VARIANT 的两个变量,需满足以下要求: •元素的数据类型必须相同。 • 两个 ARRAY 的维数必须相同。 • 所有维数的元素数量必须相同,而具体的 ARRAY 限值无需相同。说明 ARRAY of BOOL 比较数据类型为 ARRAY OF BOOL 的两个操作数时,需要从下拉列表中选择数据类型VARIANT,如果元素的个数不能被 8 整除,还会比较填充位。这可能会影响比较结果。 如果待比较结构中的某个元素为无效STRING/WSTRING、无效时间日期或无效浮点数,则 RLO (逻辑运算结果)中的比较结果将返回信号状态“0”。大于或等于(S7-1200, S7-1500) 说明 可以使用指令“大于或等于”查询输入 IN1 的值是否大于或等于输入 IN2的值。要比较的两 个值必须为相同的数据类型。 如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则该指令返 回 RLO“0”。 比较字符串在比较字符串时,通过字符的代码比较各字符(例如“a”大于“A”)。从左到右执行比较。第一个不同的字符决定比较结果。如果较长字符串的左侧部分和较短字符串相同,则认为较长 字符串更大。下表举例说明了字符串的比较:也可以对字符串中的各个字符进行比较。在操作数名称旁的方括号内,指定了待比较的字符位数。例如,“MyString[2]”与“MyString”字符串的第二个字符进行比较。 说明执行“inactive”指令,仍会显示状态 请注意以下要求: • 执行指令“CMP >=:大于或等于”(数据类型STRING、WSTRING 或 VARIANT)之前,系统将 查询程序段中的条件(如,常开触点的值)。 • “开启监视”已启用。 •该条件的新结果将程序段复位为 FALSE。指令“CMP >=:大于或等于”将取消激活。 结果: 对于指令“CMP>=:大于或等于”(数据类型 STRING、WSTRING 或 VARIANT),程序段中 仍然显示之前的状态。仅当关闭“开启监视”功能后再重新启用或移动到其它程序段中时,指令“CMP >=:大于或 等于”(数据类型STRING、WSTRING 或 VARIANT)的状态才会正确显示。指令“CMP >=:大于或等于”将在程序段中灰显为取消激活状态。