winform中读取西门子1200PLC中Real数据的问题
PLC中的Real类型数据,占用32个bit,采用IEEE754标准格式存储,类似于2进制的科学计数法,如下图所示,而Byte类型数据是以8位二进制补码形式存储。

经测试S7netplus通讯库中的Read()函数读取PLC中的Real数据时,括号内的参数采用简写形式时,即写成类似这种形式:object? values = plc.Read(“DB1.DBD4”);,其返回值是IEEE754格式的二进制数据,比如S7-1200中的DB1.DBD4中存储的是4.5,但是读取出来是1083179008。


当不采用简写形式,即:Read(S7.Net.DataType.DataBlock, 1, 4, S7.Net.VarType.Real, 1);时,返回的是正常的float数据4.5。使用简写Read(“DB1.DBB2”);可正常读取PLC中的Byte类型数据。
C#与PLC中的数据类型不一样,在PLC中Byte— 8位,Word/Int—16位,DWord—32位,但在C#中byte—8位,ushort—16位,int—32位。所以C#与PLC中的数据互相交换时,尤其在写操作时,需要经过以下转换:
PLC数据 -> C#数据
Byte -> byte
Word -> short/ushort — 或者使用int16/uint16
Dword -> int/uint — 或者使用int32/uint32
bit -> bool
1 | |

winform中读取西门子1200PLC中Real数据的问题
http://example.com/2025/08/26/winform中读取西门子1200PLC中Real数据的问题/