【《單片機溫濕度采集系統(tǒng)的軟件設計案例》5000字】_第1頁
【《單片機溫濕度采集系統(tǒng)的軟件設計案例》5000字】_第2頁
【《單片機溫濕度采集系統(tǒng)的軟件設計案例》5000字】_第3頁
【《單片機溫濕度采集系統(tǒng)的軟件設計案例》5000字】_第4頁
【《單片機溫濕度采集系統(tǒng)的軟件設計案例》5000字】_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機溫濕度采集系統(tǒng)的軟件設計案例目錄TOC\o"1-3"\h\u10202單片機溫濕度采集系統(tǒng)的軟件設計案例 12681.1Modbus協(xié)議的通信 1179551.2下位機程序設計 2242631.3.1FreeModbus協(xié)議棧的移植 239271.3.2Modbus協(xié)議在STM32單片機上的實現(xiàn) 3142431.3上位機監(jiān)控計算機的實現(xiàn) 4216221.3.1MCGS組態(tài)軟件 4127411.3.2Modbus協(xié)議的RTU模式在上位機的實現(xiàn) 5244991.3.3Modbus協(xié)議的TCP模式在上位機的實現(xiàn) 683901.3.4ModbusTCP轉(zhuǎn)RTU 7265401.4溫濕度的采集 7298371.5溫濕度數(shù)據(jù)在液晶屏上的顯示 9軟件設計主要有三個方面:一是Modbus協(xié)議在上位機的實現(xiàn),二是Modbus協(xié)議在單片機上的實現(xiàn),三是實現(xiàn)對溫濕度傳感器AHT10數(shù)據(jù)的采集,最終實現(xiàn)上位監(jiān)控計算機與現(xiàn)場采集設備間的通信,并且可以在上位機觀測到溫濕度的變化。1.1Modbus協(xié)議的通信Modbus協(xié)議是一種工業(yè)現(xiàn)場總線協(xié)議標準。可以實現(xiàn)的功能有很多種,它的主要的功能碼如表4-1。表4-1Modbus常用功能碼功能碼描述01H讀線圈寄存器02H讀離散輸入寄存器03H讀保持寄存器04H讀輸入寄存器05H寫單個線圈寄存器06H寫單個保持寄存器0FH寫多個線圈寄存器10H寫多個保持寄存器其中運用到最多的有:03功能碼:讀保持寄存器,字節(jié)指令操作,可讀單個或者多個;05功能碼:寫單個線圈,位操作,只能寫一個,可以通過一位同時控制8個LED燈。Modbus協(xié)議的通信有以下兩種途徑:(1)串口方式進行通信:主要是RTU和ASCII模式,本課題主要運用的ModbusRTU,RTU的幀結(jié)構(gòu)如表4-2所示,在ModbusRTU傳輸模式下數(shù)據(jù)幀的第一個字節(jié)代表的是溫度傳感器的設備地址,從站不停地偵測總線,來判斷上位機的指令是不是發(fā)向自己的;功能代碼決定了當前指令的作用;數(shù)據(jù)段為傳輸?shù)木唧w信息(如溫濕度傳感器采集到的溫濕度數(shù)據(jù));兩位CRC校驗碼則用來避免各種干擾,能夠起到降低誤碼率,提高了傳輸可靠性的作用。表4-2ModbusRTU報文幀子節(jié)點地址功能代碼數(shù)據(jù)CRC校驗1字節(jié)1字節(jié)0-252字節(jié)CRC低CRC高(2)利用網(wǎng)絡的方式進行Modbus通信:FreeModbus支持TCP模式,這個模式的功能碼與RTU模式的一樣。當在現(xiàn)場嵌入式設備上運行時,可以利用TCP協(xié)議和上位監(jiān)控計算機進行通信。TCP報文幀由MBAP頭和PDU數(shù)據(jù)單元構(gòu)成。PDU由功能碼和數(shù)據(jù)組成。利用以太網(wǎng)通信的時候server端就相當于從站,只能等待連接。1.2下位機程序設計1.3.1FreeModbus協(xié)議棧的移植FreeModbus是一個開源的協(xié)議。它具有RTU、ASCII模式和TCP協(xié)議的支持。它的代碼規(guī)范并且移植方便簡單,給程序的開發(fā)帶來了極大的便利。又由于它具有可裁剪性,因此可以根據(jù)自己的需求來對代碼進行任意的裁剪。同時FreeModbus對軟硬件的要求也不高、資源占用的不多,使用起來簡單方便REF_Ref71899412\r\h[9]。因為協(xié)議棧的程序編寫較為復雜,自己編寫工作量過大,并且代碼沒有經(jīng)過長期運行不可靠。因此在RT-Thread操作系統(tǒng)系下移植FreeModbus協(xié)議棧到STM32單片機上面以實現(xiàn)遠程上位機的RTU模式的Modbus通信功能。利用ENV工具來對串口進行配置(ENV工具進行配置可以對自己需要的板載資源包進行任意的組合,滿足自己開發(fā)的各種需要),可以方便快速的移植從站協(xié)議到STM32單片機。FreeModbus協(xié)議中有4種寄存器,開關(guān)輸入寄存器、線圈寄存器、保持寄存器和輸入寄存器,Modbus所有的功能都是通過這四種不同的類型來實現(xiàn)。但是不同的用戶數(shù)據(jù)緩沖區(qū)在結(jié)構(gòu)上不一定是一樣的,所以相應的數(shù)據(jù)處理方式就會各不相同,因此我們應該把各種數(shù)據(jù)類型對應的操作按照不同的數(shù)據(jù)緩沖區(qū)來進行不同操作。四種數(shù)據(jù)處理回調(diào)接函數(shù)如下:eMBMasterRegInputCB();輸入寄存器回調(diào)接口,輸入寄存器可讀,但不可寫;eMBMasterRegHoldingCB();保持寄存器回調(diào)接口,保持寄存器可讀可寫;eMBMasterRegCoilsCB();線圈回調(diào)接口,線圈寄存器可讀可寫;eMBMasterRegDiscreteCB();離散輸入回調(diào)接口,可讀但不可寫。當有功能函數(shù)調(diào)用的時候,就可以通過不同的回調(diào)函數(shù)進行回讀,然后進行數(shù)據(jù)處理和傳送。往從機中寫入數(shù)據(jù)函數(shù)具體如下所示,本課題使用中其中第一個參數(shù)為SLAVE_ADDR(在開始已經(jīng)將這個定義為1,即從機地址為0x01。);第二個參數(shù)寫寄存器的起始地址使用的是前面已經(jīng)定義過的2(即寫數(shù)據(jù)的起始地址為2);第三個參數(shù)寫寄存器的總數(shù)使用的是MB_SEND_REG_NUM(已被定義為2,即向從機寫入兩個數(shù)據(jù));第四個參數(shù)為寫寄存器的數(shù)據(jù)(下面所示的函數(shù)表示的數(shù)據(jù)為data數(shù)組中的數(shù)據(jù))。讀數(shù)據(jù)函數(shù)與寫類似。1.3.2Modbus協(xié)議在STM32單片機上的實現(xiàn)在主程序中先定義好從機地址、波特率、奇偶校驗、停止位和端口號等。首先通過eMBSlaveInit來從機協(xié)議棧進行初始化操作,從機中涉及到的部分硬件就會跟著進行初始化,同時利用HAL_UART_MspDeInit()函數(shù)對串口進行初始化,由于ENV工具配置的生成的串口初始化函數(shù)只有串口1的,而本課題所使用的還有別的串口,因此需要自己編寫其他在數(shù)據(jù)采集過程中所用到的串口的初始化。利用在線程輪詢調(diào)用eMSlavePoll方式,來實現(xiàn)主站和從站的通信。使用一個線程的第一步就是先創(chuàng)建一個線程。通過創(chuàng)建線程在主函數(shù)中創(chuàng)建了兩個動態(tài)線程。當調(diào)用一個線程時,系統(tǒng)就從動態(tài)堆內(nèi)存中分配一個線程句柄,然后按照線程函數(shù)里面的參數(shù)中定義的棧的值來分配對應大小的空間。線程1:tid1=rt_thread_create("md_s_poll",mb_slave_poll,RT_NULL,512,MB_POLL_THREAD_PRIORITY,10);創(chuàng)建線程1,名稱是md_s_poll,入口函數(shù)是mb_slave_poll,線程大小是512字節(jié),優(yōu)先級設置的10(優(yōu)先級范圍根據(jù)系統(tǒng)配置情況,數(shù)值越小那么優(yōu)先級久會越高)。當線程執(zhí)行成功以后就會返回一個句柄,就可以用來判斷。創(chuàng)建的線程首先會是初始化,這個時候線程是不會進入到就緒線程的隊列,當獲得線程控制塊后,我們可以在線程初始化完成以后利用rt_thread_startup(tid1)函數(shù)接口讓該線程進入就緒態(tài),隨后按照設置的優(yōu)先級等待。當新啟動的線程優(yōu)先級高于當前的線程那么就會先啟動這個優(yōu)先級更高的線程。啟動這個線程后,在函數(shù)mb_slave_poll中進行輪詢。線程2:tid2=rt_thread_create("md_s_send",send_slave_entry,RT_NULL,512,MB_SEND_THREAD_PRIORITY,10);創(chuàng)建線程2,名稱是md_s_send,入口函數(shù)是send_slave_entry。“send_slave_entry”函數(shù)主要是實現(xiàn)從站發(fā)送數(shù)據(jù),將溫度和濕度的數(shù)值寫到保持寄存器中,將LED燈的值寫到離散寄存器中。一般來在線程的實際應用的時候會利用rt_thread_mdelay();函數(shù)讓正在運行的線程延遲一定的時間,以便有足夠的時間進行響應,直到設置的時間到了以后才會再次運行。主要程序參考附錄二。1.3上位機監(jiān)控計算機的實現(xiàn)1.3.1MCGS組態(tài)軟件MCGS組態(tài)軟件可以快速構(gòu)造和生成上位機監(jiān)控系統(tǒng),實現(xiàn)上位機的功能。主要實現(xiàn)數(shù)據(jù)的采集、檢測和處理,能面向多種操作系統(tǒng)平臺。MCGS擁有強大的用戶操作界面可以自行繪制所需要的操作界面,利用公式進行數(shù)據(jù)處理也很方便,同時還有生成報表、產(chǎn)生報警的功能,除此之外還具有網(wǎng)絡通訊(支持Modbus、串口及TCP/IP協(xié)議)的功能以及可以支持各種不同硬件設備REF_Ref71899243\r\h[7]。當MCGS與現(xiàn)場的硬件設備連接以后,就可以便捷的開發(fā)出各種運用于現(xiàn)場數(shù)據(jù)采集及處理的監(jiān)控系統(tǒng)。MCGS設數(shù)據(jù)的采集和輸出的原理圖如圖4-1。圖4-1MCGS原理圖1.3.2Modbus協(xié)議的RTU模式在上位機的實現(xiàn)組態(tài)軟件MCGS6.2中的ModbusRTU驅(qū)動程序是基于Modbus通信協(xié)議編制的。因此,在設計監(jiān)控界面的時候,只需要設置與單片機程序中一樣的波特率,校驗方式,和下位機地址就可以將單片機寄存器中的數(shù)據(jù)采集到實時數(shù)據(jù)庫中,或者將數(shù)據(jù)寫入到單片機的寄存器中。最終MCGS組態(tài)軟件就可以實現(xiàn)與下位機的通信。我們在MCGS編程的時候,當涉及到與硬件連接的時候,我們可以通過簡單地模塊化組態(tài)從而來設計所需要的監(jiān)控系統(tǒng)REF_Ref71899248\r\h[8]。由于使用的ModbusRTU協(xié)議來進行串口通信,因此在使用MCGS軟件進行設計的時候要先在設備窗口選用通用串口父設備,這樣才能正確建立通信。然后設置相關(guān)的設備屬性來建立連接,建立了連接以后就可以將外部設備的數(shù)據(jù)讀取到MCGS的實時數(shù)據(jù)庫。隨后添加設備,在名稱內(nèi)部設置相應的地址變量和寄存器地址來讀取想用的參數(shù),通道連接如圖4-2。圖4-2通道連接隨后在用戶界面繪制簡單的操作界面來實時顯示所采集的溫濕度數(shù)據(jù),并且可以通過寫線圈實現(xiàn)LED燈的控制。最終使ModbusRTU協(xié)議能夠在上位監(jiān)控計算機實現(xiàn)。上位監(jiān)控計算機界面如圖4-2。正常情況下LED燈為綠色,當溫濕度超出一定的值時就可以使LED燈變成紅色產(chǎn)生提醒的作用。圖4-3上位監(jiān)控計算機界面1.3.3Modbus協(xié)議的TCP模式在上位機的實現(xiàn)在需要遠程監(jiān)控或數(shù)據(jù)采集的場所,通過ModbusRTU的傳統(tǒng)通信方式滿足不了需求,這個時候用以太網(wǎng)來進行通信就成了最好的選擇,由于在RT-Thread操作系統(tǒng)下進行FreeModbus協(xié)議棧中的ModbusTCP模式移植有些問題,所以最終采取了利用串口服務器來實現(xiàn)串口轉(zhuǎn)網(wǎng)絡。在MCGS組態(tài)軟件實現(xiàn)TCP模式與RTU模式不同的首先在于,TCP模式的父設備選擇的是“通用TCP/IP父設備“”,父設備選擇網(wǎng)路類型的選擇中選擇TCP,選擇客戶端,其中的遠程IP地址則根據(jù)遠程設備的IP地址來確定。建立好連接后,實時數(shù)據(jù)庫的配置與RTU模式里的配置方法一致。建立連接需要先將上位機的IP地址改為和串口服務器設備在同一個網(wǎng)段,使上位監(jiān)控計算機的IP地址和遠程設備在同一個網(wǎng)段,串口服務最初的IP地址為192.168.1.253,測試時直接用默認IP地址,因此將上位監(jiān)控計算機的地址設置為192.168.1.112。設置完成后查詢得到電腦的地址如圖4-3圖4-4上位監(jiān)控計算機IP地址在配置串口服務器時選擇TCP_SERVER模式,由于需要實現(xiàn)ModbusTCP協(xié)議到ModbusRTU協(xié)議的轉(zhuǎn)換因此需要將“ModbusTCP轉(zhuǎn)RTU”選項勾選。其余的配置(波特率,校驗方式等)與程序里面給從站定義的保持一致。詳細配置界面如圖4-4所示,這樣設置完成以后建立連接的時候就能實現(xiàn)數(shù)據(jù)的正確傳輸了,能利用ModbusPoll在設置成TCP/IP模式的時候采集到的單片機采集的數(shù)據(jù),也可以利用MCGS顯示單片機采集到的數(shù)據(jù)。最終就完成了ModbusTCP協(xié)議在上位機的實現(xiàn)。圖4-5串口服務器的配置1.3.4ModbusTCP轉(zhuǎn)RTU“TCP轉(zhuǎn)RTU”這個選項是進行協(xié)議轉(zhuǎn)換的所需要的,只有網(wǎng)絡和串口數(shù)據(jù)符合ModbusTCP和RTU協(xié)議格式的時候才會對數(shù)據(jù)格式進行變換,否則就會把數(shù)據(jù)丟棄。當串口服務器選擇的TCP_SERVER模式時,與其進行通信的的MCGS組態(tài)軟件或者是ModbusPoll軟件等都需要工作在TCPClient模式。最開始嘗試通信的時候可以先利用ModbusPoll來模擬通信,正確連接線路后,利用串口服務器配置軟件對串口服務器進行配置,將“TCP轉(zhuǎn)RTU”打勾。設置完成以后就通過ModbusPoll來建立連接,將串口服務器的IP和端口號設置好就可以進行連接。連接完成以后就可以在ModbusPoll上看到相應的數(shù)據(jù)。1.4溫濕度的采集本課題所用的AHT10采用的是I2C通信方法采集溫濕度,使用I2C總線設備時要先利用I2C總線的設備的名稱來得到設備句柄。通過查找設備函數(shù)rt_device_find(AHT10_I2C_BUS_NAME)來實現(xiàn)總線設備名稱獲取設備句柄,在主函數(shù)最上面將AHT10_I2C_BUS_NAME定義為"i2c4"(系統(tǒng)的I2C設備的名稱一般都用i2c0,i2c1等,本次使用的名稱是i2c4)。當?shù)玫絀2C總線設備句柄后,就能利用rt_i2c_transfer(bus,&msgs,1)函數(shù)來進行數(shù)據(jù)傳輸,其中bus代表I2C總線設備句柄,其中&msgs為指向待傳輸?shù)南?shù)組指針,1即消息數(shù)組元素個數(shù),返回值為消息數(shù)組元素個數(shù),因此可以利用rt_i2c_transfer(bus,&msgs,1)==1語句來進行判斷數(shù)據(jù)傳輸是否有錯誤。利用I2C進行數(shù)據(jù)傳輸將讀取溫濕度的值后放入寄存器中,以便發(fā)送給上位監(jiān)控計算機。當要到讀取溫度和濕度的數(shù)據(jù)時首先通過調(diào)用aht10_init(void)函數(shù)對AHT10進行初始化。通過寫傳感器寄存器和讀傳感器寄存器來將AHT10中的溫度和濕度數(shù)據(jù)調(diào)用,然后將溫度和濕度的數(shù)據(jù)進行轉(zhuǎn)換,轉(zhuǎn)換方法如下:*cur_humi=(temp[1]<<12|temp[2]<<4|(temp[3]&0xf0)>>4)*100.0/(1<<20);*cur_temp=((temp[3]&0xf)<<16|temp[4]<<8|temp[5])*200.0/(1<<20)-50;隨后將轉(zhuǎn)換好的溫度和濕度的數(shù)值放到已經(jīng)定義好的數(shù)組usSRegHoldBuf[S_REG_HOLDING_NREGS]中,分別將溫度和濕度寫到寄存器0和寄存器1中,這樣上位機就可以通過ModbusRTU/TCP協(xié)議的讀保持寄存器03功能來讀取這兩個寄存器的數(shù)值從而實現(xiàn)對溫度和濕度的讀取。在模擬上位機和下位機的Modbu通信的時候,可以利用Modbuspoll軟件模擬主站可以觀察到通信的完整數(shù)據(jù)格式如圖4-4圖4-6通信報文幀圖中框選的溫度和濕度的讀取指令說明如表4-1所示表4-1ModbusRTU溫濕度讀取指令說明指令指令01說明設備地址讀指令讀寄存器地址讀取數(shù)量CRC校驗030000000A74EE圖中溫度和濕度的返回數(shù)據(jù)指令說明如表4-2所示表4-1ModbusRTU溫濕度返回數(shù)據(jù)指令說明數(shù)據(jù)數(shù)據(jù)01說明設備地址讀指令濕度數(shù)據(jù)溫

溫馨提示

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

評論

0/150

提交評論