蓝色港湾 发表于 2023-4-12 22:17:58

Codesys 数据结构:1.2.3 扩展数据类型之bit类型详解

1 定义

bit是位数据类型,只能在结构体和功能块中使用,其值可以是TRUE(1)
和FALSE(0);
bitValue1 : BIT := TRUE;
bitValue2 : BIT :=1;2 特点

BIT不能作为数组的基本类型BIT可以优化内存使用,但访问BIT类型变量比较耗时;BIT类型变量没有单独的内存地址,不能声明bit类型的指针
Codesys最小地址单元是byte
3 内存空间

1.1 一个BIT只占一个BYTE内存大小中的一位;1.2 如果仅仅声明一个bit变量,会开辟一个byte大小内存空间;
//声明只有一个bit变量的结构体
TYPE DUT :
STRUCT
        bitVar1 : BIT;
END_STRUCT
END_TYPE用sizeof()查看此结构体的大小,返回值单位是byte,可以看出此结构体占1个byte内存空间




1.3 如果声明多个连续BIT变量,多个BIT会公用BYTE大小内存空间的不同位;
//声明5个连续的bit变量,也只会开辟一个byte大小内存空间
TYPE DUT :
STRUCT
        bitVar1 : BIT;
        bitVar2 : BIT;
        bitVar3 : BIT;
        bitVar4 : BIT;
        bitVar5 : BIT;
END_STRUCT
END_TYPE
声明多个连续的BIT变量,多个bit会公用byte内存空间的不同位,如果BIT变量个数超过8,会另外开辟额外的byte大小内存空间




1.3 如果声明的BIT变量不是连续的,每个BIT变量都会开辟一个BYTE大小内存空间
//两个BIT类型变量之间有一个BYTE类型变量,使两个BIT变量不连续
TYPE DUT :
STRUCT
        bitVar1 : BIT;
        byVar   : BYTE;
        bitVar2 : BIT;       
END_STRUCT
END_TYPE可以看见一共开辟3个byte大小空间,即每个BIT类型变量开辟一个byte大小内存空间




1.4 对比BOOL类型变量,每个BOO类型变量都会开辟一个BYTE大小内存空间,不管是否连续
//声明5个连续的BOOL变量,也只会开辟五个byte空间大小
TYPE DUT :
STRUCT
        bVar1 : BOOL;
        bVar2 : BOOL;       
        bVar3 : BOOL;       
        bVar4 : BOOL;       
        bVar5 : BOOL;       
END_STRUCT
END_TYPE可以看出开辟了5个byte大小内存空间



4 应用举例

常用来映射外部输入输出的IO模块
1 声明结构体
TYPE DUT :
STRUCT
        bitVar1 : BIT;
        bitVar2 : BIT;       
        bitVar3 : BIT;       
        bitVar4 : BIT;       
        bitVar5 : BIT;       
END_STRUCT
END_TYPE

2 在program中实例化结构体变量并映射输入输出
PROGRAM PGR
VAR   
struVar AT %QB0 : DUT;
END_VAR映射后struVar中的bitVar1 – bitVar5 就分别对应 %QB0.0 – %QB0.4
页: [1]
查看完整版本: Codesys 数据结构:1.2.3 扩展数据类型之bit类型详解