可編程控制器PC(Programmable Controller),為與個人計算機PC(Personal Computer)相區別,可簡稱為PLC。它是按照成熟而有效的繼電控制概念和設計思想,用先進的單片機技術來實現I/O的實時檢測和控制,可靠性高,編程簡單、易學,因此,得到廣泛應用。 將PLC技術引進電工學、電力拖動課程,是課程建設現代化的重要措施。在教學經費相對緊張的情況下,我們自己動手,以AT89C51單片機為核心,設計并研制了LD型微型PLC,應用于繼電控制實驗,取得了良好的效果。 用單片機構成的PLC,實際上就是一個單片機測控系統。用這樣一個程序控制的計算機系統去執行繼電控制的梯形圖程序,由于繼電控制梯形圖中各被控電器之間是并行關系,而計算機程序控制中,各被控電器之間在時間上是串行關系,二者顯然不協調。若簡單地像一般單片機測控系統一樣,對梯形圖各程序行依次實時采集輸入端子狀態,進行處理后實時輸出,是達不到控制目的的。為此,必須采用一次性采集全部輸入端子狀態,并將其存入輸入緩沖區。然后,按梯形圖程序行的邏輯關系,從輸入緩沖區讀取相應輸入端子狀態,處理后將待輸出的結果存入輸出緩沖區。最后,待梯形圖程序行全部執行完畢,一次性將輸出緩沖區的值輸出到相應的輸出端子,從而完成一個程序執行周期。如此往復,自動進行下一輪的采集輸入端子狀態……。這種工作方式即稱為掃描方式,它將串行程序工作和電器并行工作兩種關系協調了起來。另外,單片機執行一條指令的時間是μs級,執行一個掃描周期的時間為幾ms乃至幾十ms。相對于電器的動作時間而言,掃描周期是短暫的,可以認為在一個掃描周期內輸入端子的狀態是不變的,而對其狀態變化的采集和處理也是實時的,從而滿足了實時控制的要求。 系統硬件配置以AT89C51(以下簡稱51)單片機為核心,如圖1所示。該單片機有4 KB閃存,不必擴展程序存儲器,其4個I/O口共32個I/O引腳,都可供用戶使用,其中P0.7~0.0,P2.4~2.0共13個腳經光耦隔離后連到相應的輸入端子X07~X00,X14~X10。可以用行程開關、液位開關、霍耳開關和手動按鈕等進行輸入。開關接通時,相應引腳為"0",取反后存入輸入緩沖區。 P1.7~1.0共8個引腳用于輸出控制:P1.i為"0"時,相應的PNP管導通,繼電器Ji線圈通電,其觸點Y5i接通,可驅動220 V/3 A的負載。 為了與PC機進行通信,系統擴展了RS-232C接口電路。51單片機的RXD和TXD信號經RS-232C電平變換后接至9芯插座。由此可與PC機進行串行通信。一方面,在編程狀態時,可接收PC機上梯形圖匯編程序編譯結果的OBJ指令代碼,并存入程序存儲器;另一方面,在運行狀態時,可將I/O口的狀態和處理結果實時地發送給上位機。 程序存儲器選用有SPI接口的X25045芯片。這是帶可編程看門狗和電源監控功能的E2PROM,有512字節,每字節可擦寫10萬次,數據可保存100年。上電時自動提供200 ms高電平復位脈沖;有三種可編程看門狗周期;電源欠壓,VCC降到轉折點時,自動提供復位脈沖。E2PROM采用三線總線的串行外設接口SPI,既節省了I/O口線和電路板空間,又降低了系統成本。因此,該芯片是性價比極好的組合芯片。 軟件設計分為PC機梯形圖匯編程序編譯軟件和51單片機軟件兩部分。前者用IBM-PC匯編語言編寫,我們稱之為PLC編譯軟件。本機中我們自己設計了一套TD型PLC的梯形圖匯編語言指令系統,有LD/LDI、AN/ANI、OR/ORI、TM/TMI、CN/CNI、MA/MAI、OUT、JP/JE和END等16條基本指令和X00~07、X10~14、Y00~07、CN0~1、TM00~07、MA00~07、10~17等器件。用它們來描述繼電器梯形圖,即設計梯形圖匯編程序。用全屏幕編輯軟件將其輸入到PC機,即建立了源程序文件。然后用PLC編譯軟件將其編譯成PLC目標程序文件(OBJ文件),并經串行通信口發送到單片機,由單片機將其寫入E2PROM。 51單片機軟件由編程軟件和運行軟件組成。編程軟件主要有串行通信和寫E2PROM兩個模塊。此時,須將面版上的手動開關設置P2.7="0",單片機即處于編程狀態。當P2.7="1"時,單片機即處于運行狀態。運行狀態的程序主要有: (1)輸入端子采集模塊 該模塊兩次采集P0口和P1口狀態,結果全同時為有效,即將其存入輸入緩沖區,否則重新采集。用軟件濾波的方法,提高了抗干擾能力。 (2)指令分析模塊 該模塊從000H地址開始,依次讀取E2PROM中的字節內容,先讀出操作碼,對其分析后轉向相應的處理程序;接著讀操作數,供處理程序操作,從而完成一條梯形圖匯編指令的執行。然后再讀取下一條指令的操作碼……。遇到OUT指令時,將待輸出的數據存入相應的輸出緩沖區。 (3)輸出模塊 當CPU從E2PROM中讀到END指令的二進制代碼時,表示一次掃描周期結束,即將輸出緩沖區的內容一次性輸出到P1口,從而完成輸出端子的刷新。 該PLC的應用可以用水塔水位控制的例子來說明。 圖2(a)是硬件接線圖,SB1/SB2是啟動/停止按鈕;SAC是水池液位開關:水浸到時接通,無水時斷開;SAH、SAL分別是水塔的高低液位開關;M是水泵電機。 圖2(b)是繼電器梯形圖,圖2(c)是繼電器匯編程序,即TD型PLC源程序。其中y50是PLC輸出端子,我們將它的軟件觸點y50作為水位上升或下降的標志:y50="0",表示電機已停,水位下降,此時SAL雖已接通,但電機不動作;y50="1",表示電機正在抽水,水位上升,此時SAL接通,電機通電,繼續抽水,直到高水位。 |