基于單片機(jī)的可編程邏輯控制設(shè)計(jì)_第1頁
基于單片機(jī)的可編程邏輯控制設(shè)計(jì)_第2頁
基于單片機(jī)的可編程邏輯控制設(shè)計(jì)_第3頁
基于單片機(jī)的可編程邏輯控制設(shè)計(jì)_第4頁
基于單片機(jī)的可編程邏輯控制設(shè)計(jì)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

-.z1、需求分析21.1工程概述21.2本設(shè)計(jì)的需求與意義31.3本設(shè)計(jì)的前景和特色42本實(shí)訓(xùn)的概要設(shè)計(jì)52.1硬件電路52.2軟件的使用與程序的編寫7上位機(jī)對梯形圖的錄入7通信模塊程序的編寫8下位機(jī)梯形圖解釋器程序的編寫12整體系統(tǒng)框架的搭建,以及LCD顯示與按鍵程序的編寫163、詳細(xì)設(shè)計(jì)173.1程序完成對uC/OS-II操作系統(tǒng)的移植18的編寫19的編寫19203.2在系統(tǒng)中創(chuàng)立各模塊并在主函數(shù)中添加各摸塊任務(wù)。213.3在系統(tǒng)中編寫key.c和display.c文件程序224、調(diào)試過程285、實(shí)訓(xùn)總結(jié)及感想305.1本次實(shí)訓(xùn)體會(huì):305.2實(shí)訓(xùn)總結(jié)312°、LCD顯示與按鍵程序的編寫為了將單片機(jī)的運(yùn)行狀態(tài)表示出來,在系統(tǒng)中添加了key.c和display.c文件,通過調(diào)試板上的液晶屏及添加相應(yīng)的驅(qū)動(dòng)程序,當(dāng)GPIOF的按鍵被按下時(shí),在屏上對應(yīng)的顯示出相應(yīng)的狀態(tài),分為三種:運(yùn)行態(tài),停頓態(tài)和故障態(tài)。使設(shè)備的運(yùn)行態(tài)一目了然,同時(shí)也完善了工程工程的品質(zhì)。3、詳細(xì)設(shè)計(jì)作者在實(shí)訓(xùn)中承當(dāng)完成系統(tǒng)框架的搭建,并移植uC/OS-II操作系統(tǒng),以及完成對按鍵和顯示兩個(gè)模塊程序的編寫。μC/OS實(shí)時(shí)嵌入式操作系統(tǒng)的構(gòu)造硬件層硬件層硬件驅(qū)動(dòng)BSP實(shí)時(shí)操作系統(tǒng)內(nèi)核RTOSFS文件系統(tǒng)、圖形界面、系統(tǒng)管理接口應(yīng)用層APP應(yīng)用層各任務(wù)調(diào)用關(guān)系及參數(shù)傳遞3.1程序完成對uC/OS-II操作系統(tǒng)的移植uC/OS-II的代碼大概分為3類,這3類分別為與處理器相關(guān)代碼、uC/OS-II的配置代碼和與處理器無關(guān)的代碼。根據(jù)不同的處理器,我們需要修改的代碼文件為OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C,而在應(yīng)用程序中使用uC/OS-II時(shí),需要用戶提供的是應(yīng)用軟件和uC/OS-II的配置局部。3.2.1OS_CPU.H的編寫OS_CPU.H包括了用*define語句定義的、與處理器相關(guān)的常數(shù)、宏以及類型,棧增長方向定義,關(guān)中斷和開中斷定義,系統(tǒng)軟中斷的定義等等。。系統(tǒng)內(nèi)核與移植過程是無關(guān)的,用戶只需要在應(yīng)用系統(tǒng)開發(fā)過程中,通過配置OCS_CFG.H文件來對內(nèi)核進(jìn)展裁剪,只使用應(yīng)用系統(tǒng)需要的功能,使系統(tǒng)最小最優(yōu)化。例如STM32的堆棧是從上往下遞減的,所以要將常數(shù)變量OS_STK_GROWTH定義為1,即*defineOS_STK_GROWTH13.2.2OS_CPU_C.C的編寫UC/OS中共定義了6個(gè)函數(shù)在該文件中.但是最重要的是OSTaskStkInit().其他都是對系統(tǒng)內(nèi)核的擴(kuò)展時(shí)用的.

OSTaskStkInit()是在用戶建立任務(wù)時(shí)系統(tǒng)內(nèi)部自己調(diào)用的,對用戶任務(wù)的堆棧進(jìn)展初始化.使建立好的進(jìn)入就緒態(tài)任務(wù)的堆棧與系統(tǒng)發(fā)生中斷并且將環(huán)境變量保存完畢時(shí)的棧構(gòu)造一致.這樣就可以用中斷返回指令使就緒的任務(wù)運(yùn)行起來.uC/OS-II的移植*例要求用戶編寫10個(gè)簡單的C函數(shù):OSTaskStkInit();OSTaskCreateHook();OSTaskDelHook();OSTaskSwHook();OSTaskIdleHook();OSTaskStatHook();OSTaskTickHook();OSInitHookBegin();OSInitHookEnd();OSTCBInitHook();3.2.3這局部需要對處理器的存放器進(jìn)展操作。包括四個(gè)子函數(shù):OSStartHighRdy(),OSCt*Sw(),OSIntCt*Sw(),OSTickISR().OSStartHighRdy()由多任務(wù)系統(tǒng)啟動(dòng)函數(shù)OSStart()中調(diào)用.完成的功能是:設(shè)置系統(tǒng)運(yùn)行標(biāo)志位OSRunning=TRUE;將就緒表中最高優(yōu)先級任務(wù)的棧指針Load到SP中,并強(qiáng)制中斷返回.使就緒的最高優(yōu)先級任務(wù)調(diào)整至運(yùn)行態(tài)一樣,使得整個(gè)系統(tǒng)得以運(yùn)轉(zhuǎn).

