有个PLC,目前已使用WINCC进行正常读取,地址400001的32位浮点数值,如下图,是WINCC中已定义好了,并且WINCC能正确读取到这个值。
我使用MODSCAN32 ,填写正确的IP地址,以及端口,ID,地址开始等信息,获取20个字节信息,也都能正确的获得该值。对比值后发现,scan32中的 40001和40002,组合起来,能换算成真确的 32位浮点数。
但我关闭MODSCAN32后,打开网络调试助手,填写好IP,端口,使用TCP CLIENT模式连接,发送报文
02 03 00 00 00 14 45 F6,此条报文是使用03功能吗读取00 00 开始的 20个字节(14是十六进制),返回不正确,请各位大神指导下 。谢谢 。
如上图。
楼主最近还看过
Modbus TCP 03功能码 读取一个或多个保持寄存器的数值
读取连续三个保持寄存器的数值
(40001=1000、40002=5000、40003=650)
发送:00 00 00 00 00 06 01 03 00 00 00 03
接收:00 00 00 00 00 09 01 03 06 03 E8 13 88 02 8A
发送详解:00 00 00 00 00 06 01 03 00 00 00 03
00 00 事务标识符
00 00 协议标识符
00 06 长度标识符
01 站号
03 功能码
00 00 首个寄存器地址
00 03 读取寄存器的个数 RTU格式 (无需CRC)
Modbus TCP 与Modbus RTU 比较就是头部多了六个字节
Modbus TCP 无需CRC校验码
接收详解:00 00 00 00 00 09 01 03 06 03 E8 13 88 02 8A
00 00 事务标识符
00 00 协议标识符
00 09 长度标识符
01 站号
03 功能码
06 读取的字节数
03 E8 读取第一个寄存器的数值
13 88 读取第二个寄存器的数值
02 8A 读取第三个寄存器的数值 RTU格式 (无需CRC)
03功能码 读取(03 E8=1000、13 88=5000、02 8A=650)
Modbus TCP 06功能码 写一个寄存器的值
(40001=10)(00 0A=10=40001)
发送:00 00 00 00 00 06 01 06 00 00 00 0A
接收:00 00 00 00 00 06 01 06 00 00 00 0A
Modbus TCP 01功能码 读取一组逻辑线圈的当前状态(ON/OFF)
读5个线圈状态:(00001=1、00002=1、00003=1、00004=1、00005=1)
返回状态:(1F=0001 1111)
发送:00 00 00 00 00 06 01 01 00 00 00 05
接收:00 00 00 00 00 04 01 01 01 1F
Modbus TCP 02功能码 读取一组开关输入的当前状态(ON/OFF)
读5个输入状态
(10001=1、10002=0、10003=1、10004=0、10005=1)
(15=0001 0101)提示15为十六进制数。
发送:00 00 00 00 00 06 01 02 00 00 00 05
接收:00 00 00 00 00 04 01 02 01 15
Modbus TCP 04功能码 读取一个或多个输入寄存器的数值
读5个输入寄存器的数值
(30001=0、30002=1、30003=2、30004=3、30005=4)
发送:00 00 00 00 00 06 01 04 00 00 00 05
接收:00 00 00 00 00 0D 01 04 0A 00 00 00 01 00 02 00 03 00 04
Modbus TCP 05功能码 强置一个逻辑线圈的通断状态
发送:00 00 00 00 00 06 01 05 00 00 FF 00
接收:00 00 00 00 00 06 01 05 00 00 FF 00
Modbus TCP 16(16进制=10码)功能码 写多(3)个寄存器的值
发送详解:00 00 00 00 00 0D 01 10 00 00 00 03 06 00 0A 00 0B 00 0F
00 00 事务标识符
00 00 协议标识符
00 0D 长度标识符
01 站号
10 功能码
00 00 首个寄存器通讯地址
00 03 写入的寄存器个数
06 00 写入的字节数
00 0A 写入第一个寄存器的数值
00 0B 写入第二个寄存器的数值
00 0F 写入第三个寄存器的数值
接收详解:00 00 00 00 00 06 01 10 00 00 00 03
00 00 事务标识符
00 00 协议标识符
00 06 长度标识符
01 站号
10 功能码
00 00 首个寄存器通讯地址
00 03 写入的寄存器个数
Modbus TCP 15(16进制=0F码)功能码 强置一串连续逻辑线圈的通断
发送:00 00 00 00 00 0B 01 0F 00 00 00 02 04 FF 00 00 00
发送:00 00 00 00 00 06 01 0F 00 00 00 02