两种 1 位数据区的区别
线圈与离散输入都是 1 位数据,区别在读写能力:线圈可读可写,通常对应继电器、接触器与指示灯的开关状态;离散输入只读,通常对应限位开关、按钮与外部触点的状态。读线圈用功能码 01,读离散输入用 02,写线圈用 05 或 0F。把两者区分清楚是配置点表的第一步,否则会出现能读不能写、写入被拒的困惑。
基本信息
| 线圈 | 可读写,读用 01,写单个用 05,写多个用 0F |
|---|---|
| 离散输入 | 只读,读用 02 |
| 数据宽度 | 均为 1 位,在报文中按位打包传输 |
| 常见错误 | 用写功能码操作只读区,设备返回异常码 |
| 数量上限 | 读与写的单次数量存在上限,具体以协议规范与设备能力为准 |
| 典型用途 | 线圈用于控制输出,离散输入用于采集输入状态 |
读写对照
| 操作 | 功能码 | 数据区 | 说明 |
|---|---|---|---|
| 读 | 01 | 线圈 | 读取输出状态与反馈 |
| 读 | 02 | 离散输入 | 读取输入触点状态 |
| 写 | 05 | 线圈 | 写单个位,常见取值 0xFF00 与 0x0000 表示通断 |
| 写 | 0F | 线圈 | 按位批量写入,请求中带位数量与字节序列 |
| 异常响应 | 功能码最高位置 1 | 两者 | 表示请求被拒绝或数据非法 |
配置与使用建议
- 点表中标注每个点所属数据区与读写属性,避免采集系统尝试写只读点
- 写操作后回读确认,验证结果与预期一致再记录
- 批量写线圈时注意位序与字节填充规则,不足一字节的部分需要补位
- 控制类写操作单独授权与留痕,不与采集共用账号
- 对写入被拒的返回码做专门处理,区分权限问题与设备不支持
写单个线圈时,请求数据字段常用 0xFF00 表示置位、0x0000 表示复位,其他取值在规范中视为非法。这一约定在早期实现中容易被误用并触发异常响应,具体取值与例外以规范和设备手册为准。
线圈写操作直接影响设备动作,例如启停与阀门开关。批量写可以一次改变多个输出状态,生产环境中应限制使用范围并保留操作记录。