腾讯云电商网站建设,wordpress显示文件大小,网上商城推广,泉州网络公司一、RTU介绍
MODBUS协议支持多种功能码#xff0c;不同的功能码对应不同的操作#xff1a;
0x01读线圈状态0x02读离散输入状态0x03读保持寄存器0x04读输入寄存器0x05写单个线圈0x06写单个保持寄存器0x0F写多个线圈0x10写多个保持寄存器
二、实验
1.0x03功能码读单个保持寄…一、RTU介绍
MODBUS协议支持多种功能码不同的功能码对应不同的操作
0x01读线圈状态0x02读离散输入状态0x03读保持寄存器0x04读输入寄存器0x05写单个线圈0x06写单个保持寄存器0x0F写多个线圈0x10写多个保持寄存器
二、实验
1.0x03功能码读单个保持寄存器 1.1 请求帧格式
从站地址功能码起始地址高位起始地址低位数量高位数量低位校验码低位校验码高位0x010x030x000x450x000x01XXXX 0x01从地址Slave Address。这个值表示这是发送给地址为1的从设备。 0x03功能码Function Code。这个值表示这是一个读取保持寄存器Read Holding Registers的请求。 0x00 0x45起始地址Starting Address。这两个字节一起表示从哪个寄存器地址开始读取。0x0045等于十进制的69。 0x00 0x01寄存器数量Quantity of Registers。这两个字节一起表示读取的寄存器数量。0x0001等于十进制的1。 XX XXCRC校验码CRC Checksum。这是一个错误检测码用于验证数据的完整性。实际的值需要根据前面的数据计算得出。
总结这个Modbus数据帧请求读取从地址为1的设备从地址69开始的1个保持寄存器。
同理这个Modbus数据帧请求读取从地址为1的设备从地址66开始的1个保持寄存器。
1.2 应答帧格式
从站地址功能码字节计数字节一高位字节一低位校验码低位校验码高位0x010x030x020x000x00YYYY 0x01从地址Slave Address。这个值表示这是从地址为1的设备发出的响应。 0x03功能码Function Code。这个值表示这是一个读取保持寄存器Read Holding Registers的响应。 0x02字节数Byte Count。这个值表示响应的数据部分包含2个字节。 0x00 0x00数据Data。这两个字节表示从指定的寄存器读取到的值。在这个例子中读取到的值是0x0000即十进制的0。 YY YYCRC校验码CRC Checksum。这是一个错误检测码用于验证数据的完整性。实际的值需要根据前面的数据计算得出。 总结这个数据帧表示从地址为1的设备从地址69开始响应的数据部分包含2个字节0x02。 且从这个指定的寄存器读取到的值是0x0000。 同理从地址69开始响应的数据部分包含2个字节0x02。 且从这个指定的寄存器读取到的值是0x0001。
2.0x06功能码写入单个保持寄存器 2.1 请求帧格式
从站地址功能码寄存器高寄存器低写入值高写入值低校验码低位校验码高位0x010x060x000x450x330x01XXXX 0x01从地址Slave Address。表示这是发送给地址为1的从设备。 0x06功能码Function Code。表示这是一个写单个寄存器的请求。 0x00 0x45寄存器地址Register Address。这两个字节表示要写入的寄存器地址。0x0045等于十进制的69。 0x33 0x01寄存器值Register Value。这两个字节表示要写入寄存器的值。0x3301可以表示为十进制的13057。 XX XXCRC校验码CRC Checksum。这是一个错误检测码用于验证数据的完整性。实际的值需要根据前面的数据计算得出。
在写入之后可以用0x03功能码读取0x45地址的数据查看是否写入成功可以从图中验证看到0x3301成功写入0x45地址。
2.2 应答帧格式
原报文返回。
3.0x10功能码写入多个保持寄存器 3.1 请求帧格式
从站地址功能码起始地址高位起始地址低位数量高位数量低位字节数写入数值校验码低位校验码高位0x010x100x000x450x000x020x040x138A 0x1388XXXX 0x01从地址Slave Address。表示这是发送给地址为1的从设备。 0x10功能码Function Code。表示这是一个写多个寄存器的请求。 0x00 0x45起始地址Starting Address。这两个字节表示要写入的第一个寄存器地址。0x0045等于十进制的69。 0x00 0x02寄存器数量Quantity of Registers。这两个字节表示要写入的寄存器数量。0x0002等于十进制的2。 0x04字节计数Byte Count。这个值表示接下来要写入的数据字节数。在这个例子中两个寄存器就是是4个字节。 0x138A 0x1388寄存器值Register Values。表示要写入寄存器的数据。由于有两个寄存器每个寄存器占两个字节所以这里总共4个字节 0x138A0x1388 XX XXCRC校验码CRC Checksum。这是一个错误检测码用于验证数据的完整性。实际的值需要根据前面的数据计算得出。
在写入之后可以用0x03功能码读取0x45地址的数据查看是否写入成功可以从图中验证看到0x138A0x1388成功写入从0x45开始往后的两个寄存器地址。
3.2 应答帧格式
从站地址功能码起始地址高位起始地址低位数量高位数量低位校验码低位校验码高位0x010x100x000x450x000x02YYYY 0x01从地址Slave Address。表示这是从地址为1的从设备发出的响应。 0x10功能码Function Code。表示这是一个写多个寄存器的响应。 0x00 0x45起始地址Starting Address。这两个字节表示写入操作开始的寄存器地址。0x0045等于十进制的69。 0x00 0x02寄存器数量Quantity of Registers。这两个字节表示写入的寄存器数量。0x0002等于十进制的2。 YY YYCRC校验码CRC Checksum。这是一个错误检测码用于验证数据的完整性。实际的值需要根据前面的数据计算得出。
4.0x17功能码写入多个保持寄存器并读 4.1 请求帧格式
0x01从地址Slave Address。表示这是发送给地址为1的从设备。0x17功能码Function Code。表示这是一个读取/写入多个寄存器的请求。0x00 0x45读取起始地址Read Starting Address。这两个字节表示要读取的寄存器地址。0x0045等于十进制的69。0x00 0x02读取寄存器数量Quantity of Registers to Read。这两个字节表示要读取的寄存器数量。0x0002等于十进制的2。0x00 0x45写入起始地址Write Starting Address。这两个字节表示要写入的寄存器地址。0x0045等于十进制的69。0x00 0x02写入寄存器数量Quantity of Registers to Write。这两个字节表示要写入的寄存器数量。0x0002等于十进制的2。0x04写入字节计数Write Byte Count。表示接下来要写入的数据字节数。在这个例子中是4个字节。0x11 0x22第一个寄存器的值。表示要写入的值是0x1122。0x13 0x88第二个寄存器的值。表示要写入的值是0x1388。0xA6 0x1CCRC校验码CRC Checksum。用于错误检测。
4.2 应答帧格式
0x01从地址Slave Address。表示这是从地址为1的从设备发出的响应。0x17功能码Function Code。表示这是一个读/写多个寄存器的响应。0x04字节计数Byte Count。表示接下来的数据字节数。在这个例子中是4个字节。0x11 0x22读取的第一个寄存器的值。表示从请求中读取的值是0x1122。0x13 0x88读取的第二个寄存器的值。表示从请求中读取的值是0x1388。0x51 0x47CRC校验码CRC Checksum。用于错误检测。
4.3 写入数据问题总结 从图中可见我在0x46地址写入0x1313之后在应答帧中读取显示0x1310并没有写入成功这是因为有的寄存器地址存放的数值是动态变化的写入之后它又被动态变化的数值给覆盖