2016-09-27 1696 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

請記住總結一下帖子包含的內容,如果鏈接因爲不活動/而被移除,那麼答案仍然有幫助 –

相關問題