工控学习1

1BIT

1bit(1位)是计算机和数字通信中最小的数据单位,用于表示二进制状态(0或1)。在工业自动化和通信协议(如Modbus)中,1bit常用于存储开关量信号(如传感器状态、按钮动作)。以下从定义、特性、应用场景及操作示例四方面详细说明:

一、1bit的定义与特性

  1. 基本概念
    • 1bit是二进制的最小单位,只能表示两种状态:
      • 0:通常代表“断开”“无信号”“低电平”或“假”;
      • 1:通常代表“闭合”“有信号”“高电平”或“真”。
    • 例如:
      • 光电传感器检测到物体时输出1,未检测到时输出0;
      • 急停按钮按下时输出1,松开时输出0。
  2. 存储与传输
    • 1bit无法单独存储在内存中,通常以位域(Bit Field)字节(Byte,8bit)的形式组织。
    • 在Modbus协议中,离散输入寄存器(DI)和线圈寄存器(Coils)均以1bit为单位,但通信时需按字节或字(16bit)传输,通过位掩码提取具体bit值。
  3. 与字节/字的关系
    • 1字节(Byte) = 8bit:可存储8个独立的开关量信号;
    • 1字(Word) = 16bit:常用于存储16个开关量或1个16位整数(如输入寄存器IR)。

二、1bit在Modbus协议中的应用

  1. 离散输入寄存器(DI)
    • 功能:存储只读的开关量输入信号(如传感器、按钮);
    • 地址范围:Modbus中DI的显示地址通常为10001~19999,协议地址为0x0000起始;
    • 操作:通过功能码02(Read Discrete Inputs)读取,每次最多读取2000个bit(但实际受设备限制)。
  2. 线圈寄存器(Coils)
    • 功能:存储可读写的开关量输出信号(如继电器、LED);
    • 地址范围:显示地址通常为00001~09999,协议地址为0x0000起始;
    • 操作:通过功能码05(Write Single Coil)15(Write Multiple Coils)写入。
  3. 位掩码与字节处理
    • 由于Modbus通信以字节或字为单位,读取DI时需通过位掩码提取具体bit值。例如:
      • 读取10001~10008(8个DI)时,从设备返回1字节数据;
      • 若第3个DI(10003)为1,则字节值为0x04(二进制00000100)。

总结学习心得:

从此看来,在工控的modbus RTU协议中,是遵循功能码来实现具体相关功能的,

例如:

功能码01  读线圈

功能码02(Read Discrete Inputs) 是读取离散输入寄存器DI  discrete input registers

功能码03 读保持寄存器

功能码04读输入寄存器

功能码05 (Write Single Coil)  是写单个线圈 coils

功能码06 写单个保持寄存器

功能码15 (Write Multiple Coils) 是写入多个线圈

功能码16 写多个保持寄存器

也就是说modbus协议中的功能码和相关的功能是一一对应的,要实现什么样的功能,就选择其对应的功能码。

三、1bit的典型应用场景

  1. 传感器信号采集
    • 光电传感器:检测物体到位(1)或未到位(0);
    • 接近开关:判断机械臂位置(1=到位,0=未到位);
    • 编码器:通过脉冲计数转换为位信号(如方向判断)。
  2. 设备状态监测
    • 急停按钮:按下(1)或松开(0);
    • 柜门开关:打开(1)或关闭(0);
    • 运行模式:自动(1)或手动(0)。
  3. 故障诊断与保护
    • 过流保护:触发(1)或正常(0);
    • 过热报警:温度超限(1)或正常(0);
    • 通信状态:485总线在线(1)或离线(0)。

四、1bit操作示例

1. 读取离散输入寄存器(DI)
  • 场景:读取传感器状态(10001和10002)。
  • Modbus RTU指令响应解析
    uint8_t modbus_cmd[] = {
        0x01,       // 从站地址(1号设备)
        0x02,       // 功能码(读取离散输入)
        0x00, 0x00, // 起始地址(10001对应0x0000)
        0x00, 0x02, // 寄存器数量(2个DI)
        0xC1, 0x07  // CRC校验
    };
  • 若返回数据为0x03(二进制00000011),则:
    • 第1个DI(10001)= 1;
    • 第2个DI(10002)= 1。
2. 写入线圈寄存器(Coils)
  • 场景:控制继电器(00001和00002)。
  • Modbus RTU指令(写入单个线圈)
  • uint8_t modbus_cmd[] = {
        0x01,       // 从站地址
        0x05,       // 功能码(写入单个线圈)
        0x00, 0x00, // 线圈地址(00001对应0x0000)
        0xFF, 0x00, // 值(0xFF00=1,0x0000=0)
        0x3A, 0x9C  // CRC校验
    };
  • 效果:继电器00001闭合(1)。

