2016-09-27 1691 views
2

我正在研究用于分析传感器值的移动平均算法,并将值存储在数组中。但是,阵列的长度是变量(取决于一个电机的速度)。在CoDeSys中创建一个具有可变大小的数组

如何在CoDeSys中创建一个可变大小的数组。 定义Array如下是错误的:

名称:ARRAY [1 ... SpeedValue] OF INT;

回答

3

很抱歉地告诉您,Codesys V2/V3中的阵列没有可更改的大小。一般的解释是,在PLC中没有可用的动态内存分配,因为动态内存分配被认为太不可靠。

你唯一的选择就是以恒定ARRAY [1..N_MAX_SPEED_VALUE]定义数组,只是使用数组直到SpeedValue

VAR 
    arrnValues   : ARRAY[1..N_MAX_SPEED_VALUE] OF INT; 
END_VAR 
VAR CONSTANT 
    N_MAX_SPEED_VALUE : INT := 100; (*Max Array Size*) 
END_VAR 

至于我自己,我真的被这个限制窃听。我已经多次请求过一个特性,要定义像ARRAY [*]这样的数组,在实例化时有关键字用于开始和结束,并定义实际的开始和结束大小。这与动态内存分配没有任何关系,因为大小是在编译时定义的。

2

我会推荐你​​下面的帖子。

https://stefanhenneken.wordpress.com/2016/09/27/iec-61131-3-arrays-with-variable-length/

的Stefan描述步步什么是可能的可变长度数组做。

我不会推荐什么菲利克斯sugested因为:

第一:你永远不希望有可变的扫描时间。第二:如果由于某种原因,让我们说一些东西坏了,并且想要成为数组上限的SpeedValue是无法达到的,那么如果没有真正知道某个东西是否会出现死锁或输出错误是错误的

+0

请记住总结一下帖子包含的内容,如果链接因为不活动/而被移除,那么答案仍然有帮助 –

相关问题