版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 題 目: 基于單片機的智能協(xié)議轉(zhuǎn)換器設(shè)計 </p><p> 學(xué)生姓名: 學(xué)號: </p><p> 專 業(yè): 電子信息工程 </p><p>
2、; 院(系): 信息工程學(xué)院 </p><p> 完成時間: </p><p> 基于單片機的智能協(xié)議轉(zhuǎn)換器設(shè)計</p><p> 摘要 隨著通信行業(yè)的發(fā)展,為了保證通信設(shè)備的正常運行,采用了大量的配有智能監(jiān)控接口的動力設(shè)備和專用空調(diào)設(shè)備,而為了有效的管理
3、這些支撐設(shè)備,需要將這些設(shè)備納入統(tǒng)一的監(jiān)控平臺,實現(xiàn)集中遠程監(jiān)控管理。本文主要介紹了一個基于89C52單片機的智能協(xié)議轉(zhuǎn)換器設(shè)計方案。用該方案設(shè)計的智能協(xié)議轉(zhuǎn)換器,已經(jīng)在實際中應(yīng)用并達到了預(yù)期目的。該系統(tǒng)同樣可以應(yīng)用到其他類似的工業(yè)控制和數(shù)據(jù)采集系統(tǒng)中。</p><p> 關(guān)鍵詞 單片機 通訊協(xié)議 串口 監(jiān)控 協(xié)議轉(zhuǎn)換器</p><p> Abstact: As the co
4、mmunications industry, in order to ensure the normal operation of communications equipment, the use of a large number of interfaces with intelligent monitoring and special air-conditioning equipment, power equipment, and
5、 support for effective management of these devices, you need to monitor these devices into a unified platform to realize centralized management of remote monitoring。This paper describes a 89C52 microcontroller-based inte
6、lligent protocol converter design. With th</p><p><b> 朗讀</b></p><p> 顯示對應(yīng)的拉丁字符的拼音</p><p> 字典 - 查看字典詳細內(nèi)容</p><p><b> 名詞 </b></p><p&
7、gt;<b> agreement</b></p><p><b> protocol</b></p><p><b> pact</b></p><p> Key Words: SCM ,Communication protocol,Serial port, Monitoring, Prot
8、ocol conversion instrument 目錄</p><p><b> 1 概述1</b></p><p> 1.1 課題的意義1</p><p> 1.2 設(shè)計的任務(wù)和要求1</p><p> 2 系統(tǒng)實現(xiàn)原理及硬件設(shè)計1</p><p> 2.1 系統(tǒng)
9、實現(xiàn)原理1</p><p> 2.2 系統(tǒng)硬件設(shè)計2</p><p> 2.2.1通信接口的擴展2</p><p> 2.2.2硬件看門狗設(shè)計4</p><p> 2.2.3抗外界干擾設(shè)計4</p><p> 2.3 主要硬件說明4</p><p> 2.3.1 單
10、片機系統(tǒng)4</p><p> 2.3.1.1 89C52單片機簡介4</p><p> 2.3.1.2 89C52單片機的管腳5</p><p> 2.3.2 可編程串行接口芯片8251A7</p><p> 2.3.2.1 8251A的系統(tǒng)框圖7</p><p> 2.3.2.1 8251A的
11、組成部件及管腳介紹7</p><p> 2.3.3 MAX813L芯片(看門狗及復(fù)位專用芯片)8</p><p> 2.3.4 MAX485接口芯片介紹11</p><p> 3 系統(tǒng)軟件設(shè)計14</p><p> 3.1 數(shù)據(jù)采集方案設(shè)計14</p><p> 3.2軟件看門狗設(shè)計15<
12、/p><p> 3.3數(shù)據(jù)幀傳輸設(shè)計15</p><p> 3.3.1 Modbus 協(xié)議簡介16</p><p> 3.3.2查詢—回應(yīng)周期17</p><p> 3.3.3兩種傳輸方式17</p><p> 4 總結(jié)與體會24</p><p><b> 參考文獻
13、25</b></p><p><b> 附錄26</b></p><p><b> 1 概述</b></p><p> 1.1 課題的意義</p><p> 所有的通訊設(shè)備需要可靠的動力系統(tǒng)進行支撐,這些動力設(shè)備包括開關(guān)電源、高低壓電源開關(guān)柜、蓄電池組、機房智能空調(diào)等等。
14、通訊行業(yè)的本身的人力資源和客觀的管理水平發(fā)展,要求實現(xiàn)設(shè)備間的互連互通,但長期以來不同企業(yè)出于自身利益的考慮定了互不兼容的總線標準,使得處于不總線網(wǎng)絡(luò)中的設(shè)備通信難。本系統(tǒng)正是基于這種需求而提出的解決方案。</p><p> 1.2 設(shè)計的任務(wù)和要求</p><p> 1、設(shè)計一套協(xié)議轉(zhuǎn)換器系統(tǒng)。</p><p> 2、能夠?qū)崿F(xiàn)將不同設(shè)備廠家的數(shù)據(jù)通訊協(xié)議轉(zhuǎn)
15、換成統(tǒng)一的通訊協(xié)議。</p><p> 2 系統(tǒng)實現(xiàn)原理及硬件設(shè)計 </p><p> 2.1 系統(tǒng)實現(xiàn)原理</p><p> 在集中監(jiān)控系統(tǒng)中,一方面要與被監(jiān)控設(shè)備通信,發(fā)送各種控制命令和數(shù)據(jù)采集命令以便獲取當前設(shè)備的運行參數(shù);另一方面與中央監(jiān)控主機通信,單片機不但完成對上層控制命令的解析,并將上層命令轉(zhuǎn)換成被監(jiān)控設(shè)備的通信協(xié)議,同時也要講采集到的數(shù)據(jù)
16、進行分析,按照中央監(jiān)控軟件協(xié)議對數(shù)據(jù)進行打包處理。集中監(jiān)控系統(tǒng)的結(jié)構(gòu)框圖如圖1所示。</p><p> 圖1 集中監(jiān)控系統(tǒng)結(jié)構(gòu)框圖</p><p><b> 通訊協(xié)議</b></p><p> 通訊協(xié)議是應(yīng)用于電子控制器上的一種通用語言,規(guī)定了電子設(shè)備之間進行通訊的格式及方式,其中Modbus 協(xié)議是一種常見的通訊協(xié)議,但并沒有強制規(guī)定必
17、須使用該通訊協(xié)議進行通訊。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。此協(xié)議定義了一個控制器能認識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。它描述了一控制器請求訪問其它設(shè)備的過程,如果回應(yīng)來自其它設(shè)備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。</p><p&g
18、t; 智能協(xié)議轉(zhuǎn)換器的作用就是將不同廠家的設(shè)備通信協(xié)議轉(zhuǎn)換為中央監(jiān)控主機的通信協(xié)議。</p><p><b> 數(shù)據(jù)交換流程</b></p><p> 中央監(jiān)控主機發(fā)送廣播指令 協(xié)議轉(zhuǎn)換器接收指令,判斷是否需要回復(fù)數(shù)據(jù) 按照協(xié)議轉(zhuǎn)換格式對指令進行轉(zhuǎn)換 由協(xié)議轉(zhuǎn)換器將轉(zhuǎn)換后的數(shù)據(jù)幀發(fā)送到被監(jiān)控設(shè)備 被監(jiān)控設(shè)備按照私有的
19、通訊協(xié)議返回數(shù)據(jù)或執(zhí)行動作 由協(xié)議轉(zhuǎn)換器將被監(jiān)控設(shè)備返回的數(shù)據(jù)按照協(xié)議轉(zhuǎn)換格式進行轉(zhuǎn)換并回復(fù)到中央監(jiān)控主機 完成。</p><p> 根據(jù)以上的分析,該系統(tǒng)完成的主要任務(wù)是進行協(xié)議轉(zhuǎn)換。為了完成協(xié)議轉(zhuǎn)換,需要進行相應(yīng)的硬件設(shè)計和軟件設(shè)計。 </p><p> 2.2 系統(tǒng)硬件設(shè)計</p><p> 系統(tǒng)硬件設(shè)計主要完成通信口
20、擴展以及系統(tǒng)穩(wěn)定性、可靠性設(shè)計,如硬件看門狗、抗干擾等等。</p><p> 2.2.1通信接口的擴展</p><p> 由于電源廠家、UPS廠家、以及油機等都提供智能接口,對上層和下層均采用串口通信機制使得組網(wǎng)簡捷,通信簡單。MCS-51自身提供一個串口,采用串行接口芯片擴展串口資源,8251需要外加時鐘信號。</p><p> 為了使單片機可靠運行,增加其
21、抗干擾能力,采用可編程信號發(fā)生器4702為8251提供時鐘信號。</p><p> 在集中監(jiān)控系統(tǒng)中,單片機與不同型號被監(jiān)控設(shè)備通信,用單片機自身串口通信可方便地在軟件中設(shè)置通信波特率;基于單片機的協(xié)議轉(zhuǎn)換器與中央監(jiān)控主機則用8251通信,在同一網(wǎng)絡(luò)中,可固定4702向8251輸出時鐘的波特率。圖2所示虛線框內(nèi)為協(xié)議轉(zhuǎn)換器的結(jié)構(gòu)圖。</p><p> 圖2 協(xié)議轉(zhuǎn)化器結(jié)構(gòu)框圖</
22、p><p> 為了增加系統(tǒng)的擴展能力,協(xié)議轉(zhuǎn)換器上傳接口提供RS485接口標準。</p><p> RS485采用差分信號負邏輯,+2V~+6V表示“1”,- 6V~- 2V表示“0”。RS485有兩線制和四線制兩種接線,四線制是全雙工通訊方式,兩線制是半雙工通訊方式。在RS485通信網(wǎng)絡(luò)中一般采用的是主從通信方式,即一個主機帶多個從機。</p><p> RS4
23、85/MODBUS是現(xiàn)在流行的一種布網(wǎng)方式,其特點是實施簡單方便 ,而且現(xiàn)在支持RS485的儀表又特多,特別是在油品行業(yè)RS485/MODBUS簡直是一統(tǒng)天下,現(xiàn)在的儀表商也紛紛轉(zhuǎn)而支持RS485/MODBUS,原因很簡單,象原來的 HART儀表想買一個轉(zhuǎn)換口非常困難 而且價格昂貴,RS485的轉(zhuǎn)換接口就便宜的多而且種類繁多。至少在低端市場RS485/MODBUS還將是最主要的組網(wǎng)方式,近兩三年內(nèi)不會改變。圖3是485總線接口示意圖。&
24、lt;/p><p> 圖3 485總線接口示意圖</p><p> 2.2.2硬件看門狗設(shè)計</p><p> 當單片機程序跑飛,如果既沒有落入軟件陷阱,又沒有相應(yīng)的軟件冗余指令處理,程序?qū)⑻幱谒姥h(huán)狀態(tài)。而通信機房處于無人值守狀態(tài),一旦出現(xiàn)故障不可能去人工復(fù)位。采用硬件看門狗MAX813L芯片可以解決這一問題。該芯片在規(guī)定1.6S內(nèi)沒有得到喂狗信號,將單片機復(fù)
25、位。</p><p> 2.2.3抗外界干擾設(shè)計</p><p> 在單片機與被監(jiān)控設(shè)備通信,采用光耦器件,可以有效的一致尖峰脈沖及各種噪音干擾,提高通信的可靠性和抗干擾性。在動力監(jiān)控中,工作環(huán)境多為大電流環(huán)境,而協(xié)議轉(zhuǎn)換器均為數(shù)字信號,所以數(shù)據(jù)采集線和協(xié)議轉(zhuǎn)換器做好屏蔽工作以防止電磁干擾。</p><p> 2.3 主要硬件說明</p>&l
26、t;p> 2.3.1 單片機系統(tǒng)</p><p> 2.3.1.1 89C52單片機簡介</p><p> 本次設(shè)計采用的單片機是市面上較為常見的STC-89C52型單片機。 其主要特性有:</p><p> 1、工作電壓:5.5V~3.4V;</p><p> 2、ROM大小:8KB;</p><p&
27、gt; 3、RAM大?。?12B;</p><p> 4、工作頻率可到40MHz;</p><p> 5、工作溫度范圍:-40°~85°;</p><p> 6、塑料雙列直插式(PDIP)封裝</p><p> 2.3.1.2 89C52單片機的管腳</p><p><b>
28、 VCC:供電電壓。</b></p><p><b> GND:接地。</b></p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0
29、輸出原碼,此時P0外部必須被拉高。</p><p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2
30、口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。&l
31、t;/p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> P3口也可作為89C52的一些特殊功能口,如下表所示:</p><p> P3口同時為閃爍編程和編程校驗接收
32、一些控制信號。</p><p> RST:復(fù)位輸入。當振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p> ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要
33、注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將
34、不出現(xiàn)。</p><p> /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</
35、p><p> XTAL2:來自反向振蕩器的輸出。</p><p> XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p> 2
36、.3.2 可編程串行接口芯片8251A</p><p> 2.3.2.1 8251A的系統(tǒng)框圖</p><p> 圖4 8251A系統(tǒng)框圖</p><p> 2.3.2.1 8251A的組成部件及管腳介紹</p><p> 發(fā)送器:包括發(fā)送緩沖器、發(fā)送移位寄存器(并/串轉(zhuǎn)換)及發(fā)送控制電路三部分; 與發(fā)送器相關(guān)的引腳信號:</
37、p><p> TXD:數(shù)據(jù)發(fā)送線,輸出串行數(shù)據(jù);</p><p> TXRDY:發(fā)送器已準備信號,表示發(fā)送數(shù)據(jù)緩沖器已滿;</p><p> TXEMPTY:發(fā)送器空閑信號,表示發(fā)送移位寄存器已空;</p><p> /TXC:發(fā)送器時鐘信號,是外部輸入線;</p><p> 接收器:包括接收緩沖器、接收移位寄存
38、器及接收控制電路三部分;與接收器有關(guān)的引腳信號如下:</p><p> RXD:數(shù)據(jù)接收線,輸入串行數(shù)據(jù);</p><p> RXRDY:接收器已準備好信號,表示接收緩沖寄存器已接收到一個數(shù)據(jù)符號,等待向CPU輸入; </p><p> SYNDET/BRKDET:雙功能的檢測信號,高電平有效;</p><p> /RXC:接收器時鐘
39、,由外部輸入;此時鐘頻率決定8251A接收數(shù)據(jù)的速率;</p><p> 數(shù)據(jù)總線緩沖器:是CPU與8251A之間信息交換的通道。包含3個8位緩沖寄存器,其中兩個存放CPU向8251A讀取的數(shù)據(jù)及狀態(tài),當CPU執(zhí)行IN指令時,便從這2個寄存器中讀取數(shù)據(jù)字及狀態(tài)字;另一個緩沖寄存器存放CPU向8251A寫入的數(shù)據(jù)或控制字。當CPU執(zhí)行OUT指令時,可向這個寄存器寫入;</p><p>
40、讀/寫控制電路:與讀/寫控制電路接收的控制信號如下:</p><p> RESET:復(fù)位信號;輸入,高電平有效;</p><p> CLK:主時鐘;輸入,用來產(chǎn)生8251A內(nèi)部的定時信號;</p><p> /CS:片選信號;輸入,低電平有效;</p><p> /RD和/WR:讀和寫控制信號,輸入,低電平有效;</p>
41、<p> C//D:控制/數(shù)據(jù)信號;為1時表示當前通過數(shù)據(jù)總線傳送的是控制字或狀態(tài)信息;為0時表示當前傳送的是數(shù)據(jù); </p><p> 調(diào)制/解調(diào)控制電路:8251A與調(diào)制解調(diào)器之間的接口信號如下:</p><p> /DTR:數(shù)據(jù)終端準備好信號,向調(diào)制解調(diào)器輸出,低電平有效;有效表示CPU準備好接收數(shù)據(jù);</p><p> /DSR:數(shù)據(jù)裝置
42、準備好信號,由調(diào)制解調(diào)器輸入,低電平有效;有效表示調(diào)制解調(diào)器或外設(shè)已準備好發(fā)送數(shù)據(jù),實際上是對/DTR的應(yīng)答信號;</p><p> /RTS:請求發(fā)送信號,向調(diào)制解調(diào)器輸出,低電平有效。有效表示CPU已準備好發(fā)送數(shù)據(jù);</p><p> /CTS:清除發(fā)送信號,由調(diào)制解調(diào)器輸入,低電平有效;有效表示調(diào)制解調(diào)器已作好接收數(shù)據(jù)準備,只要控制字中TXEN位為1,發(fā)送器才可串行發(fā)送數(shù)據(jù);它實
43、際上是對/RTS的應(yīng)答信號;</p><p> 2.3.3 MAX813L芯片(看門狗及復(fù)位專用芯片)</p><p> 2.3.3.1 MAX813L芯片特點 · 加電、掉電以及供電電壓下降情況下的復(fù)位輸出,復(fù)位脈沖寬度典型值為200 ms。· 獨立的看門狗輸出,如果看門狗輸入在1.6 s內(nèi)未被觸發(fā),其輸出將變?yōu)楦唠娖健?#183; 1.25
44、 V門限值檢測器,用于電源故障報警、電池低電壓檢測或+5 V以外的電源。</p><p> · 門限電壓為4.65V· 低電平有效的手動復(fù)位輸入。· 8引腳DIP封裝。 2.3.3.2 MAX813L的引腳及功能 MAX813L芯片引腳排列見圖1—12.3.3.3引腳功能及工作原理說明(1)手動復(fù)位輸入端() 當該
45、端輸入低電平保持140 ms以上,MAX813L就輸出復(fù)位信號.該輸入端的最小輸入脈寬要求可以有效地消除開關(guān)的抖動。與TTL/CMOS兼容。(2)工作電源端(VCC):接+5V電源。(3)電源接地端(GND):接0 V參考電平。(4)電源故障輸入端(PFI):當該端輸入電壓低于1.25 V時,5號引腳輸出端的信號由高電平變?yōu)榈碗娖健?5)電源故障輸出端() 電源正常時,保持高電平,電源電壓變低或掉電時,輸出由高電平變?yōu)榈碗娖?/p>
46、。(6)看門狗信號輸入端(WDI) 程序正常運行時,必須在小于1.6 s的時間間隔內(nèi)向該輸入端發(fā)送一個脈沖信號,以清除芯片內(nèi)部的看門狗定時器。若超過1.6 s該輸入端收不到脈沖信號,則內(nèi)部定時器溢出,8號引腳由高電平變?yōu)榈碗娖健?7)復(fù)位信號輸出端(RST) 上電時,自動產(chǎn)生200 ms的復(fù)位脈</p><p> 2.3.4 MAX485接口芯片介紹</p><p> MA
47、X485是用于RS-485與RS-422通信的低功耗收發(fā)器,每個器件中都具有一個驅(qū)動器和一個接收器。MAX485的驅(qū)動器擺率不受限制,可以實現(xiàn)最高2.5Mbps的傳輸速率。這些收發(fā)器在驅(qū)動器禁用的空載或滿載狀態(tài)下,吸取的電源電流在120(A 至500(A 之間。另外,MAX481、MAX483與MAX487具有低電流關(guān)斷模式, 僅消耗0.1µA。所有器件都工作在5V單電源下。驅(qū)動器具有短路電流限制,并可以通過熱關(guān)斷電路將驅(qū)動器
48、輸出置為高阻狀態(tài),防止過度的功率損耗。接收器輸入具有失效保護特性,當輸入開路時,可以確保邏輯高電平輸出。</p><p> MAX485通訊程序與MAX232通訊程序在本質(zhì)上是一樣的,只是MAX485通訊程序需要加上通訊方向控制。下面是基于mega128 16AU的485通信中斷接收的程序,調(diào)試通過,晶振為外部16M,MAX485的DE和RE短接連PC0口, 程序如下: #define SEND_
49、485 PORTC|=0x01 #define READ_485 PORTC&=0xfe void Usart1_init(void) //16Mhz頻率,設(shè)置波特率9.6k,8位數(shù)據(jù)位,無校驗,接收發(fā)送使能,1位停止位 { UBRR1H=0; UBRR1L=103; &
50、#160; UCSR1B=(1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1); //發(fā)送接收使能,使用中斷方式, UCSR1C=(1<<UCSZ10)|(1<<UCSZ11); //0x06 8位數(shù)據(jù),1位停止位,無校驗 } void
51、 Usart1_transmit(unsigned char c) //查詢方式發(fā)送接收字符函數(shù) { SEND_485; DelayBu</p><p><b> 3 系統(tǒng)軟件設(shè)計</b></p><p> 3.1 數(shù)據(jù)采
52、集方案設(shè)計</p><p> 基于單片機的協(xié)議轉(zhuǎn)換器實現(xiàn)協(xié)議的轉(zhuǎn)換有三種類型命令。</p><p> 第一類是數(shù)據(jù)采集命令,當中央監(jiān)控主機沒有發(fā)送任何命令的時候,單片機自己采用輪詢方式向被監(jiān)控設(shè)備依次下發(fā)各種數(shù)據(jù)采集命令,對被監(jiān)控設(shè)備的信息解析,并且進行數(shù)據(jù)類型轉(zhuǎn)換和數(shù)據(jù)重新排序等操作,整合成符合內(nèi)部協(xié)議的數(shù)據(jù),并存放在數(shù)據(jù)緩沖區(qū)中備查。當中央監(jiān)控主機發(fā)出輪詢命令是,單片機可以直接將數(shù)
53、據(jù)緩沖區(qū)中的直接向上發(fā)送而不必考慮可能的時間延遲,這樣可以提高整個運行網(wǎng)絡(luò)的巡檢速度。</p><p> 第二類是控制命令(如開關(guān)機命令),單片機首先要向中央監(jiān)控主機返回已經(jīng)接收到中央監(jiān)控主機的控制命令,然后由單片機根據(jù)被監(jiān)控設(shè)備的通訊協(xié)議格式向被監(jiān)控設(shè)備發(fā)送相應(yīng)的控制指令。</p><p> 第三類是實時數(shù)據(jù)采集命令,協(xié)議轉(zhuǎn)換器不僅要接收中央監(jiān)控主機命令和向監(jiān)控設(shè)備發(fā)送命令,而且還要
54、等協(xié)議轉(zhuǎn)換器將采集到的數(shù)據(jù)拆解整合后發(fā)送給中央監(jiān)控主機,可見這種方式耗時較多。由于在動力監(jiān)控中,數(shù)據(jù)更新不是特別快,一般不特別強調(diào)數(shù)據(jù)的實時性,可以采用第一種類型命令讓中央監(jiān)控主機直接從單片機的數(shù)據(jù)緩沖區(qū)讀取被監(jiān)控設(shè)備運行參數(shù)。</p><p> 對于這三種類型的命令處理,如軟件流程圖5所示,當有控制命令時首先處理控制命令,其次處理實時數(shù)據(jù)采集命令,最后處理數(shù)據(jù)采集命令。</p><p>
55、;<b> 圖5 軟件流程圖</b></p><p> 3.2軟件看門狗設(shè)計</p><p> 單片機系統(tǒng)中,為了提高程序的運行可靠性,利用單片機硬件定時器中斷,可以很容易實現(xiàn)軟件看門狗。在程序中的接受中央監(jiān)控主機命令和向受監(jiān)控設(shè)備發(fā)送命令這兩個關(guān)鍵步驟設(shè)置軟件狗,為了程序由于意外情況發(fā)生,使單片機始終處于接受數(shù)據(jù)狀態(tài)或者發(fā)送數(shù)據(jù)狀態(tài)時,就可以利用軟件看門狗跳
56、出死循環(huán)。</p><p> 在系統(tǒng)程序中,根據(jù)要求件事時間的長短去設(shè)置“標志”,一旦程序沒有在給定的時間重置標志值,就導(dǎo)致系統(tǒng)復(fù)位。具體實現(xiàn)方法是在程序中設(shè)定查詢“標志”,查詢后清零或減1,,直到標志為0時,執(zhí)行復(fù)位指令或轉(zhuǎn)向出錯處理程序,并在出錯處理程序中完成各種后續(xù)工作,再使系統(tǒng)復(fù)位。</p><p> 3.3數(shù)據(jù)幀傳輸設(shè)計</p><p> 為了使整個
57、監(jiān)控系統(tǒng)高可靠性地傳輸數(shù)據(jù),數(shù)據(jù)采用幀結(jié)構(gòu)形式傳輸。幀格式如圖5所示。</p><p><b> 圖5 數(shù)據(jù)幀結(jié)構(gòu)</b></p><p> 監(jiān)控采用主從呼應(yīng)方式,這樣可以避免多個現(xiàn)場節(jié)點同時呼叫而出現(xiàn)通信阻塞。</p><p> 受控設(shè)備接受一幀命令,回應(yīng)一幀數(shù)據(jù)。在一個監(jiān)控系統(tǒng)中,同一時刻只能有一個設(shè)備發(fā)送信息,但有多個設(shè)備接受信息
58、。</p><p> 中央監(jiān)控主機首先按照幀結(jié)構(gòu)向單個或多個協(xié)議轉(zhuǎn)換器發(fā)送命令,單片機按照幀結(jié)構(gòu)對命令進行解析,并把它轉(zhuǎn)化為符合被監(jiān)控設(shè)備協(xié)議的命令,然后采集數(shù)據(jù),同時將采集的數(shù)據(jù)進行分析,并把它轉(zhuǎn)化為符合中央監(jiān)控主機的幀結(jié)構(gòu)的形式,用單片機實現(xiàn)協(xié)議的轉(zhuǎn)換。</p><p> 3.3.1 Modbus 協(xié)議簡介 </p><p> Modbus 協(xié)議是應(yīng)用于電
59、子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。此協(xié)議定義了一個控制器能認識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。它描述了一控制器請求訪問其它設(shè)備的過程,如果回應(yīng)來自其它設(shè)備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。 </p><p&
60、gt; 當在一Modbus網(wǎng)絡(luò)上通信時,此協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯誤檢測的方法。 </p><p> 1、在Modbus網(wǎng)絡(luò)上轉(zhuǎn)輸 </p>&l
61、t;p> 標準的Modbus口是使用一RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗??刂破髂苤苯踊蚪?jīng)由Modem組網(wǎng)。 </p><p> 控制器通信使用主—從技術(shù),即僅一設(shè)備(主設(shè)備)能初始化傳輸(查詢)。其它設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)作出相應(yīng)反應(yīng)。典型的主設(shè)備:主機和可編程儀表。典型的從設(shè)備:可編程控制器。 </p><p>
62、; 主設(shè)備可單獨和從設(shè)備通信,也能以廣播方式和所有從設(shè)備通信。如果單獨通信,從設(shè)備返回一消息作為回應(yīng),如果是以廣播方式查詢的,則不作任何回應(yīng)。Modbus協(xié)議建立了主設(shè)備查詢的格式:設(shè)備(或廣播)地址、功能代碼、所有要發(fā)送的數(shù)據(jù)、一錯誤檢測域。 </p><p> 從設(shè)備回應(yīng)消息也由Modbus協(xié)議構(gòu)成,包括確認要行動的域、任何要返回的數(shù)據(jù)、和一錯誤檢測域。如果在消息接收過程中發(fā)生一錯誤,或從設(shè)備不能執(zhí)行其命
63、令,從設(shè)備將建立一錯誤消息并把它作為回應(yīng)發(fā)送出去。 </p><p> 2、在其它類型網(wǎng)絡(luò)上轉(zhuǎn)輸 </p><p> 在其它網(wǎng)絡(luò)上,控制器使用對等技術(shù)通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設(shè)備也可作為從設(shè)備。提供的多個內(nèi)部通道可允許同時發(fā)生的傳輸進程。 </p><p> 在消息位,Modbus協(xié)議仍提供了主—從原
64、則,盡管網(wǎng)絡(luò)通信方法是“對等”。如果一控制器發(fā)送一消息,它只是作為主設(shè)備,并期望從從設(shè)備得到回應(yīng)。同樣,當控制器接收到一消息,它將建立一從設(shè)備回應(yīng)格式并返回給發(fā)送的控制器。 </p><p> 3.3.2查詢—回應(yīng)周期 </p><p><b> 查詢 </b></p><p> 查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)
65、段包含了從設(shè)備要執(zhí)行功能的任何附加信息。例如功能代碼03是要求從設(shè)備讀保持寄存器并返回它們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開始讀及要讀的寄存器數(shù)量。錯誤檢測域為從設(shè)備提供了一種驗證消息內(nèi)容是否正確的方法。 </p><p><b> 回應(yīng) </b></p><p> 如果從設(shè)備產(chǎn)生一正常的回應(yīng),在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回
66、應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù):象寄存器值或狀態(tài)。如果有錯誤發(fā)生,功能代碼將被修改以用于指出回應(yīng)消息是錯誤的,同時數(shù)據(jù)段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設(shè)備確認消息內(nèi)容是否可用。 </p><p> 3.3.3兩種傳輸方式 </p><p> 控制器能設(shè)置為兩種傳輸模式(ASCII或RTU)中的任何一種在標準的Modbus網(wǎng)絡(luò)通信。用戶選擇想要的模式,包括串口通信參數(shù)(波
67、特率、校驗方式等),在配置每個控制器的時候,在一個Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。 </p><p> 所選的ASCII或RTU方式僅適用于標準的Modbus網(wǎng)絡(luò),它定義了在這些網(wǎng)絡(luò)上連續(xù)傳輸?shù)南⒍蔚拿恳晃?以及決定怎樣將信息打包成消息域和如何解碼。 </p><p> 在其它網(wǎng)絡(luò)上(象MAP和Modbus Plus)Modbus消息被轉(zhuǎn)成與串行傳輸無
68、關(guān)的幀。 </p><p> 1、ASCII模式 </p><p> 當控制器設(shè)為在Modbus網(wǎng)絡(luò)上以ASCII(美國標準信息交換代碼)模式通信,在消息中的每個8Bit字節(jié)都作為兩個ASCII字符發(fā)送。這種方式的主要優(yōu)點是字符發(fā)送的時間間隔可達到1秒而不產(chǎn)生錯誤。 </p><p><b> 代碼系統(tǒng) </b></p>&
69、lt;p> · 十六進制,ASCII字符0...9,A...F </p><p> · 消息中的每個ASCII字符都是一個十六進制字符組成 </p><p><b> 每個字節(jié)的位 </b></p><p><b> · 1個起始位 </b></p><p&g
70、t; · 7個數(shù)據(jù)位,最小的有效位先發(fā)送 </p><p> · 1個奇偶校驗位,無校驗則無 </p><p> CRC域是兩個字節(jié),包含一16位的二進制值。它由傳輸設(shè)備計算后加入到消息中。接收設(shè)備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。 </p><p> CRC是先調(diào)入一值是全“1”的16位寄存
71、器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)各當前寄存器中的值進行處理。僅每個字符中的8Bit數(shù)據(jù)對CRC有效,起始位和停止位以及奇偶校驗位均無效。 </p><p> CRC產(chǎn)生過程中,每個8位字符都單獨和寄存器內(nèi)容相或(OR),結(jié)果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預(yù)置的值或一下,如果LSB為0,則不進行。整個過程要重復(fù)8次。在最后一位(第8位)完成后,
72、下一個8位字節(jié)又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。 </p><p> CRC添加到消息中時,低字節(jié)先加入,然后高字節(jié)。 </p><p> CRC簡單函數(shù)如下: </p><p> unsigned short CRC16(puchMsg, usDataLen) </p><p>
73、unsigned char *puchMsg ; /* 要進行CRC校驗的消息 */ </p><p> unsigned short usDataLen ; /* 消息中字節(jié)數(shù) */ </p><p><b> { </b></p><p> unsigned char uchCRCHi = 0xFF ; /* 高CRC字節(jié)初始化 */
74、 </p><p> unsigned char uchCRCLo = 0xFF ; /* 低CRC 字節(jié)初始化 */ </p><p> unsigned uIndex ; /* CRC循環(huán)中的索引 */ </p><p> while (usDataLen--) /* 傳輸消息緩沖區(qū) */ </p><p><b> {
75、 </b></p><p> uIndex = uchCRCHi ^ *puchMsgg++ ; /* 計算CRC */ </p><p> uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ; </p><p> uchCRCLo = auchCRCLo[uIndex] ; </p><p>
76、<b> } </b></p><p> return (uchCRCHi << 8 uchCRCLo) ; </p><p><b> } </b></p><p> /* CRC 高位字節(jié)值表 */ </p><p> static unsigned char auchCR
77、CHi[] = { </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, </p><p> 0x00, 0xC1, 0x81, 0x4
78、0, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, </p><
79、;p> 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, </p><p> 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0
80、, 0x80, 0x41, </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, </p><p> 0x01, 0xC0, 0x80,
81、 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, </p><p> 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, </p>
82、<p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, </p><p> 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00,
83、0xC1, 0x81, 0x40, </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, </p><p> 0x00, 0xC1, 0
84、x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, </p><p> 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, </p&
85、gt;<p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, </p><p> 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, </p><p> 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x
86、01, 0xC0, 0x80, 0x41, </p><p> 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, </p><p> 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 </p><p><b> } ; </b></p>
87、<p> /* CRC低位字節(jié)值表*/ </p><p> static char auchCRCLo[] = { </p><p> 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, </p><p> 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04,
88、0xCC, 0x0C, 0x0D, 0xCD, </p><p> 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, </p><p> 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, </p><p> 0x1E, 0
89、xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, </p><p> 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, </p><p> 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, &
90、lt;/p><p> 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, </p><p> 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, </p><p> 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x
91、38, 0x28, 0xE8, 0xE9, 0x29, </p><p> 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, </p><p> 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, </p><p> 0x2
92、2, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, </p><p> 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, </p><p> 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6
93、F, </p><p> 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, </p><p> 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, </p><p> 0x7F, 0xBF, 0x7D, 0xBD, 0xBC
94、, 0x7C, 0xB4, 0x74, 0x75, 0xB5, </p><p> 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, </p><p> 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, </p><p>
95、 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, </p><p> 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, </p><p> 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B,
96、 0x8B, </p><p> 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, </p><p> 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, </p><p> 0x43, 0x83, 0x41, 0x81,
97、0x80, 0x40 </p><p><b> } ; </b></p><p> ModBus網(wǎng)絡(luò)是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過程監(jiān)控。下表1是ModBus的功能碼定義。 </p><p> 表1 ModBus功能
98、碼 </p><p> 01 READ COIL STATUS </p><p> 02 READ INPUT STATUS </p><p> 03 READ HOLDING REGISTER </p><p> 04 READ INPUT REGISTER </p><p> 05 WRITE SINGL
99、E COIL </p><p> 06 WRITE SINGLE REGISTER </p><p> 15 WRITE MULTIPLE COIL </p><p> 16 WRITE MULTIPLE REGISTER </p><p> ModBus網(wǎng)絡(luò)只是一個主機,所有通信都由他發(fā)出。網(wǎng)絡(luò)可支持247個之多的遠程從屬控制器,但
100、實際所支持的從機數(shù)要由所用通信設(shè)備決定。采用這個系統(tǒng),各PC可以和中心主機交換信息而不影響各PC執(zhí)行本身的控制任務(wù)。 </p><p> ?。?)ModBus的傳輸方式 </p><p> 在ModBus系統(tǒng)中有2種傳輸模式可選擇。這2種傳輸模式與從機PC通信的能力是同等的。選擇時應(yīng)視所用ModBus主機而定,每個ModBus系統(tǒng)只能使用一種模式,不允許2種模式混用。一種模式是ASCII
101、(美國信息交換碼),另一種模式是RTU(遠程終端設(shè)備)這兩種模式的定義見表3 </p><p> 表3 ASCII和RTU傳輸模式的特性 </p><p> ASCII可打印字符便于故障檢測,而且對于用高級語言(如Fortan)編程的主計算機及主PC很適宜。RTU則適用于機器語言編程的計算機和PC主機。 </p><p> 用RTU模式傳輸?shù)臄?shù)據(jù)是8位二進制字
102、符。如欲轉(zhuǎn)換為ASCII模式,則每個RTU字符首先應(yīng)分為高位和低位兩部分,這兩部分各含4位,然后轉(zhuǎn)換成十六進制等量值。用以構(gòu)成報文的ASCII字符都是十六進制字符。ASCII模式使用的字符雖是RTU模式的兩倍,但ASCII數(shù)據(jù)的譯瑪和處理更為容易一些,此外,用RTU模式時報文字符必須以連續(xù)數(shù)據(jù)流的形式傳送,用ASCII模式,字符之間可產(chǎn)生長達1s的間隔,以適應(yīng)速度較快的機器。 </p><p> ?。?)ModB
103、us的數(shù)據(jù)校驗方式 </p><p> CRC-16(循環(huán)冗余錯誤校驗) </p><p> CRC-16錯誤校驗程序如下:報文(此處只涉及數(shù)據(jù)位,不指起始位、停止位和任選的奇偶校驗位)被看作是一個連續(xù)的二進制,其最高有效位(MSB)首選發(fā)送。報文先與X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示為二進制數(shù)1100000000
104、0000101。整數(shù)商位忽略不記,16位余數(shù)加入該報文(MSB先發(fā)送),成為2個CRC校驗字節(jié)。余數(shù)中的1全部初始化,以免所有的零成為一條報文被接收。經(jīng)上述處理而含有CRC字節(jié)的報文,若無錯誤,到接收設(shè)備后再被同一多項式(X↑16+X↑15+X↑2+1)除,會得到一個零余數(shù)(接收設(shè)備核驗這個CRC字節(jié),并將其與被傳送的CRC比較)。全部運算以2為模(無進位)。 </p><p> 習(xí)慣于成串發(fā)送數(shù)據(jù)的設(shè)備會首選
105、送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發(fā)送首位應(yīng)是被除數(shù)的最高有效位MSB。由于在運算中不用進位,為便于操作起見,計算CRC時設(shè)MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其只對商有影響而不影響余數(shù)。 </p><p> 生成CRC-16校驗字節(jié)的步驟如下: </p><p> ①裝如一個16位寄存器,所有數(shù)位均為1。 &
106、lt;/p><p> ②該16位寄存器的高位字節(jié)與開始8位字節(jié)進行“異或”運算。運算結(jié)果放入這個16位寄存器。 </p><p> ?、郯堰@個16寄存器向右移一位。 </p><p> ?、苋粝蛴遥擞浳唬┮瞥龅臄?shù)位是1,則生成多項式1010000000000001和這個寄存器進行“異或”運算;若向右移出的數(shù)位是0,則返回③。 </p><p>
107、; ?、葜貜?fù)③和④,直至移出8位。 </p><p> ?、蘖硗?位與該十六位寄存器進行“異或”運算。 </p><p> ?、咧貜?fù)③~⑥,直至該報文所有字節(jié)均與16位寄存器進行“異或”運算,并移位8次。 </p><p> ⑧這個16位寄存器的內(nèi)容即2字節(jié)CRC錯誤校驗,被加到報文的最高有效位。 </p><p> 另外,在某些非Mod
108、Bus通信協(xié)議中也經(jīng)常使用CRC16作為校驗手段,而且產(chǎn)生了一些CRC16的變種,他們是使用CRC16多項式X↑16+X↑15+X↑2+1,單首次裝入的16位寄存器為0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次裝入寄存器值為0000或FFFFH。 </p><p> LRC(縱向冗余錯誤校驗) </p><p> LRC錯誤校驗用于ASCII模式。這個錯誤校驗是一
109、個8位二進制數(shù),可作為2個ASCII十六進制字節(jié)傳送。把十六進制字符轉(zhuǎn)換成二進制,加上無循環(huán)進位的二進制字符和二進制補碼結(jié)果生成LRC錯誤校驗(參見圖)。這個LRC在接收設(shè)備進行核驗,并與被傳送的LRC進行比較,冒號(:)、回車符號(CR)、換行字符(LF)和置入的其他任何非ASCII十六進制字符在運算時忽略不計</p><p><b> 4 總結(jié)與體會</b></p>&
110、lt;p> 為了組網(wǎng)方便,上述監(jiān)控系統(tǒng)的所有數(shù)據(jù)都用串口方式采集和傳輸,如果受監(jiān)控設(shè)備提供智能串口,可以直接連接組網(wǎng),如果受監(jiān)控設(shè)備提供的不是標準的串口,而是其他接口(如RS485/422、CAN),則可以用相關(guān)的接口轉(zhuǎn)換器對接口標準進行轉(zhuǎn)換。對于沒有智能接口的設(shè)備,可以采用專門的數(shù)據(jù)采集器采集數(shù)據(jù)進行連接組網(wǎng)。</p><p> 雖然網(wǎng)絡(luò)技術(shù)不斷發(fā)展,但各個廠商為了保證數(shù)據(jù)傳輸?shù)目煽啃裕渲悄軈f(xié)議接口
111、仍然以RS232和RS485/422接口為主,因此,基于單片機的智能協(xié)議轉(zhuǎn)換器仍然可以發(fā)揮其作用。但是,協(xié)議轉(zhuǎn)換器與中央監(jiān)控主機之間的數(shù)據(jù)傳輸方式卻有了相應(yīng)的發(fā)展,已經(jīng)有不少廠商采用TCP/IP進行上層數(shù)據(jù)的傳輸,以便適應(yīng)更多的功能需要。</p><p> 在實際使用過程中,為了適應(yīng)一部分惡劣的環(huán)境,在協(xié)議轉(zhuǎn)換器接口部分做了一些硬件的優(yōu)化,如:為了提高防雷效果,每個接口增加了防雷電路;為了提高接口的適應(yīng)能力,增
112、加了多接口同源設(shè)計。</p><p> 基于單片機的智能協(xié)議轉(zhuǎn)化器不僅可以用于動力集中監(jiān)控系統(tǒng)中,而且還可以用于其它數(shù)據(jù)傳輸場合如樓宇自控、DCS等等。</p><p><b> 參考文獻</b></p><p> 1 何立民.MCS-51系列單片機應(yīng)用系統(tǒng)設(shè)計系統(tǒng)配置與接口技術(shù).北京:北京航空航天大學(xué)出版社. 2003</p&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的智能搶答器設(shè)計畢業(yè)設(shè)計
- 基于單片機的智能搶答器設(shè)計_畢業(yè)設(shè)計
- 基于單片機的智能定時器畢業(yè)設(shè)計
- 基于單片機的智能pid控制器設(shè)計畢業(yè)設(shè)計
- 基于單片機的智能散熱器的畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的智能窗簾設(shè)計
- 基于單片機的智能小車設(shè)計畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的智能信號發(fā)生器設(shè)計
- 畢業(yè)設(shè)計--基于單片機的智能信號發(fā)生器設(shè)計
- 基于單片機的智能時鐘畢業(yè)設(shè)計
- 基于單片機的智能小車畢業(yè)設(shè)計
- 畢業(yè)設(shè)計----基于單片機的智能冰箱控制器
- 畢業(yè)設(shè)計--基于單片機的智能小車的設(shè)計
- 畢業(yè)設(shè)計論文----基于單片機的智能搶答器
- 基于單片機的智能遙控窗簾設(shè)計【畢業(yè)設(shè)計】
- 基于單片機的wifi智能小車設(shè)計 畢業(yè)設(shè)計
- 基于單片機的智能尋跡小車設(shè)計畢業(yè)設(shè)計
- 畢業(yè)設(shè)計----基于單片機的智能臺燈系統(tǒng)設(shè)計
- 基于單片機的wifi智能小車設(shè)計 畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的電動智能小車設(shè)計
評論
0/150
提交評論