kepserver取双字或浮点数有问题

kepserver用modbus-tcp通信取plc双字(Dword)数和plc里的对不上,地址应该是没问题的,取单字(word)都没问题
我用的合信plc226
比如现在取VD100(float)和VW50(short),plc里面VD100的值是5000.25但kepserever得到的是32.068,只有在值是0的时候才是一样的,但是VW50就没问题值一直是对的上的,下面是截图
plc里的值

img

kepserver里面的值

img

kepserver地址设置

img

这到底是是哪里出问题了,有牛人能给解决下吗?

基于GPT的解答
这种情况可能是由于数据格式或字节顺序不匹配导致的。双字数据(Dword)需要注意字节顺序(即大端或小端)和数据格式(即IEEE 754浮点数或其他格式)。

根据您提供的信息,PLC中的值为5000.25,这意味着它是一个浮点数。如果您的Kepserver配置不正确,则可能会导致字节顺序或数据格式不匹配,导致读取到的值与预期值不同。

您可以尝试在Kepserver中更改字节顺序或数据格式以查看是否可以解决此问题。您还可以尝试手动计算字节顺序和数据格式以确保它们匹配PLC中的值。

如果问题仍然存在,请检查PLC中的值是否正确,并确保使用正确的地址进行通信。您还可以尝试使用其他通信工具或库(如Modbus Poll或Pymodbus)以确保问题不是由Kepserver引起的。

参考GPT和自己的思路,根据您描述的问题,可能存在以下几种原因:

1.数据类型不匹配。您可能正在使用错误的数据类型或字节顺序。请确保KEPserver的数据类型与PLC中使用的数据类型匹配,并在需要的情况下配置字节顺序。这通常可以在KEPserver的设置中配置。

2.数据格式不正确。您可能正在使用不正确的格式从PLC读取数据。请检查KEPserver和PLC使用的数据格式,并确认它们之间的差异。

3.数据转换错误。转换从PLC读取的数据时出现了错误。请检查您在KEPserver中配置的数据转换,以确保它们正确地将从PLC读取的数据转换为正确的格式。

建议您先检查KEPserver和PLC中的数据类型和格式是否正确,然后排除转换方面的问题。

参考GPT和自己的思路:可能是数据类型不匹配导致的问题。请确保kepserver设置中读取数据的数据类型与PLC中相应的数据类型匹配。对于浮点数(float),请确保数据类型设置为“IEEE浮点数”,而不是默认的“32位整数”。

另外,请确保您使用的modbus-tcp协议是正确的。有些PLC可能需要使用不同的modbus-tcp协议设置才能正确读取浮点数和双字(Dword)数据。请参考您的PLC文档,确认使用的modbus-tcp协议是否正确,并根据需要在kepserver中进行相应的设置。

最后,还可以尝试使用其他软件或工具进行读取,比如使用Python的Modbus库或者其他PLC通讯软件进行测试,以确定问题是由kepserver引起的还是其他因素导致的。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个问题可能是由于数据类型不匹配导致的。在Modbus通信中,数据类型的大小和格式都是很重要的。您需要确保在PLC和Kepserver之间的数据类型匹配,并且使用正确的数据类型代码。例如,如果您想要读取一个float值,您需要使用数据类型代码为4的功能码(Function Code 04)。
·
另外,请确保使用正确的寄存器地址。如果您想要读取一个双字(DWord)值,您需要指定两个相邻的寄存器地址,然后将它们组合在一起以获得一个32位的值。如果您使用的是寄存器地址的起始地址,而不是两个相邻寄存器的地址,则可能会读取到错误的值。
·
最后,请确保在Kepserver中使用正确的数据类型配置。您可以在Kepserver中配置数据类型,以确保它们与PLC中的数据类型匹配。如果您使用错误的数据类型配置,可能会导致读取到错误的值。
·
如果您无法解决这个问题,您可以考虑使用其他Modbus通信工具来读取PLC中的值,以帮助您确认是否是Kepserver的问题。如果您能够成功读取到正确的值,则可能需要重新配置Kepserver的设置以匹配PLC中的数据类型和寄存器地址。

咳。。。还是自己找到答案了,有此问题的同志请看下面连接
http://t.csdn.cn/9tuIa