freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

plc單片機嵌入式系統(tǒng)畢業(yè)論文(參考版)

2025-06-22 14:28本頁面
  

【正文】 在對PLC的體系結(jié)構(gòu)、運行原理以及指令的解釋執(zhí)行方法的研究基礎(chǔ)上,參閱了大量參考文獻,開發(fā)了基于單片機的小型通用控制器,能模擬部分PLC的功能。最后總結(jié)了本系統(tǒng)下位機軟件實現(xiàn)方案的特色。本章首先介紹了嵌入式實時操作系統(tǒng)RTX51 TINY的原理、開發(fā)方法等等,在此基礎(chǔ)上提出了下位機軟件的總體結(jié)構(gòu),并進行了任務(wù)的劃分。二者結(jié)合的方案簡單可靠,使用戶程序不需要復(fù)雜的編譯過程即可在下位機執(zhí)行。采用程序指針和函數(shù)指針數(shù)組來實現(xiàn)程序的解釋執(zhí)行采用程序指針記錄用戶程序的執(zhí)行進度,保證用戶程序順序執(zhí)行。這種方案有如下好處:(1)、系統(tǒng)程序存儲在程序ROM中,一經(jīng)書寫即不用更改。這樣就實現(xiàn)了程序的跳轉(zhuǎn)。然后將當前程序指針的值存入該操作數(shù)對應(yīng)的全局變量中。本系統(tǒng)所實現(xiàn)的PLC指令中有兩條跳轉(zhuǎn)指令:JMP(跳到定義的標號)和LBL(定義一個跳轉(zhuǎn)的標號),在下位機上也可以利用這個指針來實現(xiàn)。在讀取用戶程序時用一個程序指針usr_code_ptr來記錄當前系統(tǒng)掃描用戶程序所到達的位置。判斷計數(shù)器當前值是否等于預(yù)置值,如果相等則計數(shù)器元件狀態(tài)置ON。將輸入值堆棧的棧頂元素彈出(該元素狀態(tài)為計數(shù)器驅(qū)動元件的狀態(tài)),判斷該元素的狀態(tài)是否為ON,如果是再判斷該元件的變量的上一個周期的狀態(tài)是否為OFF,如果是,則計數(shù)器當前值加1。而計數(shù)值的當前值則是采用固定的變量來表示的。計數(shù)器指令的格式為:CNT C0 K100若驅(qū)動計數(shù)器的元件狀態(tài)產(chǎn)生了由“0”到“1”的跳變,若當前計數(shù)器的計數(shù)值等于計數(shù)器預(yù)置值時,計數(shù)操作數(shù)C0表示計數(shù)器的輸出元件,其狀態(tài)表示計數(shù)器的輸出狀態(tài)。如果驅(qū)動元件狀態(tài)為0,定時器停止計時。在解釋程序中,當掃描到定時器指令TON時,解釋程序完成如下操作:根據(jù)第一個操作數(shù)可以確定定時器編號以及表示該定時器的變量存儲地址。操作數(shù)E100用來表示當前定時器的定時常數(shù),在系統(tǒng)中,分別采用“E”、“F”、“G”來分別代表時間基準1ms、10ms、l00ms。達到設(shè)定值后,當前值仍然繼續(xù)增大,直到最大值32767。接通延時定時器(TON)的使能輸入端(IN)的輸入電路接通時開始定時。下面以接通延時定時器(TON)為例介紹定時器指令的具體實現(xiàn)方法,其它定時器指令都可用類似的方法實現(xiàn),在此不詳述。 定時中斷服務(wù)子程序設(shè)計流程如圖55所示。首先要實現(xiàn)一個實時時鐘,由于嵌入式實時操作系統(tǒng)已經(jīng)占用了定時器/計數(shù)器0,我們可以采用定時器/計數(shù)器1產(chǎn)生10ms的中斷。i++)。for(i=0??詹僮髦噶睿∟OP N)不影響程序的執(zhí)行,操作數(shù)N=0~255。執(zhí)行立即置位(Set Immediate,SI)或立即復(fù)位(Reset Immediate,RI)指令時,從指定的位地址開始的N個連續(xù)的位地址都被置位或復(fù)位,N=1~128。S(Set)是置位指令,R(Reset)是復(fù)位指令。輸出指令(=)與線圈相對應(yīng),驅(qū)動線圈的觸點電路接通時,線圈流過“能流”,指定位對應(yīng)的映像寄存器為1,反之則為0。在C51實現(xiàn)上,當CPU掃描到EU或ED指令時,解釋程序就比較當前位元件與其對應(yīng)的存儲變量。位元件必須保存上一個掃描周期的狀態(tài)才能實現(xiàn)跳變觸點指令功能,所以為每一個位元件都分配一個存儲變量,該存儲變量在系統(tǒng)初始化時全部置0。正跳變觸點檢測到一次正跳變(觸點的輸入信號由0變?yōu)?)時,或負跳變觸點檢測到一次負跳變(觸點的輸入信號由1變?yōu)?)時,觸點接通一個掃描周期。本系統(tǒng)包含的立即觸點指令有6個,LDI、AI、OI分別用來表示開始、串聯(lián)和并聯(lián)的常開觸點立即觸點,LDNI、ANI、ONI分別用來表示開始、串聯(lián)和并聯(lián)的常閉觸點立即觸點。當CPU掃描到LPS指令時,解釋程序復(fù)制堆棧內(nèi)第n層的值到棧頂,堆棧WORK_STACK中原來的數(shù)據(jù)依次向下一層推移,棧底值被推出丟失。當CPU掃描到LPS指令時,解釋程序?qū)⒐ぷ鞫褩ORK_STACK右移一位,移出的位到棧頂status,原status值丟失。當CPU掃描到LPP指令時,解釋程序?qū)⒐ぷ鞫褩ORK_STACK最右端的一位復(fù)制到status,WORK_STACK中的內(nèi)容不變,但是原status值丟失。當CPU掃描到LPS指令時,解釋程序復(fù)制棧頂status內(nèi)容,并將其壓入堆棧WORK_STACK的最右端,棧中原來的數(shù)據(jù)依次向下層推移,棧底值被推出丟失。當CPU掃描到ALD指令時,解釋程序?qū)⒐ぷ鞫褩ORK_STACK右移移位模擬堆棧的出棧,將移出的一位與status位進行邏輯與操作,結(jié)果保存在status中。當CPU掃描到OLD指令時,解釋程序?qū)⒐ぷ鞫褩ORK_STACK右移移位模擬堆棧的出棧,將移出的一位與status位進行邏輯或操作,結(jié)果保存在status中。需要特別注意的是,由于我們提供的工作堆棧有9級,LD和(或)LDN指令在同一網(wǎng)絡(luò)連續(xù)出現(xiàn)超過8次時,再執(zhí)行LD或LDN指令,將丟失數(shù)據(jù)。執(zhí)行O指令時,將指令指定的位地址中的二進制數(shù)據(jù)和棧頂status中的二進制數(shù)據(jù)相“或”,結(jié)果存入棧頂status。 當CPU掃描到LD指令時,程序首先判斷其帶單操作數(shù),于是先讀取下一個存儲單元中的操作數(shù),即位元件,通過元件的編碼來計算位元件在存儲器中的字節(jié)地址,將指令指定的位地址中的二進制數(shù)據(jù)裝載入棧頂。觸點指令中變量的數(shù)據(jù)類型為BOOL型。常開觸點對應(yīng)的存儲器地址位為1狀態(tài)時,該觸點閉合,在PLC語句表中,分別用LD(Load,裝載)、A(And,與)和O(Or,或)指令來表示開始、串聯(lián)和并聯(lián)的常開觸點。以上是解釋PLC指令的總體上的基本原理,可用圖53來概括。為了解釋PLC指令,下位機PLC指令解釋任務(wù)中必須創(chuàng)建一個操作數(shù)堆棧,也設(shè)計為9位:使用一個位變量status來做棧頂,保存當前運算結(jié)果。真正的PLC在執(zhí)行指令的過程中,堆棧是非常關(guān)鍵、不可缺少的一個結(jié)構(gòu),它通常有9位:棧頂用來存儲邏輯運算的結(jié)果,下面的8位用來存儲中間運算結(jié)果。而ADuC841的程序ROM有62KB,足夠系統(tǒng)使用。在讀取到所需數(shù)量的操作數(shù)之后,調(diào)用相應(yīng)的C函數(shù),并將操作數(shù)作為參數(shù)按順序傳遞該函數(shù)。第一個字節(jié)一定是操作碼,首先判斷其類型,根據(jù)操作數(shù)的不同執(zhí)行選擇下一步動作:若為無操作數(shù)指令,則直接調(diào)用相應(yīng)的C函數(shù)或代碼段;若為有操作數(shù)指令,usr_code_ptr指針后移,繼續(xù)讀操作碼所要求的數(shù)量的操作數(shù),每讀一個字節(jié)就將指針值加1。 PLC指令解釋原理 本系統(tǒng)的下位機對PLC指令進行解釋的原理是:首先建立一個用戶程序指針usr_code_ptr,初始化為指向用戶程序存儲區(qū)的起始地址,用以記錄當前掃描用戶程序所到的位置。下位機在得到該PLC指令表程序后,為了實現(xiàn)PLC實際控制功能,應(yīng)該對指令表程序進行解釋執(zhí)行。 os_wait(K_TMO,sec,0)。 //U1A為與鍵盤相連的端口 //若切換到停止模式,則給串口通信任務(wù)發(fā)送信號 if(KeyValue==STOP)isr_send_signal(UART)。因此只需要查詢該端口的各位中哪些輸入為0,即可判斷是哪個鍵被按下。代碼如下: //讀外部RAM MOV DPP,91H MOV DPTR,0F000HMOVX A,DPTR //寫外部RAM MOV DPP,19H MOV DPTR,0f000H MOV A,23HMOVXDPTR,A 匯編語言讀寫外部RAM不受地址范圍限制,且效率比較高。//讀串口接收緩沖區(qū)中的數(shù)據(jù) } isr_send_signal(SAVE_USR_CODE)。 //等待信號 if(RI){ RI=0。串口通信任務(wù)等待觸發(fā)信號,若SIGNAL被置位,讀串口中的數(shù)據(jù),然后發(fā)信號給任務(wù)5,觸發(fā)存儲用戶程序任務(wù)。看門狗定時器的控制寄存器WTCON如圖52所示。清除單片機的特殊寄存器WDCON中的WDE位可以禁止看門狗定時器功能,而對該位置1則可以使用看門狗定時器。LCD操作界面上要顯示選擇菜單,且根據(jù)鍵盤的動作更新菜單的顯示:當用戶按下“向上”/“向下”/“向左”/“向右”鍵時,LCD顯示的菜單也作相應(yīng)移動。在本設(shè)計中,要求LCD實現(xiàn)如下顯示任務(wù):在控制器剛開始時,LCD顯示控制器的模式選擇界面,等待用戶選擇進入停止模式進行用戶程序下載或者進入運行模式執(zhí)行用戶程序。圖形顯示方式可以顯示任何形狀的圖形,包括字符。T6963C的狀態(tài)字如下所示:STA7STA6STA5STA4STA3STA2STA1STA0 STA0:指令讀寫狀態(tài) 1:準備好0:忙STA1:數(shù)據(jù)讀寫狀態(tài) 1:準備好0:忙STA2:數(shù)據(jù)自動讀狀態(tài) 1:準備好0:忙STA3:數(shù)據(jù)自動寫狀態(tài) 1:準備好0:忙STA4:未用STA5:控制器運行檢測可能性 1:可能0:不能STA6:屏讀/拷貝出錯狀態(tài) 1:出錯0:正確STA7:閃爍狀態(tài)檢測 1:正常顯示0:關(guān)顯示由于狀態(tài)位作用不一樣,因此執(zhí)行不同指令必須檢測不同狀態(tài)位。 LCD顯示任務(wù)LCD的顯示由其控制器T6963C控制。因此可以將AQW0的高4位寫入DAC0H,低8位寫入DAC0L;AQW1的高4位寫入DAC1H,低8位寫入DAC1L。其它幾個通道的模擬輸入映像寄存器都可以用同樣的語句定義,但要注意在使用之前一定要通過配置ADCCON2寄存器選擇模擬量輸入通道。于是下面的宏定義語句就可以當作AIW存儲區(qū)的定義:define AIW0(((ADCDATAHamp。ADCDATAH存放轉(zhuǎn)換結(jié)果的高4位,ADCDATAL存放轉(zhuǎn)換結(jié)果的低8位。PLC的模擬量輸入存儲區(qū)(AI)和模擬量輸出存儲區(qū)(AQ)的定義就可以利用單片機內(nèi)部已有的特殊功能寄存器。可以通過以下語句引用V存儲區(qū)中的數(shù)據(jù)段,分別以字節(jié)、字和雙字為單位:[0] //以字節(jié)為單位存取V存儲區(qū)[1] //以字為單位存取V存儲區(qū)[3] //以雙字為單位存取V存儲區(qū)特殊功能寄存器特殊功能寄存器空間(Special Functions Registers)位于從地址80H開始的單片機內(nèi)部RAM中。}V。int W[32]。聯(lián)合提供了一種方式,以在單塊存儲區(qū)中管理不同類型的數(shù)據(jù),而不需要在程序中嵌入任何同機器有關(guān)的信息[33]。為了解決這個問題,可以采用C語言中的聯(lián)合來聲明V存儲區(qū)。 //定義64字節(jié)的V存儲區(qū)但是這樣聲明有一個問題,就是PLC要求V存儲區(qū)不但可以按字節(jié)存取,還可以按字和雙字存取。采用標準C語法聲明的變量默認在data區(qū)分配空間,因此只需采用一般的聲明語句即可為V存儲區(qū)分配空間。這個區(qū)域的數(shù)據(jù)段只需要指令用一個或兩個周期來訪問,是單片機內(nèi)部存取速度最快的存儲區(qū)域。PLC中需要進行位尋址的存儲區(qū)有I、Q、M,因此這三個存儲區(qū)中的存儲單元都要用同樣的方法聲明。以輸入過程映像寄存器為例,其聲明語句及注釋如下://bdata char I[3]。C51編譯器還允許以字節(jié)為單位的對象放入單片機內(nèi)可位尋址區(qū)中,這樣對象就能以位為單位進行尋址。除了通常的C數(shù)據(jù)類型外,C51編譯器支持bit(位)數(shù)據(jù)類型。根據(jù)單片機內(nèi)部存儲方式的不同,可以將這些存儲區(qū)的定義方式分為3種:可位尋址區(qū)、data區(qū)和特殊功能寄存器。本系統(tǒng)在硬件資源上已經(jīng)為實現(xiàn)這些存儲區(qū)提供了條件,但是要最終賦予這些區(qū)域各自的功能還是要用軟件來實現(xiàn),對單片機的內(nèi)存進行分配,使之與PLC的各存儲區(qū)相對應(yīng)。 PLC功能存儲區(qū)的映射及I/O讀寫重點介紹的是與PLC功能相對應(yīng)的各存儲區(qū)的初始化。移植它很簡單,就是配置一下它帶的配置文件,然后和寫好的程序一起編譯連接,連接的時候加一個rtxtny參數(shù),表明連接的時候,要把RTX51 Tiny的庫文件連接上,也就等于是程序和操作系統(tǒng)編譯在一起了。為了具體指明任務(wù)的標志和優(yōu)先級,會與標準C存在一點差別。它是一個強大的工具,可以在單個CPU上管理幾個作業(yè)(任務(wù))。本設(shè)計中采用的實時操作系統(tǒng)是RTX51 TINY。嵌入式操作系統(tǒng)的內(nèi)核雖然都不大,一般都具有實時處理和多任務(wù)調(diào)度的功能,有很多嵌入式操作系統(tǒng)也稱為實時嵌入式操作系統(tǒng)RTOS。 TINY的移植嵌入式系統(tǒng)處理的對象往往比較多,也比較復(fù)雜。引入嵌入式實時操作系統(tǒng)后,在多任務(wù)機制下,CPU的運行時間被劃分成許多小的時間片,由某種調(diào)度算法按不同的優(yōu)先級別分配給不同的任務(wù)。若輸出映像寄存器狀態(tài)與上一個掃描周期相比有變化,則發(fā)信號給任務(wù)1,觸發(fā)LCD顯示更新任務(wù)。任務(wù)9:寫輸出端口任務(wù)。等待觸發(fā)信號,若SIGNAL被置位,分析當前讀取的指令字節(jié),執(zhí)行相對應(yīng)的C代碼。發(fā)信號給任務(wù)8,觸發(fā)指令解釋任務(wù)。任務(wù)7:讀用戶程序任務(wù)。發(fā)信號給任務(wù)7,觸發(fā)讀用戶程序任務(wù)。任務(wù)6:讀輸入端口任務(wù)。任務(wù)5:存儲用戶程序任務(wù)。通過串口接收上位機PLC指令。每50ms檢查一次鍵盤,根據(jù)返回的鍵值不同,發(fā)信號給任務(wù)4(停止模式),或者發(fā)信號給任務(wù)6(運行模式)。每1秒鐘喂狗一次。等待觸發(fā)信號,若SINGAL被置位,則先判斷當前工作模式或者各I/O端口狀態(tài)是否有改變,有則刷新對應(yīng)的顯示,否則不刷新顯示。任務(wù)1:LCD顯示更新任務(wù)。包括MCU本身的初始化、A/D和D/A的初始化、擴展芯片82C55A的初始化、串行口的初始化、LCD控制器的初始化、PLC功能存儲區(qū)的初始化
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1