【《單片機(jī)溫濕度監(jiān)控系統(tǒng)軟件設(shè)計(jì)與調(diào)試分析案例》6600字】_第1頁
【《單片機(jī)溫濕度監(jiān)控系統(tǒng)軟件設(shè)計(jì)與調(diào)試分析案例》6600字】_第2頁
【《單片機(jī)溫濕度監(jiān)控系統(tǒng)軟件設(shè)計(jì)與調(diào)試分析案例》6600字】_第3頁
【《單片機(jī)溫濕度監(jiān)控系統(tǒng)軟件設(shè)計(jì)與調(diào)試分析案例》6600字】_第4頁
【《單片機(jī)溫濕度監(jiān)控系統(tǒng)軟件設(shè)計(jì)與調(diào)試分析案例》6600字】_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)溫濕度監(jiān)控系統(tǒng)軟件設(shè)計(jì)與調(diào)試分析案例目錄TOC\o"1-3"\h\u151631.1Modbus協(xié)議的通信 197071.2下位機(jī)程序設(shè)計(jì) 243081.3.1FreeModbus協(xié)議棧的移植 240631.3.2Modbus協(xié)議在STM32單片機(jī)上的實(shí)現(xiàn) 3208271.3上位機(jī)監(jiān)控計(jì)算機(jī)的實(shí)現(xiàn) 459551.3.1MCGS組態(tài)軟件 450941.3.2Modbus協(xié)議的RTU模式在上位機(jī)的實(shí)現(xiàn) 5109091.3.3Modbus協(xié)議的TCP模式在上位機(jī)的實(shí)現(xiàn) 665311.3.4ModbusTCP轉(zhuǎn)RTU 7268481.4溫濕度的采集 8181931.5溫濕度數(shù)據(jù)在液晶屏上的顯示 998122設(shè)備調(diào)試 11161152.1保持寄存器的讀寫 1197462.2線圈寄存器的讀寫 1385022.3ModbusTCP協(xié)議下的數(shù)據(jù)傳輸 1351072.4研究成果 14282042.4.1成果的實(shí)用性 14274932.4.2改進(jìn)及創(chuàng)新之處 14軟件設(shè)計(jì)主要有三個(gè)方面:一是Modbus協(xié)議在上位機(jī)的實(shí)現(xiàn),二是Modbus協(xié)議在單片機(jī)上的實(shí)現(xiàn),三是實(shí)現(xiàn)對(duì)溫濕度傳感器AHT10數(shù)據(jù)的采集,最終實(shí)現(xiàn)上位監(jiān)控計(jì)算機(jī)與現(xiàn)場采集設(shè)備間的通信,并且可以在上位機(jī)觀測到溫濕度的變化。1.1Modbus協(xié)議的通信Modbus協(xié)議是一種工業(yè)現(xiàn)場總線協(xié)議標(biāo)準(zhǔn)??梢詫?shí)現(xiàn)的功能有很多種,它的主要的功能碼如表4-1。表4-1Modbus常用功能碼功能碼描述01H讀線圈寄存器02H讀離散輸入寄存器03H讀保持寄存器04H讀輸入寄存器05H寫單個(gè)線圈寄存器06H寫單個(gè)保持寄存器0FH寫多個(gè)線圈寄存器10H寫多個(gè)保持寄存器其中運(yùn)用到最多的有:03功能碼:讀保持寄存器,字節(jié)指令操作,可讀單個(gè)或者多個(gè);05功能碼:寫單個(gè)線圈,位操作,只能寫一個(gè),可以通過一位同時(shí)控制8個(gè)LED燈。Modbus協(xié)議的通信有以下兩種途徑:(1)串口方式進(jìn)行通信:主要是RTU和ASCII模式,本課題主要運(yùn)用的ModbusRTU,RTU的幀結(jié)構(gòu)如表4-2所示,在ModbusRTU傳輸模式下數(shù)據(jù)幀的第一個(gè)字節(jié)代表的是溫度傳感器的設(shè)備地址,從站不停地偵測總線,來判斷上位機(jī)的指令是不是發(fā)向自己的;功能代碼決定了當(dāng)前指令的作用;數(shù)據(jù)段為傳輸?shù)木唧w信息(如溫濕度傳感器采集到的溫濕度數(shù)據(jù));兩位CRC校驗(yàn)碼則用來避免各種干擾,能夠起到降低誤碼率,提高了傳輸可靠性的作用。表4-2ModbusRTU報(bào)文幀子節(jié)點(diǎn)地址功能代碼數(shù)據(jù)CRC校驗(yàn)1字節(jié)1字節(jié)0-252字節(jié)CRC低CRC高(2)利用網(wǎng)絡(luò)的方式進(jìn)行Modbus通信:FreeModbus支持TCP模式,這個(gè)模式的功能碼與RTU模式的一樣。當(dāng)在現(xiàn)場嵌入式設(shè)備上運(yùn)行時(shí),可以利用TCP協(xié)議和上位監(jiān)控計(jì)算機(jī)進(jìn)行通信。TCP報(bào)文幀由MBAP頭和PDU數(shù)據(jù)單元構(gòu)成。PDU由功能碼和數(shù)據(jù)組成。利用以太網(wǎng)通信的時(shí)候server端就相當(dāng)于從站,只能等待連接。1.2下位機(jī)程序設(shè)計(jì)1.3.1FreeModbus協(xié)議棧的移植FreeModbus是一個(gè)開源的協(xié)議。它具有RTU、ASCII模式和TCP協(xié)議的支持。它的代碼規(guī)范并且移植方便簡單,給程序的開發(fā)帶來了極大的便利。又由于它具有可裁剪性,因此可以根據(jù)自己的需求來對(duì)代碼進(jìn)行任意的裁剪。同時(shí)FreeModbus對(duì)軟硬件的要求也不高、資源占用的不多,使用起來簡單方便REF_Ref71899412\r\h[9]。因?yàn)閰f(xié)議棧的程序編寫較為復(fù)雜,自己編寫工作量過大,并且代碼沒有經(jīng)過長期運(yùn)行不可靠。因此在RT-Thread操作系統(tǒng)系下移植FreeModbus協(xié)議棧到STM32單片機(jī)上面以實(shí)現(xiàn)遠(yuǎn)程上位機(jī)的RTU模式的Modbus通信功能。利用ENV工具來對(duì)串口進(jìn)行配置(ENV工具進(jìn)行配置可以對(duì)自己需要的板載資源包進(jìn)行任意的組合,滿足自己開發(fā)的各種需要),可以方便快速的移植從站協(xié)議到STM32單片機(jī)。FreeModbus協(xié)議中有4種寄存器,開關(guān)輸入寄存器、線圈寄存器、保持寄存器和輸入寄存器,Modbus所有的功能都是通過這四種不同的類型來實(shí)現(xiàn)。但是不同的用戶數(shù)據(jù)緩沖區(qū)在結(jié)構(gòu)上不一定是一樣的,所以相應(yīng)的數(shù)據(jù)處理方式就會(huì)各不相同,因此我們應(yīng)該把各種數(shù)據(jù)類型對(duì)應(yīng)的操作按照不同的數(shù)據(jù)緩沖區(qū)來進(jìn)行不同操作。四種數(shù)據(jù)處理回調(diào)接函數(shù)如下:eMBMasterRegInputCB();輸入寄存器回調(diào)接口,輸入寄存器可讀,但不可寫;eMBMasterRegHoldingCB();保持寄存器回調(diào)接口,保持寄存器可讀可寫;eMBMasterRegCoilsCB();線圈回調(diào)接口,線圈寄存器可讀可寫;eMBMasterRegDiscreteCB();離散輸入回調(diào)接口,可讀但不可寫。當(dāng)有功能函數(shù)調(diào)用的時(shí)候,就可以通過不同的回調(diào)函數(shù)進(jìn)行回讀,然后進(jìn)行數(shù)據(jù)處理和傳送。往從機(jī)中寫入數(shù)據(jù)函數(shù)具體如下所示,本課題使用中其中第一個(gè)參數(shù)為SLAVE_ADDR(在開始已經(jīng)將這個(gè)定義為1,即從機(jī)地址為0x01。);第二個(gè)參數(shù)寫寄存器的起始地址使用的是前面已經(jīng)定義過的2(即寫數(shù)據(jù)的起始地址為2);第三個(gè)參數(shù)寫寄存器的總數(shù)使用的是MB_SEND_REG_NUM(已被定義為2,即向從機(jī)寫入兩個(gè)數(shù)據(jù));第四個(gè)參數(shù)為寫寄存器的數(shù)據(jù)(下面所示的函數(shù)表示的數(shù)據(jù)為data數(shù)組中的數(shù)據(jù))。讀數(shù)據(jù)函數(shù)與寫類似。1.3.2Modbus協(xié)議在STM32單片機(jī)上的實(shí)現(xiàn)在主程序中先定義好從機(jī)地址、波特率、奇偶校驗(yàn)、停止位和端口號(hào)等。首先通過eMBSlaveInit來從機(jī)協(xié)議棧進(jìn)行初始化操作,從機(jī)中涉及到的部分硬件就會(huì)跟著進(jìn)行初始化,同時(shí)利用HAL_UART_MspDeInit()函數(shù)對(duì)串口進(jìn)行初始化,由于ENV工具配置的生成的串口初始化函數(shù)只有串口1的,而本課題所使用的還有別的串口,因此需要自己編寫其他在數(shù)據(jù)采集過程中所用到的串口的初始化。利用在線程輪詢調(diào)用eMSlavePoll方式,來實(shí)現(xiàn)主站和從站的通信。使用一個(gè)線程的第一步就是先創(chuàng)建一個(gè)線程。通過創(chuàng)建線程在主函數(shù)中創(chuàng)建了兩個(gè)動(dòng)態(tài)線程。當(dāng)調(diào)用一個(gè)線程時(shí),系統(tǒng)就從動(dòng)態(tài)堆內(nèi)存中分配一個(gè)線程句柄,然后按照線程函數(shù)里面的參數(shù)中定義的棧的值來分配對(duì)應(yīng)大小的空間。線程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)先級(jí)設(shè)置的10(優(yōu)先級(jí)范圍根據(jù)系統(tǒng)配置情況,數(shù)值越小那么優(yōu)先級(jí)久會(huì)越高)。當(dāng)線程執(zhí)行成功以后就會(huì)返回一個(gè)句柄,就可以用來判斷。創(chuàng)建的線程首先會(huì)是初始化,這個(gè)時(shí)候線程是不會(huì)進(jìn)入到就緒線程的隊(duì)列,當(dāng)獲得線程控制塊后,我們可以在線程初始化完成以后利用rt_thread_startup(tid1)函數(shù)接口讓該線程進(jìn)入就緒態(tài),隨后按照設(shè)置的優(yōu)先級(jí)等待。當(dāng)新啟動(dòng)的線程優(yōu)先級(jí)高于當(dāng)前的線程那么就會(huì)先啟動(dòng)這個(gè)優(yōu)先級(jí)更高的線程。啟動(dòng)這個(gè)線程后,在函數(shù)mb_slave_poll中進(jìn)行輪詢。線程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ù)主要是實(shí)現(xiàn)從站發(fā)送數(shù)據(jù),將溫度和濕度的數(shù)值寫到保持寄存器中,將LED燈的值寫到離散寄存器中。一般來在線程的實(shí)際應(yīng)用的時(shí)候會(huì)利用rt_thread_mdelay();函數(shù)讓正在運(yùn)行的線程延遲一定的時(shí)間,以便有足夠的時(shí)間進(jìn)行響應(yīng),直到設(shè)置的時(shí)間到了以后才會(huì)再次運(yùn)行。主要程序參考附錄二。1.3上位機(jī)監(jiān)控計(jì)算機(jī)的實(shí)現(xiàn)1.3.1MCGS組態(tài)軟件MCGS組態(tài)軟件可以快速構(gòu)造和生成上位機(jī)監(jiān)控系統(tǒng),實(shí)現(xiàn)上位機(jī)的功能。主要實(shí)現(xiàn)數(shù)據(jù)的采集、檢測和處理,能面向多種操作系統(tǒng)平臺(tái)。MCGS擁有強(qiáng)大的用戶操作界面可以自行繪制所需要的操作界面,利用公式進(jìn)行數(shù)據(jù)處理也很方便,同時(shí)還有生成報(bào)表、產(chǎn)生報(bào)警的功能,除此之外還具有網(wǎng)絡(luò)通訊(支持Modbus、串口及TCP/IP協(xié)議)的功能以及可以支持各種不同硬件設(shè)備REF_Ref71899243\r\h[7]。當(dāng)MCGS與現(xiàn)場的硬件設(shè)備連接以后,就可以便捷的開發(fā)出各種運(yùn)用于現(xiàn)場數(shù)據(jù)采集及處理的監(jiān)控系統(tǒng)。MCGS設(shè)數(shù)據(jù)的采集和輸出的原理圖如圖4-1。圖4-1MCGS原理圖1.3.2Modbus協(xié)議的RTU模式在上位機(jī)的實(shí)現(xiàn)組態(tài)軟件MCGS6.2中的ModbusRTU驅(qū)動(dòng)程序是基于Modbus通信協(xié)議編制的。因此,在設(shè)計(jì)監(jiān)控界面的時(shí)候,只需要設(shè)置與單片機(jī)程序中一樣的波特率,校驗(yàn)方式,和下位機(jī)地址就可以將單片機(jī)寄存器中的數(shù)據(jù)采集到實(shí)時(shí)數(shù)據(jù)庫中,或者將數(shù)據(jù)寫入到單片機(jī)的寄存器中。最終MCGS組態(tài)軟件就可以實(shí)現(xiàn)與下位機(jī)的通信。我們在MCGS編程的時(shí)候,當(dāng)涉及到與硬件連接的時(shí)候,我們可以通過簡單地模塊化組態(tài)從而來設(shè)計(jì)所需要的監(jiān)控系統(tǒng)REF_Ref71899248\r\h[8]。由于使用的ModbusRTU協(xié)議來進(jìn)行串口通信,因此在使用MCGS軟件進(jìn)行設(shè)計(jì)的時(shí)候要先在設(shè)備窗口選用通用串口父設(shè)備,這樣才能正確建立通信。然后設(shè)置相關(guān)的設(shè)備屬性來建立連接,建立了連接以后就可以將外部設(shè)備的數(shù)據(jù)讀取到MCGS的實(shí)時(shí)數(shù)據(jù)庫。隨后添加設(shè)備,在名稱內(nèi)部設(shè)置相應(yīng)的地址變量和寄存器地址來讀取想用的參數(shù),通道連接如圖4-2。圖4-2通道連接隨后在用戶界面繪制簡單的操作界面來實(shí)時(shí)顯示所采集的溫濕度數(shù)據(jù),并且可以通過寫線圈實(shí)現(xiàn)LED燈的控制。最終使ModbusRTU協(xié)議能夠在上位監(jiān)控計(jì)算機(jī)實(shí)現(xiàn)。上位監(jiān)控計(jì)算機(jī)界面如圖4-2。正常情況下LED燈為綠色,當(dāng)溫濕度超出一定的值時(shí)就可以使LED燈變成紅色產(chǎn)生提醒的作用。圖4-3上位監(jiān)控計(jì)算機(jī)界面1.3.3Modbus協(xié)議的TCP模式在上位機(jī)的實(shí)現(xiàn)在需要遠(yuǎn)程監(jiān)控或數(shù)據(jù)采集的場所,通過ModbusRTU的傳統(tǒng)通信方式滿足不了需求,這個(gè)時(shí)候用以太網(wǎng)來進(jìn)行通信就成了最好的選擇,由于在RT-Thread操作系統(tǒng)下進(jìn)行FreeModbus協(xié)議棧中的ModbusTCP模式移植有些問題,所以最終采取了利用串口服務(wù)器來實(shí)現(xiàn)串口轉(zhuǎn)網(wǎng)絡(luò)。在MCGS組態(tài)軟件實(shí)現(xiàn)TCP模式與RTU模式不同的首先在于,TCP模式的父設(shè)備選擇的是“通用TCP/IP父設(shè)備“”,父設(shè)備選擇網(wǎng)路類型的選擇中選擇TCP,選擇客戶端,其中的遠(yuǎn)程IP地址則根據(jù)遠(yuǎn)程設(shè)備的IP地址來確定。建立好連接后,實(shí)時(shí)數(shù)據(jù)庫的配置與RTU模式里的配置方法一致。建立連接需要先將上位機(jī)的IP地址改為和串口服務(wù)器設(shè)備在同一個(gè)網(wǎng)段,使上位監(jiān)控計(jì)算機(jī)的IP地址和遠(yuǎn)程設(shè)備在同一個(gè)網(wǎng)段,串口服務(wù)最初的IP地址為192.168.1.253,測試時(shí)直接用默認(rèn)IP地址,因此將上位監(jiān)控計(jì)算機(jī)的地址設(shè)置為192.168.1.112。設(shè)置完成后查詢得到電腦的地址如圖4-3圖4-4上位監(jiān)控計(jì)算機(jī)IP地址在配置串口服務(wù)器時(shí)選擇TCP_SERVER模式,由于需要實(shí)現(xiàn)ModbusTCP協(xié)議到ModbusRTU協(xié)議的轉(zhuǎn)換因此需要將“ModbusTCP轉(zhuǎn)RTU”選項(xiàng)勾選。其余的配置(波特率,校驗(yàn)方式等)與程序里面給從站定義的保持一致。詳細(xì)配置界面如圖4-4所示,這樣設(shè)置完成以后建立連接的時(shí)候就能實(shí)現(xiàn)數(shù)據(jù)的正確傳輸了,能利用ModbusPoll在設(shè)置成TCP/IP模式的時(shí)候采集到的單片機(jī)采集的數(shù)據(jù),也可以利用MCGS顯示單片機(jī)采集到的數(shù)據(jù)。最終就完成了ModbusTCP協(xié)議在上位機(jī)的實(shí)現(xiàn)。圖4-5串口服務(wù)器的配置1.3.4ModbusTCP轉(zhuǎn)RTU“TCP轉(zhuǎn)RTU”這個(gè)選項(xiàng)是進(jìn)行協(xié)議轉(zhuǎn)換的所需要的,只有網(wǎng)絡(luò)和串口數(shù)據(jù)符合ModbusTCP和RTU協(xié)議格式的時(shí)候才會(huì)對(duì)數(shù)據(jù)格式進(jìn)行變換,否則就會(huì)把數(shù)據(jù)丟棄。當(dāng)串口服務(wù)器選擇的TCP_SERVER模式時(shí),與其進(jìn)行通信的的MCGS組態(tài)軟件或者是ModbusPoll軟件等都需要工作在TCPClient模式。最開始嘗試通信的時(shí)候可以先利用ModbusPoll來模擬通信,正確連接線路后,利用串口服務(wù)器配置軟件對(duì)串口服務(wù)器進(jìn)行配置,將“TCP轉(zhuǎn)RTU”打勾。設(shè)置完成以后就通過ModbusPoll來建立連接,將串口服務(wù)器的IP和端口號(hào)設(shè)置好就可以進(jìn)行連接。連接完成以后就可以在ModbusPoll上看到相應(yīng)的數(shù)據(jù)。1.4溫濕度的采集本課題所用的AHT10采用的是I2C通信方法采集溫濕度,使用I2C總線設(shè)備時(shí)要先利用I2C總線的設(shè)備的名稱來得到設(shè)備句柄。通過查找設(shè)備函數(shù)rt_device_find(AHT10_I2C_BUS_NAME)來實(shí)現(xiàn)總線設(shè)備名稱獲取設(shè)備句柄,在主函數(shù)最上面將AHT10_I2C_BUS_NAME定義為"i2c4"(系統(tǒng)的I2C設(shè)備的名稱一般都用i2c0,i2c1等,本次使用的名稱是i2c4)。當(dāng)?shù)玫絀2C總線設(shè)備句柄后,就能利用rt_i2c_transfer(bus,&msgs,1)函數(shù)來進(jìn)行數(shù)據(jù)傳輸,其中bus代表I2C總線設(shè)備句柄,其中&msgs為指向待傳輸?shù)南?shù)組指針,1即消息數(shù)組元素個(gè)數(shù),返回值為消息數(shù)組元素個(gè)數(shù),因此可以利用rt_i2c_transfer(bus,&msgs,1)==1語句來進(jìn)行判斷數(shù)據(jù)傳輸是否有錯(cuò)誤。利用I2C進(jìn)行數(shù)據(jù)傳輸將讀取溫濕度的值后放入寄存器中,以便發(fā)送給上位監(jiān)控計(jì)算機(jī)。當(dāng)要到讀取溫度和濕度的數(shù)據(jù)時(shí)首先通過調(diào)用aht10_init(void)函數(shù)對(duì)AHT10進(jìn)行初始化。通過寫傳感器寄存器和讀傳感器寄存器來將AHT10中的溫度和濕度數(shù)據(jù)調(diào)用,然后將溫度和濕度的數(shù)據(jù)進(jìn)行轉(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中,這樣上位機(jī)就可以通過ModbusRTU/TCP協(xié)議的讀保持寄存器03功能來讀取這兩個(gè)寄存器的數(shù)值從而實(shí)現(xiàn)對(duì)溫度和濕度的讀取。在模擬上位機(jī)和下位機(jī)的Modbu通信的時(shí)候,可以利用Modbuspoll軟件模擬主站可以觀察到通信的完整數(shù)據(jù)格式如圖4-4圖4-6通信報(bào)文幀圖中框選的溫度和濕度的讀取指令說明如表4-1所示表4-1ModbusRTU溫濕度讀取指令說明指令指令01說明設(shè)備地址讀指令讀寄存器地址讀取數(shù)量CRC校驗(yàn)030000000A74EE圖中溫度和濕度的返回?cái)?shù)據(jù)指令說明如表4-2所示表4-1ModbusRTU溫濕度返回?cái)?shù)據(jù)指令說明數(shù)據(jù)數(shù)據(jù)01說明設(shè)備地址讀指令濕度數(shù)據(jù)溫度數(shù)據(jù)CRC校驗(yàn)0302E70113120214數(shù)據(jù)數(shù)各個(gè)節(jié)點(diǎn)的溫度和濕度都有兩個(gè)字節(jié),一共由四個(gè)字節(jié)組成。數(shù)據(jù)指令中的十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制以后分別為743和275(即當(dāng)前溫度為27.5℃,濕度為71.3%。)由于還需進(jìn)行網(wǎng)絡(luò)通信,利用串口服務(wù)器將ModbusRTU轉(zhuǎn)換為ModbusTCP協(xié)議以后數(shù)據(jù)幀格式也會(huì)發(fā)生變化。1.5溫濕度數(shù)據(jù)在液晶屏上的顯示液晶屏是通過SPI來進(jìn)行通信,本課題編寫了簡單的液晶屏顯示界面,以便溫度和濕度的數(shù)據(jù)除了在監(jiān)控中心能看到以外,數(shù)據(jù)采集現(xiàn)場也能直觀的看到。我編寫的是在第一排顯示“Hello,JHUN”然后顯示開發(fā)板型號(hào)以及傳感器通信的方式,在屏幕的中線畫一條直線,最后在最下方的Temp:和Humi:的后面分別顯示當(dāng)前環(huán)境的溫度和濕度數(shù)據(jù)。液晶屏顯示的畫面如圖4-5圖4-5液晶屏顯示結(jié)果本課題因?yàn)橹皇呛唵物@示溫濕度數(shù)據(jù)以便于在現(xiàn)場觀測到,因此直接選用屏幕底色為白色,字體為黑色來顯示,屏幕上的字符和線條顯示的函數(shù)如圖4-6所示。圖4-6LCD字符顯示函數(shù)由于顯示溫濕度需要保留一位小數(shù)使精度更高,因此要在液晶屏上分別在固定的位置顯示整數(shù)部分和小數(shù)部分,具體函數(shù)如圖4-7所示。其中第一個(gè)參數(shù)是液晶屏上顯示位置的橫坐標(biāo);第二個(gè)是液晶屏上顯示位置的縱坐標(biāo)(此處設(shè)置的顯示溫度的縱坐標(biāo)為150,濕度的縱坐標(biāo)為180,最大值為240);第三個(gè)是需要顯示的數(shù)據(jù);第四個(gè)參數(shù)為2和1(即整數(shù)部分顯示兩位,小數(shù)部分顯示1位);第五個(gè)是現(xiàn)實(shí)的數(shù)據(jù)的像素(即字體大小)。這個(gè)顯示位置必須得計(jì)算準(zhǔn)確,否則顯示在液晶屏上的數(shù)據(jù)就會(huì)使混亂的。圖4-7LCD溫濕度顯示函數(shù)2設(shè)備調(diào)試2.1保持寄存器的讀寫在電腦上安裝了STLink驅(qū)動(dòng)和CH340驅(qū)動(dòng)后可以在設(shè)備管理器中看到COM4和COM6,如圖5-1。這兩個(gè)分別對(duì)應(yīng)的開發(fā)板的串口1和串口2,其中串口1用于終端控制,串口2用作從機(jī)通信。圖5-1所用串口硬件連接完成之后可以先利用ModbusPoll來模擬Modbus通信并觀測采集到的的溫度和濕度的數(shù)據(jù),其中用來模擬主站的ModbusPoll軟件的配置如圖5-2所示,因?yàn)闇囟群蜐穸葦?shù)據(jù)存儲(chǔ)在保存寄存器中,所以選擇03功能碼(讀保持寄存器)來讀取溫度和濕度的數(shù)值。圖5-2ModbusPoll連接設(shè)置連接完成后ModbusPoll界面如圖5-3可以看到第一個(gè)地址顯示的濕度的數(shù)值,第二個(gè)地址顯示的溫度的數(shù)值。圖5-3Modbus通信采集的數(shù)據(jù)圖中濕度和溫度都是三位數(shù)是因?yàn)樵诔绦蚓帉懙臅r(shí)候我將數(shù)據(jù)乘了一個(gè)10,這是因?yàn)楸3旨拇嫫鲾?shù)組只能是整形,而我想最終在上位機(jī)顯示的溫度和濕度的數(shù)值有以為小數(shù),這樣溫度和濕度的數(shù)值的精度就會(huì)更加的高。當(dāng)能夠運(yùn)用Modbus協(xié)議進(jìn)行簡單的數(shù)據(jù)通信以后,利用MCGS組態(tài)軟件繪制的控制界面能將溫度和濕度的數(shù)據(jù)顯示的更加清晰具體。如圖5-4。溫濕度數(shù)據(jù)可以顯示成有以為小數(shù)的,是在文本框中使用實(shí)時(shí)數(shù)據(jù)庫中的temperature/10,這樣最終現(xiàn)實(shí)的數(shù)據(jù)就可以是想觀測到的,當(dāng)溫度正常時(shí)LED等的顏色顯示為綠色和現(xiàn)場嵌入式設(shè)備上LED等的顏色保持一致。當(dāng)溫度和濕度的值達(dá)到一定的值時(shí),可以通過輸入框?qū)?或者0(也可直接使用按鍵)來使LED燈的顏色變?yōu)榧t色,這樣現(xiàn)場設(shè)備上的LED燈也會(huì)變?yōu)榧t色,這樣就可以起到報(bào)警的作用。圖5-4上位監(jiān)控計(jì)算機(jī)操作界面最終就可以順利采集到環(huán)境的溫濕度,并在遠(yuǎn)程的上位監(jiān)控計(jì)算機(jī)中顯示出來,同時(shí)可以在上位機(jī)上通過Modbus寫線圈的指令來控制LED燈的亮滅或顏色變化來產(chǎn)生報(bào)警的效果,由于還采用了串口服務(wù)器,所以還能實(shí)現(xiàn)遠(yuǎn)距離通信。2.2線圈寄存器的讀寫潘多拉STM32L475開發(fā)板上的LED燈是一個(gè)RGB燈,通過三個(gè)IO口不同的值能過產(chǎn)生多種顏色,RGB_R為紅色、RGB_G為綠色、RGB_B為藍(lán)色。因此在Modbus通信的時(shí)候可以利用寫多個(gè)線圈(15)

溫馨提示

  • 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論