PLC做霹歷燈

[存實驗性質,沒人會用PLC去做霹歷燈,只是練習寫程式技術,霹歷燈的電路有空我會PO上來]

如果用一開始剛學的寫法(用一堆Timer來做delay),我可能會寫好幾十行吧,我要做8顆跟16顆燈依序來回跑,經過高手的教導我的心得如下:

首先列出這裡用的到的特殊暫存器的用法及功用:

1.PLUSE製造器:

跑1個完整的PLUSE稱為DT(duty time責任週期),之中包含了Ton(ON的時間)跟Toff(OFF的時間),也就是DT=Ton+Toff; 以下4個暂存器會送出4種不同DT的PLUSE來做上觸發跟下觸發,他們Ton跟Toff分別各佔DT的50%,即一半一半,以M8014的DT是60秒來說就是,ON的時間30秒,OFF的時間30秒。

M8002:程式開啟RUN的時候發出1個脈衝動作(ON,OFF)直到STOP都不會再送脈衝。可以稱為起始脈衝。

M8011:DT=10ms=0.01秒 => 其中包含了ON 0.005秒, OFF 0.005秒

M8012:DT=100ms=0.1秒 => 其中包含了ON 0.05秒, OFF 0.05秒

M8013:DT=1s=1秒 => 其中包含了ON 0.5秒, OFF 0.5秒

M8014:DT=60s=60秒 =>其中包含了 ON 30秒,OFF 30秒

注意:這些DT是不能變動的,不想用這些系統內建的,就使用計時器T來做就可以了,缺點程式會比較長,跑起來都一樣。

2.移位指令:

ROR(P):右移一個位元,相當於C語言中的" >> "。對應的另一種功能是RCR(P),使用RCR當要位移的暂存器資料超出最大值時,M8022暫存器會送出一個脈衝。

ROL(P):左移一個位元,相當於C語言中的" << "。對應的另一種功能是RCL(P),使用RCR當要位移的暂存器資料超出最大值時,M8022暫存器會送出一個脈衝。

格式:{ ROLP 資料暂存器[例:D1] 左移Kn個位元[例:K1] }

注意:1.使用上最好加上P,假如做了一個X的按鈕來做移位,不加P的時候,一按下去肯定位移了好幾次,會資料錯亂。

2.Dn是16位元暂存器,最大值是0XFFFF。

重要:PLC的移位指令不能直接指定位址來移動例:[RORP K2Y000 K1]這樣子是無效的,PLC不會去抓K2Y000的值出來做移位動作,C語言中則是可以,例[ P1=P1<<1 ]

8顆燈的寫法:

從Y0 => 1秒 => Y1 => 1秒............=> Y7 ,判斷Y007即第八顆燈亮的時候,再往反方向移位即可。

點圖可以放大

16顆燈的寫法:

大致上跟8顆的相同,要注意的是Y接點的16個點並不是Y0~Y15,而是Y0~Y17(沒有Y8跟Y9),還有K2Y0要改成K4Y0,因為我們要輸出16個點。

點圖可以放大

心得:

利用位移指令可以快速做到一些簡單的動作,寫程式不單只是要可以跑而以,而且還要快速,效率才會好,期許能學到更多有用的編程技術。