逻辑运算符用于布尔变量、常数和简单的、借助比较运算符构成的逻辑表达式的逻辑运算。
运算符
|
运算数的数量
|
说明
|
NOT
|
1
|
逆转
|
AND
|
2
|
逻辑 “ 与 ”
|
OR
|
2
|
逻辑“ 或”
|
EXOR
|
2
|
异 “ 或 ”
|
逻辑运算的运算数必须为 BOOL 类型。结果同样始终为 BOOL 类型。下表显示了可能存在的运算的结果:
操作
|
NOT A
|
A AND B
|
A OR B
|
A EXOR B
|
A = TRUE
|
B = TRUE
|
FALSE
|
TRUE
|
TRUE
|
FALSE
|
A = TRUE
|
B = FALSE
|
FALSE
|
FALSE
|
TRUE
|
TRUE
|
A = FALSE
|
B = TRUE
|
TRUE
|
FALSE
|
TRUE
|
TRUE
|
A = FALSE
|
B = FALSE
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
该表也适用于用位运算符进行的运算。
示例 即使多个运算也是允许的。
...
DECL BOOL A,B,C
...
A=TRUE ;A=TRUE
B =NOTA ;B=FALSE
C = (A AND B)OR NOT (B EXORNOTA) ;C=TRUEA = NOTNOT C ;A=TRUE
...
位运算符
位运算符依次运算整数,方法是依次逻辑运算其单个位。运算的结果等于逻辑运算符的结果。
位值 1 相当于 TRUE。
位值 0 相当于 FALSE。
运算符
|
运算数的数量
|
说明
|
B_NOT
|
1
|
位逆转
|
B_AND
|
2
|
位的与运算
|
B_OR
|
2
|
位的或运算
|
B_EXOR
|
2
|
位的异或运算
|
位运算符可以应用到 INT 和 CHAR 数据类型上。
INT 在 KRL 中有 32 位,必须注明正负号。CAHR 为 8 位,不必注明正负号。
对于带整数值的 B_AND、B_OR 和 B_EXOR 的以下示例,得出正数(最高位= 0)。与无正负号的值一样,可以直接将结果换算为十进制。
通过“00 […]”表示运算数前面的 28个零。
B_AND
示例:整数值 5 和 12 的运算
B_OR
示例:整数值 5 和 12 的运算
B_EXOR
示例:整数值 5和 12 的运算
B_NOT
对于该整数示例,通过运算得出一个负数 (最高值位 = 1)。因此,无法用与无正负号数字相同的方式将结果换算为十进制。
示例:带整数值 10的 B_NOT
为了可以使用户理解机器人控制系统换算的十进制结果,则他必须了解二补数的解释规则。这些规则不是本文的对象。
可以如下确定用注明正负号的运算数进行 B_NOT 运算的十进制结果:
其他示例
...
DECL INT A
...
A = 10B_AND9 ;A=8
A = 10B_OR 9 ;A=11
A = 10B_EXOR9 ;A=3
A =B_NOT 197 ;A=-198
A =B_NOT'HC5' ;A=-198
A =B_NOT'B11000101' ;A=-198
A =B_NOT "E" ;A=154
...
设定位并检查位:
用 B_AND和 B_OR可以有针对性地将比特序列的单个位设定为 1或 0。剩余的位保持不更改。
用 B_AND 可以将单个位设定为 0。
用 B_OR可以将单个位设定为 1。此外,可以检查单个位是否为1或 0。示例:
存在一个宽度为 8 位的数字输出端。该输出端可通过 INT 变量 DIG 响应。将位 1、2 和 6 设定为 0:
DIG = DIG B_AND 'B10111001'
|
将位 0、2、3 和 7 设定为 1:
DIG = DIG B_OR 'B10001101'
|
检查是否已将位 0 和 7 设定为 1。如是,则 my_result 变为 TRUE:
DECL BOOL my_result
...
my_result = DIG B_AND ('B10000001') > 0
|
运算符的优先级
优先级给出运算符在一个指令内执行运算符的顺序。
优先级
|
运算符
|
1
|
NOT; B_NOT
|
2
|
*; /
|
3
|
+; -
|
4
|
AND; B_AND
|
5
|
EXOR; B_EXOR
|
6
|
OR; B_OR
|
7
|
==, <>; <, >, <=, >=
|
原则上适用:
首先编辑括起来的表达式。
未括起来的表达式按照其优先级进行分析。
从左向右分析用相同优先级的运算符进行的运算。
数学标准功能
功能
|
数值范围自变量
|
数值范围结果
|
ABS(X)
总和
|
REAL_MIN…REAL_MAX
|
0 …REAL_MAX
|
SQRT(X)
平方根
|
0 …REAL_MAX
|
0 …REAL_MAX
|
SIN(X)
正弦
|
REAL_MIN…REAL_MAX
|
-1 …+1
|
COS(X)
余弦
|
REAL_MIN…REAL_MAX
|
-1 …+1
|
TAN(X)
正切
|
REAL_MIN…REAL_MAX
|
REAL_MIN…REAL_MAX
|
ACOS(X)
反余弦
|
-1 … +1
|
0 …+180
|
ATAN2(Y,X)
反正切
|
REAL_MIN…REAL_MAX
|
-180 …+180
|
所有函数的数据类型:REAL。所有自变量的数据类型:REAL。
绝对值 ABS(X) 计算 X 的总和。
示例:
B = -3.4
A = 5*ABS(B) ;A=17.0
平方根 SQRT(X) 计算 X 的平方根。
示例:
A = SQRT(16.0801) ;A=4.01
正弦 SIN(X) 计算角度 X 的正弦。
示例:
A = SIN(30) ;A=0,5
余弦 COS(X) 计算角度 X 的余弦。
示例:
B = 2*COS(45) ;B=1.41421356
正切 TAN(X) 计算角度 X 的正切。
示例:
以下总和的正切无穷:
±90°
+90° + k*180° (其中 k = ± 整数)
如果尝试一个这样的值,这将导致错误信息。
C = TAN(45) ;C=1.0
反余弦 ACOS(X) 是 COS(X) 的反函数。
示例:
A = COS(60) ;A=0.5
B = ACOS(A) ;B=60
反正弦
对于SIN(X)的反函数反余弦,没有预定义函数。但是,基于公式SIN(X) =COS(90°-X)可以很容易就计算出反正弦。
示例:
A=SIN(60) ;A=0.8660254
B=90-ACOS(A) ;B=60
|
反正切
角度正切的定义是直角三角形的邻边(X)除以对边(Y)。如果两个侧边的长度已知,则可以用反正切计算邻边和斜边之间的角度。
对于全圆,起决定性作用的是 X和 Y的正负号是什么。如果只考虑商,则用反正切只能计算 0°和 180°之间的角度。通常,这在袖珍计算器时也是如
此:正值的反正切得出一个0°和 90°之间的角度。负值的反正切得出一个90° 和 180° 之间的角度。
通过用正负号指定 Y 和 X 明确地确定了位于该角度中的四分之一圆。由此也可以计算四分之一圆 III 和 IV 中的角度。
示例:
A=ATAN2(0.5,0.5) ;A=+45
B=ATAN2(0.5,-0.5) ;B=+135
C=ATAN2(-0.5,-0.5) ;C=-135
D=ATAN2(-0.5,0.5) ;D=-45
|
在函数 ATAN(Y,X)中使用X 和 Y |