2016-01-06 3032 views
2

我正在使用Codesys創建一個數組。在Codesys中定義數組

下面的例子是我用來創建5個值

ARRAY [1..5] OF INT := [1,2,3,4,5]; 

這是罰款5數組的數組什麼,但如果我需要100個值的數組?

有沒有更快的方法來做100個值的數組,而不是像下面的例子中那樣分別輸入每個值。

ARRAY [1..100] OF INT :=[1,2,3,4,5,6,7 to 100] 

回答

3

那麼,如果你只是想這樣做,高達100元,你想數組的元素着手,以便您可以使用此代碼來初始化第一個PLC的陣列掃描而不是在初始化數組聲明。

VAR 
    SomeArray: ARRAY[1..100] OF INT; 
    i:INT:=0; 
    isInitialized:BOOL:=false; 
END_VAR 

IF NOT isInitialized THEN 
    FOR i:=1 TO 100 BY 1 DO 
     SomeArray[i]:=i; 
    END_FOR; 
    isInitialized:=TRUE; 
END_IF; 
+0

謝謝你的答覆Mrsargent,作品魅力。我也在研究如何在數組中使用實數,例如'(0.1,0.2,0.3)',還有一種實現它的方法嗎? – darnbar

+0

對於實數,您可以設置另一個數組,但使用真實類型。然後在for循環中執行'RealArray [i]:= i * 0.1;'。 – mrsargent

+0

如果您發現答案有幫助,您是否會將此視爲可接受的解決方案,以幫助他人找到解決方案(如果他們有類似問題)? – mrsargent

2

可以使用()簡寫,如果要初始化數組或具有相同值的陣列的一部分。

ARRAY [1..100] OF INT :=[4(1),3(2),2(3),4]; //Equivalent [1,1,1,1,2,2,2,3,3,4] 

CoDeSys中V3或TWINCAT 3,你可以使用FB_init方法編寫初始化代碼。 FB_init所有聲明的FB實例的方法將在正常的循環任務執行開始之前在啓動時被調用。

您可以使用它像這樣:

METHOD FB_Init : BOOL 
VAR_INPUT 
    bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start/cold start) 
    bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change) 
END_VAR 
VAR 
    unCount : UINT; 
END_VAR 

FOR unCount := 1 TO 100 DO 
    arrnInitExample[unCount]:= unCount; 
END_FOR 

注:FB_init方法的前兩個布爾輸入必須總是相同的。但是你也可以在之後添加額外的輸入變量。然後,您可以在聲明FB實例時將自定義參數傳遞給該方法。