You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#和S7.NET读取PLC双字MD10数据异常的技术求助

解决PLC双字(MD10)读取浮点数错误的问题

问题核心是你把PLC中存储为**单精度浮点数(REAL,IEEE 754 32位)**的双字数据,直接当成无符号整数转换了,导致得到的是原始二进制对应的整数值,而非实际浮点数。

解决方案:解析32位二进制为浮点数

PLC的MD10存储的是REAL类型(32位浮点数),需要按照IEEE 754标准解析原始二进制数据,而不是直接转整数。以下是两种常见场景的代码:

场景1:plc.Read("MD10")返回byte[]类型

西门子S7系列PLC采用大端字节序存储REAL,而Windows系统的BitConverter默认是小端,需要先反转字节数组:

byte[] rawBytes = (byte[])plc.Read("MD10");
Array.Reverse(rawBytes); // 适配大端转小端
float realValue = BitConverter.ToSingle(rawBytes, 0);
textBox4.Text = realValue.ToString("F3"); // 按需求格式化小数位数,如保留3位

场景2:plc.Read("MD10")返回uint类型

先将无符号整数转成字节数组,再反转后解析为浮点数:

uint rawUint = (uint)plc.Read("MD10");
byte[] rawBytes = BitConverter.GetBytes(rawUint);
Array.Reverse(rawBytes);
float realValue = BitConverter.ToSingle(rawBytes, 0);
textBox4.Text = realValue.ToString("F3");

为什么字数据(MW0)读取正常?

因为MW0存储的是整数类型(比如INT),直接读取后转字符串就是正确的整数值,不需要额外解析浮点数格式。

内容的提问来源于stack exchange,提问作者sakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:42:09