OSCt*Sw()在任務(wù)級任務(wù)切換函數(shù)中調(diào)用的.任務(wù)級切換是通過SWI或者TRAP人為制造的中斷來實(shí)現(xiàn)的.ISR的向量地址必須指向OSCt*Sw().這一中斷完成的功能:保存任務(wù)的環(huán)境變量(主要是存放器的值,通過入棧來實(shí)現(xiàn)),將當(dāng)前SP存入任務(wù)TCB中,載入就緒最高優(yōu)先級任務(wù)的SP,恢復(fù)就緒最高優(yōu)先級任務(wù)的環(huán)境變量,中斷返回.這樣就完成了任務(wù)級的切換.

OSIntCt*Sw()在退出中斷效勞函數(shù)OSIntE*it()中調(diào)用,實(shí)現(xiàn)中斷級任務(wù)切換.由于是在中斷里調(diào)用,所以處理器的存放器入棧工作已經(jīng)做完,就不用作這局部工作了.具體完成的任務(wù):調(diào)整棧指針(因?yàn)檎{(diào)用函數(shù)會(huì)使任務(wù)棧構(gòu)造與系統(tǒng)任務(wù)切換時(shí)堆棧標(biāo)準(zhǔn)構(gòu)造不一致),保存當(dāng)前任務(wù)SP,載入就緒最高優(yōu)先級任務(wù)的SP,恢復(fù)就緒最高優(yōu)先級任務(wù)的環(huán)境變量,中斷返回.這樣就完成了中斷級任務(wù)切換.

