2016-12-16 61 views
0

我在TwinCAT3中嘗試並熟悉ST,我現在有一個簡單的問題。使用數組或字節在結構化文本中設置多個輸出

說我有8個LED。每個分配給輸出1-8。現在我想能夠發送一個像這樣的字節:10101010.讓我們調用該變量來保存該字節setOUTPUTS。 我會如何初始化setOUTPUTS來保存?

bsetOUTPUTS := BYTE; 

之後,我初始化變量,我怎麼會遍歷它來設置每個LED到相應的位?

例如:setOUTPUTS = 10001000,我將如何通過setOUTPUTS變量循環來設置LED 8和LED 4 ON,同時使其他LED熄滅。

如果這是不可能的,那麼使用數組的替代方法是什麼?

謝謝!

+0

你CoDeSys中編程? – mrsargent

+0

沒有在TwinCAT環境中 – youngEngineer

回答

0

要初始化一個字節你會

setOUTPUTS : BYTE:=86; (* equiavlent to 01010101 *) 

您可以設置基於比特輸出如下

out1 := setOUTPUTS.0; (* bit 0 of byte *) 
out2:=setOUTPUTS.1; (* bit 1 of byte *) 

你可能會認爲你可以做這樣的事情來遍歷位該字節

FOR i:=0 TO 8 BY 1 DO 
(* out is an array of outputs *) 
out[i] := setOUTPUTS.i; 
END_FOR 

但不幸的是你無法做到這一點。據我所知,單獨設置它們是實現這一目標的唯一方法。

1

您可以比較setOutputs有位變量,通過setOutputs的長度轉移的每一位:

FOR i := 0 TO 7 DO 
    out[i] := setOutputs AND SHL(1, i); 
END_FOR; 
+0

很好的答案。我沒有想到這一點。爲你+1。 – mrsargent

+0

會不會[8]是8個LED的陣列/枚舉? SHL是否意味着左移1?謝謝! – youngEngineer

+0

out [i]是一個可以映射到8個獨立LED的陣列。 SHL(n,i)會將數字n,'i'次數移到左邊。 – pboedker

相關問題