




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于單片機的PLC系統(tǒng)研究緒論1.1背景介紹PLC和單片機這兩門學(xué)科在是在高校中普遍開展教學(xué)的兩門學(xué)科。不管是在編程上、還是具體的應(yīng)用過程中,人們都很少會把它們聯(lián)系在一起。但是如果簡單的回顧下它們的發(fā)展史,就會發(fā)現(xiàn)PLC和單片機之間有著許多聯(lián)系。基于單片機的PLC系統(tǒng)研究課題,打破了PLC和單片機這兩門學(xué)科的傳統(tǒng)界限,使得原本孤立、純粹的兩門學(xué)科緊密的聯(lián)系了起來。不僅檢驗學(xué)生了解PLC和單片機基本知識深度,更重要的是要讓學(xué)生清楚的了解PLC和單片機的本質(zhì)區(qū)別,從而再將二者結(jié)合起來,提高對綜合運用知識的能力[1]。目前我國PLC市場被國外壟斷,國外廠家生產(chǎn)的PLC不但價格比較貴,而且都有很強的技術(shù)保密性,能披露的具體細節(jié)非常少,不管是軟件還是硬件都不能實現(xiàn)互換性使用[2]。我國作為制造大國,PLC運用廣泛,但是國產(chǎn)PLC還有很大的發(fā)展差距,任重而道遠。本課題是在這樣的背景下,結(jié)合所學(xué)PLC和單片機的基本知識,設(shè)計了一個以單片機作為控制芯片的簡單PLC系統(tǒng)。本課題利用80C52設(shè)計了一個簡單的PLC系統(tǒng)[3]。該PLC有16位獨立的輸入接口,8位獨立的輸出接口;為了提高系統(tǒng)的抗干擾能力,輸入電路采用光電隔離技術(shù),采用繼電器隔離輸出。該PLC內(nèi)部還有96個軟繼電器以及32個定時/計數(shù)器。定時器可定時0~999.9s,計數(shù)器計數(shù)0~9999。同時為了實現(xiàn)模擬量的輸入輸出,本設(shè)計采用TLC549模數(shù)轉(zhuǎn)換芯片[4]和LTC1451數(shù)模轉(zhuǎn)換芯片[5],完成了對PLC模擬量輸入輸出擴展。1.2課題內(nèi)容(1)了解國內(nèi)外研究現(xiàn)狀,調(diào)研相關(guān)研究方法,收集與課題相關(guān)資料,結(jié)合所學(xué)知識,提出初步設(shè)計方案。(2)用80C52單片機設(shè)計一個PLC系統(tǒng)。該系統(tǒng)包含CPU、存儲器、編譯器、電源、輸入\輸出接口電路。(3)使用Proteus設(shè)計基于單片機的PLC電路圖,通過SPI技術(shù)實現(xiàn)模擬量輸入、輸出。(4)基于編譯技術(shù),設(shè)計PLC語句表到機器碼的轉(zhuǎn)換程序,使語句表能轉(zhuǎn)化為單片機可識別的匯編語言。(5)PLC系統(tǒng)的硬件設(shè)計并通過相關(guān)實例模擬仿真。2單片機和PLC的簡單介紹及模擬量輸入輸出2.1單片機和PLC的基本介紹2.1.1基本概念單片機也稱微控制器(MCU),是微型計算機領(lǐng)域中發(fā)展而來的一個重要分支,其本質(zhì)上也是一個微型計算機。它通常作為一個芯片,嵌入到系統(tǒng)中實現(xiàn)控制功能。PLC也稱為可編程序邏輯控制器,顧名思義,“可編程序”即戶可以根據(jù)不同的控制需求對程序進行編寫。而“邏輯控制器”這一個概念的由來是由于最PLC初只是為了取代傳統(tǒng)的工業(yè)控制繼電器的邏輯控制功能。但在70年代由于微處理器引入,PLC不僅能實現(xiàn)邏輯控制,還可以進行運算和信息處理,成為了真正具有控制能力的計算機控制裝置。PLC是建立在單片機之上的一個嵌入式系統(tǒng),其核心硬件CPU,可由單片機芯片增加一些可靠性較強的保護電路制作而成。目前市場上的PLC,由單片機作為主控芯片,已應(yīng)用到許多工程控制系統(tǒng)中,具有良好的發(fā)展前景[6]。2.1.2基本結(jié)構(gòu)單片機和PLC的結(jié)構(gòu)基本相同。單片機是一種芯片,運用集成電路技術(shù)把電源、CPU,存儲器,輸入輸出接口等集成到一塊很小芯片上,從而體現(xiàn)它的單片功能。PLC作為復(fù)雜的嵌入式系統(tǒng),是一種專門為比較惡劣的工業(yè)環(huán)境下實現(xiàn)自動化控制要求而設(shè)計的。其硬件包含電源、CPU、存儲器模塊、輸入輸出模塊、編程器等。單片機用直流5V作為工作電源,PLC可以使用220V交流電,其內(nèi)部有一個穩(wěn)壓器,為PLC內(nèi)部各部分提供24V的直流電源。CPU作為控制中樞,按照系統(tǒng)程序的指令功能起運算和控制的作用,由控制器、運算器和寄存器組成。存儲器分為系統(tǒng)存儲器、程序存儲器和數(shù)據(jù)存儲器。系統(tǒng)存儲器是使用者不能更改的程序,用于存儲制造商編寫并固化的程序,使系統(tǒng)具有設(shè)計者規(guī)定的基本功能。用戶程序存儲器是用來存放用戶為了實現(xiàn)根據(jù)控制要求而編寫的程序。數(shù)據(jù)存儲器是運行過程中需生成或調(diào)用中間結(jié)果數(shù)據(jù),如輸入/輸出元件的狀態(tài)數(shù)據(jù)、定時器、計數(shù)器的初始化等。除此之外,PLC對于不同控制系統(tǒng)的程序可通過專用的程序編輯器進行編程,將存儲器中的程序清除并重新編寫。單片機和PLC輸入/輸出接口電路有并行和串行兩種輸入輸出方式,過擴展后還可以進行模擬量的輸入輸出。單片機能實現(xiàn)基本的輸入輸出,而PLC的輸入輸出接口電路由于采用了光電隔離技術(shù)和繼電器隔離技術(shù),具有很強的可靠性和抗干擾能力。2.1.3基本原理在系統(tǒng)運行后,PLC和單片機工作原理是類似的,CPU以一定速度對程序進行周期掃描。其一個掃描周期依次有三個階段,即輸入采樣→程序執(zhí)行→輸出刷新三個階段。輸入采樣階段主要從輸入接口接收來自外界的信息并存入存儲器。這些信息主要包括兩部分即開關(guān)量和進過模數(shù)轉(zhuǎn)換后模擬量。用戶程序執(zhí)行階段CPU根據(jù)存儲器中的程序?qū)斎氲臄?shù)據(jù)進行運算和處理。輸出刷新將運算處理的結(jié)果通過輸出接口送去控制執(zhí)行機構(gòu)。2.1.4編程方式單片機的的編程方式有匯編語言和C語言,PLC語言最常用的有梯形圖語言和指令表語言。單片機的編程復(fù)雜,比較抽象,要求開發(fā)人員具備扎實的專業(yè)基基礎(chǔ)。而PLC的編程主要面向用戶,根據(jù)用戶的要求完成控制需要,程序比較直觀,簡單易學(xué),邏輯清晰,不要求用戶具備對很強專業(yè)知識。2.1.5應(yīng)用領(lǐng)域單片作為一個芯片,機集成度高,體積小,功能強,價格便宜,因而廣泛微控制領(lǐng)域中。比如電視、冰箱洗衣機、手機等智能家電中都運用到單片機作為控制器。PLC作為一種自動化控制系統(tǒng),具有很強的可靠性和抗干擾能力,并且簡單易用,維護方便,在環(huán)境比較復(fù)雜的工業(yè)控制領(lǐng)域中廣泛應(yīng)用,如電梯控制、機床控制、流水線、生產(chǎn)線等。2.1.6輸入/輸出(I/O)接口電路單片機和PLC的輸入輸出接口電路包括數(shù)字量輸入輸出接口電路和經(jīng)過擴展后的模擬量輸入輸出接口電路,有串行和并行兩種輸入輸出方式。單片機輸入輸出接口電路是最簡單的,實現(xiàn)基本的輸入輸出功能。而PLC輸入輸出接口是與工業(yè)設(shè)備之間的連接電路,一般采取了光電隔離、濾波等抗干擾技術(shù),以提高其抗干擾能力和穩(wěn)定性。輸入接口電路輸入端的信號,如信號傳感器,按鈕,行程開關(guān)變換成數(shù)字信號進入PLC;輸出接口電路將運算結(jié)果轉(zhuǎn)換為驅(qū)動輸出設(shè)備如燈,信號控制接觸器線圈,電磁閥。2.2模擬量輸入輸出單片機和PLC的輸入輸出接口電路包括數(shù)字量輸入輸出接口電路和經(jīng)過擴展后的模擬量輸入輸出接口電路[7],有串行和并行兩種輸入輸出方式。單片機輸入輸出接口口電路是簡單的,實現(xiàn)基本的輸入輸出功能。而PLC輸入輸出接口是與工業(yè)設(shè)備之間的連接電路,一般采取了光電隔離、濾波等抗干擾技術(shù),以提高其抗干擾能力和穩(wěn)定性[8]。輸入接口電路輸入端的信號如信號傳感器,按鈕,行程開關(guān)變換成數(shù)字信號進入PLC;輸出接口電路將運算結(jié)果轉(zhuǎn)換為驅(qū)動輸出設(shè)備如燈,信號控制接觸器線圈,電磁閥。2.2.1模數(shù)(A/D)轉(zhuǎn)換概述A/D轉(zhuǎn)換包含三個部分:采樣、量化和編碼。在時間上離散化模擬量為采樣,在幅度上離散化模擬量為量化,編碼是用二進制代碼顯示量化后的值。A/D轉(zhuǎn)換芯片種類很多,按其轉(zhuǎn)換原理可以分為逐次逼近型、并行式、雙積分型等[9]。主要性能參數(shù):(1)分辨率:分辨率反映轉(zhuǎn)換器的精度,二進制的位數(shù)越多,轉(zhuǎn)換的精度越高。但是二進制位數(shù)越多,硬件成本越高,運算時間也越長。(2)精度:精度有絕對和相對精度。絕對精度是指數(shù)字量表示的模擬量與理想模擬量之差的最大值。相對精度是將這個差值標(biāo)示為滿量程模擬電壓的百分比。(3)轉(zhuǎn)換時間:完成一次轉(zhuǎn)換所需要的時間。(4)轉(zhuǎn)換速率:單位時間內(nèi)完成轉(zhuǎn)換數(shù)據(jù)的速度。(5)量程:所能轉(zhuǎn)換的量的輸入范圍.2.2.2數(shù)模(D/A)轉(zhuǎn)換概述在工業(yè)控制過程中,大多數(shù)的執(zhí)行器都要求輸入模擬驅(qū)動信號才能完成相應(yīng)控制。所以這就需要把控制器處理后的數(shù)字量重新轉(zhuǎn)換為模擬量,以便驅(qū)動各種執(zhí)行器。D/A轉(zhuǎn)換器的基本原理是用電阻網(wǎng)絡(luò)將每位數(shù)碼的權(quán)值轉(zhuǎn)換成相應(yīng)的模擬信號[10],然后用運算放大器求和電路將這些模擬量相加就完成了數(shù)模轉(zhuǎn)換。常用的有T型和倒T型電阻網(wǎng)絡(luò)。主要性能參數(shù):分辨率:單位數(shù)字量變化引起模擬量輸出變化值,為滿量程電壓與最小輸出電壓分辨值之比。轉(zhuǎn)換時間:數(shù)字量輸入到模擬量輸出所用的時間。轉(zhuǎn)換精度:表示實際值與理想值之間的誤差。3硬件設(shè)計3.1硬件設(shè)計概述本課題主要利用80C52設(shè)計一個簡單PLC系統(tǒng)。通過SPI技術(shù)[11],使用TLC549實現(xiàn)模擬量輸入,LTC1451實現(xiàn)模擬量輸出,同時還具有0-9999的計數(shù)功能。該PLC有16位獨立的輸入,8路獨立的輸出;該PLC還有32個獨立的計數(shù)器。3.2最小單片機系統(tǒng)單片機最小系統(tǒng)是使單片機能夠?qū)崿F(xiàn)基本的輸入輸出及運算處理功能的最少器件構(gòu)成的系統(tǒng)。80C52單片機最小系統(tǒng)主要由單片機、振蕩電路、復(fù)位電路、電源等部分組成。3.2.180C52芯片介紹80C52是英特爾公司開開發(fā)的MCS-51系列HYPERLINK"/view/1012.htm"\t"/_blank"單片機的產(chǎn)品,它是一種高性能8位單片機,采用CHMOS工藝技術(shù)制造,具有高速及低功耗特點。它屬于80C51單片機增強型版本,使用MCS-51系列HYPERLINK"/view/1012.htm"\t"/_blank"單片機通用的體系結(jié)構(gòu)和HYPERLINK"/view/178189.htm"\t"/_blank"指令語言,具有定時功能和加減計數(shù)器功能。80C52采8位的中央處理器作為CPU。內(nèi)部數(shù)據(jù)存儲器RAM共有256個單元,其中低128單元地址從00H~7FH,作為供用戶使用的內(nèi)存單元,高128單元地址從80H~FFH,作為專用寄存器。80C52共有8kHYPERLINK"/view/421016.htm"\t"/_blank"程序存儲器ROM,用來存放程序和原始數(shù)據(jù),無需擴展,更能體現(xiàn)單片機“單片”特點。此外80C52還具有5個兩級中斷結(jié)構(gòu)、32個雙向I/O口及片內(nèi)振蕩電路。它采用44pin和40pin兩種封裝形式。3.2.2單片機的內(nèi)部結(jié)構(gòu)圖3.180C52單片機結(jié)構(gòu)圖80C52單片機的基本結(jié)構(gòu)包括CPU、定時/計數(shù)器、I/O、數(shù)據(jù)存儲器、程序存儲器、、時鐘單路、中斷系統(tǒng)等。其結(jié)構(gòu)如圖3.2所示。圖3.180C52單片機結(jié)構(gòu)圖圖3.180C52內(nèi)部結(jié)構(gòu)圖3.2.3單片機的引腳圖及功能80C52共有40個引腳,可以分為4類:I/O引腳、控制、電源和時鐘。引腳圖如下:圖3.280C52引腳排列圖VCC:芯片電源端。GND:接地端。XTAL1:振蕩電路反相輸入端。XTAL2:振蕩電路輸出端。ALE/EQ\*jc0\*"Font:TimesNewRoman"\*hps12\o(\s\up11(_____________),PROG):地址鎖存允許端。PSEN:外部ROM讀選通信號。RST:復(fù)位引腳。EQ\*jc0\*"Font:TimesNewRoman"\*hps12\o(\s\up11(————),EA)/VPP:內(nèi)外ROM選擇。I/O引腳:80C52單片機共有4個I/O端口,每個端口8位,共32個可編程I/O引腳。3.2.4復(fù)位電路單片機啟動時和遇到故障時需要復(fù)位,復(fù)位就像電腦重啟一樣,使CPU和系統(tǒng)中的其他部件都恢復(fù)到最初狀態(tài),并從這個狀態(tài)開始工作。所以復(fù)位電路的設(shè)計功能包括上電復(fù)位和系統(tǒng)運行時按鍵復(fù)位功能[12]?;綬C復(fù)位電路如圖3.3在此系統(tǒng)中單片機的復(fù)位靠外部電路實現(xiàn)的,80C52單片機有一個高電平有效的復(fù)位引腳RST。即只要RST保持高電平,ALE/PSEN、P0、P1、P2、P3口都輸出高電平,單片機復(fù)位。RST變成低電平后,CPU開始正常工作,退出復(fù)位狀態(tài)。復(fù)位操作不影響片內(nèi)RAM的內(nèi)容。此復(fù)位電路有兩種工作方式系統(tǒng)上電復(fù)位和手動RESET復(fù)位。系統(tǒng)上電時瞬間會提供復(fù)位信號復(fù)位。當(dāng)人為按下RESET按鍵RST獲得高電平,單片機復(fù)位,當(dāng)松開按鍵,系統(tǒng)退出復(fù)位狀態(tài),實現(xiàn)手動復(fù)位。圖3.3復(fù)位電路圖3.2.5振蕩電路振蕩電路的作用是產(chǎn)生時鐘頻率,使系統(tǒng)各部分能夠按照節(jié)拍保持同步工作。振蕩電路由晶振和電容、電阻相結(jié)合而成[13]。晶振頻率決定了單片機運行速度的快慢,但是晶振頻率越高,功耗越大,系統(tǒng)越不穩(wěn)定,所以還是適用就好。80C52單片機雖然也有內(nèi)部振蕩電路但是穩(wěn)定性較差,不精確,一般使用外接振蕩電路。通常情況下,為了保持各部分保持同步工作,一個系統(tǒng)只使用單獨的晶振。在本次設(shè)計中為了能準(zhǔn)確分頻,選用11.0592MHz的晶振作為振蕩源,電容容量為30pF。振蕩電路圖如圖3.4圖3.4振蕩電路圖3.3模擬量輸入輸出的設(shè)計為了實現(xiàn)模擬量的輸入輸出,選擇我們TLC549作為模數(shù)轉(zhuǎn)換的芯片,選擇LTC1451作為數(shù)模轉(zhuǎn)換的芯片,采用SPI技術(shù)實現(xiàn)轉(zhuǎn)換芯片與單片機的連接。3.3.1在80C52單片機中模擬SPI的方法80C52并沒有硬件SPI接口及,但是通過軟件程序設(shè)計,實現(xiàn)模擬SPI的功能,從而實現(xiàn)數(shù)據(jù)的串行輸入輸出。如圖3.5所示。圖3.5SPI接線圖在此圖中,我們設(shè)定DIN對應(yīng)P1.0口,DOUT對應(yīng)P1.3口,SCK對應(yīng)P1.1口,SS對應(yīng)P1.2口。即P1.0為單片機數(shù)據(jù)輸入端;P1.3為單片機數(shù)據(jù)輸出端;P1.1為時鐘信號輸出端,在上升沿時輸入數(shù)據(jù),在下降沿時輸出數(shù)據(jù);P1.2為片選信號輸出端,為1時表示未選中外圍芯片,為0時表示選中外圍芯片。單片機P1.2置0選中外圍芯片,P1.1位由低電平變?yōu)楦唠娖?,將使外圍接口芯片?shù)據(jù)串行左移,從而輸出1位數(shù)據(jù)到80C52單片機的P1.0口。此后再置P1.1低電平,單片機從P1.3輸出1位數(shù)據(jù)(先高后低)至串行接口芯片,從而實現(xiàn)模擬1位數(shù)據(jù)的輸入輸出。此后再置P1.1為高電平1,模擬下1位數(shù)據(jù)的輸入輸出,循環(huán)8次后,就可以實現(xiàn)8位數(shù)據(jù)的串行輸入輸出。SPI串行輸入輸出程序見附件13.3.2模數(shù)轉(zhuǎn)換TLC549芯片介紹TLC549是一種8位模數(shù)轉(zhuǎn)換器,它的價格便宜、準(zhǔn)換速度快。它能通過CLK、CS、DATAOUT三個接口與具有串行外圍接口(SPI)的單片機連接,實現(xiàn)模模擬量的輸入。(2)TLC549引腳及功能圖REF+:正HYPERLINK"/subview/2127779/2127779.htm"\t"/_blank"基準(zhǔn)電壓輸入端2.5V≤REF+≤6V(按照轉(zhuǎn)換范圍需求設(shè)置電壓大小)。REF-:負基準(zhǔn)電壓輸入端(一般接地)。VCC:系統(tǒng)電源3V≤VCC≤6V。HYPERLINK"/subview/961504/13628081.htm"\t"/_blank"GND:接地端。圖3.6TLC549引腳圖/CS:片選信號端,低電平有效。DATAOUT:數(shù)據(jù)串行輸出端,先高后低原則進行輸出。ANALOGIN:電壓信號輸入端。HYPERLINK"/subview/300881/11169495.htm"\t"/_blank"I/OCLOCK:時鐘信號輸入端,由程序決定。(2)工作原理當(dāng)/CS變?yōu)镠YPERLINK"/subview/1937556/1937556.htm"\t"/_blank"低電平,TLC549芯片被選中,每當(dāng)HYPERLINK"/subview/300881/11169495.htm"\t"/_blank"I/OCLOCK出現(xiàn)一次上升沿信號,前次轉(zhuǎn)換數(shù)據(jù)從最高位到最低為自DATAOUT端依次輸出,循環(huán)8次。在第4個I/OCLOCK信號由高至低的跳變之后,內(nèi)部電路開始對輸入HYPERLINK"/subview/1152876/1152876.htm"\t"/_blank"模擬量采樣,第8個I/OCLOCK信號的HYPERLINK"/subview/345334/345334.htm"\t"/_blank"下降沿啟動HYPERLINK"/subview/404970/404970.htm"\t"/_blank"A/D轉(zhuǎn)換,/CS變?yōu)镠YPERLINK"/subview/1299029/1299029.htm"\t"/_blank"高電平。由此可見,一個完整的轉(zhuǎn)換流程包括:讀入前次A/D轉(zhuǎn)換結(jié)果;對輸入HYPERLINK"/view/38288.htm"\t"/_blank"模擬信號采樣;啟動本次A/D轉(zhuǎn)換。時序圖如圖3.7。圖3.7TLC549時序圖3.3.3數(shù)模轉(zhuǎn)換LTC1451芯片介紹是LTC1451是凌力爾特公司開發(fā)的一種采用SO-8封裝,低耗能,高性能可以完成單通道軌到軌輸出的12位數(shù)模轉(zhuǎn)換器。他們包括運算放大器和3個串行接口(CLK、DIN、CS/LD)。其DIN數(shù)據(jù)輸入將12位二進制數(shù)據(jù)通過CLK時鐘脈沖逐位地輸入到LTC1451的寄存器中進行D/A轉(zhuǎn)換,并將轉(zhuǎn)換后的模擬信號,由VOUT引腳輸出。(2)引腳圖及引腳功能CLK:時鐘信號輸入端。DIN:串行數(shù)據(jù)輸入端。/CS:片選信號端,低電平有效。DOUT:移位寄存器的輸出。GND:接地。
VOUT:電壓輸出端。REF:運算放大器基準(zhǔn)電壓輸入端。
VCC:系統(tǒng)電源4.5V≤VCC≤5.5V。
圖3.8LTC1451引腳功能圖工作原理LTC1451與TLC549工作原理基本相同。其中LTC1451包含一個運算放大器可以使輸出電壓放大1倍,轉(zhuǎn)換精度為12位。LTC1451工作時序圖如下:圖3.9LTC1451時序圖3.4硬件設(shè)計電路圖根據(jù)前面的介紹與分析,結(jié)合本課題的設(shè)計目標(biāo)。最終得到硬件設(shè)計電路圖如圖3.10.該電路包括具有震蕩電路和復(fù)位電路。本電路具有P2、P3口輸入,P1口輸出。其中P3.7口擴展為模擬量輸入端,P1.7口我模擬量輸出端,P1.4為LTC1451芯片選擇輸入端,低電平有效,P1.5為TLC549芯片選擇輸入端,低電平有效,P1.6為TLC549和LTC1451共用的時鐘信號輸出端。除此之外,TLC549REF-端接地,REF+端接正5V電壓。LTC1451REF+端接正5V電壓。系統(tǒng)運行時,TLC549會不斷將轉(zhuǎn)換后的數(shù)據(jù)輸入到84H地址單元中。LTC1451會不斷從85H地址單元中讀取數(shù)據(jù)轉(zhuǎn)換輸出。模擬量輸入輸出程序見附件2圖3.10電路原理圖為了驗證模擬量輸入輸出的可行性,TLC549輸入端外接了一個可變電阻,以此提供可變電壓,時鐘信號輸入端(SCLK)、數(shù)字量輸出端(SDO)、片選信號端分(CS)別接示波器A、B、C端口。LTC1451數(shù)字量輸入端(DIN)接示波器D端口。接線圖如圖3.11。用Keil編譯模擬量輸入輸出轉(zhuǎn)換程序,生成HEX文件,用Proteus仿真后得到波形圖如圖3.12。改變模擬量輸入大小,模擬量輸出也隨之變化,轉(zhuǎn)換完成。圖3.11模擬量轉(zhuǎn)換接線圖3.12模擬量輸入輸出波形圖4系統(tǒng)軟件設(shè)計4.1軟件設(shè)計原理為了使本課題設(shè)計的PLC能夠按照設(shè)計工作,必須對它進行編程。把設(shè)計方案畫成梯形圖,并根據(jù)梯形圖編寫語句表。然后用轉(zhuǎn)換程序?qū)φZ句表進行編譯,并用Proteus模擬仿真。本課題設(shè)計的PLC使用直接將語句表轉(zhuǎn)換成單片機所能執(zhí)行的機器代碼的方法,設(shè)計轉(zhuǎn)換程序。軟件設(shè)計流程圖如圖4.1:圖4.1軟件設(shè)計流程圖PLC本身可以理解為一個由許多繼電器組成的系統(tǒng),我們有時稱之為軟繼電器。編程的工作就相當(dāng)于在這些繼電器之間連接線路使之成為一個完整的控制電路。具體的實現(xiàn)方是:(1)16個輸入輸出端口的編號為104-119(2)8個輸出端口編號為96-103)(3)96個內(nèi)部軟繼電器編號為0~95(4)32個定時/計數(shù)器編號為0~314.2編譯原理根據(jù)以上編譯結(jié)果及流程圖設(shè)計了轉(zhuǎn)換程序,使用Python工具來實現(xiàn)。Python是一種語法簡潔且清晰,解釋型計算機語言,具有豐富和強大的類庫。不同于javascript和vbscript等只能在瀏覽器中使用或者嵌入宿主程序中運行的腳本語言,Python的庫很完整,支持豐富的數(shù)據(jù)結(jié)構(gòu),可以獨立開發(fā)大型工程。Python語法最大的特點是使用縮進來表示程序塊,這確保了其代碼具備良好的可讀性。通過完善的標(biāo)準(zhǔn)庫,Python可以非常方便地使用操作系統(tǒng)提供的功能,而且Python的標(biāo)準(zhǔn)庫包括單元測試、文檔和日志工具。除了標(biāo)準(zhǔn)庫外,Python還擁有大量的第3方庫和工具,比如Zope是一個使用Python編寫的應(yīng)用序服務(wù)器,可以免費使用,支持多種操作平臺,適合開發(fā)基于web的應(yīng)用程序;Boa-constructor是用Python編寫的一個帶窗體設(shè)計器的集成開發(fā)環(huán)境,適合開發(fā)桌面應(yīng)用程。在面向?qū)ο蠓矫?,Python支持很完善,而且Python可以和其他組件模型,如com、corba交互。這些都使得Python具有極高的開發(fā)效率[14]。使用它能夠迅速的得到需要的轉(zhuǎn)換程序。4.3PLC指令介紹目前生產(chǎn)PLC的廠家很多,雖然不同廠家PLC指令的的表達式和格式不一樣,編程思想和表達意思基本相同。為了方便認識,我們統(tǒng)一采用歐姆龍CPM1A系列PLC指令[15]。下面我們介紹其指令。4.3.1PLC基本指令表4-0PLC基本指令表指令名稱指令符功能取LD讀入邏輯行或電路塊的第一個常開接點取反LDNOT讀入邏輯行或電路塊的第一個常閉接點與AND串聯(lián)一個常開接點與非ANDNOT串聯(lián)一個常閉接點或OR并聯(lián)一個常開接點或非ORNOT并聯(lián)一個常閉接點電路塊與ANDLD串聯(lián)一個電路塊電路塊或ORLD并聯(lián)一個電路塊輸出OUT輸出邏輯運算結(jié)果輸出求反OUTNOT邏輯運算結(jié)果求反輸出置位SET置繼電器觸點為閉合狀態(tài)復(fù)位RSET使繼電器復(fù)位為斷開定時TIM接通延時定時器設(shè)定時間0~999.9S計數(shù)CNT減法計數(shù)器設(shè)定值0~9999次4.3.2常用的功能指令(1)空操作指令NOP不進行任何邏輯操作,在程序中留出一個地址。(2)結(jié)束指令END本指令為程序結(jié)束的標(biāo)志指令,是程序的最后一條指令,表示程序到此結(jié)束。微分二進制加法指令@ADBYYH,XX當(dāng)接收到一次脈沖信號時,將地址位YYH的內(nèi)容和立即數(shù)XX進行二進制帶進位加法運算,結(jié)果存入YYH中。微分二進制減法指令@SBBYYH,XX當(dāng)接收到一次脈沖信號時,將地址為YYH的內(nèi)容和立即數(shù)XX進行二進制帶進位減法運算,結(jié)果存入YYH中。(5)微分二進制乘法指令@MLBYYH,XXH當(dāng)接收到一次脈沖信號時,將地址為YYH和XXH內(nèi)容的8位無符號數(shù)進行二進制乘法運算,乘積送回到Y(jié)YH、XXH中。其中YYH存放高字節(jié),XXH存放低字節(jié)。(6)微分二進制除法指令@DVBYYH,XXH當(dāng)接收到一次脈沖信號時,將地址為YYH和XXH內(nèi)容的8位無符號數(shù)進行二進制除法運算,商放在YYH中,余數(shù)放在XXH中。(7)微分傳送指令@MOVYYH,XX當(dāng)接收到一次脈沖信號時,將立即數(shù)XX送到地址為YYH的內(nèi)容中。(8)數(shù)值比較初始加載指令(LD+<,LD+>=)LD+<YYH,XX:數(shù)值比較初始加載指令相當(dāng)于一個觸點。將YYH中的內(nèi)容與立即數(shù)XX作比較,如果YYH的內(nèi)容小于XX,觸點閉合,否則置斷開。LD+>=YYH,XX:數(shù)值比較初始加載指令相當(dāng)于一個觸點。將YYH中的內(nèi)容與立即數(shù)XX作比較,如果YYH的內(nèi)容大于或等于XX,則觸點閉合,否則置斷開。(9)數(shù)值比較邏輯與指令(AND+<,AND+>=)AND+<YYH,XX:當(dāng)串聯(lián)的觸點閉合時,將YYH中的內(nèi)容與立即數(shù)XX作比較,如果YYH的內(nèi)容小于XX,則觸點閉合,否則斷開。ANDD+>=YYH,XX:當(dāng)串聯(lián)的觸點閉合時,將YYH中的內(nèi)容與立即數(shù)XX作比較,如果YYH的內(nèi)容大于或等于XX,則觸點閉合,否則斷開。(10)數(shù)值比較初邏輯或指令(OR+<,OR+>=)OR+<YYH,XX:并聯(lián)一個觸點,將YYH中的內(nèi)容與立即數(shù)XX作比較,如果YYH的內(nèi)容小于XX,則觸點閉合,否則斷開。OR+>=YYH,XX:并聯(lián)一個觸點,將YYH中的內(nèi)容與立即數(shù)XX作比較,如果YYH的內(nèi)容大于或等于XX,則觸點閉合,否則斷開。4.4轉(zhuǎn)換程序的設(shè)計本課題設(shè)計的PLC的運行程序有三大部分。第一部分是初始化部分,這些程序是由編譯程序自動生成的,和PLC指令程序沒有關(guān)系。它只在開機或者復(fù)位時執(zhí)行一次,系統(tǒng)正常運行后不會被再次執(zhí)行。這段程序規(guī)定了80C52的內(nèi)存分配方式,對I/O口初始化及部分內(nèi)設(shè)置初始值等[16]。第二部分為主循環(huán)程序部分,這部分程序包含有固定程序以及編譯程序根據(jù)PLC指令編譯生成匯編代碼。轉(zhuǎn)換程序的設(shè)計由以上二個部分做為基礎(chǔ)進行設(shè)計總體分析后得到轉(zhuǎn)換程序流程圖如圖4.3。由此流程圖來作為轉(zhuǎn)換程序設(shè)計的依據(jù)。圖4-2轉(zhuǎn)換程序流程圖4.4.1初始化部分轉(zhuǎn)換程序運行后要生成目標(biāo)程序的初始化程序,首先要完成對80C52的的內(nèi)存分配才能對初始化程序進行分析。80C52單片機內(nèi)存單元有低128字節(jié)的內(nèi)存和高128字節(jié)的內(nèi)存稱為內(nèi)部數(shù)據(jù)存儲器RAM[17]。低128單元內(nèi)存地址從00H到7FH。通用工作寄存器區(qū)從00~1FH單元,位尋址區(qū)從20H~2FH,其余的內(nèi)存單元為以字節(jié)為單位的常規(guī)內(nèi)存,地址為由30~7FH。高128內(nèi)存單元地址從80H~F0H。80C52共有21個特殊功能寄存器,他們離散的分布在80H~FFH的高128單元區(qū)域,并未完全占滿,我們可以通過間接尋址的方式對空余的內(nèi)存單元進行訪問。80C52低128單元內(nèi)存的狀態(tài)和位地址如圖4-3.圖4-380C52片內(nèi)RAM的狀態(tài)和地址本PLC使用了80C52片內(nèi)RAM的絕大部分。內(nèi)存分配和使用情況如下:70H~7FH這16個字節(jié)的RAM用作系統(tǒng)堆棧。30H~6FH這64個字節(jié)的RAM用作存儲32個定時器/計數(shù)器的值,每一個定時器/計數(shù)器占用2個字節(jié)。例如0號定時器/計數(shù)器的值是保存在30H和31H中,其中30H是低字節(jié),31H是高字節(jié)。2FH這個字節(jié)中的8個二進制位作為程序運行中的標(biāo)志位。2DH和2EH這兩個字節(jié)RAM中存放由80C52,P2口和P3口輸入的數(shù)據(jù)。2DH和2EH位地址68H~77H中的數(shù)據(jù)對應(yīng)于PLC中104~119號輸入端的狀態(tài)。1表示輸入觸點閉合,0表示輸入觸點斷開。2CH這個字節(jié)中存放的數(shù)據(jù)將由8255芯片PC口輸出。它的位地址60H~67H中的數(shù)據(jù)對應(yīng)于96~103號輸出繼電器的狀態(tài)。數(shù)據(jù)1為繼電器吸合,數(shù)據(jù)0為繼電器釋放。20H~2BH這12個字節(jié)用作軟繼電器。對應(yīng)位地址從00H~5FH,這96個位地址單元中的數(shù)據(jù)相應(yīng)于0~95號軟繼電器的狀態(tài)。數(shù)據(jù)1表示軟繼電器觸得電,常開觸點閉合,常閉觸電斷開。數(shù)據(jù)0表示軟繼電器失電,其常開觸點斷開,常閉觸點閉合。14H~17H這4個字節(jié)共有32位,用作標(biāo)志。每一位標(biāo)志了一個定時器/計數(shù)器的具體功能。如果其中某位為1則表明該位對應(yīng)的是一個定時器,如果該位為0則表明對應(yīng)的是一個計數(shù)器。08H~0FH這8個字節(jié)為1區(qū)的R0~R7,用于中斷服務(wù)程序。00H~07H這8個字節(jié)為0區(qū)的R0~R7,節(jié)用于主程序。對于高128單元,我們規(guī)定84H單元用來存儲TLC549輸入的數(shù)據(jù)。85H單元為LTC1451讀取數(shù)據(jù)單元。其余未使用的內(nèi)存單元通過間接尋址作為常規(guī)內(nèi)存使用。根據(jù)內(nèi)存分配方案,要完成的編譯程序要生成的初始化程序見附件3。4.4.2主循環(huán)程序部分主循環(huán)程序部分的固定程序主要是I/O的循環(huán)掃描部分。我們規(guī)定了P2、P3作為輸入口,P3作為輸出口,其中P1.4、P1.5、P1.6、P1.7已經(jīng)被占用。固定程序段見附件4。編譯程序部分要根據(jù)PLC指令進行編譯生成相應(yīng)的匯編代碼。4.4.3基本指令的編譯(1)“LD”和“LD-NOT”指令的編譯LD語句的梯形圖意義為與母線相連的最左邊的常開觸點。要完成“LD”指令的編譯分為兩種情況:一種是引用軟硬繼電器的常開觸點,觸點編號XX為十進制數(shù),取值范圍為0~119,所占的資源可以96個內(nèi)部軟繼電器,和16個輸入端口和8個輸出端口。即可用20H~2BH、2CH、2DH、2EH這些字節(jié)的RAM地址。首先在為了保存之前的數(shù)據(jù),將進位標(biāo)志“C”存入地址1FH的bit0,需要三行指令,然后把LD語句相對應(yīng)的位地址中的數(shù)據(jù)送給進位標(biāo)志C。此位地址的數(shù)據(jù)表示對應(yīng)繼電器的狀態(tài)。所以一共編譯生成4行匯編指令,YY是XX化為十六進制數(shù)的結(jié)果,也是RAM中的位地址。一種是引用定時器或計數(shù)器的輸出常開觸點,觸點編號為CNTXX或TIMXX,其中XX為十進制數(shù),取值范圍為0~31。根據(jù)內(nèi)存分配狀況,可用30H~6FH這64個字節(jié)的RAM。首先和LD語句一樣應(yīng)存之前的數(shù)據(jù),然后將對應(yīng)地址中的數(shù)據(jù)寫入進位標(biāo)志C。所以編譯生成5行匯編指令。編譯結(jié)果如表4-1:表4-1“LD”指令的編譯PLC指令相應(yīng)的匯編代碼LDXXMOVA,1FHRLCAMOV1FH,AMOVC,YYHLDCNTXXorLDTIMXXMOVA,1FHRLCAMOV1FH,AMOVA,YYHMOVC,ACC.6LD-NOT指令的編譯結(jié)果與LD的編譯結(jié)果正好相反。LD-NOT指令所代表的是常閉觸點,與常開觸點的執(zhí)行結(jié)果應(yīng)該是相反的,所以只需要在LD指令編譯結(jié)果的基礎(chǔ)上加一條取反指令“CPLC”即可。如表4-2表4-2“LD-NOT”指令的編譯PLC指令相應(yīng)的匯編代碼LD-NOTXXMOVA,1FHRLCAMOV1FH,AMOVC,YYHCPLCLD-NOTCNTXXorLD-NOTTIMXXMOVA,1FHRLCAMOV1FH,AMOVA,YYHMOVC,ACC.6CPLC(2)“OUT”和“END”指令的編譯“OUT”指令是PLC語言的輸出指令,“END”指令是PLC源程序的結(jié)束指令?!癘UT”指令在匯編程序中即是一條輸出的指令代碼?!癘UT”指令中的XX是輸出線圈編號,為十進制數(shù),取值范圍是0~103。YY是XX化為十六進制數(shù)的結(jié)果,也是RAM中的位地址。即要將進位標(biāo)志C的數(shù)據(jù)存放到Y(jié)Y所指的位地址中。在主循環(huán)程序中,程序是從0400H開始的,所以END指令的編譯結(jié)果是使程序有0400H地址處開始執(zhí)行。編譯結(jié)果如表4-3表4-3“OUT”和“END”PLC指令相應(yīng)的匯編指令OUTMOVYYH,CENDLJMP0400H(3)“AND”和“AND-NOT”指令的編譯AND指令的編譯分為兩種情況,一種是引用軟硬繼電器的常開觸點,觸點編號XX為十進制數(shù),取值范圍為0~119,所占的資源和LD指令一樣。AND在梯形圖中表示與前一條指令相串聯(lián)的常開觸點,即串聯(lián)線路的元件都閉合才能輸出1??捎脜R編指令中的ANL進行實現(xiàn),這條匯編指令的作用是將兩個操作數(shù)按位進行邏輯“與”運算,并將結(jié)果存入直接尋址的內(nèi)RAM單元。YY是XX化為十六進制數(shù)的結(jié)果,也是RAM中的位地址。一種是引用定時器或計數(shù)器的輸出常開觸點,ANDTIM或ANDCNT指令是指,相應(yīng)編號的定時器/計數(shù)器的輸出常開觸點與前一條PLC指令所指的觸點是串聯(lián)關(guān)系。所以需要將對應(yīng)RAM地址中的相應(yīng)高低字節(jié)中的數(shù)據(jù)與進位標(biāo)志C進行邏輯與,并將結(jié)果存入C中。所以編譯結(jié)果如表4-4:表4-4“AND”指令的編譯PLC指令相應(yīng)的匯編指令A(yù)NDXXANLC,YYHANDTIMXX或ANDCNTXXMOVA,YYHANLC,ACC.6“AND-NOT”指令的編譯結(jié)果與AND指令相反。因為AND-NOT指令所代表的是常閉觸點,與常開觸點的執(zhí)行結(jié)果是相反的。所以“AND-NOT”指令的編譯結(jié)果與AND指令的編譯結(jié)果相比只是最后一條指令改為先將數(shù)據(jù)取反再和進位標(biāo)志C進行邏輯與運算。編譯結(jié)果如表4-5。表4-5“AND-NOT”指令的編譯PLC指令相應(yīng)的匯編指令A(yù)ND-NOTXXANLC,/YYHAND-NOTTIMXXAND-NOTCNTXXMOVA,YYHANLC,/ACC.6(4)“OR”和“OR-NOT”指令的編譯OR指令的編譯分為兩種情況,一種是引用軟硬繼電器的常開觸點,觸點編號XX為十進制數(shù),取值范圍為0~119,所占的資源可以96個內(nèi)部軟繼電器,和16個輸入端口和8個輸出端口。即可用20H~2BH、2CH、2DH、2EH這些字節(jié)的RAM地址。OR指令表示在梯形圖中與前一條指令所指的觸點相并聯(lián)的常開觸點,只有兩者都為0時才會輸出0。在硬件上表示為接在相應(yīng)編號的輸出口上的常開按鍵。這種結(jié)果在匯編語言中可用ORL指令來完成。ORL指令是邏輯“或”指令,功能是:兩個操作數(shù)進行邏輯“或”運算,并將結(jié)果存入直接尋址的內(nèi)RAM單元。YY是XX化為十六進制數(shù)的結(jié)果,也是RAM中的位地址。一種是引用定時器或計數(shù)器的輸出常開觸點,ORTIM或ORCNT指令是指,相應(yīng)編號的定時器/計數(shù)器的輸出常開觸點與前一條PLC指令所指的觸點是并聯(lián)關(guān)系。所以需要將對應(yīng)RAM地址中的相應(yīng)高低字節(jié)中的數(shù)據(jù)與進位標(biāo)志C進行邏輯或,并將結(jié)果存入C中。指令的編譯結(jié)果如表4-6。表4-6“OR”指令的編譯PLC指令相應(yīng)的匯編指令ORXXORLC,YYHORTIMXX或ORCNTXXMOVA,YYHORLC,ACC.6“OR-NOT”指令的編譯結(jié)果與AND指令相反。因為OR-NOT指令所代表的是常閉觸點,與常開觸點的執(zhí)行結(jié)果是相反的。所以“OR-NOT”指令的編譯結(jié)果與OR指令的編譯結(jié)果相比只是最后一條指令改為先將數(shù)據(jù)取反再和進位標(biāo)志C進行邏輯與運算。指令的編譯結(jié)果如表4-7。表4-7“OR-NOT”指令的編譯PLC指令相應(yīng)的匯編指令OR-NOTXXORLC,/YYHOR-NOTTIMXX或OR-NOTCNTXXMOVA,YYHORLC,/ACC.6計數(shù)器指令“CNT”的編譯本次我們設(shè)計了一個二進制減計數(shù)器(CNT)。計數(shù)器有兩個輸入端,標(biāo)有CP的輸入端為計數(shù)端,標(biāo)有RST的輸入端為復(fù)位。兩個輸入端分別和兩個常開觸點(X1,X2)串聯(lián)。當(dāng)按下X1,CP端輸入一個正脈沖信號,計數(shù)器會從其原值中減1.如果計數(shù)器的值被減到0時,計數(shù)器輸出端動作(相當(dāng)于繼電器吸合),計數(shù)器常開觸點閉合。任何時刻一旦按下X2,RST端輸入一個正脈沖信號,計數(shù)器的常開觸點恢復(fù)為斷開狀態(tài),計數(shù)值恢復(fù)為初值。該計數(shù)器占用2個字節(jié),內(nèi)存地址從30H~31H,計數(shù)范圍0~9999。高字節(jié)的最高兩位為狀態(tài)位,其中最高位表示輸入狀態(tài),CP得電時最高位為0,CP失電時最高位為1。次高位表示輸出狀態(tài),當(dāng)計數(shù)器初值減到0時,次高位置1,否則次高位寫0。計數(shù)器的RST端得到一個正脈沖信號時,次高位恢復(fù)為0,最高位恢復(fù)為1,計數(shù)器的值恢復(fù)為初始值。CNT程序編譯流程圖如下:圖4-4CNT程序編譯流程圖此圖可以看出這段程序有4次判斷轉(zhuǎn)移。第一次判斷中,查看進位標(biāo)志C的值,它實際上表示的是RST輸入端狀態(tài)。當(dāng)C=1時,表示RST端得電,這是計數(shù)器應(yīng)復(fù)位使其值恢復(fù)為初始值,并使最高兩位恢復(fù)為10.若RST=0,即RST端不得電,則使進位標(biāo)志C記錄CP輸入端狀態(tài)。C=0表示CP端不得電,C=1表示CP端得電,然后開始第2個條件判斷。若計數(shù)值為0,表明計數(shù)已經(jīng)減到0,置計數(shù)器的次高位為1。若計數(shù)值不為0,繼續(xù)計數(shù)。這時要判斷CP輸入端電平狀態(tài),若C不為0表明CP輸入端為得電狀態(tài),應(yīng)對計數(shù)器最高位寫0。若C為0,表明CP端輸入狀態(tài)為失電狀態(tài),這時要進一步判斷數(shù)據(jù)的最高位。最高位為1表示主程序循環(huán)CP端本來就是失電狀態(tài),本次仍然失電,計數(shù)值不變。若最高位為0,表示上一次主程序循環(huán)執(zhí)行到這里時計數(shù)端是得電。這種情況表明,計數(shù)器CP端的狀態(tài)由上次主循環(huán)的得電變?yōu)楸敬窝h(huán)的失電。這正是CP端接收到的計數(shù)正脈沖的下降沿。計數(shù)器值在這種情況下進行減1,最高位置1。計數(shù)器程序見附件5。(6)二進制運算指令的編譯ADB、SBB、MLB、DVB進行運算時會占用內(nèi)存單元。但由于80C52的低128單元的內(nèi)存已經(jīng)被完全分配,所以我們只能用高128單元的內(nèi)存。80C52共有21個特殊功能寄存器,他們離散的分布在80H~FFH的高128單元區(qū)域,并未完全占滿,我們可以通過間接尋址的方式對空余的內(nèi)存單元進行訪問。編譯結(jié)果如下:表4-8“@ADB”和“@SBB”的編譯PLC指令相應(yīng)的匯編指令A(yù)DBYYH,XX(ABBYYH,XX)JCL1MOVR0,#87HMOVA,@R0MOVC,ACC.7JNCL2MOVR1,#85HMOVA,@R1CLRCADDCA,#XX(SUBBYYH,XX)MOV@R1,AMOVR0,#87HMOVA,@R0CLRACC.7MOV@R0,ASJMPL2L1:MOVR0,#87HMOVA,@R0SETBACC.7MOV@R0,ASJMPL2L2:NOP判斷本次輸入端狀態(tài),如果為1,保存到87H的bit7中,如果為0,繼續(xù)判斷上一次輸入端狀態(tài)。如果為1,則為下降沿,進行帶進位二進制加減運算并且把輸入狀態(tài)保存到87H的bit7中,如果為0結(jié)束。(7)“@MOV”的編譯判斷本次輸入端的狀態(tài),如果為1,本次狀態(tài)保存到87H的bit6中,如果為0,繼續(xù)判斷上一次的輸入端狀態(tài)。如果上一次輸入端狀態(tài)為1,則為下降沿,傳送立即數(shù),并且把當(dāng)前狀態(tài)保存到bit6中,若果為0結(jié)束。指令編譯如下:表4-9微分傳送指令“@MOV”的編譯PLC指令相應(yīng)的匯編指令@MOVYYH,XXJCK1MOVR0,#87HMOVA,@R0MOVC,ACC.6JNCK2MOVR1,#YYHMOVA,@R1CLRCMOVA,#XXMOV@R1,AMOVR0,#87HMOVA,@R0CLRACC.6MOV@R0,ASJMPK2K1:MOVR0,#87HMOVA,@R0SETBACC.6MOV@R0,ASJMPK2K2:NOP“LD+<、LD+>=”的編譯表4-10“LD+<、LD+>=”的編譯PLC指令相應(yīng)的匯編指令LD+<YYH,XXMOVR0,#YYHMOVA,@R0CJNEA,#XX,D1D1:NOPLD+>=YYH,XXMOVR0,#YYHMOVA,@R0CJNEA,#XX,D2;D2:CPLC“AND+<、AND>=”的編譯表4-10“AND+<、AND+>=”的編譯PLC指令相應(yīng)的匯編指令A(yù)ND+<YYH,XXJNCD3MOVR0,#YYHMOVA,@R0CJNEA,#XX,D3D3:NOPAND+>=YYH,XXJNCD4MOVR0,#YYHMOVA,@R0CJNEA,#XX,D5;D5:CPLCD4:NOP數(shù)值比較邏輯或指令“OR+<、OR>=”的編譯表4-10“OR+<、OR+>=”的編譯PLC指令相應(yīng)的匯編指令OR+<YYH,XXJCD6MOVR0,#YYHMOVA,@R0CJNEA,#XX,D6D6:NOPOR+>=YYH,XXJCD7MOVR0,#YYHMOVA,@R0CJNEA,#XX,D8;D8:CPLCD7:NOP5基于Proteus的軟件仿真5.1仿真原理完成了軟硬件的設(shè)計后,我們就可以根據(jù)控制要求,編寫PLC指令程序,使用Python編好的轉(zhuǎn)換程序轉(zhuǎn)換為匯編語言,并用Proteus進行仿真實驗。Proteus是世界上著名單片機電路仿真軟件,它能模擬單片機及外圍器件,極大的方便了單片機應(yīng)用開發(fā)領(lǐng)域的專員人員,以及教學(xué)領(lǐng)域的運用[18]。5.2仿真實驗根據(jù)設(shè)計結(jié)果,這個簡單的PLC系統(tǒng)已經(jīng)具有開關(guān)量的邏輯控制功能以及對模擬量進行輸入輸出和簡單的處理功能。為了驗證設(shè)計的準(zhǔn)確性,我們做了幾個簡單例子,在Proteus上模擬仿真。5.2.1計數(shù)器仿真測試本計數(shù)器我們使用0號計數(shù)器,L04作為輸入端,105為復(fù)位端,計數(shù)3下輸100線圈得電。梯形圖和指令表如下:LD104;計數(shù)端(CP)LD105;復(fù)位端(RST)CNT0#3;設(shè)定計數(shù)器計數(shù)3次LDCNT0;計數(shù)器常開觸點OUT98;輸出線圈END;圖5-1計數(shù)器實例將PLC源程序?qū)懭朕D(zhuǎn)換程序中可得到仿真結(jié)果。104(P3.0)按鍵按三后下,100號線圈(P3.0)得電。如果按下105(P3.1)鍵計數(shù)器復(fù)位。5.2.2模擬量仿真測試模擬量的輸入輸出以及相關(guān)指令的編譯是整個設(shè)計中最難實現(xiàn)的部分。不僅設(shè)計涉及的知識面更廣,而且相關(guān)的資料介紹也都大多是介紹整個模擬量模塊的使用,很少涉及具體的設(shè)計方法及指令運用。因此只做了簡單的算術(shù)運算,比較指令。下面我們通過兩個例子來具體驗證。(1)電機啟停及加減速我們設(shè)計了一個電機轉(zhuǎn)速控制列子其中104為啟動按鈕,105停止按鈕,106、107為加減速按鈕。其中85H為數(shù)模轉(zhuǎn)換讀取數(shù)據(jù)的地址,每個掃描周期LTC1451都會從85H的內(nèi)存單元中讀取數(shù)據(jù),轉(zhuǎn)換輸出。將PLC源程序?qū)懭朕D(zhuǎn)換程序中可得到仿真結(jié)果。按下104啟動,按下107加速,按下108減速。梯形圖和指令表如下:LD104;@MOV85H,#128;賦初值,啟動LD105@MOV85H,#0;賦0,停止LD107;加速@ADB85H,#32LD108;減速@ABB85,#32如圖5-2電機加減速END(2)中央空調(diào)溫度控制在這個設(shè)計中,首先通過溫度傳感器檢測周圍溫度然后轉(zhuǎn)化為電壓,輸出給TLC549模數(shù)轉(zhuǎn)換模塊。我們設(shè)定當(dāng)溫度檢測傳感器的溫度檢測范圍是0~50℃,輸出給TLC549的電壓為范圍為0~5V。當(dāng)溫度低于15℃,時啟動制熱功能,當(dāng)溫度高于35℃,啟動制冷功能。所以對應(yīng)的溫度值分別為1.5V、3.5V。轉(zhuǎn)換后對應(yīng)的數(shù)字量約為76、179。其中84H單元為模數(shù)轉(zhuǎn)換后的數(shù)字量輸入地址,每個掃描周期TLC549都會輸出數(shù)據(jù)到85H內(nèi)存單元中。PLC源程序?qū)懭朕D(zhuǎn)換程序中可得到仿真結(jié)果。梯形圖和指令表如下:LD104;總開關(guān)OR0AND-NOT105OUT0LD0LD+<84H,76;檢測溫度是否小于15℃OUT98;制熱如圖5-3中央空調(diào)控制LD0LD+>=84H,179;OUT99;檢測溫度是否大于35℃END6總結(jié)本課題主要通過對單片機與PLC的對比研究,利用PLC編程簡單易學(xué)及單片機性價比高的特點,提出利用80C52單片機設(shè)計了一個簡單的PLC系統(tǒng)。該PLC內(nèi)部有96個軟繼電器以及32個計數(shù)器,有16位獨立的輸入,8位獨立的輸出,具有基本的邏輯控制控制功能、計數(shù)功能及對模擬量的簡單處理功能。最終通過Proteus的仿真驗證,基本實現(xiàn)了設(shè)計的目標(biāo)。在設(shè)計的過程中基本邏輯控制功能的實現(xiàn)相對來說是比較簡單直觀的,使用起來也方便,但對于模擬量的處理卻比想象中復(fù)雜,而且相關(guān)資料較少,因此只實現(xiàn)了簡單的算數(shù)及比較功能。此外,由于時間有限,進行測試及仿真的例子較少,不代表系統(tǒng)可應(yīng)用于所有情況下,系統(tǒng)的可靠性需要進一步的仿真與實驗。參考文獻[1]廖艷娥,毛哲.培養(yǎng)學(xué)生創(chuàng)新能力的PLC實驗教學(xué)內(nèi)容改革[J].中國電力教育,2004[2]姜琳.基于單片機的PLC設(shè)計與實現(xiàn)[D].南京:東南大學(xué),2008[3]王建明,劉麗君.基于AT89C55單片機的PLC研究[J].中文核心期刊,2007,23(1-2)[4]李庭貴基.于TLC549A/D轉(zhuǎn)換器與AT89S52單片機的數(shù)字電壓表設(shè)計[J]自動化技術(shù)與應(yīng)用.2012[5]LinearTechnologyInc.LTC1451/LTC1452/LTC145312-bitrail-to-railmicropowerDACsinSO-8[EB/OL].2011[6]趙小娟.淺析單片機仿真PLC的原理[J].信息科技,2010[7]葛守峰,杜鑫,余勝利.PLC模擬量控制的應(yīng)用[J].平頂山工學(xué)院報,2007[8]胡健主編.單片機原理及接口技術(shù)[M].北京:機械工業(yè)出版社,2004[9]蔡向東.單片機軟件模擬SPI接口的解決方案[J].自動化技術(shù)與應(yīng)用.2012[10]孫明江.用MCS—51單片機實現(xiàn)PLC功能的軟硬件設(shè)計[J].上海電力學(xué)院報,1994,04:49-54[11]金永賢.80C31單片機應(yīng)用系統(tǒng)的低功耗設(shè)計[J].華東交通大學(xué)報,1998,03[12]舒暢,黎洪生.使用Python實現(xiàn)基于Web的水資源監(jiān)測系統(tǒng)[J].武漢理工大學(xué)學(xué)報,2006,05:38[13]李舫等編.自裝可編程控制器[M].西安:西安交通大學(xué)出版社,1999[14]朱清慧,張鳳蕊.Proteus教程—電子線路設(shè)計、制版與仿真[D].清華大學(xué)出版社,2008,9[15]陳潔.現(xiàn)代PLC控制技術(shù)與發(fā)展[J].精密制造與自動化,2004(4).[16]李曉龍,基于MCS-51單片機的PLC仿真器[J].合肥工業(yè)大學(xué)報,2002,04:637-640[17]葛守峰,杜鑫,余勝利.PLC模擬量空置的應(yīng)用[J].平頂山工學(xué)院報,2007[18]張梅菊.基于PLC工業(yè)控制試驗系統(tǒng)研究[J].南京理工大學(xué),2012致謝附錄附件1:(SPI串行輸入輸出程序)MCU串行輸入子程序:CLRP1.2;選擇從機SETBP1.1;使P1.1(時鐘)輸出為1MOVR1,#08H;置循環(huán)次數(shù)SPIIN1:CLRP1.1;使P1.1(時鐘)輸出為0NOP;延時NOPMOVC,P1.3;下降沿輸出RLCA;把C存入到累加器中SETBP1.1;使P1.0(時鐘)輸出為1DJNZR1,SPIIN1;判斷是否循環(huán)8次(8位數(shù)據(jù))MOVR0,A;8位數(shù)據(jù)送R0RETMCU串行輸出子程序:SETBP1.1;使P1.1(時鐘)輸出為1CLRP1.2;選擇從機MOVR1,#08H;置循環(huán)次數(shù)MOVA,R0;8位數(shù)據(jù)送累加器ACCSPIOUT1:CLRP1.1;使P1.1(時鐘)輸出為0NOP;延時NOPRLCA;左移至累加器ACC最高位至CMOVP1.0,C;進位C送從機輸入SPISI線上SETBP1.1;使P1.1(時鐘)輸出為1DJNZR1,SPIOUT1;判是否循環(huán)8次RET附件2(模擬量輸入輸出程序);模數(shù)轉(zhuǎn)換,結(jié)果保存到84H中TLC549_ADC:CLRACLRCLKCLRCS;選中TLC549MOVR6,#8TLCAD_L1:NOPNOPNOPSETBCLKNOPNOPNOPMOVC,DAT;1位數(shù)據(jù)輸入RLCACLRCLK;DAT0;為讀出下一位數(shù)據(jù)作準(zhǔn)備DJNZR6,TLCAD_L1MOVR1,#84HMOV@R1,ASETBCS;禁能TLC549再次啟動AD轉(zhuǎn)換SETBCLK;數(shù)模轉(zhuǎn)換,從85H中讀取數(shù)據(jù)LTC1451_DAC:MOVR1,#85HMOVA,@R1MOVR4,#0MOVR5,AMOVR0,#04HMOVA,R5SWAPAXCHDA,@R0;將8位數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的12位數(shù)據(jù)MOVR5,ACLRAMOVR6,#4;MOVA,R4;SWAPA;CLRCS_DA;SETBCLK;TLCDA_L1:RLCAMOVDIN,C;CLRCLK;NOPNOPNOPNOPSETBCLK;SCK_POSTDJNZR6,TLCDA_L1;高
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級口算題集100道20以內(nèi)
- 2025陜西省建筑安全員《C證》考試題庫及答案
- 2025年山東省建筑安全員-A證考試題庫附答案
- 勞動合同外加培養(yǎng)合同范本
- 廠區(qū)物業(yè)托管合同范本
- 個人之間聘用合同范本
- 別墅小院托管合同范本
- 2025年貴州省安全員-A證考試題庫及答案
- 公司租用場地合同范本
- 修訂合同范本必要性
- PySide學(xué)習(xí)教程
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter1 Introduction
- 人教三年級數(shù)學(xué)下冊表格式全冊
- 事業(yè)單位綜合基礎(chǔ)知識考試題庫 綜合基礎(chǔ)知識考試題庫.doc
- 優(yōu)秀教研組評比制度及實施細則
- 譯林初中英語教材目錄
- 物業(yè)交付后工程維修工作機制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- JJF 1752-2019全自動封閉型發(fā)光免疫分析儀校準(zhǔn)規(guī)范(高清版)
- GB 1886.300-2018 食品安全國家標(biāo)準(zhǔn) 食品添加劑 離子交換樹脂(高清版)
- 食品經(jīng)營單位經(jīng)營場所和設(shè)備布局、操作流程示意圖模板
評論
0/150
提交評論