3

我正在尝试从 Siemens PLC (S7-1200) 读取实际值并将其显示在 Windows 窗体中。我正在使用 S7.NET 库与 PLC 通信,并使用 TIA Portal V15 对 PLC 进行编程/监控。

我能够从 PLC 读取 Windows 窗体中的特定数据块(DB3.DBD0),它确实返回一个值,但该值以其他格式显示。例如,如果我将DB3.DBD0中的值修改为“2.22”,则会得到“1.074665+09”。我希望它返回与 TIA Portal 中相同的值,即“2.22”。

下面是我用来转换值的代码。

object real0 = Convert.ToSingle(plc.Read("DB3.DBD0"));
label43.Text = real0.ToString();

如果我的问题不清楚,请告诉我,我可以尝试更详细地解释。

先感谢您!

4

2 回答 2

1

西门子和其他 PLC 系统将这些数字存储为 WORD。

例如 2.22 浮点/实数值在 PLC 中存储为 0x400E147B。按 ABCD 字节顺序。A=40,B=0E,C=14,D=7B。

但正如我所见,您正在从 PLC 读取正确的十六进制值,但将其转换为 32 位整数。

您可以查看: https ://www.scadacore.com/tools/programming-calculators/online-hex-converter/

于 2021-01-08T11:38:10.400 回答
1

根据http://www.plcdev.com/step_7_elementary_data_types,PLC数据类型似乎是 REAL(浮点数)“IEEE 浮点数”

这些数字表示为分数,因此无法准确定义 2.2。非常详细的解释: 为什么浮点数不准确?

很好的简单解释: https ://floating-point-gui.de/basic

尝试转换为十进制数据类型,然后舍入以删除尾随的 0

于 2020-02-28T06:24:30.790 回答