逻辑运算符用于布尔变量、常数和简单的、借助比较运算符构成的逻辑表达式的逻辑运算。
运算符 | 运算数的数量 | 说明 |
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 运算的十进制结果:
1. 运算数加 1的十进制值
2. 更换正负号
其他示例
...
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