【问题标题】:Converting real data type from Siemens PLC (S7-1200) to be displayed in Visual C# Windows Form将 Siemens PLC (S7-1200) 中的真实数据类型转换为在 Visual C# Windows 窗体中显示
【发布时间】:2020-06-12 04:01:14
【问题描述】:

我正在尝试从 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();

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

提前谢谢你!

【问题讨论】:

  • 您好 Jai Jai,欢迎来到 Stack Overflow。您注意到这是一个 VB.NET Windows 窗体,但您的主题和标签 also 都指定了 C#。这是用 C# 还是 VB 编写的?我提出了一个删除 C# 引用的编辑,但如果我把它倒退了——我可能已经这样做了——那么它将需要修改。 (就您的问题而言,这可能并不重要。)
  • 应该是var real0 = (float)plc.Read("DB3.DBD0"); 吗?

标签: c# data-conversion plc siemens s7-1200


【解决方案1】:

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

这些数字表示为分数,因此无法准确定义 2.2。 非常详细的解释: Why are floating point numbers inaccurate?

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

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

【讨论】:

    【解决方案2】:

    Siemens 和其他 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/

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2020-10-05
      • 2014-10-06
      • 2020-02-01
      • 2011-10-12
      相关资源
      最近更新 更多