OSTickISR()系統(tǒng)時(shí)鐘節(jié)拍中斷效勞函數(shù),這是一個(gè)周期性中斷,為內(nèi)核提供時(shí)鐘節(jié)拍.頻率越高系統(tǒng)負(fù)荷越重.其周期的大小決定了內(nèi)核所能給應(yīng)用系統(tǒng)提供的最小時(shí)間間隔效勞.一般只限于ms級(跟MCU有關(guān)),對于要求更加苛刻的任務(wù)需要用戶自己建立中斷來解決.該函數(shù)具體內(nèi)容:保存存放器(如果硬件自動(dòng)完成就可以省略),調(diào)用OSIntEnter(),調(diào)用OSTimeTick(),調(diào)用OSIntE*it(),恢復(fù)存放器,中斷返回.uC/OS-II的移植實(shí)例要求用戶編寫4個(gè)簡單的匯編語言函數(shù):OSStartHighRdy();OSCt*SW();OSIntCt*Sw();OSTickISR();3.2在系統(tǒng)中創(chuàng)立各模塊并在主函數(shù)中添加各摸塊任務(wù)。主函數(shù)中依次完成:定義全局變量;聲明個(gè)任務(wù)內(nèi)函數(shù).初始化uCOS-II,此函數(shù)中建立了空閑任務(wù)和統(tǒng)計(jì)任務(wù),建立開場TaskStart任務(wù),控制權(quán)交給uC/OS-II內(nèi)核,開場運(yùn)行多任務(wù)。實(shí)現(xiàn)對STM32的初始化,并建立多個(gè)任務(wù),包括建立各任務(wù)的堆棧,以及設(shè)置優(yōu)先級。創(chuàng)立各功能任務(wù)voidTaskE*plainer(void*pdata)解釋器任務(wù)voidTask(void*pdata)通信任務(wù)voidTaskKey(void*pdata)按鍵任務(wù)voidTaskDisp(void*pdata)顯示任務(wù)在系統(tǒng)框架中添加各任務(wù)的源文件Display.c、key.c、LCD驅(qū)動(dòng)文件lcd_24.c程序框架如下列圖:3.3在系統(tǒng)中編寫key.c和display.c文件程序編程思想:在key.c文件中,按鍵按下時(shí),通過IF語句的判斷,實(shí)現(xiàn)對狀態(tài)位state的設(shè)定。流程圖如下:在display.c文件中,通過IF語句對狀態(tài)位state的判斷,在液晶屏上實(shí)現(xiàn)顯示的功能,流程圖如下:Key.c中按鍵與狀態(tài)位的設(shè)置程序:voidKeyBoardScan(void){ if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_0)==0) State.Run=1; if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_2)==0) State.Stop=1; if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_3)==0) State.Wrong=1; }通過狀態(tài)位state的設(shè)定,在顯示display中實(shí)現(xiàn)顯示功能:voidDispState(void){ if(State.Run==1) { LCD_PutString(148,200,"設(shè)備運(yùn)行",MAGENTA,GREEN), LCD_PutString(75,55,"PLC設(shè)備狀態(tài)",WHITE,BLUE), LCD_PutString(145,220,"",BLUE,BLUE),LCD_PutString(145,240,"",BLUE,BLUE), LCD_PutString(114,200,"R",MAGENTA,GREEN),LCD_PutString(114,220,"",BLUE,BLUE),LCD_PutString(114,240,"",BLUE,BLUE); State.Run=0; } if(State.Stop==1) { LCD_PutString(148,220,"設(shè)備停頓",WHITE,RED),LCD_PutString(75,55,"PLC設(shè)備狀態(tài)",WHITE,BLUE), LCD_PutString(145,200,"",BLUE,BLUE), LCD_PutString(145,240,"",BLUE,BLUE), LCD_PutString(114,220,"S",WHITE,RED),LCD_PutString(114,200,"",BLUE,BLUE),LCD_PutString(114,240,"",BLUE,BLUE); State.Stop=0; } if(State.Wrong==1) { LCD_PutString(148,240,"設(shè)備故障",WHITE,RED),LCD_PutString(75,55,"PLC設(shè)備狀態(tài)",WHITE,BLUE), LCD_PutString(145,200,"",BLUE,BLUE), LCD_PutString(145,220,"",BLUE,BLUE), LCD_PutString(114,240,"W",WHITE,RED),LCD_PutString(114,220,"",BLUE,BLUE),LCD_PutString(114,200,"",BLUE,BLUE); State.Wrong=0; } }在LCD上顯示效果如下截圖:運(yùn)行狀態(tài)停頓狀態(tài)故障狀態(tài)4、調(diào)試過程虛擬串行驅(qū)動(dòng)程序(VSPD)是一個(gè)可在計(jì)算機(jī)(Windows)下操作的程序,此驅(qū)動(dòng)程序會(huì)創(chuàng)造數(shù)個(gè)“虛擬〞的串行埠。由一般程序看來,這些虛擬的串行端口跟實(shí)體的串行端口一樣,唯一不同于傳統(tǒng)傳輸?shù)牡胤绞窃谟诔绦蛩统龅男畔⑹峭高^TCP/IP局域網(wǎng)絡(luò)送至虛擬串行端口,之后由EM100再將所收到的信息傳達(dá)至串行設(shè)備。當(dāng)串行設(shè)備要回傳信息時(shí),要先將信息傳至EM100,而后再藉由局域網(wǎng)絡(luò)將信息傳回至位于計(jì)算機(jī)端的虛擬串行驅(qū)動(dòng)程序,當(dāng)虛擬串行驅(qū)動(dòng)程序收到信息后,又會(huì)將其傳回給程序,就如同傳統(tǒng)串行線。mi*為工業(yè)控制設(shè)計(jì)的串口設(shè)備調(diào)試工具,已被許多同行使用,主要特點(diǎn):1〕、能根據(jù)設(shè)備的通訊協(xié)議,方便地生成多種冗余校驗(yàn)如Modbus,并加上完畢符,適用于大多數(shù)串口通訊的工業(yè)設(shè)備;2〕、能夠混合輸入16進(jìn)制數(shù)、10進(jìn)制數(shù)、ASCII字符,這種功能通過轉(zhuǎn)義符“\\〞實(shí)現(xiàn);3〕、支持串口1~255,支持各種虛擬串口,可以自定義任意通訊參數(shù)組合,隨時(shí)改變參數(shù)而不用關(guān)閉串口,支持不常用的波特率等;4〕、可以測出設(shè)備的響應(yīng)間隔;5〕、通訊數(shù)據(jù)可保存到RTF文件,參數(shù)設(shè)置可保存到注冊表reg文件。6〕、可切換中文/英文顯示。首先用虛擬串口虛擬出來兩個(gè)串口1和2,然后相連:然后用mi*模擬串口2:VSPD*P調(diào)試界面mi*調(diào)試界面串口的輸出5、實(shí)訓(xùn)總結(jié)及感想5.1本次實(shí)訓(xùn)體會(huì):〔1〕掌握了STM32常用模塊的編程配置,并將相關(guān)的軟硬件知識應(yīng)用到實(shí)際工程中去,從動(dòng)手實(shí)踐中實(shí)際知識。〔2〕通過實(shí)訓(xùn)既掌握關(guān)于PLC梯形圖等知識的應(yīng)用又學(xué)習(xí)了STM32在工程上的應(yīng)用,本次實(shí)訓(xùn)完成了從事工程工程工作的鍛煉?!?〕在學(xué)習(xí)uCOS的根底上,應(yīng)用模塊化對工程進(jìn)展編程,以及完成了將uCOS操作系統(tǒng)移植到STM32中去的過程?!?〕實(shí)訓(xùn)中,我們不僅有對軟件編程的學(xué)習(xí),也有我們對硬件實(shí)用電路的掌握,以及外圍電路的搭建?!?〕熟悉了將PLC的梯形圖編入單片機(jī)過程以及在實(shí)際調(diào)試中實(shí)現(xiàn)工程要求,完成實(shí)現(xiàn)對對象的控制?!?〕本實(shí)訓(xùn)重要的是初步參與掌握了完成一個(gè)工程工程的具體過程和步驟,以及面對一個(gè)工程的問題,如何分析解決困難的能力,對以后參加工作有著莫大的幫助。還掌握了平安用電的知識,學(xué)習(xí)了平安操作要領(lǐng),培養(yǎng)了嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng),培養(yǎng)了良好的工作習(xí)慣,也樹立了正確的團(tuán)隊(duì)協(xié)作意識。5.2實(shí)訓(xùn)總結(jié)本次實(shí)訓(xùn),首先要感謝指導(dǎo)教師李琦的精心指導(dǎo)幫助,在本次實(shí)訓(xùn)中,李教師針對在工程逐漸深入進(jìn)展中出現(xiàn)的種種難題都給予了專題講座,使同學(xué)們的困惑迎刃而解,使我們能夠按時(shí)完成實(shí)訓(xùn),在此讓我們向認(rèn)真負(fù)責(zé)的教師表示感謝。需求分析1.1工程概述本工程所設(shè)計(jì)的新型PLC系統(tǒng)由上下位機(jī)兩局部組成,上位機(jī)為PLC編程軟件系統(tǒng),主要負(fù)責(zé)程序的編輯,編譯和監(jiān)控;下位機(jī)為PLC運(yùn)行系統(tǒng),主要負(fù)責(zé)接收上位機(jī)編譯的程序,在硬件電路中運(yùn)行。其主要任務(wù)是開發(fā)出一個(gè)符合IEC61131-3國際標(biāo)準(zhǔn)的新型PLC系統(tǒng),在充分研究國內(nèi)外知名PLC產(chǎn)品的根底上,對PLC系統(tǒng)進(jìn)展了設(shè)計(jì)。整個(gè)系統(tǒng)下位機(jī)以STM32單片機(jī)作為核心控制芯片來開發(fā),上位機(jī)以VisualCH6.0MFC為開發(fā)工具,實(shí)現(xiàn)了一個(gè)友好、高效的編程環(huán)境。具體任務(wù)功能工作如下:1°上位機(jī)編程軟件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn):整個(gè)上位機(jī)編程軟件可以實(shí)現(xiàn)編程語言的編輯、保存、轉(zhuǎn)化、編譯,具體可分為以下幾個(gè)局部:(1)工程管理:以工程為單位,將梯形圖保存在一個(gè)文件夾下,對用戶程序進(jìn)展管理,還根據(jù)用戶的需要可以對工程進(jìn)展加密管理。(2)梯形圖的編輯:考慮到梯形圖的動(dòng)態(tài)編輯特性,實(shí)現(xiàn)梯形圖圖元的插入、刪除、復(fù)制、剪切、粘貼和屬性設(shè)置等功能。2°下位機(jī)運(yùn)行系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn):下位機(jī)以STM32單片機(jī)作為系統(tǒng)的核心控制芯片,根據(jù)PLC的根本構(gòu)造設(shè)計(jì)硬件電路。下位機(jī)控制主要實(shí)現(xiàn)系統(tǒng)的初始化設(shè)置,指令執(zhí)行,控制電路輸出功能。3°上下位機(jī)之間通訊功能的設(shè)計(jì)與實(shí)現(xiàn):按照上下位機(jī)之間約定的通訊協(xié)議,采用串口來實(shí)現(xiàn)上位機(jī)與下位機(jī)之間的通訊。通過串口通訊,上位機(jī)可以下載目標(biāo)代碼,監(jiān)控PLC程序運(yùn)行,查詢I/O的狀態(tài)。1.2本設(shè)計(jì)的需求與意義由于基于單片機(jī)的PLC本錢極低,實(shí)際應(yīng)用時(shí)可以帶來較好的經(jīng)濟(jì)效益,因而具有較強(qiáng)的實(shí)用性。當(dāng)我們設(shè)計(jì)機(jī)電一體化產(chǎn)品或從事自動(dòng)化裝置設(shè)計(jì)時(shí),有時(shí)會(huì)碰到這樣兩種需求和問題:第一種需求,機(jī)電一體化產(chǎn)品裝置或自動(dòng)化裝置中需要進(jìn)展較為復(fù)雜的梯形圖邏輯控制,并且被控對象需要用強(qiáng)電來驅(qū)動(dòng)。這時(shí),我們自然會(huì)想到采用PLC作為邏輯控制器。但在*些機(jī)電一體化產(chǎn)品或自動(dòng)化裝置的設(shè)計(jì)中,要求邏輯控制器的本錢極低。這時(shí)假設(shè)采用現(xiàn)成的PLC很難實(shí)現(xiàn)極低本錢要求。當(dāng)該機(jī)電一體化產(chǎn)品或自動(dòng)化裝置需要大大降低本錢時(shí),現(xiàn)成的PLC的價(jià)格會(huì)顯得太高。第二種需求,機(jī)電一體化產(chǎn)品或自動(dòng)化裝置中需要進(jìn)展較為復(fù)雜的梯形圖邏輯控制,但被控對象只需要用弱電來驅(qū)動(dòng)。要求邏輯控制本錢極低。這時(shí),該怎樣實(shí)現(xiàn)極低本錢的、在弱電驅(qū)動(dòng)條件下的較為復(fù)雜的梯形圖邏輯控制的需求呢?上述兩種需求的問題焦點(diǎn)都是要求設(shè)計(jì)出本錢極低,同時(shí)能完成較為復(fù)雜的梯形圖邏輯控制的邏輯控制器。我們能不能在機(jī)電一體化產(chǎn)品或自動(dòng)化裝置中的硬件設(shè)計(jì)中直接用價(jià)格極低的單片機(jī)芯片來充當(dāng)邏輯控制器,使其具備梯形圖邏輯控制功能,并且設(shè)計(jì)出適合于單片機(jī)的電路,形成一個(gè)直接用單片機(jī)芯片來取代PLC、并能完成較為復(fù)雜的梯形圖邏輯控制的系統(tǒng)呢?如果能,則它對降低機(jī)電一體化產(chǎn)品或自動(dòng)化裝置的本錢是極為有利的。這樣的方法也可以應(yīng)用到自動(dòng)化控制的生產(chǎn)線上,用來降低自動(dòng)化控制生產(chǎn)線的設(shè)備本錢。則,怎樣才能使從市場上選來的新一代的單片機(jī)芯片最終具備梯形圖邏輯控制功能呢?我們知道要具備梯形圖邏輯控制功能就必須能執(zhí)行PLC指令和程序。但是,單片機(jī)芯片只能執(zhí)行單片機(jī)指令和程序,不能直接執(zhí)行PLC指令和程序。因此,問題的關(guān)鍵就變成要研究和設(shè)計(jì)出可以將PLC指令源程序翻譯成單片機(jī)目標(biāo)程序的翻譯程序?;赟TM32的PLC設(shè)計(jì)工程是面向中小型冶金、石油、化工、建材、機(jī)械制造、電力、汽車、輕工等企業(yè),目的是降低投入的生產(chǎn)本錢,提高生產(chǎn)效率和生產(chǎn)利潤。可編程控制器的應(yīng)用情況往往表達(dá)著一個(gè)國家的工業(yè)自動(dòng)化水平,我國PLC國內(nèi)市場雖然龐大,但是95%以上的市場份額都被國外品牌占據(jù),其中大中型PLC市場主要被歐美產(chǎn)品占據(jù),小型PLC市場主要被日系品牌占據(jù),其本錢也是相當(dāng)?shù)陌嘿F,而國內(nèi)廠商的市場份額幾乎可以忽略。因此,大力開展擁有自主知識產(chǎn)權(quán)的PLC編程軟件,逐步擺脫國內(nèi)PLC市場被國外廠商和合資企業(yè)所壟斷的局面,對于推動(dòng)國內(nèi)PLC市場的開展具有深遠(yuǎn)意義。1.3本設(shè)計(jì)的前景和特色(1)首先,當(dāng)從市場上選來新一代的單片機(jī)STM32芯片作為執(zhí)行符合梯形圖邏輯控制的邏輯控制器,則從總體上來看,基于該單片機(jī)芯片的PLC編譯程序的設(shè)計(jì)就和其他PLC的編譯程序設(shè)計(jì)不同,沒有一個(gè)現(xiàn)成的編譯程序可以套用,必須做創(chuàng)造性的工作,獨(dú)立完成基于該單片機(jī)的編譯程序設(shè)計(jì)。編寫基于該單片機(jī)的PLC編譯程序,是本課題的主要工作任務(wù)之一。(2)其次,目標(biāo)程序框架構(gòu)造也不同。因?yàn)閱纹瑱C(jī)芯片不同,內(nèi)部的硬件資源也就不同,目標(biāo)指令代碼和目標(biāo)程序框架構(gòu)造也就不同。因此在編譯程序編寫前,必須根據(jù)單片機(jī)芯片編程的特點(diǎn)設(shè)定目標(biāo)程序框架構(gòu)造。有許多影響目標(biāo)程序框架構(gòu)造的因素,諸如CPU初始化、通信程序編譯、接口的初始化等。設(shè)定目標(biāo)程序框架構(gòu)造,是本課題的另一項(xiàng)主要工作任務(wù)??傊?,基于單片機(jī)STM32的PLC編譯程序設(shè)計(jì)研究是一項(xiàng)具有創(chuàng)造性的工作,需要充分吸取前人的經(jīng)歷,開拓創(chuàng)新,建立新的模型、新的構(gòu)造、新的方法。2本實(shí)訓(xùn)的概要設(shè)計(jì)2.1硬件電路件電路框圖設(shè)計(jì)如下列圖5所示:圖5硬件電路框圖設(shè)計(jì)硬件實(shí)物圖如下所示:按鍵局部:開發(fā)板上有四個(gè)普通按鍵分別連在GPIOF0-3上以及一個(gè)復(fù)位鍵,方便使用。2.2軟件的使用與程序的編寫2.2.1上位機(jī)對梯形圖的錄入上位機(jī)編程軟件在PC機(jī)上實(shí)現(xiàn),主要實(shí)現(xiàn)編程軟件選擇梯形圖和指令表作為編程語言,并將其錄入到相應(yīng)軟件中,以便下載到下位機(jī)中,對工程工程進(jìn)展相應(yīng)的控制。利用MFC創(chuàng)立用戶界面,使其具有梯形圖的錄入和修改,助記符語言的錄入和修改,并且能實(shí)現(xiàn)他們的互相轉(zhuǎn)化的功能。并且能夠?qū)崿F(xiàn)通過串口向下位機(jī)下載。處理流程:用戶首先要?jiǎng)?chuàng)立一個(gè)新的文件,選擇是通過助記符語言或者是梯形圖語言。如果是選擇梯形圖語言,在標(biāo)題欄下方就會(huì)有一些符號的選擇。當(dāng)錄入完成之后可以保存,并且能夠?qū)崿F(xiàn)兩種語言的轉(zhuǎn)換。流程圖如下:創(chuàng)立新文件創(chuàng)立新文件輸入語言選擇用戶輸入下位機(jī)PC讀取用戶輸入一級代碼二級代碼保存到電腦語言轉(zhuǎn)換梯形圖錄入:在編輯框的左邊和右邊分別有兩個(gè)電源線,在兩個(gè)電源線的中間進(jìn)展梯形圖元件的錄入,包括原件的插入、刪除、保存等操作。用戶戶在編輯區(qū)對各個(gè)梯形圖元件進(jìn)展屬性的設(shè)置和改變。用戶進(jìn)展梯形圖編輯的時(shí)候,各個(gè)梯形之間空出一行用來隔開。各個(gè)梯級主路之間空出一行用來隔開。各個(gè)梯級有ID號進(jìn)展標(biāo)識,ID號依次遞增且唯一。每個(gè)梯級包含一個(gè)梯級主路,梯級主路帶有一個(gè)左電源線,常開觸點(diǎn),常開線圈和右電源線,它們之間有很多的水平連線,用戶在常開觸電與常開線圈之間添加其他元件并聯(lián)關(guān)系構(gòu)成新的梯級,當(dāng)然用戶也可以將這個(gè)常開觸點(diǎn)和常開線圈刪除繼而添加自己需要的元件。元件的編輯屬性對話框中包含用戶對元件名稱,數(shù)據(jù)類型,變量*圍,物理地址等屬性的編輯。助記符的錄入:可以實(shí)現(xiàn)一些助記符的錄入,以文本的形式進(jìn)展錄入。指令包括LD,LDI,OR,ORI,OUT等。梯形圖轉(zhuǎn)化為一級代碼:首先將梯形圖界面劃分成大小一樣的網(wǎng)格,如下列圖所示,每個(gè)網(wǎng)格包含一個(gè)梯形圖根本元件或者為空,每個(gè)網(wǎng)格信息保存在一個(gè)構(gòu)造體對象中,構(gòu)造體數(shù)組就構(gòu)成了一級代碼。一級代碼是構(gòu)造體數(shù)組的形式,由于網(wǎng)格中存在大量的“空〞元件,這樣一級代碼中就包含很多零元素,如果以數(shù)組的形式保存在計(jì)算機(jī)中必然浪費(fèi)很大的空間。同時(shí)考慮到串行化問題,先采用雙向鏈表構(gòu)造,鏈表中每一個(gè)節(jié)點(diǎn)是一個(gè)類對象,它存儲(chǔ)一個(gè)梯形圖元件的信息,這樣節(jié)點(diǎn)中就不包含零元素,利用串行化方法將鏈表信息保存在計(jì)算機(jī)中,這樣計(jì)算機(jī)可以節(jié)約很大的硬盤空間。當(dāng)用戶完成輸入后進(jìn)展下載時(shí),雙向鏈表先轉(zhuǎn)為一級代碼,然后經(jīng)過解算過程,將一級代碼轉(zhuǎn)換為二級代碼下載到下位機(jī)STM32中。解算:一級代碼經(jīng)過解算轉(zhuǎn)化成二級代碼才能下載到下位機(jī)STM32中,二進(jìn)制代碼指令用四個(gè)字節(jié)組成,前兩個(gè)字節(jié)代表命令種類,后兩個(gè)字節(jié)代表目標(biāo)設(shè)備。2.2.2上位機(jī)與下位機(jī)通信程序的編寫上位機(jī)向下位機(jī)的數(shù)據(jù)發(fā)送:代碼要向下位機(jī)通過串口發(fā)送,包括PC機(jī)的串口通信和STM32的串口通信局部。首先上位機(jī)向下位機(jī)發(fā)送一個(gè)命令ENQ〔0*05H〕,當(dāng)下位機(jī)準(zhǔn)備好承受數(shù)據(jù)后,回復(fù)命令A(yù)CK。之后PC開場發(fā)送數(shù)據(jù)。在VC中,有以下幾種方式可以實(shí)現(xiàn)串口的通信:方法一:使用VC++提供的串行通信控件MSm首先,在對話框中創(chuàng)立通信控件,假設(shè)Control工具欄中缺少該控件,可通過菜單Project-->AddtoProject-->ponentsandControl插入即可,再將該控件從工具箱中拉到對話框中。此時(shí),你只需要關(guān)心控件提供的對Windows通訊驅(qū)動(dòng)程序的API函數(shù)的接口。換句話說,只需要設(shè)置和監(jiān)視MSm控件的屬性和事件。方法二:在單線程中實(shí)現(xiàn)自定義的串口通信類。主要運(yùn)用ReadFile〔〕與WriteFile〔〕API函數(shù)。方法三:多線程下實(shí)現(xiàn)串行通信。在很多工業(yè)控制系統(tǒng)中,常通過擴(kuò)展串口連接多個(gè)外設(shè),各外設(shè)發(fā)送數(shù)據(jù)的重復(fù)頻率不同,要求后臺實(shí)時(shí)無過失捕捉,采集,處理,記錄各端口數(shù)據(jù),這就需要在自定義的串行通信類中創(chuàng)立端口監(jiān)視線程,以便在指定的事件發(fā)生時(shí)向相關(guān)的窗口發(fā)送通知消息。通信協(xié)議:通過RS232進(jìn)展通信,波特率為9600bps。PC機(jī)與下位機(jī)通信協(xié)議如下:通信過程采用問答方式,主機(jī)詢問,從機(jī)應(yīng)答,一臺主機(jī)可以同時(shí)詢問多臺從機(jī),主機(jī)和從機(jī)的通信格式一樣,如下表。字節(jié)序號說明內(nèi)容備注報(bào)文起始位0*55開場標(biāo)志0*AA地址Addr0*FF為播送地址命令Cmd數(shù)據(jù)長度高位低位數(shù)據(jù)區(qū)……N校驗(yàn)位低位奇偶〔CRC或和〕校驗(yàn)命令列表:序號命令類型碼功能0*01讀取*,Y,M,S,T,C,D的數(shù)據(jù)0*02向*,Y,M,S,T,C,D寫數(shù)據(jù)0*07使能*,Y,M,S,T,C0*08失能*,Y,M,S,T,C0*EE錯(cuò)誤應(yīng)答0*01命令:讀取目標(biāo)設(shè)備內(nèi)的數(shù)據(jù)命令請求格式:字節(jié)序號說明內(nèi)容功能1設(shè)備代號選取設(shè)備*,Y,M,S,T,C,D2操作數(shù)高位3低位命令應(yīng)答格式:字節(jié)序號說明內(nèi)容功能1地址高位讀取從這個(gè)地址開場的數(shù)據(jù)2低位3數(shù)據(jù)長度高位一共讀取的字節(jié)數(shù)4低位5數(shù)據(jù)區(qū)6………0*02命令:向目標(biāo)設(shè)備內(nèi)寫入數(shù)據(jù)命令請求格式:字節(jié)序號說明內(nèi)容功能1設(shè)備代號選取設(shè)備*,Y,M,S,T,C,D2操作數(shù)高位向目標(biāo)設(shè)備中寫入的數(shù)據(jù)3低位命令應(yīng)答格式:正確執(zhí)行時(shí)無返回碼,執(zhí)行錯(cuò)誤時(shí)返回錯(cuò)誤碼,詳見0*EE錯(cuò)誤應(yīng)答格式。0*07命令:使能目標(biāo)設(shè)備命令請求格式:字節(jié)序號說明內(nèi)容功能1設(shè)備代號選取選取設(shè)備*,Y,M,S,T,C,D命令應(yīng)答格式:正確執(zhí)行時(shí)無返回碼,執(zhí)行錯(cuò)誤時(shí)返回錯(cuò)誤碼,詳見0*EE錯(cuò)誤應(yīng)答格式。0*07命令:失能目標(biāo)設(shè)備命令請求格式:字節(jié)序號說明內(nèi)容功能1設(shè)備代號選取選取設(shè)備*,Y,M,S,T,C,D命令應(yīng)答格式:正確執(zhí)行時(shí)無返回碼,執(zhí)行錯(cuò)誤時(shí)返回錯(cuò)誤碼,詳見0*EE錯(cuò)誤應(yīng)答格式。0*EE命令:失能目標(biāo)設(shè)備字節(jié)序號說明內(nèi)容功能1命令類型出錯(cuò)的命令類型2.2.3用戶開發(fā)的梯形圖程序代碼通過串行口被傳送入單片機(jī),這些代碼對下位機(jī)而言只是普通的十六進(jìn)制數(shù),下位機(jī)要想通過這些代碼了解用戶的意圖,并按照用戶意圖完成對被控制對象的控制,就必須有解釋程序?qū)@些程序代碼進(jìn)展解釋。通過此程序,將上位機(jī)下載下來的梯形圖程序轉(zhuǎn)化成單片機(jī)識別的機(jī)器程序,從而按照控制要求,完成相應(yīng)的控制動(dòng)作。解釋程序的按以下步驟實(shí)現(xiàn):1°定義變量,設(shè)置指令代碼輸入標(biāo)志位,設(shè)置功能行輸入標(biāo)志位。2°讀第一行程序的行輸入標(biāo)志位,有輸入程序則讀行中每個(gè)字節(jié)的指令代碼,置位相應(yīng)代碼的標(biāo)志位,無輸入則程序轉(zhuǎn)至步驟5〕。3°根據(jù)指令代碼標(biāo)志位的組合判斷本行程序的功能,置位這個(gè)功能行輸入的標(biāo)志位;清楚本行指令代碼標(biāo)志位。4°根據(jù)功能行輸入標(biāo)志位調(diào)用實(shí)現(xiàn)其功能的子程序模塊,實(shí)現(xiàn)這行的功能;去除行功能有輸入標(biāo)志位。5°讀下一行程序的行輸入標(biāo)志位,轉(zhuǎn)入步驟2〕循環(huán)執(zhí)行,至所有行完畢。梯形圖解釋按如下原則進(jìn)展:當(dāng)PLC解釋程序發(fā)現(xiàn)LD或者LDI取指令,將該指令之前的電路塊解釋的結(jié)果入棧保存在模擬堆棧中。當(dāng)發(fā)現(xiàn)AND、ANI或者OR、ORI指令,該指令將指令所帶的操作元件的狀態(tài)和當(dāng)前的結(jié)果進(jìn)展與、與非或者或、或非邏輯運(yùn)算。PLC解釋程序解釋完一個(gè)分支快后,結(jié)果發(fā)現(xiàn)指令A(yù)NB,說明這個(gè)分支塊和其他的常開觸點(diǎn)、常閉觸點(diǎn)或者一個(gè)分支塊串聯(lián),此時(shí)堆棧應(yīng)該出棧,當(dāng)前分支塊的結(jié)果和出棧的值作邏輯與運(yùn)算,將邏輯運(yùn)算的結(jié)果保存堆棧的棧頂。PLC解釋程序解釋完一個(gè)分支塊后,如果發(fā)現(xiàn)指令ORB,說明這個(gè)分支塊和其他的常開觸點(diǎn)、常閉觸點(diǎn)或者一個(gè)分支塊并聯(lián),此時(shí)堆棧應(yīng)該出棧,當(dāng)前分支塊的結(jié)果和出棧的值作邏輯或運(yùn)算,將邏輯運(yùn)算的結(jié)果頁保存堆棧的棧頂。另外還可以看出堆棧出棧和入棧的次數(shù)相等,在解釋到輸出指令時(shí),堆棧恢復(fù)到原來的位置。//母線邏輯堆棧unsignedshortsys_logic_g[20];unsignedshortsys_logic_g_ptr;//主邏輯堆棧系統(tǒng)unsignedshortsys_logic_main[20];unsignedshortsys_logic_main_ptr;//邏輯行計(jì)數(shù)器e*ternunsignedshortsys_loc_cout;給FLASH中寫入三條指令,進(jìn)展解釋: FLASH_Unlock(); FLASH_ErasePage(0*0800C000); FLASH_ProgramWord(0*0800C000,0*00000001); //LD*0.0 FLASH_ProgramWord(0*0800C004,0*00005013); //OUTY0.0 FLASH_ProgramWord(0*0800C008,0*0000001f); //END系統(tǒng)主程序:voidplc_main(void){ system_setup();//主無限循環(huán)程序while(1){//輸入更新update_input();//邏輯堆棧復(fù)位logic_reset();//用戶程序執(zhí)行program_e*cute();//輸出更新update_output();}}進(jìn)展程序執(zhí)行program_e*cute();//輸出更新梯形圖的PLC指令解釋過程如下:〔logic_main_主邏輯系統(tǒng)堆棧,loc_cout_邏輯計(jì)數(shù)堆?!?°堆棧清零,loc_cout、logic_g和logic_main清零,第一條指令為LD,判斷前置邏輯〔loc_cout〕是否完成,假設(shè)沒有完成,則將logic_main值壓棧,啟用新一行邏輯,給loc_cout置1,將母線邏輯和讀取位進(jìn)展邏輯“與〞運(yùn)算,將*0.0的狀態(tài)保存在logic_main中,并置logic_main狀態(tài)為1。2°下一條指令,發(fā)現(xiàn)指令為OUT,如果logic_mian為ON(1/0來判斷),則Y0.0的值為ON,否則為OFF.3°最后一條指令為END,程序掃描周期完畢,將輸出映象區(qū)的ON/OFF狀態(tài)輸出,稱為實(shí)際的輸出,然后開場新一輪掃描周期。根本邏輯指令解釋方法的實(shí)現(xiàn)PLC指令解釋主要有指令分析程序和指令解釋子程序,指令分析子程序通過對指令的中間代碼進(jìn)展分析,當(dāng)分析到*種指令的指令代碼時(shí),解釋程序跳轉(zhuǎn)到對應(yīng)的解釋子程序。解釋子程序得到指令的操作數(shù)并計(jì)算操作數(shù)對應(yīng)元件在系統(tǒng)中的存儲(chǔ)地址,完成規(guī)定的指令功能后再分析下一條PLC指令,如此周而復(fù)始。4°AND指令發(fā)現(xiàn)指令為AND,將logic_mian堆棧里的值和e*e_read_bit〔*0.1〕進(jìn)展邏輯與運(yùn)算,邏輯運(yùn)算結(jié)果保存在logic_main中,并置logic_main為1。5°OR指令發(fā)現(xiàn)指令為OR,將logic_mian堆棧里的值和e*e_read_bit〔*0.1〕進(jìn)展邏輯或運(yùn)算,邏輯運(yùn)算結(jié)果保存在logic_main中,并置logic_main為1。任務(wù)堆棧:任務(wù)堆棧是任務(wù)的重要的組成局部。所謂堆棧,就是在存儲(chǔ)器中按數(shù)據(jù)“先進(jìn)后出〔LIFO〕〞的原則組織的連續(xù)存儲(chǔ)空間。為了滿足任務(wù)切換和響應(yīng)中斷時(shí)保存CPU存放器中的內(nèi)容及任務(wù)調(diào)用其他函數(shù)時(shí)的需要,每個(gè)任務(wù)都應(yīng)該配有自己的堆棧。所有系統(tǒng)任務(wù)的任務(wù)控制塊中都含有一個(gè)指向該任務(wù)堆棧的指針。在PLC梯形圖中,位元件即繼電器對應(yīng)的物理實(shí)體是存儲(chǔ)單元中的*一位,稱為位功能存儲(chǔ)器。如果該位為1則表示對應(yīng)的繼電器線圈通電,其常開觸點(diǎn)閉合,常閉觸點(diǎn)斷開。反之,如果該位為0,則表示對應(yīng)的繼電器線圈失電,將常開觸點(diǎn)斷開,常閉觸點(diǎn)閉合。在解釋梯形圖指令時(shí),CPU掃描用戶程序的中間代碼將各個(gè)元件的狀態(tài)進(jìn)展邏輯與、或、非等運(yùn)算,運(yùn)算結(jié)果ON或者OFF保存在元件對應(yīng)的存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論