我正在使用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]
我正在使用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]
那麼,如果你只是想這樣做,高達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;
可以使用()簡寫,如果要初始化數組或具有相同值的陣列的一部分。
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實例時將自定義參數傳遞給該方法。
謝謝你的答覆Mrsargent,作品魅力。我也在研究如何在數組中使用實數,例如'(0.1,0.2,0.3)',還有一種實現它的方法嗎? – darnbar
對於實數,您可以設置另一個數組,但使用真實類型。然後在for循環中執行'RealArray [i]:= i * 0.1;'。 – mrsargent
如果您發現答案有幫助,您是否會將此視爲可接受的解決方案,以幫助他人找到解決方案(如果他們有類似問題)? – mrsargent