沒有合適的指令。得自己寫程序。

之前做過一個,是關於水泵的。超過n台設備有請求時,啟動兩台水泵,否則只開一台。

題主沒說是什麼PLC,姑且用三菱說一下吧。品牌是其次的,主要是方法和思想。

1,用計數器。

計數器的用法,是Y0為on,加1,Y0為off,減1。說到這裡,題主自然知道,得用加減雙向計數器了。

2,求和,算總數。

Y0為off,則D0賦值為0; 為on,則D0賦值為1。

……

……

Y7為off,則D7賦值為0; 為on,則D7賦值為1。

然後把D0到D7加起來。

和≥2,就執行某動作。

方法3,排列組合。

當然,我估計,題主也是面對排列組合的複雜度絕望,才上知乎提問的。

方法1,是最簡單的,但是寫程序的時候,一定要寫明白,考慮明白加減的條件,否則容易出錯。

方法2,依然很麻煩,一來,要賦值,而來,要做加法。但是啰嗦歸啰嗦,但是不容易出錯。

上述方法,不僅僅可以用於解決題主的問題,而且,還可以有其他的用途。

比如,我上面說的,根據請求信號的數量,開啟1個水泵,2個水泵,3個水泵。


您沒說是哈型號的plc呀。三菱里有個sum指令,西門子的就用scl寫一個for循環一樣就可以呀。


>=(8個點位 K2)----(Y0)

不知道你看懂了沒


while(1){

if((1||3||5||7) (2||4||6||8))

Temp1 = 1;

if((1||2||3||4) (5||6||7||8))

Temp2 = 1;

if((1||5||2||6) (3||7||4||8))

Temp3 = 1;

if((1||6||3||8)(5||2||7||4))

Temp4 = 1;

if( Temp1 || Temp2 || Temp3 || Temp4)

output = 1;}

不知道這樣行不行?有重複的,但是不影響輸出。


循環檢測8個點


推薦閱讀:
相关文章