首页 > 解决方案 > BOOL 和 WORD 的联合位映射

问题描述

我试图在一个单词中映射一些位,但我看到编译时 bool 的大小等于一个字节。当我看到正在执行的代码时,每个 BOOL 都是 8 位大小。如何在 struct 或 union 中指定位字段?那是我的代码:

TYPE FAULT_CODE:
STRUCT 
fault1,falut2,fault3: BOOL;

END_STRUCT
END_TYPE

TYPE U_fault :
UNION
    faultCode: FAULT_CODE;
    in: WORD;
END_UNION
END_TYPE

在此处输入图像描述

标签: uniontwincatcodesys

解决方案


回答

您正在寻找的 ST 数据类型是BIT

  • 布尔值:8 位
  • 位:1位

您只能将数据类型 BIT 用于结构或功能块中的各个变量。可能的值为 TRUE (1) 和 FALSE (0)。

BIT 元素需要 1 位存储空间,您可以使用它来使用其名称来寻址结构或功能块的各个位。按顺序声明的 BIT 元素被合并为字节。与 BOOL 类型相比,这允许您优化内存使用,每种类型至少占用 8 位。然而,位访问需要更长的时间。因此,如果要以指定格式定义数据,则应仅使用数据类型 BIT。


例子

TYPE st_Flags :
STRUCT
    Bit1  : BIT;
    Bit2  : BIT;
    Bit3  : BIT;
    Bit4  : BIT;
    Bit5  : BIT;
    Bit6  : BIT;
    Bit7  : BIT;
    Bit8  : BIT;
END_STRUCT
END_TYPE
TYPE u_Error :
UNION
    _Byte   : BYTE;
    _Flag   : st_Flags;
END_UNION
END_TYPE

推荐阅读