【问题标题】:Labview interprete number as floatLabview 将数字解释为浮点数
【发布时间】:2017-09-13 10:33:07
【问题描述】:

我在使用 Labview 从 SPS(=PLC) 读取时遇到的数据类型存在问题。

我从 S7Read_VI 中得到一个 32 位整数值的一维数组,我必须将其解释为浮点值,因为这些值在 SPS 中是 REAL 类型。

Labview 向我显示这样的数字:1131655987 应该是 243.7(当解释为浮点数时)。

s7Read_VI 本身也提供 REAL 类型的读取,但不知何故这不起作用(一些同事也注意到了这个问题)。

我现在试图在 labview 中将这些数字 (1131655987) 解释为浮点数,但到目前为止还没有找到有效的解决方案。

andybody 是否知道如何将十进制数解释为浮点数?像图片中显示的 SGL 这样的转换,我认为没有意义,因为数字已经是浮点数并且只显示为十进制。

最好的问候, 强尼克斯

【问题讨论】:

  • 1131655987 是一个 32 位整数。如果您将值(32 位)解释为 32 位浮点数,您确实会得到 243.7(我刚刚检查过这个)。不过,我不知道如何将这样的整数转换为在 Labview 中浮动。在 Pascal 中,它将是 IntValue := 1131655987; myFloat := PSingle(@Intvalue)^;,在 C 中(可能是 UB):int invalue = 1131655987; float myfloat = *((float *)(void *)&intvalue);
  • 是的,对于那些想知道的人,1131655987 是十六进制的4373B333,您可以将其传递给您可以在网上找到的浮点转换器,例如:link

标签: floating-point type-conversion labview


【解决方案1】:

To Single Precision 节点是数组每个元素的强制转换运算符。它不会将数组重新解释为单精度值数组。如果您想将数组重新解释为单精度值,请使用 Type Cast 函数并将单个常量数组连接到类型(中心)接线端,并将您的数组连接到 x(左侧)接线端:

【讨论】:

    【解决方案2】:

    我解决问题的方法是将 SPS 中的数据类型从 REAL 更改为 DWORD。

    L value_REAL*1000 //REAL value like 243.7 RND T value_DWORD //now DWORD but accuracy not lost: 243700

    然后我用 LabView 读取我的值并将它们除以 1000。

    希望任何人都能从中受益。 此致, 强尼克斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 2019-04-27
      • 1970-01-01
      • 2013-06-29
      • 2019-04-16
      • 2021-06-30
      • 1970-01-01
      相关资源
      最近更新 更多