使用PLC應用指令

今天終於上到了"應用指令",學了快半年的PLC都在教A.B接點,沒錯,因為我們是從最基礎的低壓工業配線開始學,所以老師也一直都在教A.B接點,害我一直以為PLC怎麼那麼笨,不能做數學運算只能單純的開開關關,還不如我用單晶片配C語言+繼電器來控制,結果今天老師出了一個很簡單的題目,害我想了半天,後來去翻了三菱的手冊才知道怎麼做。

題目是:從Y0開始每0.5秒多顯示一顆到Y7為止共八顆一起亮結束。很多同學一下子就做出來了,因為他們高職就有學過了,我沒學過,我只會用計時器T下去做,但我並不想這樣(假如16個Y接點我會寫到累屬~"~),因為我看他們的程式很短只有3行,因為他們用了"應用指令"於是我就開始思考用C語言的寫法下去改,如下:

for(n=0;n<8;n++) //讓n從0~7下面{ }裡的迴圈共執行8次

{

P1=(P1<<1)+1; //P1的值往左移1個位元後補上1

delay(10); //自定函數,主要是延遲用

}

想不到剛入中心學c語言的時候覺得很難,現在反而覺得很好用~"~

ok,假如PLC哪天也可以用c語言直接嵌入那真是太棒了,but,現在不是抱怨的時候

基本上for迴圈我用計數器C來做就可以(後來手冊上也有翻到一個for指令到還沒研究)

而delay(10)我則直接用老師給的題目0.5S也就用了計時器T來做,

再來就是問題了,怎麼把變數做移位呢?老師只有教到X,Y,C,T這幾個基本的輸出輸入計時計數....

於是開始翻FX3U手冊(沒錢買,去中國下載到簡體的),還好平時有向簡體字燒香,一下就被我找到了

原來有個指令叫ROL可以把數值往左移Kn個位元

語法[ROL 數值 Kn個位元] 不可直接下命令移動位址;例rol k2y0 k1這是錯的

這樣的話,我就可以把D1的值往左移K1個位元,這就是跟上面我寫的C裡的led<<1是相同的功用==>[ROL D1 K1]

但是我把1往左移一個位元後還是要把最低位元補上1,不然該腳位的燈就滅了,所以我又查到了一個可以做加法運算的

語法[ADD 數值1 數值2 結果],

所以我只要移位過後的D1的值再補上1就OK了====>[add d1 k1 d1]

呼~辛苦爬手冊終於解決了難題,不過最後還有一關,就是輸出,如何能像C語言一樣直接輸出在Y的各個腳位上呢?

語法[mov 數值 K個字元從Y輸出的第n個接點開始算]

於是[mov d1 k2y0]我把d1左移1位元的值丟到從y0開始算的8個位元也就是從y0~y7分別對應8個位元,y0為最低位元即LSB,y7為最高位元即MSB

假如你要把PLC全部16個y都拿來用的話,k2改成k4就可以了,k1=4位元,K2=8位元,K3=12位元,K4=16位元。