You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断字节中指定比特位是否置位 检测EasyDAQ继电器通断状态

EasyDAQ继电器板通断状态判断实现方案

这套继电器控制逻辑是典型的位掩码状态设计,每个继电器对应字节中的一个独立二进制位,直接通过按位与运算即可精准判断单个继电器的状态,无需做减法遍历。

固定对应关系

四个继电器对应的状态掩码(也就是控制时发送的数值)是固定的2的整数次幂:

  • 继电器1:掩码值1,对应二进制位0001
  • 继电器2:掩码值2,对应二进制位0010
  • 继电器3:掩码值4,对应二进制位0100
  • 继电器4:掩码值8,对应二进制位1000

判断规则

拿到板卡轮询返回的状态字节后,将状态值与待检测继电器的掩码做按位与(AND)运算:

  • 运算结果非0:对应继电器处于开启状态
  • 运算结果为0:对应继电器处于关闭状态

实例验证

以返回值11的场景为例:

  1. 11转二进制为1011
  2. 检测继电器3时,用掩码4(二进制0100)做按位与计算:1011 & 0100 = 0000,结果为0,因此继电器3为关闭状态,和预期结论一致。
    其他验证:检测继电器4时,1011 & 1000 = 1000(对应数值8),结果非0,说明继电器4处于开启状态。

通用代码示例

所有支持位运算的编程语言都可以用这套逻辑,以下是类C语法的参考实现:

// 读取板卡返回的状态值
uint8_t relay_status = read_easydaq_status();

// 逐个判断继电器状态
bool r1_on = (relay_status & 0x01) != 0;
bool r2_on = (relay_status & 0x02) != 0;
bool r3_on = (relay_status & 0x04) != 0;
bool r4_on = (relay_status & 0x08) != 0;

避坑提示:不要用“状态值减去继电器对应数值是否大于等于0”的逻辑判断,一旦通信干扰导致返回值异常,减法逻辑会出现大面积误判;按位与运算仅校验对应比特位的状态,抗干扰能力更强,判断结果更可靠。

内容的提问来源于stack exchange,提问作者bob_the_bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:48:25