ModBus协议-功能码-0x05

本文介绍Modbus协议中05功能码WriteSingleCoil的使用方法,包括请求和响应报文的格式及字段含义,如从机地址、功能码、输出地址和输出值等。详细解释了如何通过FF00和0000两种输出值来控制远程设备的输出状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



05 (0x05) Write Single Coil
This function code is used to write a single output to either ON or OFF in a remote device.The requested ON/OFF state is specified by a constant in the request data field. A value of FF 00 hex requests the output to be ON. A value of 00 00 requests it to be OFF. All other values are illegal and will not affect the output. The Request PDU specifies the address of the coil to be forced. Coils are addressed starting at zero. Therefore coil numbered 1 is addressed as 0. The requested ON/OFF state is specified by a constant in the Coil Value field. A value of 0XFF00 requests the coil to be ON.A value of 0X0000 requests the coil to be off. All other values are illegal and will not affect the coil.

The normal response is an echo of the request, returned after the coil state has been written.

Tx:01 05 00 AC FF 00
Rx:01 05 00 AC FF 00

Tx分析
01 从机地址
05 功能码
00 AC 输出地址
FF 00 输出值
Rx分析
01 从机地址
05 功能码
00 AC 输出地址
FF 00 输出值

0xAC = 172
[172] FF 00  ->ON

FF00:ON  0000:OFF




### MODBUS协议0x05功能码详解 0x05功能码MODBUS协议中用于写单个线圈的状态,是一种位操作的功能码[^3]。通过该功能码,主设备可以设置从设备中某个特定线圈的状态为ON或OFF。具体来说,写入值`0xFF00`表示将线圈状态设置为ON,而写入值`0x0000`表示将线圈状态设置为OFF。 #### 请求格式 主设备发送的请求报文结构如下: - **地址域**:1字节,标识目标从设备的地址。 - **功能码**:1字节,固定为`0x05`。 - **起始地址**:2字节,指定要操作的线圈地址。 - **输出值**:2字节,定义线圈的新状态(`0xFF00`为ON,`0x0000`为OFF)。 - **CRC校验**:2字节(仅RTU模式下),用于数据完整性验证。 示例代码展示如何构造一个写单个线圈为ON的请求报文: ```python # 构造MODBUS RTU请求报文,设置线圈0x0032为ON slave_address = 0x01 # 从设备地址 function_code = 0x05 # 功能码 coil_address = 0x0032 # 线圈地址 output_value = 0xFF00 # 设置为ON # 请求报文(不包括CRC) request = bytearray([slave_address, function_code, (coil_address >> 8) & 0xFF, coil_address & 0xFF, (output_value >> 8) & 0xFF, output_value & 0xFF]) ``` #### 响应格式 从设备接收到请求后,会执行相应的操作并将相同的数据返回给主设备以确认操作成功。响应报文结构与请求报文完全一致,包含以下内容: - **地址域**:1字节,与请求中的从设备地址相同。 - **功能码**:1字节,固定为`0x05`。 - **起始地址**:2字节,与请求中的线圈地址相同。 - **输出值**:2字节,与请求中的输出值相同。 - **CRC校验**:2字节(仅RTU模式下),用于数据完整性验证。 如果从设备无法处理请求,则会返回异常响应,功能码会被设置为`0x85`,并附加异常码以说明错误原因。 #### 注意事项 - 功能码`0x05`只能操作单个线圈的状态。若需要同时操作多个线圈,应使用功能码`0x0F`。 - 线圈地址是从0开始计数的,实际应用中需注意地址映射关系。 - 在RTU模式下,所有报文都必须包含CRC校验以确保通信可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值