如果大家学过数电,应该会比较好理解这一章节内容。逻辑运算符就是我们数电中常说的是“与或非”。(异或我们用的并不多)在CoDeSys 中,从功能上分可 以分为:按位逻辑运算及布尔逻辑运算。

按位逻辑运算: 对两个整型数据的相应位逐一进行布尔逻辑运算,并返回兼容的整数结果。 布尔逻辑运算: 对两个布尔类型数据执行逻辑运算。

布尔逻辑运算

1.布尔-与逻辑-AND

vb_Result := 条件A AND 条件B AND 条件C; 当且只当,条件A和条件B和条件C同时都为TRUE的时候,vb_Result输出才为true。只要条件ABC中任一条件为FALSE,则结果为FALSE;这个逻辑语句,就是数电上学习的“逻辑与”。

布尔,实际上就是BOOL,代表的意思是只有两种状态:True或False。

布尔“与”运算用于计算两个布尔表达式的“与”结果。当两个布尔表达式的结果都为 真时,则返回为真,其中只要有一个为假时,则返回为假。

VAR
    bResult:BOOL;
    iVar1:INT:=30;
END_VAR

bResult:=iVar1 <80;

由于30 的确小于80,故等式右边的条件为真,程序的运行结果是bResult 为TRUE。

2.布尔-或逻辑-OR

布尔“或”运算指令用于计算两个布尔表达式的“或”结果。当两个布尔表达式中有一 个表达式返回为真时,则结果为真;当两个布尔表达式的结果都是假时,则结果为假。

bool值代表结果只有true-or-false两种情况。

创建一个POU,利用布尔“或”运算,判断运算返回值,代码如下:

VAR
    bResult:BOOL;
    bVar1:BOOL;
    iVar1:INT:=30;
END_VAR

bResult:=bVar1 OR (iVar1 <80);

由于iVar1 的初始值为30,故iVar1<80 条件为真,而bVar1 的初始值为“0”,故为假,一真一假最终的“或”逻辑结果可根据表6-x 可以看出,为真。故等式右边的条件为真,程序的运行结果是bResult 为TRUE。

3.布尔-非逻辑-NOT

布尔“非”运算指令用于计算单个布尔表达式的结果。当输入为真时,结果为假;当输入为假时,结果为真。

例子: 创建一个POU,利用布尔“非”运算,判断运算返回值,具体代码如下。

VAR
    bResult:BOOL;
    bVar1:BOOL;
    iVar1:INT:=30;
END_VAR

bResult:=NOT ( 80 < iVar1 );

80<30 该命题为假,使用NOT 指令对该布尔表达式取反后,得到的结果为真,故最后bResult的结果为True。

按位逻辑运算

4.按位-与逻辑-AND

按位“与”运算指令是比较两个整数的相应位。当两个数的对应位都是1 时,返回相应的结果位是“1”;当两个整数的相应位都是“0”或者其中一个位是“0”时,则返回相 应的结果位是“0”。假如变量A数值为7,变量B数值为8,变量C数值为9. A对应二进制位:0111 B对应二进制位:1000 C对应二进制位:1001 则D := A AND B;A的每一个二进制位与B的每一个二进制位做“与”逻辑运算,得到的结果是D := 0001也就是1.

E := B AND C;则B的每一个二进制位与C的每一个二进制位做“与”逻辑运算,得到的结果是E := 1000也就是8

例子: 创建一个POU,声明两个整形变量iVar1 和iVar2,分别对其进行赋值1 和 85,并对这两个变量进行按位与运算,输出结果至iResult,具体实现代码如下所示。

VAR
    iVar1:INT:=1;
    iVar2:INT:=85;
    iResult:INT;
END_VAR

iResult:=iVar1 and iVar2;

10 进制数1 对应2 进制数为0000 0001,10 进制数85 对应2 进制数为0101 0101。根据按位与运算的定义,将每一个独立位逐一进行“与”运算,得出最终的结果0000 0001,即10 进制数值1,见图4.4.1 所示。

5.按位-或逻辑-OR

按位“或”运算指令是比较两个整数的相应位。当两个数的对应位有一个是“1”或者都是“1”时,返回相应的结果位为“1”。当两个整数的相应位都是“0”时,则返回 相应的结果为是“0”。其“或”逻辑真值表如下所示:

输入1 输入2 结果
0 0 0
0 1 1
1 0 1
1 1 1

例子: 创建一个POU,对变量iVar1 和iVar2 进行按位“或”运算,并对这两个变量进行按位或运算,输出结果至iResult,具体实现代码如下所示。

VAR
    iVar1:INT:=1;
    iVar2:INT:=85;
    iResult:INT;
END_VAR

iResult:=iVar1 OR iVar2;

程序的最终运行结果为85。

6.按位-非逻辑-NOT

对逻辑串进行取反,将当前的值由“0”变“1”,或由“1”变“0”。按位“非”运算指令是将变量或常量逐一取非。其逻辑见如下真值表: |输入1 | 结果| |:-----| |0|1| |1|0|

例子: 创建一个POU,利用按位“非”运算,判断运算返回值,具体代码如下。

VAR
    byVar1:BYTE:=1;
    byVar2:BYTE;
END_VAR

byVar2:=NOT byVar1;

由于byVar1 的值为1,将其转换为2 进制后为0000 0001,进行按位取反后,结果为1111 1110。最终的输出结果为254。

下面的异或逻辑,我们不常用,不需要记忆了……

7.按位“异或”XOR

按位“异或”运算指令比较两个整数的相应位。当两个整数的对应位是一个“1”而另外一个是“0”时,返回相应的结果位是“1”。当两个整数的相应位都是“1”或是“0”时,则返回相应的结果位是“0”。

创建一个POU,对变量iVar1 和iVar2 进行按位“异或”运算,并输出结果,具体 实现代码如下。

VAR
    iVar1:INT:=1;
    iVar2:INT:=85;
    iResult:INT;
END_VAR

iResult:=iVar1 XOR iVar2;

10 进制的1 对应2 进制数是0000 0001,10 进制数85 对应的2 进制数是0101 0101。根据按位“异或”运算指令的定义,其结果为84。

Copyright © www.yanjuntech.cn 2018-2025 all right reserved,powered by Gitbook该文件修订时间: 2019-04-21 11:11:18

results matching ""

    No results matching ""