在西门子S7-1200中,比较程序可以通过多种比较指令来实现,具体使用哪种指令取决于需要比较的数据类型和比较方式。以下是一些常用的比较指令及其使用方法:
值大小比较指令
等于(=):比较两个数值是否相等。
不等于(<>):比较两个数值是否不相等。
大于等于(>=):比较第一个数值是否大于或等于第二个数值。
小于等于(<=):比较第一个数值是否小于或等于第二个数值。
大于(>):比较第一个数值是否大于第二个数值。
小于(<):比较第一个数值是否小于第二个数值。
使用时,可以从比较指令的下拉菜单中选择数据类型,支持的数据类型包括整数、双整数、实数、无符号短整数、无符号整数、无符号长整数、短整数、字符串、字符、时间、DTL和长实数等。
范围内与范围外比较指令
在范围内(IN_RANGE):确定输入值是否在参数MIN和MAX指定的取值范围内,若在范围内则输出状态为1。
范围外(OUT_RANGE):确定输入值是否在参数MIN和MAX指定的取值范围外,若在范围外则输出状态为1。
例如,可以使用输入MIN和MAX来指定取值范围的限值,并通过“值在范围内”指令将输入VAL的值与输入MIN和MAX的值进行比较。
OK与NOT_OK指令
OK:用来检测输入数据是否为实数,如果是实数则OK触点接通。
NOT_OK:用来检测输入数据是否为实数,如果不是实数则NOT_OK触点接通。
这些指令通常用于在执行某些操作之前检查输入数据的有效性,例如在乘法指令MUL之前检查两个操作数是否都是实数。
类型比较指令
TYPE OF:用于比较两个操作数对应的实参的数据类型是否相等。
例如,可以使用IF指令来比较两个操作数对应的实参的类型是否相等。
示例程序
```pascal
VAR
Input_Array: ARRAY[0..3] OF REAL; // 输入数组
Max_Value: REAL; // 最大值
Min_Value: REAL; // 最小值
In_Range: BOOL; // 是否在范围内
Upper_Limit: REAL := 50.0; // 上限
Lower_Limit: REAL := 20.0; // 下限
END_VAR
// 使用MAX_REAL函数找出最大值
Max_Value := MAX_REAL(IN1 := Input_Array, IN2 := Input_Array, IN3 := Input_Array, IN4 := Input_Array);
// 使用MIN_REAL函数找出最小值
Min_Value := MIN_REAL(IN1 := Input_Array, IN2 := Input_Array, IN3 := Input_Array, IN4 := Input_Array);
// 检查输入值是否在范围内
In_Range := (Input_Array >= Lower_Limit) AND (Input_Array <= Upper_Limit);
// 根据比较结果执行相应操作
IF In_Range THEN
// 输入值在范围内
// 执行相应操作
ELSE
// 输入值不在范围内
// 执行相应操作
END_IF;
```
在这个示例中,我们首先定义了一个输入数组和一些变量来存储最大值、最小值和是否在范围内的标志。然后,我们使用MAX_REAL和MIN_REAL函数找出数组中的最大值和最小值,并使用IF指令检查输入值是否在指定的范围内。根据比较结果,我们可以执行相应的操作。