五、1bit操作的注意事项

  1. 地址转换
    Modbus协议中,寄存器地址分为“显示地址”和“协议地址”,需按公式转换:
    协议起始地址 = 显示地址 - 该类型寄存器起始偏移
    例:DI显示地址10005 → 协议地址 = 10005 - 10001 = 0x0004。

  2. 批量操作限制

    • 单次最多读取2000个DI(但实际受设备性能限制);
    • 写入线圈时,功能码15支持批量写入,但需注意字节顺序。
  3. 硬件匹配

    • 确保传感器输出类型(如NPN/PNP)与从设备输入电路匹配;
    • 继电器负载能力需满足控制需求(如电压、电流)。

六、1bit与数据效率

  • 优势:1bit存储空间极小,适合高密度开关量信号(如数百个传感器);
  • 局限:单独操作1bit效率低,通常以字节或字为单位批量处理;
  • 优化:通过位域或压缩算法(如Huffman编码)进一步节省空间。

离散输入寄存器

离散输入寄存器(Discrete Input Registers,DI)是Modbus协议中用于存储数字量输入信号的只读寄存器,每个寄存器通过单个位(bit)表示开关量状态(0或1),通常对应硬件层面的传感器信号、按钮状态或设备控制信号。以下从特性、功能码、应用场景及操作示例四方面进行详细说明:

一、核心特性

  1. 数据类型
    每个寄存器为1位(bit),仅存储0(断开/无信号)或1(闭合/有信号),对应开关量的二进制状态。例如:
    • 光电传感器检测到物体时为1,未检测到为0;
    • 急停按钮按下时为1,松开时为0。
  2. 读写权限
    • 只读:主设备(如PLC、HMI)只能读取寄存器值,无法直接修改;
    • 从设备更新:寄存器值由硬件输入(如传感器、按钮)动态更新,从设备(如变频器、IO模块)负责将物理信号转换为数字量并存储。
  3. 地址范围
    Modbus协议中,离散输入寄存器的地址通常以1开头,范围为10001~19999。实际通信时需转换为协议地址(起始地址+寄存器数量),例如读取10001~10004时,起始地址为0x0000,数量为4。

二、功能码与通信

  1. 唯一功能码
    离散输入寄存器仅支持功能码02(Read Discrete Inputs),用于读取一个或多个连续寄存器的状态。

  2. 通信示例
    以STM32读取传感器状态为例,发送的Modbus RTU指令如下:

    uint8_t modbus_cmd[] = {
        0x01,       // 从站地址(1号设备)
        0x02,       // 功能码(读取离散输入)
        0x00, 0x00, // 起始地址(10001对应0x0000)
        0x00, 0x02, // 寄存器数量(2个DI)
        0xC1, 0x07  // CRC校验
    };

    从设备响应后,主设备可解析数据判断传感器状态(如0x01表示第一个DI为1,第二个为0)。

三、典型应用场景

  1. 设备状态监测
    • 读取急停按钮、柜门开关、限位开关等安全信号;
    • 监测设备运行模式(如自动/手动、正转/反转)。
  2. 传感器信号采集
    • 光电传感器检测物体到位;
    • 接近开关判断机械臂位置;
    • 编码器反馈电机转速信号(需通过脉冲计数转换)。
  3. 故障诊断
    • 读取过流、过压、过热等保护信号;
    • 监测通信模块在线状态(如485总线连接是否正常)。

四、与其他寄存器的对比

寄存器类型读写权限数据宽度典型应用
离散输入寄存器(DI)只读1位(bit)传感器状态、按钮信号
线圈寄存器(Coils)可读可写1位(bit)继电器控制、LED指示灯
输入寄存器(IR)只读16位(2字节)模拟量采集(温度、压力、电流)
保持寄存器(HR)可读可写16位(2字节)设备参数设置、运行时间统计

五、操作注意事项

  1. 地址转换
    Modbus协议中寄存器地址分为“显示地址”(如10001)和“协议地址”(如0x0000),通信时需按公式转换:
    协议起始地址 = 显示地址 - 该类型寄存器起始偏移
    例:DI显示地址10005 → 协议地址 = 10005 - 10001 = 0x0004。

  2. 批量读取限制
    标准Modbus单次最多可读取2000个离散输入寄存器,但实际受设备性能限制,建议分批读取。

  3. 硬件匹配
    确保从设备支持离散输入功能,且传感器信号类型(如NPN/PNP)与从设备输入电路匹配。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinzheng新政

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值