我需要从三菱输入模块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类型,或者可能是该解决方案还有另一种逻辑?
答案 0 :(得分:0)
在其他平台上它应该可以工作,但编译器发出警告,所以我猜它仍然会编译?当然,如果价值为负,则会出现问题。
您可以通过IEC函数WORD
将INT
转换为WORD_TO_INT
。我不确定您的系统是否符合标准,但如果确实如此,请尝试以下方法:
WORD_TO_INT(SUM1)
。如果SUM1> 65535然后会出现问题,因为INT
的上限是32767。
如果这没有帮助,您能否提供更多详情?怎么不工作?
聚苯乙烯。 WORD是无符号数据类型,未按您编写的那样签名。