0

我需要从三菱输入模块 Q64AD 获得输入信号的平均值。我在结构化文本中的 GX Works 2 中工作。

这就是我过去在 Codesys 中获得平均值的方式:

timer_sr(IN:= NOT timer_sr.Q , PT:= T#5s );

SUM1:= SUM1 + napr1;
Nsum:=Nsum + 1;

IF timer_sr.Q THEN
    timer_sr(IN:= NOT timer_sr.Q , PT:= T#5s);
    outsr := SUM1 /Nsum;
    Nsum := 0;
    SUM1 := 0;
END_IF;

napr1 - 来自模块的值

这段代码在 GX Works 2 中不起作用,我认为因为 SUM1 不是 INT 数据类型,而只是 Word[signed] 类型。

有没有办法使 SUM1 成为 INT 类型,或者该解决方案可能有另一种逻辑?

4

1 回答 1

0

在其他平台上它应该可以工作,但编译器会发出警告,所以我猜它仍然会编译?当然,如果值为负,就会有问题。

您可以通过 IEC 函数将 a 转换WORD为。我不确定您的系统是否符合标准,但如果符合,请尝试以下操作: . 如果 SUM1 > 65535 则会出现问题,因为 的上限是 32767。INTWORD_TO_INTWORD_TO_INT(SUM1)INT

如果这没有帮助,您能否提供更多详细信息?它怎么不工作?

附言。WORD 是无符号数据类型,没有像您写的那样有符号。

于 2018-02-08T06:18:40.043 回答