基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc_第1頁(yè)
基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc_第2頁(yè)
基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc_第3頁(yè)
基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc_第4頁(yè)
基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc_第5頁(yè)
已閱讀5頁(yè),還剩84頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載

微服務(wù)系統(tǒng)設(shè)計(jì)方案基于SpringCloud-微服務(wù)系統(tǒng)設(shè)計(jì)方案【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載微服務(wù)本質(zhì) 微服務(wù)架構(gòu)從本質(zhì)上說(shuō)其實(shí)就是分布式架構(gòu),與其說(shuō)是一種新架構(gòu),不如說(shuō)是一種微服務(wù)架構(gòu)風(fēng)格。?簡(jiǎn)單來(lái)說(shuō),微服務(wù)架構(gòu)風(fēng)格是要開(kāi)發(fā)一種由多個(gè)小服務(wù)組成的應(yīng)用。每個(gè)服務(wù)運(yùn)行于獨(dú)立的進(jìn)程,并且采用輕量級(jí)交互.多數(shù)情況下是一個(gè)HTTP的資源API.這些服務(wù)具備獨(dú)立業(yè)務(wù)能力并可以通過(guò)自動(dòng)化部署方式獨(dú)立部署。這種風(fēng)格使最小化集中管理,從而可以使用多種不同的編程語(yǔ)言和數(shù)據(jù)存儲(chǔ)技術(shù)。?對(duì)于微服務(wù)架構(gòu)系統(tǒng),由于其服務(wù)粒度小,模塊化清晰,因此首先要做的是對(duì)系統(tǒng)整體進(jìn)行功能、服務(wù)規(guī)劃,優(yōu)先考慮如何在交付過(guò)程中,從工程實(shí)踐出發(fā),組織好代碼結(jié)構(gòu)、配置、測(cè)試、部署、運(yùn)維、監(jiān)控的整個(gè)過(guò)程,從而有效體現(xiàn)微服務(wù)的獨(dú)立性與可部署性。 本文將從微服務(wù)系統(tǒng)的設(shè)計(jì)階段、開(kāi)發(fā)階段、測(cè)試階段、部署階段進(jìn)行綜合闡述。?理解微服務(wù)架構(gòu)和理念是核心。系統(tǒng)環(huán)境名稱(chēng)版本說(shuō)明JDK1。8SpringBootSpringFrameworkRibbonkafkaRabbitMQ微服務(wù)架構(gòu)的挑戰(zhàn)可靠性:由于采用遠(yuǎn)程調(diào)用的方式,任何一個(gè)節(jié)點(diǎn)、網(wǎng)絡(luò)出現(xiàn)問(wèn)題,都將使得服務(wù)調(diào)用失敗,隨著微服務(wù)數(shù)量的增多,潛在故障點(diǎn)也將增多。也就是沒(méi)有充分的保障機(jī)制,則單點(diǎn)故障會(huì)大量增加.運(yùn)維要求高: ?系統(tǒng)監(jiān)控、高可用性、自動(dòng)化技術(shù)分布式復(fù)雜性:??網(wǎng)絡(luò)延遲、系統(tǒng)容錯(cuò)、分布式事務(wù)部署依賴(lài)性強(qiáng):? 服務(wù)依賴(lài)、多版本問(wèn)題性能(服務(wù)間通訊成本高):? 無(wú)狀態(tài)性、進(jìn)程間調(diào)用、跨網(wǎng)絡(luò)調(diào)用?數(shù)據(jù)一致性:? 分布式事務(wù)管理需要跨越多個(gè)節(jié)點(diǎn)來(lái)保證數(shù)據(jù)的瞬時(shí)一致性,因此比起傳統(tǒng)的單體架構(gòu)的事務(wù),成本要高得多。另外,在分布式系統(tǒng)中,通常會(huì)考慮通過(guò)數(shù)據(jù)的最終一致性來(lái)解決數(shù)據(jù)瞬時(shí)一致帶來(lái)的系統(tǒng)不可用。重復(fù)開(kāi)發(fā): ?微服務(wù)理念崇尚每個(gè)微服務(wù)作為一個(gè)產(chǎn)品看待,有自己的團(tuán)隊(duì)開(kāi)發(fā),甚至可以有自己完全不同的技術(shù)、框架,那么與其他微服務(wù)團(tuán)隊(duì)的技術(shù)共享就產(chǎn)生了矛盾,重復(fù)開(kāi)發(fā)的工作即產(chǎn)生了。?沒(méi)有最好的,只有最適合自己的。架構(gòu)設(shè)計(jì)思維設(shè)計(jì)?微服務(wù)架構(gòu)設(shè)計(jì)的根本目的是實(shí)現(xiàn)價(jià)值交付,微服務(wù)架構(gòu)只有遵循DevOps理念方可進(jìn)行的更順暢,思維方式的轉(zhuǎn)變是最重要的。實(shí)現(xiàn)微服務(wù)技術(shù)架構(gòu),現(xiàn)有產(chǎn)品需要進(jìn)行技術(shù)上的改進(jìn)以及相關(guān)配套服務(wù)的實(shí)現(xiàn),采用分階段實(shí)施、以及試點(diǎn)產(chǎn)品優(yōu)先實(shí)施的策略,主要包括如下:?一、技術(shù)上的改進(jìn):?1、前后端分離,web前端通過(guò)Http/Https協(xié)議調(diào)用微服務(wù)的API網(wǎng)關(guān),由API網(wǎng)關(guān)再經(jīng)過(guò)路由服務(wù)調(diào)用相應(yīng)的微服務(wù)?2、不同微服務(wù)之間通過(guò)REST方式互相調(diào)用?3、微服務(wù)之間通過(guò)消息中間件實(shí)現(xiàn)消息交互機(jī)制?二、配套服務(wù)與功能實(shí)現(xiàn): 1、需要進(jìn)行相應(yīng)的自動(dòng)化服務(wù)實(shí)現(xiàn),包括自動(dòng)化構(gòu)建、自動(dòng)化安裝部署、自動(dòng)化測(cè)試、自動(dòng)化平臺(tái)發(fā)布(Docker實(shí)現(xiàn))?2、管理服務(wù),對(duì)于微服務(wù)架構(gòu),必須配套相應(yīng)的監(jiān)控與管理服務(wù)、日志管理服務(wù)等?3、協(xié)作服務(wù),運(yùn)用DevOps思想提升開(kāi)發(fā)、測(cè)試、運(yùn)維的高效溝通與協(xié)作,實(shí)現(xiàn)開(kāi)發(fā)與運(yùn)維的一體化微服務(wù)架構(gòu)設(shè)計(jì)?

1、我們把整個(gè)系統(tǒng)根據(jù)業(yè)務(wù)拆分成若干個(gè)子系統(tǒng)或微服務(wù).

2、每個(gè)子系統(tǒng)可以部署多個(gè)應(yīng)用,多個(gè)應(yīng)用之間使用負(fù)載均衡。

3、需要一個(gè)服務(wù)注冊(cè)中心Eureka,所有的服務(wù)都在注冊(cè)中心注冊(cè),負(fù)載均衡也是通過(guò)在注冊(cè)中心注冊(cè)的服務(wù)來(lái)使用一定策略來(lái)實(shí)現(xiàn)。? Eureka可部署多個(gè),進(jìn)行高可用保證。

4、所有的客戶(hù)端都通過(guò)同一個(gè)網(wǎng)關(guān)地址訪問(wèn)后臺(tái)的服務(wù),通過(guò)路由配置ZUUL網(wǎng)關(guān)來(lái)判斷一個(gè)URL請(qǐng)求由哪個(gè)服務(wù)處理.請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)上的時(shí)候使用負(fù)載均衡Ribbon。

5、服務(wù)之間采用feign進(jìn)行調(diào)用.

6、使用斷路器hystrix,及時(shí)處理服務(wù)調(diào)用時(shí)的超時(shí)和錯(cuò)誤,防止由于其中一個(gè)服務(wù)的問(wèn)題而導(dǎo)致整體系統(tǒng)的癱瘓。

7、還需要一個(gè)監(jiān)控功能,監(jiān)控每個(gè)服務(wù)調(diào)用花費(fèi)的時(shí)間等.8、使用SpringCloudConfig進(jìn)行統(tǒng)一的配置管理,需要考慮與公司的配置管理平臺(tái)如何配合使用。?9、Hystrix,監(jiān)控和斷路器.我們只需要在服務(wù)接口上添加Hystrix標(biāo)簽,就可以實(shí)現(xiàn)對(duì)這個(gè)接口的監(jiān)控和斷路器功能。

10、HystrixDashboard,監(jiān)控面板,他提供了一個(gè)界面,可以監(jiān)控各個(gè)服務(wù)上的服務(wù)調(diào)用所消耗的時(shí)間等。

11、Turbine,監(jiān)控聚合,使用Hystrix監(jiān)控,我們需要打開(kāi)每一個(gè)服務(wù)實(shí)例的監(jiān)控信息來(lái)查看。而Turbine可以幫助我們把所有的服務(wù)實(shí)例的監(jiān)控信息聚合到一個(gè)地方統(tǒng)一查看。這樣就不需要挨個(gè)打開(kāi)一個(gè)個(gè)的頁(yè)面一個(gè)個(gè)查看。架構(gòu)的可靠性保證:?在關(guān)鍵節(jié)點(diǎn)做主備、集群部署,防止單點(diǎn)故障.待后續(xù)確認(rèn)問(wèn)題: 1、AccessControl:Zuul網(wǎng)關(guān)提供了相關(guān)控制功能,與我司CAS如何結(jié)合使用?2、ConfigServer:SpringCloud提供了遠(yuǎn)程配置中心,與我司的配置管理平臺(tái)如何結(jié)合使用設(shè)計(jì)階段總體設(shè)計(jì) 1、功能規(guī)劃:對(duì)產(chǎn)品功能進(jìn)行拆分,拆分為若干個(gè)微服務(wù);一個(gè)功能可以創(chuàng)建多個(gè)微服務(wù)并部署在多個(gè)服務(wù)器節(jié)點(diǎn)上,以便進(jìn)行負(fù)載均衡。 2、設(shè)計(jì)原子服務(wù)層,梳理和抽取核心應(yīng)用、公共應(yīng)用,作為獨(dú)立的服務(wù)下沉到核心和公共能力層,逐漸形成穩(wěn)定的服務(wù)中心,使應(yīng)用能更快速的響應(yīng)多變的客戶(hù)需求。?3、為每個(gè)服務(wù)設(shè)計(jì)API接口(REST方式)?4、為不同的服務(wù)進(jìn)行分類(lèi),不同類(lèi)型的服務(wù)需要的資源不同,可以配置不同的資源,包括CPU、內(nèi)存、存儲(chǔ)等。服務(wù)拆分原則?1、粒度微小: ?根據(jù)業(yè)務(wù)功能劃分服務(wù)粒度,總的原則是服務(wù)內(nèi)部高內(nèi)聚,服務(wù)之間低耦合。?2、責(zé)任單一: 每個(gè)服務(wù)只做一件事,即單一職責(zé)原則。 3、隔離性原則: ?每個(gè)服務(wù)相互隔離,且不互相影響?4、業(yè)務(wù)無(wú)關(guān)優(yōu)先原則: ?基礎(chǔ)服務(wù),是一些基礎(chǔ)組件,與具體的業(yè)務(wù)無(wú)關(guān)。比如:短信服務(wù)、郵件服務(wù).這里的服務(wù)最容易劃分出來(lái)做微服務(wù),也是我們第一優(yōu)先級(jí)分離出來(lái)的服務(wù)。服務(wù)規(guī)劃 為實(shí)現(xiàn)負(fù)載均衡,允許相同的服務(wù)在多個(gè)節(jié)點(diǎn)注冊(cè)相同的服務(wù)名,不同的端口.如果沒(méi)有前期的規(guī)劃,不同的服務(wù)提供者可能會(huì)注冊(cè)相同的服務(wù)名,導(dǎo)致消費(fèi)者調(diào)用服務(wù)時(shí)產(chǎn)生調(diào)用混亂。?因此,需進(jìn)行服務(wù)名的統(tǒng)一規(guī)劃: 1、規(guī)劃期統(tǒng)一制定每個(gè)服務(wù)提供者的服務(wù)名或者模塊標(biāo)示。?2、服務(wù)名的命名規(guī)則:ModuleName_ServiceName,且所有字符小寫(xiě),不同單詞之間以下劃線(xiàn)分隔。如用戶(hù)管理模塊提供了獲取用戶(hù)信息的服務(wù),則命名為:user_get_info。?3、新增服務(wù)名時(shí),需要提出申請(qǐng),審批通過(guò)后方可使用,為減少審批復(fù)雜度,可只審批ModuleName,即在模塊內(nèi)部可以自由增加服務(wù)名,不需要進(jìn)行審批。開(kāi)發(fā)策略?總體原則:不同的微服務(wù)需進(jìn)行物理隔離。?1、SVN策略:SVN上創(chuàng)建獨(dú)立的分支,不同微服務(wù)的代碼提交不受相互影響; —-—由配置管理員統(tǒng)一控制。 問(wèn)題:開(kāi)發(fā)分支與集成分支,都將增加很多,維護(hù)工作量增加. 2、編譯策略:代碼編譯時(shí),各個(gè)微服務(wù)獨(dú)立編譯、打包,杜絕直接的依賴(lài);?3、工程構(gòu)建:代碼開(kāi)發(fā)時(shí),各微服務(wù)創(chuàng)建獨(dú)立的工程,工程之間不能產(chǎn)生直接依賴(lài) 4、持續(xù)集成:每個(gè)微服務(wù)獨(dú)立執(zhí)行持續(xù)集成. 5、版本集成:由統(tǒng)一的集成工具,實(shí)現(xiàn)自動(dòng)化的版本集成,將所有微服務(wù)集成到統(tǒng)一的版本發(fā)布包中。版本策略?每個(gè)微服務(wù)可以獨(dú)立制作版本,伴隨著服務(wù)的增多,SVN分支增多,版本也將增多,版本管理的復(fù)雜度將成指數(shù)級(jí)增加。在服務(wù)之間依賴(lài)較多時(shí),每個(gè)服務(wù)的升級(jí)或降級(jí)都將影響其他服務(wù)的正常運(yùn)行。 因此需執(zhí)行如下策略: 1、所有服務(wù)的版本制作交由專(zhuān)業(yè)的版本管理員執(zhí)行. 2、采用自動(dòng)化的版本制作策略,最大程度的減少人工操作.?3、每個(gè)服務(wù)的版本必須有詳細(xì)的版本計(jì)劃、版本說(shuō)明,對(duì)于版本說(shuō)明要制定模板,明確需要提交的內(nèi)容、版本號(hào)、SVN標(biāo)簽等。?4、對(duì)項(xiàng)目經(jīng)理的要求提升,需對(duì)整體的版本計(jì)劃有嚴(yán)格的制定,尤其是版本之間的依賴(lài)關(guān)系要非常明確,版本升級(jí)、降級(jí)的風(fēng)險(xiǎn)評(píng)估需完全充分. 5、接口管理:嚴(yán)格執(zhí)行接口管理制度,任何接口的變更必須進(jìn)行審批、發(fā)公告等流程。數(shù)據(jù)庫(kù)挑戰(zhàn)與策略 每個(gè)微服務(wù)都有自己獨(dú)立的數(shù)據(jù)庫(kù),那么后臺(tái)管理的聯(lián)合查詢(xún)?cè)趺刺幚??這應(yīng)該是大家會(huì)普遍遇到的一個(gè)問(wèn)題,有三種處理方案。?1)嚴(yán)格按照微服務(wù)的劃分來(lái)做,微服務(wù)相互獨(dú)立,各微服務(wù)數(shù)據(jù)庫(kù)也獨(dú)立,后臺(tái)需要展示數(shù)據(jù)時(shí),調(diào)用各微服務(wù)的接口來(lái)獲取對(duì)應(yīng)的數(shù)據(jù),再進(jìn)行數(shù)據(jù)處理后展示出來(lái),這是標(biāo)準(zhǔn)的用法,也是最麻煩的用法。?2)將業(yè)務(wù)高度相關(guān)的表放到一個(gè)庫(kù)中,將業(yè)務(wù)關(guān)系不是很緊密的表嚴(yán)格按照微服務(wù)模式來(lái)拆分,這樣既可以使用微服務(wù),也避免了數(shù)據(jù)庫(kù)分散導(dǎo)致后臺(tái)系統(tǒng)統(tǒng)計(jì)功能難以實(shí)現(xiàn),是一個(gè)折中的方案。?3)數(shù)據(jù)庫(kù)嚴(yán)格按照微服務(wù)的要求來(lái)切分,以滿(mǎn)足業(yè)務(wù)高并發(fā),實(shí)時(shí)或者準(zhǔn)實(shí)時(shí)將各微服務(wù)數(shù)據(jù)庫(kù)數(shù)據(jù)同步到NoSQL數(shù)據(jù)庫(kù)中,在同步的過(guò)程中進(jìn)行數(shù)據(jù)清洗,用來(lái)滿(mǎn)足后臺(tái)業(yè)務(wù)系統(tǒng)的使用,推薦使用MongoDB、HBase等。 第一種方案適合業(yè)務(wù)較為簡(jiǎn)單的小公司;第二種方案,適合在原有系統(tǒng)之上,慢慢演化為微服務(wù)架構(gòu)的公司;第三種適合大型高并發(fā)的互聯(lián)網(wǎng)公司。?建議,我們當(dāng)前采用第二種方案。負(fù)載均衡 不再采用一般的增加負(fù)載均衡服務(wù)器的方式進(jìn)行負(fù)載均衡,如F5、Nginx、LVS等,而是把負(fù)載均衡的功能以庫(kù)的方式集成到服務(wù)消費(fèi)方的進(jìn)程內(nèi),這種方案稱(chēng)為軟負(fù)載均衡(SoftLoadBalancing)或者客戶(hù)端負(fù)載均衡.在SpringCloud中配合Eureka的服務(wù)注冊(cè)功能,Ribbon子項(xiàng)目則為REST客戶(hù)端實(shí)現(xiàn)了負(fù)載均衡。?使用Ribbon進(jìn)行負(fù)載均衡,其工作原理可以概括為下面四個(gè)步驟:Ribbon首先根據(jù)其所在Zone優(yōu)先選擇一個(gè)負(fù)載較少的EurekaServer;定期從EurekaServer更新并過(guò)濾服務(wù)實(shí)例列表;根據(jù)指定的負(fù)載均衡策略,從可用的服務(wù)器列表中選擇一個(gè)服務(wù)實(shí)例的地址;然后通過(guò)RestClient進(jìn)行服務(wù)調(diào)用。Ribbon本身提供了下面幾種負(fù)載均衡策略:RoundRobinRule:

輪詢(xún)策略,Ribbon以輪詢(xún)的方式選擇服務(wù)器,這個(gè)是默認(rèn)值.所以示例中所啟動(dòng)的兩個(gè)服務(wù)會(huì)被循環(huán)訪問(wèn);RandomRule:

隨機(jī)選擇,也就是說(shuō)Ribbon會(huì)隨機(jī)從服務(wù)器列表中選擇一個(gè)進(jìn)行訪問(wèn);BestAvailableRule:

最大可用策略,即先過(guò)濾出故障服務(wù)器后,選擇一個(gè)當(dāng)前并發(fā)請(qǐng)求數(shù)最小的;WeightedResponseTimeRule:

帶有加權(quán)的輪詢(xún)策略,對(duì)各個(gè)服務(wù)器響應(yīng)時(shí)間進(jìn)行加權(quán)處理,然后在采用輪詢(xún)的方式來(lái)獲取相應(yīng)的服務(wù)器;AvailabilityFilteringRule:

可用過(guò)濾策略,先過(guò)濾出故障的或并發(fā)請(qǐng)求大于閾值一部分服務(wù)實(shí)例,然后再以線(xiàn)性輪詢(xún)的方式從過(guò)濾后的實(shí)例清單中選出一個(gè);ZoneAvoidanceRule:

區(qū)域感知策略,先使用主過(guò)濾條件(區(qū)域負(fù)載器,選擇最優(yōu)區(qū)域)對(duì)所有實(shí)例過(guò)濾并返回過(guò)濾后的實(shí)例清單,依次使用次過(guò)濾條件列表中的過(guò)濾條件對(duì)主過(guò)濾條件的結(jié)果進(jìn)行過(guò)濾,判斷最小過(guò)濾數(shù)(默認(rèn)1)和最小過(guò)濾百分比(默認(rèn)0),最后對(duì)滿(mǎn)足條件的服務(wù)器則使用RoundRobinRule(輪詢(xún)方式)選擇一個(gè)服務(wù)器實(shí)例。性能策略 1、網(wǎng)絡(luò)優(yōu)化:優(yōu)化組網(wǎng)結(jié)構(gòu),提升網(wǎng)絡(luò)間通訊性能; 2、配置優(yōu)化:優(yōu)化SpringCloud組件集以及其他組件的配置信息,使得性能最大化.技術(shù)管理策略?微服務(wù)的架構(gòu)理念中指出各微服務(wù)可以獨(dú)立建設(shè),可以使用不同的技術(shù)、語(yǔ)言、框架等,以便能更快速的使用新技術(shù)、新框架等響應(yīng)特定客戶(hù)需求,解決單體應(yīng)用架構(gòu)更新技術(shù)、更新框架時(shí)面臨的困難或阻礙。?但這也同時(shí)帶來(lái)了諸多問(wèn)題,如下: 1、各服務(wù)是否可以任意使用自己的技術(shù)、自己的組件、框架呢?如果這樣,勢(shì)必帶來(lái)更大的管理困難、維護(hù)困難、技術(shù)共享困難。 2、公共的方法如何實(shí)現(xiàn)共享?如格式化時(shí)間的一個(gè)簡(jiǎn)單方法需要共享,也需要封裝為一個(gè)服務(wù)接口嗎??管理策略: 1、總體原則:仍然需要進(jìn)行統(tǒng)籌考慮,所有組件統(tǒng)一管理,組件放置在產(chǎn)品倉(cāng)庫(kù)中,每個(gè)產(chǎn)品或服務(wù)需要共享組件時(shí),從產(chǎn)品倉(cāng)庫(kù)獲取。?2、特殊情況:特殊服務(wù)需要使用特殊的組件、框架,需提出申請(qǐng),統(tǒng)籌規(guī)劃后進(jìn)行決策。開(kāi)發(fā)階段服務(wù)的調(diào)用AIP網(wǎng)關(guān)調(diào)用所有服務(wù)通過(guò)Zuul網(wǎng)關(guān)進(jìn)行調(diào)用,不允許直接調(diào)用微服務(wù)提供者。Zuul可能會(huì)成為系統(tǒng)瓶頸,在項(xiàng)目復(fù)雜時(shí)可考慮為Zuul進(jìn)行主備或負(fù)載均衡處理。同步調(diào)用?采用HTTPREST方式進(jìn)行調(diào)用,針對(duì)業(yè)務(wù)需求可以進(jìn)行負(fù)載均衡,負(fù)載均衡的調(diào)用方式有兩種:?1、FeignClient 2、RestTemplate?建議使用FeignClient方式進(jìn)行服務(wù)調(diào)用。?不管是什么方式,他都是通過(guò)REST接口調(diào)用服務(wù)的http接口,參數(shù)和結(jié)果默認(rèn)都是通過(guò)Jackson序列化和反序列化。因?yàn)椋觩ringMVC的RestController定義的接口,返回的數(shù)據(jù)都是通過(guò)Jackson序列化成JSON數(shù)據(jù)。異步調(diào)用?rabbitMq、kafka、SpringCloudStream均是可以選擇的方案.SpringCloudStream,基于Redis、Rabbit、Kafka實(shí)現(xiàn)的消息微服務(wù),簡(jiǎn)單聲明模型用以在SpringCloud應(yīng)用中收發(fā)消息。服務(wù)間調(diào)用的權(quán)限驗(yàn)證一般我們的API接口都需要某種授權(quán)才能訪問(wèn),登陸成功以后,然后通過(guò)token或者cookie等方式才能調(diào)用接口。使用SpringCloudNetfix框架的話(huà),登錄的時(shí)候,把登錄請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的用戶(hù)服務(wù)上,登陸成功后,會(huì)設(shè)置cookie或headertoken等。然后客戶(hù)端接下來(lái)的請(qǐng)求就會(huì)帶著這些驗(yàn)證信息,從Zuul網(wǎng)關(guān)傳到相應(yīng)的服務(wù)上進(jìn)行驗(yàn)證。Zuul網(wǎng)關(guān)在把請(qǐng)求轉(zhuǎn)發(fā)到后臺(tái)的服務(wù)的時(shí)候,會(huì)默認(rèn)把一些header傳到服務(wù)端,如:Cookie、Set-Cookie、Authorization.這樣,客戶(hù)端請(qǐng)求的相關(guān)headers就可以傳遞到服務(wù)端,服務(wù)端設(shè)置的cookie也可以傳到客戶(hù)端。但是,如果你想禁止某些header透?jìng)鞯椒?wù)端,可以在Zuul網(wǎng)關(guān)的application.yml配置里通過(guò)下面的方式禁用:zuul:?routes:?users:

path:/users/**

sensitiveHeaders:Cookie,Set—Cookie,Authorization

serviceId:user剛才說(shuō)了我們的某個(gè)服務(wù)有時(shí)候需要調(diào)用另一個(gè)服務(wù),這時(shí)候,這個(gè)請(qǐng)求不是客戶(hù)端發(fā)起,他的請(qǐng)求的header里面也不會(huì)有任何驗(yàn)證信息。這時(shí)候,要么,通過(guò)防火墻等設(shè)置,保證服務(wù)間調(diào)用的接口,只能某幾個(gè)地址訪問(wèn);要么,就通過(guò)某種方式設(shè)置header。同時(shí),如果你想在某個(gè)服務(wù)里面獲得這個(gè)請(qǐng)求的真是IP,(因?yàn)檎?qǐng)求的通過(guò)網(wǎng)關(guān)轉(zhuǎn)發(fā)而來(lái),你直接通過(guò)request獲得ip得到的是網(wǎng)關(guān)的IP),就可以從headerX-Forwarded—Host獲得.如果想禁用這個(gè)header,也可以:zuul.addProxyHeaders=false如果你使用RestTemplate的方式調(diào)用,可以在請(qǐng)求里面添加一個(gè)有header的Options。也可以通過(guò)如下的攔截器的方式設(shè)置,它對(duì)RestTemplate方式和FeignClient的方式都可以起作用:@Bean?publicRequestInterceptorrequestInterceptor(){?returnnewRequestInterceptor(){?@Override?publicvoidapply(RequestTemplatetemplate){?StringauthToken=getToken();?templat(yī)e.header(AUTH_TO(shè)KEN_HEADER,authToken);?}

};

}服務(wù)編排?主要的作用是減少項(xiàng)目中的相互依賴(lài)。比如現(xiàn)在有項(xiàng)目a調(diào)用項(xiàng)目b,項(xiàng)目b調(diào)用項(xiàng)目c...一直到h,是一個(gè)調(diào)用鏈,那么項(xiàng)目上線(xiàn)的時(shí)候需要先更新最底層的h再更新g.。。更新c更新b最后是更新項(xiàng)目a。這只是這一個(gè)調(diào)用鏈,在復(fù)雜的業(yè)務(wù)中有非常多的調(diào)用,如果要記住每一個(gè)調(diào)用鏈對(duì)開(kāi)發(fā)運(yùn)維人員來(lái)說(shuō)就是災(zāi)難.有這樣一個(gè)好辦法可以盡量的減少項(xiàng)目的相互依賴(lài),就是服務(wù)編排,一個(gè)核心的業(yè)務(wù)處理項(xiàng)目,負(fù)責(zé)和各個(gè)微服務(wù)打交道。比如之前是a調(diào)用b,b掉用c,c調(diào)用d,現(xiàn)在統(tǒng)一在一個(gè)核心項(xiàng)目W中來(lái)處理,W服務(wù)使用a的時(shí)候去調(diào)用b,使用b的時(shí)候W去調(diào)用c。 其實(shí)可以理解為面向?qū)ο蟮脑O(shè)計(jì),減少方法之間的一層層嵌套調(diào)用,而采取一個(gè)方法進(jìn)行業(yè)務(wù)流程的串聯(lián),如方法W實(shí)現(xiàn)一個(gè)完整的業(yè)務(wù)處理,則采取下面方式:?functionw() { ?1、調(diào)用方法a; 2、調(diào)用方法b;?3、調(diào)用方法c;?}服務(wù)的熔斷處理?在服務(wù)之間進(jìn)行調(diào)用時(shí),由于各種原因會(huì)導(dǎo)致遠(yuǎn)程服務(wù)不可用或壓力過(guò)載等異常導(dǎo)致的故障蔓延,此時(shí)需要有一種機(jī)制進(jìn)行保護(hù)處理。SpringCloud通過(guò)Netflix的Hystrix組件實(shí)現(xiàn)熔斷和降級(jí)處理解決此問(wèn)題。斷路器(CricuitBreaker)是一種能夠在遠(yuǎn)程服務(wù)不可用時(shí)自動(dòng)熔斷(打開(kāi)開(kāi)關(guān)),并在遠(yuǎn)程服務(wù)恢復(fù)時(shí)自動(dòng)恢復(fù)(閉合開(kāi)關(guān))的設(shè)施,SpringCloud通過(guò)Netflix的Hystrix組件提供斷路器、資源隔離與自我修復(fù)功能。SpringcloudHystrix熔斷器

?統(tǒng)一日志管理?不同微服務(wù)部署在不同節(jié)點(diǎn)上,登錄每個(gè)節(jié)點(diǎn)查看日志是比較麻煩的,同時(shí)對(duì)于需要關(guān)聯(lián)多個(gè)微服務(wù)日志聯(lián)合查看分析的情況將更加麻煩.伴隨節(jié)點(diǎn)數(shù)量的增加,如果沒(méi)有合適的管理機(jī)制與工具,定位問(wèn)題、發(fā)現(xiàn)問(wèn)題的復(fù)雜性將越來(lái)越大,將成指數(shù)級(jí)增長(zhǎng),因此需要進(jìn)行統(tǒng)一日志管理。 1、建立統(tǒng)一的日志管理規(guī)范; 2、開(kāi)發(fā)并使用統(tǒng)一的日志組件,為所有微服務(wù)提供統(tǒng)一的日志服務(wù),由log4j或Blitz4j封裝;?3、在每個(gè)服務(wù)節(jié)點(diǎn)上部署日志采集Agent組件,由此Agent進(jìn)行日志的采集與轉(zhuǎn)發(fā);?4、建立統(tǒng)一的日志中心,所有日志寫(xiě)入日志中心.?說(shuō)明:上述日志的實(shí)現(xiàn)由公司的“日志管理平臺(tái)”進(jìn)行實(shí)現(xiàn),采用的是ELK集合框架.?統(tǒng)一監(jiān)控管理 使用Hystrix組件進(jìn)行服務(wù)的監(jiān)控,使用Nagios進(jìn)行服務(wù)器等資源的監(jiān)控。 1、Hystrix,監(jiān)控和斷路器。我們只需要在服務(wù)接口上添加Hystrix標(biāo)簽,就可以實(shí)現(xiàn)對(duì)這個(gè)接口的監(jiān)控和斷路器功能.

2、HystrixDashboard,監(jiān)控面板,他提供了一個(gè)界面,可以監(jiān)控各個(gè)服務(wù)上的服務(wù)調(diào)用所消耗的時(shí)間等。

3、Turbine,監(jiān)控聚合,使用Hystrix監(jiān)控,我們需要打開(kāi)每一個(gè)服務(wù)實(shí)例的監(jiān)控信息來(lái)查看。而Tu(píng)rbine可以幫助我們把所有的服務(wù)實(shí)例的監(jiān)控信息聚合到一個(gè)地方統(tǒng)一查看。這樣就不需要挨個(gè)打開(kāi)一個(gè)個(gè)的頁(yè)面一個(gè)個(gè)查看。統(tǒng)一配置管理?實(shí)現(xiàn)各微服務(wù)的統(tǒng)一參數(shù)配置以及版本管理,可采用公司的配置管理平臺(tái)或者SpringCloudConfig配置中心。SpringCloudConfig配置中心

? SpringCloudConfig就是我們通常意義上的配置中心.SpringCloudConfig—把應(yīng)用原本放在本地文件的配置抽取出來(lái)放在中心服務(wù)器,本質(zhì)是配置信息從本地遷移到云端。從而能夠提供更好的管理、發(fā)布能力。

SpringCloudConfig分服務(wù)端和客戶(hù)端,服務(wù)端負(fù)責(zé)將git(svn)中存儲(chǔ)的配置文件發(fā)布成REST接口,客戶(hù)端可以從服務(wù)端REST接口獲取配置。但客戶(hù)端并不能主動(dòng)感知到配置的變化,從而主動(dòng)去獲取新的配置,這需要每個(gè)客戶(hù)端通過(guò)POST方法觸發(fā)各自的/refresh。 為解決配置信息能及時(shí)通知到各服務(wù),同時(shí)減少每個(gè)微服務(wù)處理配置信息更新的復(fù)雜度,為此我們通過(guò)消息總線(xiàn)來(lái)解決此問(wèn)題,方案如下:Git倉(cāng)庫(kù)、ConfigServer、以及微服務(wù)“ServiceA"、“ServiceB"的實(shí)例中都引入了SpringCloudBus,所以他們都連接到了RabbitMQ的消息總線(xiàn)上。從Git倉(cāng)庫(kù)中配置的修改到發(fā)起/bus/refresh的POST請(qǐng)求這一步可以通過(guò)Git倉(cāng)庫(kù)的WebHook來(lái)自動(dòng)觸發(fā)。/bus/refresh請(qǐng)求不再發(fā)送到具體服務(wù)實(shí)例上,而是發(fā)送給ConfigServer,并通過(guò)destination參數(shù)來(lái)指定需要更新配置的服務(wù)或?qū)嵗?。由于所有連接到消息總線(xiàn)上的應(yīng)用都會(huì)接受到更新請(qǐng)求,所以在WebHook中就不需要維護(hù)所有節(jié)點(diǎn)內(nèi)容來(lái)進(jìn)行更新,從而解決了通過(guò)WebHook來(lái)逐個(gè)進(jìn)行刷新的問(wèn)題。分布式session?采用Redis作為緩存組件以及session的共享組件。 REST資源響應(yīng)結(jié)構(gòu) 制定規(guī)范和解析方法.API調(diào)用鏈追蹤?微服務(wù)架構(gòu)上通過(guò)業(yè)務(wù)來(lái)劃分服務(wù)的,通過(guò)REST調(diào)用,對(duì)外暴露的一個(gè)接口,可能需要很多個(gè)服務(wù)協(xié)同才能完成這個(gè)接口功能,如果鏈路上任何一個(gè)服務(wù)出現(xiàn)問(wèn)題或者網(wǎng)絡(luò)超時(shí),都會(huì)形成導(dǎo)致接口調(diào)用失敗。隨著業(yè)務(wù)的不斷擴(kuò)張,服務(wù)之間互相調(diào)用會(huì)越來(lái)越復(fù)雜。SpringCloudSleuth主要功能就是在分布式系統(tǒng)中提供追蹤解決方案,并且兼容支持了zipkin,你只需要在pom文件中引入相應(yīng)的依賴(lài)即可。單元測(cè)試 做微服務(wù)架構(gòu),進(jìn)行系統(tǒng)測(cè)試的復(fù)雜度較大,為保證產(chǎn)品質(zhì)量與開(kāi)發(fā)、測(cè)試效率,單元測(cè)試是必不可少的.?可采用Mock方式進(jìn)行測(cè)試模擬,由持續(xù)集成進(jìn)行自動(dòng)化單元測(cè)試的執(zhí)行以及結(jié)果輸出。代碼調(diào)試 對(duì)于單體架構(gòu)系統(tǒng),可直接本地化調(diào)試,但對(duì)于微服務(wù)架構(gòu),接口間的調(diào)用需采用遠(yuǎn)程通訊的方式,也就是說(shuō)被調(diào)用的服務(wù)必須啟動(dòng)后方可被調(diào)用,因此當(dāng)微服務(wù)增多時(shí),你可能需要啟動(dòng)大量的微服務(wù)或者web服務(wù)器,這給本地化調(diào)用與調(diào)試帶來(lái)了困難。?解決方案待研究.測(cè)試自動(dòng)化測(cè)試單元測(cè)試:??由開(kāi)發(fā)人員實(shí)現(xiàn)。? 采用Mock方式進(jìn)行測(cè)試模擬,由持續(xù)集成進(jìn)行自動(dòng)化單元測(cè)試的執(zhí)行以及結(jié)果輸出.業(yè)務(wù)測(cè)試:? 開(kāi)發(fā)進(jìn)行實(shí)現(xiàn),測(cè)試也需考慮如何實(shí)現(xiàn)。 ?將多個(gè)服務(wù)或業(yè)務(wù)單元進(jìn)行串聯(lián),測(cè)試一個(gè)完整的業(yè)務(wù),甚至是不同業(yè)務(wù)之間組成的系統(tǒng)測(cè)試,需要采用相關(guān)的自動(dòng)化測(cè)試框架執(zhí)行,如RobotFramework自動(dòng)化測(cè)試框架。依賴(lài)測(cè)試?也可以稱(chēng)為接口測(cè)試或者契約測(cè)試,在微服務(wù)逐漸增多的情況下,如何有效保證服務(wù)之間能夠按照接口的約定正常工作,即符合契約,成為微服務(wù)實(shí)施過(guò)程中,測(cè)試面臨的主要挑戰(zhàn)。 一、開(kāi)發(fā)自動(dòng)化的接口測(cè)試工具,?1、檢測(cè)接口是否滿(mǎn)足約定 2、檢測(cè)接口是否發(fā)生變化?3、檢測(cè)接口是否可以正常被調(diào)用。 二、測(cè)試方法: 采取基于消費(fèi)者驅(qū)動(dòng)的契約測(cè)試,測(cè)試架構(gòu)如下: 其優(yōu)勢(shì)如下:從價(jià)值實(shí)現(xiàn)的角度定義契約從消費(fèi)者使用契約的角度出發(fā),首先保證消費(fèi)者基于此契約是可以實(shí)現(xiàn)價(jià)值的,有了這個(gè)前提,再使用契約來(lái)驗(yàn)證提供者,如果提供者提供的契約同定義的契約一致,則證明提供者提供的契約是能夠?qū)崿F(xiàn)服務(wù)消費(fèi)者的。通過(guò)這種方式,使得更聚焦于如何從價(jià)值實(shí)現(xiàn)出發(fā).隔離消費(fèi)者和提供者的測(cè)試對(duì)于契約的消費(fèi)者和提供者可以分開(kāi)獨(dú)立測(cè)試,有效解決傳統(tǒng)集成測(cè)試服務(wù)架構(gòu)的弊端,將微服務(wù)的接口測(cè)試成本降到最低。 三、測(cè)試工具:?Pact、Janus、Pacto等。系統(tǒng)測(cè)試熔斷測(cè)試 1、通過(guò)停止微服務(wù)的方式測(cè)試服務(wù)路由的正確性?2、通過(guò)壓力測(cè)試,將某個(gè)微服務(wù)產(chǎn)生過(guò)載等異常,測(cè)試服務(wù)熔斷或降級(jí)?3、通過(guò)壓力測(cè)試,測(cè)試負(fù)載均衡策略的正確性性能測(cè)試?原有本地化的api調(diào)用將會(huì)變成REST的遠(yuǎn)程調(diào)用,調(diào)用速度勢(shì)必受到影響,因此需要對(duì)系統(tǒng)性能進(jìn)行考慮以及性能測(cè)試,主要影響因素如下:1、網(wǎng)絡(luò):遠(yuǎn)程調(diào)用時(shí)受到網(wǎng)絡(luò)通訊速度的影響,這涉及到網(wǎng)絡(luò)速度、網(wǎng)絡(luò)部署以及系統(tǒng)架構(gòu),有相互依賴(lài)的服務(wù)應(yīng)采取就近部署原則。2、服務(wù)器:受到遠(yuǎn)程服務(wù)所在服務(wù)器性能的影響。3、數(shù)據(jù)量:數(shù)據(jù)量這里指的是數(shù)據(jù)大小以及數(shù)據(jù)傳輸?shù)拇螖?shù)以及頻率,此時(shí)REST調(diào)用方式會(huì)產(chǎn)生瓶頸,當(dāng)然,最好的方式是避免此種情況發(fā)生,此種場(chǎng)景采取消息中間件的方式異步通訊。持續(xù)集成?1、持續(xù)集成:每個(gè)微服務(wù)獨(dú)立執(zhí)行持續(xù)集成。 2、版本集成:由統(tǒng)一的集成工具,實(shí)現(xiàn)自動(dòng)化的版本集成,將所有微服務(wù)集成到統(tǒng)一的版本發(fā)布包中。?3、持續(xù)集成可制作多種場(chǎng)景的版本,包括測(cè)試環(huán)境、開(kāi)發(fā)環(huán)境、生產(chǎn)環(huán)境。 4、統(tǒng)計(jì)測(cè)試覆蓋率等指標(biāo)數(shù)據(jù). 5、工具:Jenkins、Sonar等。持續(xù)部署?1、通過(guò)持續(xù)集成自動(dòng)制作發(fā)布版本的Docker鏡像;?2、將docker鏡像自動(dòng)上傳到docker容器中。?運(yùn)維階段遠(yuǎn)程升級(jí)?微服務(wù)不斷增加后,意味著部署容器也在同步增加,對(duì)于后續(xù)升級(jí)維護(hù)的工作量將會(huì)逐漸增加,開(kāi)發(fā)統(tǒng)一管理中心,支持遠(yuǎn)程維護(hù)與升級(jí)將可減少運(yùn)維的復(fù)雜度.統(tǒng)一配置中心?使用SpringCloudConfig或者配置管理平臺(tái)進(jìn)行統(tǒng)一的配置管理。統(tǒng)一日志中心?使用日志管理平臺(tái)進(jìn)行統(tǒng)一的日志采集、日志分析?;冢蹋颮a的組網(wǎng)設(shè)計(jì)方案目錄1概述 12功能性能指標(biāo) 12.1功能指標(biāo) 12.2性能指標(biāo) 23技術(shù)路線(xiàn)選擇 34系統(tǒng)設(shè)計(jì)?44.1系統(tǒng)組成?44。2系統(tǒng)工作模式 54.2。1主機(jī)輪詢(xún)的組網(wǎng)方式 64.2。2分時(shí)間片的組網(wǎng)方式?65通信設(shè)計(jì) 75.1MODBUS通信協(xié)議?75.2MODBUS通信示意圖 86軟件設(shè)計(jì)?86.1軟件流程圖?86.2軟件時(shí)序圖 97結(jié)構(gòu)設(shè)計(jì) 107。1接口設(shè)計(jì)?107.2外形設(shè)計(jì) 118實(shí)驗(yàn)方案?129項(xiàng)目進(jìn)度和質(zhì)量保證?139。1項(xiàng)目研制進(jìn)度計(jì)劃?139.2質(zhì)量控制與文件交付進(jìn)度計(jì)劃?1410主機(jī)與監(jiān)測(cè)系統(tǒng)通信協(xié)議 1410.1概述 1410.2協(xié)議標(biāo)準(zhǔn)設(shè)置?1410.3字節(jié)格式?1510.4幀格式 1510.5浮點(diǎn)數(shù)存貯和傳輸格式 1610.6功能碼?1610.7讀寫(xiě)保持寄存器 1610.8舉例?1710。9異常響應(yīng)?1910.10CRC16校驗(yàn)方式 191概述基于LoRa的組網(wǎng)通信系統(tǒng)采用LoRa通信協(xié)議進(jìn)行組網(wǎng)通信,系統(tǒng)由計(jì)算機(jī)終端、通信基站、集成通信模塊的用戶(hù)設(shè)備、具備通信功能的用戶(hù)設(shè)備等組成,實(shí)現(xiàn)整套系統(tǒng)的互相通信.2功能性能指標(biāo)2.1功能指標(biāo)LoRa組網(wǎng)通信功能:通過(guò)通信基站向全部設(shè)備廣播信息;通過(guò)通信基站向某一特定設(shè)備發(fā)送參數(shù)或控制命令;通信基站同時(shí)接收16個(gè)設(shè)備的上傳數(shù)據(jù)。LoRa通信加密功能:無(wú)線(xiàn)通信具備加密功能,提供加密算法.設(shè)備命名功能:為每一個(gè)接入網(wǎng)絡(luò)的設(shè)備定義設(shè)備編號(hào),名字可長(zhǎng)期不變,也可經(jīng)授權(quán)改變,可唯一識(shí)別不同的設(shè)備,滿(mǎn)足后續(xù)數(shù)據(jù)處理。485通信功能:按照485標(biāo)準(zhǔn)以及MODBUS數(shù)據(jù)格式,通信模塊可完成與用戶(hù)模塊電路之間的數(shù)據(jù)通信.調(diào)試界面軟件功能:實(shí)時(shí)顯示各設(shè)備數(shù)據(jù),包括設(shè)備工作狀態(tài)、設(shè)備傳感器數(shù)據(jù);設(shè)置設(shè)備參數(shù)與狀態(tài),包括設(shè)備命名與修改、下達(dá)復(fù)位命令、設(shè)置報(bào)警值、設(shè)置數(shù)據(jù)上傳時(shí)間間隔、啟停數(shù)據(jù)采集等;存儲(chǔ)數(shù)據(jù),按照不同任務(wù)、不同設(shè)備進(jìn)行關(guān)聯(lián)存儲(chǔ);數(shù)據(jù)可查詢(xún);數(shù)據(jù)可打印。API接口通信功能:按照MODBUS數(shù)據(jù)格式和LoRa通信協(xié)議,建立界面軟件(包括調(diào)試界面軟件)和通信基站之間通信通道,界面軟件可實(shí)現(xiàn)相應(yīng)功能。故障顯示與定位功能:當(dāng)通信基站和通信模塊發(fā)生故障時(shí),界面可顯示故障,并顯示具體哪一個(gè)通信模塊或通信基站發(fā)生故障。2。2性能指標(biāo)無(wú)線(xiàn)通信體制:LoRa通信,一個(gè)基站對(duì)多個(gè)通信設(shè)備的組網(wǎng)通信。無(wú)線(xiàn)通信距離:無(wú)遮擋傳輸距離≥5000m,有金屬遮擋傳輸距離≥2000m.無(wú)線(xiàn)通信速率:通信基站向用戶(hù)設(shè)備下傳數(shù)據(jù)≥1kbps;用戶(hù)設(shè)備向通信基站上傳數(shù)據(jù)≥5kbps;通信基站數(shù)據(jù)吞吐速率≥10kbps,可同時(shí)接收≥16路的設(shè)備上傳數(shù)據(jù);有遮擋時(shí),上傳和下傳數(shù)據(jù)率的衰減量≤50%。通信模塊供電:采用+12V電源供電。通信基站功耗:通過(guò)DC12V電源適配器進(jìn)行設(shè)備供電。數(shù)據(jù)加密:無(wú)線(xiàn)通信上傳和下傳數(shù)據(jù)進(jìn)行加密,16路同時(shí)上傳時(shí),數(shù)據(jù)吞吐速率不超過(guò)通信基站額定能力的70%。提供數(shù)據(jù)加解密算法.485通信速率:通信模塊向用戶(hù)模塊電路的下傳數(shù)據(jù)速率≥1kbps;用戶(hù)模塊電路向通信模塊的上傳數(shù)據(jù)速率≥5kbps;數(shù)據(jù)格式采用MODBUS通訊協(xié)議。一次工作時(shí)間:一次開(kāi)機(jī),可可靠連續(xù)工作12h.工作溫度:-35℃~55℃。存儲(chǔ)溫度:-40℃~70℃.濕度:40℃工作溫度下,90%濕度,通信基站、通信模塊能正常工作,且不凝露。元器件和原材料的性能參數(shù)滿(mǎn)足環(huán)境溫度(工作溫度、存儲(chǔ)溫度)要求。3技術(shù)路線(xiàn)選擇LoRa是LPWAN(低功耗廣域物聯(lián)網(wǎng))通信技術(shù)中的一種,LoRa作為目前最有發(fā)展前景的低功耗廣域通信技術(shù),已經(jīng)被運(yùn)用在個(gè)各行各業(yè)中。是美國(guó)Semtech公司采用和推廣的一種基于擴(kuò)頻技術(shù)的超遠(yuǎn)距離無(wú)線(xiàn)傳輸方案。LoRa無(wú)線(xiàn)通信采用直序擴(kuò)頻技術(shù),具有通信距離遠(yuǎn)、功率密度集中,抗干擾能力強(qiáng)的優(yōu)勢(shì).同時(shí)具有軟件FEC前向糾錯(cuò)算法,其編碼效率較高,糾錯(cuò)能力強(qiáng),在突發(fā)干擾的情況下,能主動(dòng)糾正被干擾的數(shù)據(jù)包,大大提高可靠性和傳輸距離.目前,LoRa主要在全球免費(fèi)頻段運(yùn)行,包括433、868、915MHz等.LoRa是物聯(lián)網(wǎng)應(yīng)用中的無(wú)線(xiàn)技術(shù)有多種,可組成局域網(wǎng)或廣域網(wǎng)。ZigBee是一種無(wú)線(xiàn)連接,可工作在2.4GHz(全球流行)、868MHz(歐洲流行)和915MHz(美國(guó)流行)3個(gè)頻段上,是一種近距離、低復(fù)雜度、低功耗、低速率、低成本的雙向無(wú)線(xiàn)通訊技術(shù)?;诖?,我們選擇傳輸距離遠(yuǎn)、功耗低(長(zhǎng)電池壽命)的LoRa模塊。4系統(tǒng)設(shè)計(jì)基于LoRa的組網(wǎng)通信系統(tǒng)由計(jì)算機(jī)終端、通信基站、集成通信模塊的用戶(hù)設(shè)備、具備通信功能的用戶(hù)設(shè)備等組成,系統(tǒng)采用LoRa通信協(xié)議進(jìn)行組網(wǎng)通信,實(shí)現(xiàn)命令或參數(shù)的下達(dá),以及數(shù)據(jù)的采集與上傳等功能.圖4.1基于LoRa的組網(wǎng)通信系統(tǒng)組成示意圖4。1系統(tǒng)組成系統(tǒng)由計(jì)算機(jī)終端、通信基站、集成通信模塊的用戶(hù)設(shè)備(設(shè)備1~設(shè)備10)、具備通信功能的用戶(hù)設(shè)備(設(shè)備11~設(shè)備16)等組成.表SEQ表\*ARABIC1設(shè)備清單序號(hào)名稱(chēng)數(shù)量說(shuō)明1通信基站1臺(tái)提供技術(shù)手冊(cè)。2通信模塊10塊提供技術(shù)手冊(cè).3基站天線(xiàn)1套SMA接口;提供技術(shù)手冊(cè)。4設(shè)備天線(xiàn)10套防水、防塵;SMA接口;提供技術(shù)手冊(cè)。5通信模塊電纜10套每套含:一根300mm的SMA電纜;一根300mm的485通信電纜(含接插件,提供定義,3個(gè)信號(hào)線(xiàn));一根300mm的供電電纜(SMA接口);一根485轉(zhuǎn)USB電纜。6API接口軟件1套提供使用說(shuō)明書(shū)。7LoRa通信協(xié)議與MODBUS數(shù)據(jù)格式1套采用該通信協(xié)議和數(shù)據(jù)格式,可滿(mǎn)足其他設(shè)備實(shí)現(xiàn)LoRa通信功能設(shè)計(jì).8調(diào)試界面軟件1套供系統(tǒng)集成調(diào)試用,提供說(shuō)明書(shū)。4。2系統(tǒng)工作模式因射頻的特性決定了無(wú)線(xiàn)串口收發(fā)模塊可以一發(fā)多收,不能同時(shí)多發(fā)一收,造成了射頻組網(wǎng)的最大的障礙,因此,為了解決這個(gè)問(wèn)題就只能夠利用時(shí)間來(lái)實(shí)現(xiàn)組網(wǎng),下面是無(wú)線(xiàn)LoRa收發(fā)模塊實(shí)現(xiàn)多發(fā)一收的解決方案。4.2.1主機(jī)輪詢(xún)的組網(wǎng)方式主機(jī)輪詢(xún)方式組網(wǎng)是主機(jī)逐個(gè)查詢(xún)的方式,該組網(wǎng)方式能夠準(zhǔn)確上傳,并且相互設(shè)備之間不容易出現(xiàn)沖突,組網(wǎng)也比較穩(wěn)定,但是缺點(diǎn)是主機(jī)輪詢(xún)耗時(shí)間長(zhǎng)。這種組網(wǎng)方式適合那些對(duì)時(shí)間要求不高的組網(wǎng)應(yīng)用。主機(jī)輪詢(xún)的組網(wǎng)方式原理很簡(jiǎn)單,通過(guò)點(diǎn)名的方式實(shí)現(xiàn)應(yīng)答.如主機(jī)發(fā)送給1號(hào)從機(jī),由于從機(jī)都有地址設(shè)別,因此只有從機(jī)1能夠響應(yīng)主機(jī)。從機(jī)1收到主機(jī)的命令后,將數(shù)據(jù)上傳給主機(jī)。主機(jī)再以相同點(diǎn)的輪詢(xún)方式輪詢(xún)其它從機(jī)數(shù)據(jù).圖4。2主機(jī)輪詢(xún)組網(wǎng)圖4。2.2分時(shí)間片的組網(wǎng)方式分時(shí)間片的組網(wǎng)方式對(duì)于組網(wǎng)數(shù)據(jù)收集來(lái)說(shuō)是比簡(jiǎn)單的輪詢(xún)方式快了很多,但是對(duì)從機(jī)的時(shí)間同步以及發(fā)送延遲要求高。圖4.3分時(shí)間片組網(wǎng)圖如圖,這種組網(wǎng)方式是先由主機(jī)發(fā)起廣播時(shí)間,從機(jī)收到后,同步自己的本地時(shí)間,同步完成后,根據(jù)自己的編號(hào)進(jìn)行延時(shí)上傳,從而實(shí)現(xiàn)多發(fā)一收的功能.這種組網(wǎng)方式收發(fā)數(shù)據(jù)時(shí)間節(jié)省很多,并且能夠防止沖突,但是對(duì)軟件延時(shí)等調(diào)整要求較高。為保證數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,選擇第二種方式分時(shí)間片的組網(wǎng)方式,實(shí)現(xiàn)整個(gè)系統(tǒng)的無(wú)線(xiàn)通信。5通信設(shè)計(jì)5.1MODBUS通信協(xié)議MODBUS網(wǎng)絡(luò)是一個(gè)工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計(jì)算機(jī)通過(guò)公用線(xiàn)路或局部專(zhuān)用線(xiàn)路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過(guò)程監(jiān)控。它已經(jīng)成為一種通用工業(yè)標(biāo)準(zhǔn)。MODBUS網(wǎng)絡(luò)只有一個(gè)主機(jī),所有通信都由它發(fā)出。網(wǎng)絡(luò)可支持247個(gè)之多的遠(yuǎn)程從屬控制器,但實(shí)際所支持的從機(jī)數(shù)要由所用通信設(shè)備決定。MODBUS協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一個(gè)控制器請(qǐng)求訪問(wèn)其它設(shè)備的過(guò)程,如何回應(yīng)來(lái)自其它設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。MODBUS網(wǎng)絡(luò)以RTU模式進(jìn)行通信,在消息中的每個(gè)8Bit字節(jié)按照原值傳送,不做處理。這種方式的主要優(yōu)點(diǎn)是:數(shù)據(jù)幀傳送之間沒(méi)有間隔,相同波特率下傳輸數(shù)據(jù)的密度要比ASCII高,傳輸速度更快。5.2MODBUS通信示意圖本系統(tǒng)由無(wú)線(xiàn)LoRa和有線(xiàn)485進(jìn)行組網(wǎng)通信。均采用MODBUS通信協(xié)議RTU通信方式??蛇M(jìn)行點(diǎn)對(duì)點(diǎn)通信和點(diǎn)(基站)對(duì)多(模塊)通信。圖5.1基于LoRa的通信示意圖軟件設(shè)計(jì)6。1軟件流程圖監(jiān)測(cè)主機(jī)界面軟件主要對(duì)整個(gè)系統(tǒng)的運(yùn)行狀況進(jìn)行監(jiān)控。出現(xiàn)異常情況時(shí),給出報(bào)警提示;同時(shí)可進(jìn)入設(shè)置界面進(jìn)行參數(shù)設(shè)置,對(duì)歷史數(shù)據(jù)存儲(chǔ)和打印.圖6。1監(jiān)測(cè)主機(jī)軟件流程圖6.2軟件時(shí)序圖監(jiān)測(cè)主機(jī)界面軟件可通過(guò)無(wú)線(xiàn)LoRa或者有線(xiàn)485進(jìn)行通信。監(jiān)測(cè)主機(jī)作為主機(jī),可對(duì)任一設(shè)備進(jìn)行點(diǎn)對(duì)點(diǎn)通信,也可通過(guò)廣播命令控制所有從機(jī),當(dāng)主機(jī)獲取所有從機(jī)數(shù)據(jù)時(shí),從機(jī)根據(jù)設(shè)備編號(hào)延時(shí)間隔固定時(shí)間依次回應(yīng)數(shù)據(jù)。圖6.2監(jiān)測(cè)主機(jī)軟件時(shí)序圖7結(jié)構(gòu)設(shè)計(jì)通信基站和通信模塊采用如圖所示外形結(jié)構(gòu)和安裝尺寸,包括各接口定義。7.1接口設(shè)計(jì)圖7.1電氣接口示意圖圖7.2狀態(tài)指示圖表2電氣接口定義表腳號(hào)名稱(chēng)功能說(shuō)明1DB-9母型插座RS—232接口標(biāo)準(zhǔn)RS-232接口23.81接線(xiàn)端子RS—485、電源接口標(biāo)準(zhǔn)RS-232接口與壓線(xiàn)式電源接口3PWR(shí)-LED電源指示燈紅色,電源接通時(shí)點(diǎn)亮4TXD—LED發(fā)送指示燈黃色,發(fā)送數(shù)據(jù)時(shí)閃爍5RXD—LED接收指示燈黃色,接收數(shù)據(jù)時(shí)閃爍6DC電源接口電源接口直插式圓孔5。5*2.5mm7撥碼開(kāi)關(guān)撥碼開(kāi)關(guān)工作模式控制8天線(xiàn)接口SMA-K接口外螺紋內(nèi)孔,長(zhǎng)10mm,特征阻抗50Ω*注:DC電源接口和3。81接線(xiàn)端子供電均為12V,根據(jù)現(xiàn)場(chǎng)接線(xiàn)情況二選一即可。7.2外形設(shè)計(jì)圖7.3結(jié)構(gòu)外形尺寸圖8實(shí)驗(yàn)方案序號(hào)試驗(yàn)項(xiàng)目名稱(chēng)試驗(yàn)樣品數(shù)量試驗(yàn)結(jié)果試驗(yàn)單位1外觀、重量、尺寸全檢檢驗(yàn)報(bào)告陜西衛(wèi)峰2無(wú)線(xiàn)通信距離抽檢測(cè)試報(bào)告陜西衛(wèi)峰3無(wú)線(xiàn)通信速率抽檢測(cè)試報(bào)告陜西衛(wèi)峰4通信模塊供電與功耗抽檢測(cè)試報(bào)告陜西衛(wèi)峰5通信基站功耗抽檢測(cè)試報(bào)告陜西衛(wèi)峰6一次工作時(shí)間抽檢檢驗(yàn)報(bào)告陜西衛(wèi)峰772h穩(wěn)定性試驗(yàn)全檢檢驗(yàn)報(bào)告陜西衛(wèi)峰8工作高溫試驗(yàn)抽檢檢驗(yàn)報(bào)告陜西衛(wèi)峰9工作低溫試驗(yàn)抽檢檢驗(yàn)報(bào)告陜西衛(wèi)峰10工作濕度試驗(yàn)抽檢檢驗(yàn)報(bào)告陜西衛(wèi)峰11貯存高溫試驗(yàn)型式試驗(yàn)檢驗(yàn)報(bào)告陜西衛(wèi)峰12貯存低溫試驗(yàn)型式試驗(yàn)檢驗(yàn)報(bào)告陜西衛(wèi)峰9項(xiàng)目進(jìn)度和質(zhì)量保證9.1項(xiàng)目研制進(jìn)度計(jì)劃序號(hào)名稱(chēng)時(shí)間備注1簽訂合同合同簽訂之日起算T02質(zhì)量計(jì)劃1周T0+13研制方案1周T0+14研制方案評(píng)審1周T0+25工程樣機(jī)4周T0+66工程樣機(jī)試驗(yàn)2周T0+87設(shè)備制造6周T0+148試驗(yàn)大綱3周T0+149型式試驗(yàn)2周T0+1610出廠驗(yàn)收2周T0+189.2質(zhì)量控制與文件交付進(jìn)度計(jì)劃文件清單如下:序號(hào)文件名稱(chēng)文件類(lèi)型提交進(jìn)度1技術(shù)文件、圖紙1.1研制方案I合同簽訂后2周內(nèi)1.2設(shè)備外形圖、安裝圖、外部接線(xiàn)圖I合同簽訂后2周內(nèi)1。3通訊協(xié)議說(shuō)明(LoRa)I合同簽訂后2周內(nèi)1.4安裝說(shuō)明書(shū)I合同簽訂后10周內(nèi)2質(zhì)保文件2.1產(chǎn)品出廠合格證明書(shū)I設(shè)備交運(yùn)前10主機(jī)與監(jiān)測(cè)系統(tǒng)通信協(xié)議10。1概述本協(xié)議規(guī)定了主機(jī)與監(jiān)測(cè)系統(tǒng)的通信協(xié)議,所有相關(guān)硬件設(shè)備都應(yīng)遵從協(xié)議規(guī)范。10。2協(xié)議標(biāo)準(zhǔn)設(shè)置采用RS—485標(biāo)準(zhǔn)接口?!獦?biāo)準(zhǔn)協(xié)議:ModbusRTU協(xié)議?!?波特率:9600bps?!?設(shè)備地址:1-247(出廠默認(rèn)值為00H)?!ㄓ嵎绞剑罕O(jiān)測(cè)主機(jī)主機(jī)主動(dòng)發(fā)送命令,便攜主機(jī)被動(dòng)應(yīng)答.10.3字節(jié)格式編碼系統(tǒng):8位二進(jìn)制,十六進(jìn)制0‐9,A‐F。數(shù)據(jù)位:1起始位,8位數(shù)據(jù)(低位先送),無(wú)奇偶校驗(yàn),停止位1位.錯(cuò)誤校驗(yàn)區(qū):循環(huán)冗余校驗(yàn)(CRC16)

RTU錯(cuò)誤校驗(yàn)碼為2字節(jié)16位CRC碼.10.4幀格式Modbus信息以幀的方式傳輸,每幀有確定的起始點(diǎn)和結(jié)束點(diǎn),使接收設(shè)備在信息的起點(diǎn)開(kāi)始讀地址,并確定要尋址的設(shè)備(廣播時(shí)對(duì)全部設(shè)備),以及信息傳輸?shù)慕Y(jié)束時(shí)間。RTU模式中,信息開(kāi)始至少需要3。5個(gè)字節(jié)的靜止時(shí)間,發(fā)送完最后一個(gè)字節(jié)后,也有一個(gè)3。5個(gè)字符的靜止時(shí)間。整個(gè)信息必須連續(xù)發(fā)送。如果在發(fā)送幀信息期間,出現(xiàn)大于1.5個(gè)字符的靜止時(shí)間時(shí),則接收設(shè)備刷新不完整的信息,并假設(shè)下一個(gè)地址數(shù)據(jù)。開(kāi)始地址功能數(shù)據(jù)校驗(yàn)終止T1—T2-T3-T48bits8bitsN*8bits16bitsT1—T2—T3-T410.5浮點(diǎn)數(shù)存貯和傳輸格式浮點(diǎn)數(shù)采用IEEE標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)格式,如圖所示,每個(gè)數(shù)由4字節(jié)組成,數(shù)據(jù)傳輸時(shí),從第一字節(jié)到第四字節(jié)的順序傳送。10.6功能碼功能代碼功能名稱(chēng)03(0x03)讀寄存器06(0x06)寫(xiě)單個(gè)寄存器16(0x10)寫(xiě)多個(gè)寄存器10。7讀寫(xiě)保持寄存器地址高字節(jié)低字節(jié)數(shù)據(jù)類(lèi)型備注00H實(shí)時(shí)數(shù)據(jù)float只讀01H02H報(bào)警狀態(tài)TF卡狀態(tài)uchar只讀03H電池電量uchar只讀04H年月uchar讀寫(xiě)05H日時(shí)uchar06H分秒uchar07H報(bào)警閾值float(yī)讀寫(xiě)08H09H報(bào)警時(shí)間uchar讀寫(xiě)0AH密鑰設(shè)備編號(hào)uchar只限485接口0BH系統(tǒng)復(fù)位uchar只寫(xiě)02H、報(bào)警狀態(tài):0=正常,1=報(bào)警。TF卡狀態(tài):0=正常,1=異常。03H、電量:0-100.09H、報(bào)警時(shí)間:0=0.5s,1=1s,2=2s。0AH、設(shè)備編號(hào):1—247。0BH、系統(tǒng)復(fù)位:寫(xiě)入0x00AA可復(fù)位。10.8舉例1、讀取設(shè)備數(shù)據(jù)與狀態(tài):010300000007xxxx(地址01)地址功能碼寄存器起始地址寄存器數(shù)量CRC010300000007xxxx從應(yīng)答:01030700000050120701090C22xxxx地址功能碼字節(jié)數(shù)實(shí)時(shí)數(shù)據(jù)(4字節(jié))報(bào)警、TF卡01030E3D4CCCCD0000電池電量時(shí)間CRC0050120701090C22xxxx實(shí)時(shí)數(shù)據(jù)0。05Bq/cm2,未報(bào)警,TF卡正常,80%,18年7月1日9時(shí)12分34秒。2、讀取報(bào)警時(shí)間:010300090001xxxx(地址01)地址功能碼寄存器起始地址寄存器數(shù)量CRC010300090001xxxx從應(yīng)答:0103020001xxxx地址功能碼字節(jié)數(shù)數(shù)據(jù)CRC0103020001xxxx報(bào)警時(shí)間為1s。寫(xiě)系統(tǒng)時(shí)間:011000040003120701090C22xxxx地址功能碼起始地址寄存器數(shù)量數(shù)據(jù)CRC011000040003120701090C22xxxx從應(yīng)答:0103020001xxxx地址功能碼起始地址寄存器數(shù)量CRC011000040003xxxx系統(tǒng)復(fù)位:0106000B00AAxxxx地址功能碼寄存器起始地址數(shù)據(jù)CRC0106000B00AAxxxx從應(yīng)答:0106000B00AAxxxx(成功原樣返回)地址功能碼寄存器起始地址數(shù)據(jù)CRC0106000B00AAxxxx10。9異常響應(yīng)出現(xiàn)異常指令時(shí),設(shè)置功能碼的MSB為1。這使得異常響應(yīng)中的功能碼值比正常響應(yīng)中的功能碼值高0x80,返回異常指令.地址功能碼異常碼CRC0180|xxxxxxxx異常碼內(nèi)容01非法功能碼02非法數(shù)據(jù)地址03非法數(shù)據(jù)10.10CRC16校驗(yàn)方式staticconstuint8auchCRCHi[]={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40};stat(yī)icconstuint8auchCRCLo[]={0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB(niǎo)6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A(chǔ),0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40};/****************************************************************Function?:calculate_crc*Description :計(jì)算校驗(yàn)和*InputPara?:*OutputPara?:*ReturnValue:***************************************************************/uint16calculate_crc(uint8*puchMsg,uint8usDataLen){uint8uchCRCHi=0xFF;uint8uchCRCLo=0xFF;uint8uIndex;?uint16CrC16;while(usDataLen-—){uIndex=uchCRCHi^(*(puchMsg++));uchCRCHi=uchCRCLo^auchCRCHi[uIndex];uchCRCLo=auchCRCLo[uIndex];} CrC16=uchCRCLo; CrC16<<=8; CrC16+=uchCRCHi;returnCrC16;}目錄摘要···········································································································································11設(shè)計(jì)目的·······························································································································12設(shè)計(jì)要求·······························································································································13設(shè)計(jì)內(nèi)容·······························································································································23。1S3C2410與串口通信概述·····························································································23.1.1S2C2410處理器概述·······························································································23.1.2串口通信················································································································33.2方案設(shè)計(jì)························································································································43.3電路設(shè)計(jì)························································································································43。3。1電源設(shè)計(jì)···········································································································43.3。2晶振電路·············································································································53.3.3復(fù)位電路·············································································································63.3。5存儲(chǔ)器設(shè)計(jì)········································································································63。3。4JTAG接口············································································································63.3.6串口電路·············································································································73.4軟件設(shè)計(jì)···························································································································83。4。1Bootloader工作原理·····················································································83.4.2第一階段·············································································································93.4.1第二階段············································································································10總結(jié)與致謝······························································································································11參考文獻(xiàn)··································································································································12摘要串口通信是目前單片機(jī)和DSP等嵌入式系統(tǒng)之間,以及嵌入式系統(tǒng)與PC機(jī)或無(wú)線(xiàn)模塊之間的一種非常重要且普遍使用的通信方式。在嵌入式系統(tǒng)的硬件結(jié)構(gòu)中,通常只有一個(gè)8位或16位的CPU,不僅要完成主流程的工作,同時(shí)還要處理隨時(shí)發(fā)生的各種中斷,因而嵌入式系統(tǒng)中的串口通信程序設(shè)計(jì)與PC機(jī)有很大的不同。串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器,一般微機(jī)內(nèi)都配有通信適配器,使計(jì)算機(jī)能夠與其他具有RS232串口的計(jì)算機(jī)或設(shè)備進(jìn)行通信。本系統(tǒng)中目標(biāo)機(jī)開(kāi)發(fā)板的內(nèi)核采用的是三星的S3C2410,工作非??煽?,可穩(wěn)定運(yùn)行在203MHz的時(shí)鐘頻率下。其外設(shè)非常豐富,功能強(qiáng)大,完全可以滿(mǎn)足設(shè)計(jì)需要。串口線(xiàn)采用常用的RS232型接口模式,能實(shí)現(xiàn)計(jì)算機(jī)與開(kāi)發(fā)板間的數(shù)據(jù)傳輸與控制。關(guān)鍵詞:ARM;串口通信;串行端口;RS2321設(shè)計(jì)目的以嵌入式芯片S3C2410為核心的最小嵌入式系統(tǒng)構(gòu)建方法,給出了S3C2410的復(fù)位電路、電源電路、存儲(chǔ)器電路和串口電路等硬件組成。在ADS環(huán)境下自制的最小Boobtloader程序開(kāi)發(fā)并調(diào)試。2設(shè)計(jì)要求串口通信是嵌入式設(shè)備必備的通信方式之一,選用ARM芯片和電平轉(zhuǎn)換芯片完成出口通信的設(shè)計(jì),并設(shè)計(jì)完整物理接口。根據(jù)設(shè)計(jì)題目的要求,選擇確定ARM芯片型號(hào)、電平轉(zhuǎn)換芯片型號(hào),完成系統(tǒng)硬件設(shè)計(jì)和程序設(shè)計(jì)。3設(shè)計(jì)內(nèi)容3.1S3C2410與串口通信概述3.1.1S3C2410處理器概述S3C2410是Samsung公司基于ARM920T?xún)?nèi)核的嵌入式微處理器.本文以S3C2410為核心,配置了最基本外圍電路構(gòu)成了最小的嵌入式系統(tǒng),并在ADS上開(kāi)發(fā)了啟動(dòng)程序,完成硬件初始化,配置運(yùn)行環(huán)境,串日調(diào)試功能。Samsung公司推出的16/32位RISC處理器S3C2410A,為手持設(shè)備和一般類(lèi)型應(yīng)用提供了低價(jià)格、低功耗、高性能小型微控制器的解決方案。為了降低整個(gè)系統(tǒng)的成本,S3C2410A提供了以下豐富的內(nèi)部設(shè)備:分開(kāi)的16KB的指令Cache和16KB數(shù)據(jù)Cache,MMU虛擬存儲(chǔ)器管理,LCD控制器(支持STN&TFT),支持NANDFlash系統(tǒng)引導(dǎo),系統(tǒng)管理器(片選邏輯和SDRAM控制器),3通道UART,4通道DMA,4通道PWM定時(shí)器,I/O端口,RTC,8通道10位ADC和觸摸屏接口,IIC-BUS接口,IIC-BUS接口,USB主機(jī),USB設(shè)備,SD主卡&MMC卡接口,2通道的SPI以及內(nèi)部PLL時(shí)鐘倍頻器.S3C2410A采用了ARM920T內(nèi)核,0.18um工藝的CMOS標(biāo)準(zhǔn)宏單元和存儲(chǔ)器單元.它的低功耗、精簡(jiǎn)和出色的全靜態(tài)設(shè)計(jì)特別適用于對(duì)成本和功耗敏感的應(yīng)用。同樣它還采用一種叫做AdvancedMicrocontrollerBusArchitecture(AMBA)新型總線(xiàn)結(jié)構(gòu).S3C2410A的顯著特性是它的CPU核心,是一個(gè)由AdvancedRISCMachines(ARM)有限公司設(shè)計(jì)的16/32位ARM920TRISC處理器。ARM920T實(shí)現(xiàn)了MMU,AMBABUS和Harvard高速緩沖體系結(jié)構(gòu)。這一結(jié)構(gòu)具有獨(dú)立的16KB指令Cache和16KB數(shù)據(jù)Cache,每個(gè)都是由8字長(zhǎng)的行(line)構(gòu)成。通過(guò)提供一系列完整的系統(tǒng)外圍設(shè)備,S3C2410A大大減少了整個(gè)系統(tǒng)的成本,消除了為系統(tǒng)配置額外器件的需要.本文檔將介紹S3C2410A中集成的以下片上功能:●1.8V/2.0V內(nèi)核供電,3。3V存儲(chǔ)器供電,3.3V外部I/O供電;●具備16KB的I-Cache和16KB的D-Cache/MMU;●外部存儲(chǔ)控制器(SDRAM控制和片選邏輯)●LCD控制器(?大支持4K色STN和256K色TFT)提供1通道LCD專(zhuān)用DMA.●4通道DMA并有外部請(qǐng)求引腳.●3通道UART(IrDA1。0,16字節(jié)TxFIFO,和16字節(jié)RxFIFO)/2通道SPI●1通道多主IIC—BUS/1通道IIS-BUS控制器.●兼容SD主接口協(xié)議1。0版和MMC卡協(xié)議2.11兼容版?!瘢捕丝赨SB主機(jī)/1端口USB設(shè)備(1。1版)●4通道PWM定時(shí)器和1通道內(nèi)部定時(shí)器●看門(mén)狗定時(shí)器●117個(gè)通用I/O口和24通道外部中斷源?!窆目刂颇J剑壕哂衅胀?,慢速,空閑和掉電模式?!?通道10比特ADC和觸摸屏接口●具有日歷功能的RTC●具有PLL片上時(shí)鐘發(fā)生器3。1。1串口通信串口通信的概念,即串口按位(bit)發(fā)送和接收字節(jié)通信協(xié)議是指通信雙方按照約定的數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟等規(guī)程來(lái)進(jìn)行數(shù)據(jù)傳輸本次采用異步通信,其特點(diǎn)是通信雙方以一個(gè)字符(包括特定附加位)作為數(shù)據(jù)傳輸單位,且發(fā)送方傳送字符的間隔時(shí)間是不定的。在傳輸一個(gè)字符時(shí)總是從起始位開(kāi)始,以停止位結(jié)束。如圖1所示:圖1串行數(shù)據(jù)幀格式S3C2410的UART提供3個(gè)獨(dú)立的異步串行通信端口,每個(gè)端口可以基于中斷或者DMA進(jìn)行操作。換句話(huà)說(shuō),UART控制器可以在CPU和UART之間產(chǎn)生一個(gè)中斷或者DMA請(qǐng)求來(lái)傳輸數(shù)據(jù)。UART在系統(tǒng)時(shí)鐘下運(yùn)行可支持高達(dá)230.4K的波特率,如果使用外部設(shè)備提供的UEXTCLK,UART的速度還可以更高。每個(gè)UART通道各含有兩個(gè)16位的接收和發(fā)送FIFO.S3C2410的UART包括可編程的波特率,紅外接收/發(fā)送,一個(gè)或兩個(gè)停止位插入,5—8位數(shù)據(jù)寬度和奇偶校驗(yàn).每個(gè)UART包括一個(gè)波特率發(fā)生器、一個(gè)發(fā)送器、一個(gè)接收器和一個(gè)控制單元,如圖11-1所示。波特率發(fā)生器的輸入可以是PCLK或者UEXTCLK.發(fā)送器和接收器包含16位的FIFO和移位寄存器,數(shù)據(jù)被送入FIFO,然后被復(fù)制到發(fā)送移位寄存器準(zhǔn)備發(fā)送,然后數(shù)據(jù)按位從發(fā)送數(shù)據(jù)引腳TxDn輸出.同時(shí),接收數(shù)據(jù)從接收數(shù)據(jù)引腳RxDn按位移入接收移位寄存器,并復(fù)制到FIFO。特性RxD0,TxD0,RxD1,TxD1,RxD2,和TxD2基于中斷或者DMA操作UARTCh0,1,和2具有IrDA1.0&16字節(jié)FIFOUARTCh0和1具有nRTS0,nCTS0,nRTS1,和nCTS1支持發(fā)生/接收握手3.2方案設(shè)計(jì)圖2通信系統(tǒng)的組成框圖本系統(tǒng)是以嵌入式芯片S3C2410為核心的最小嵌入式系統(tǒng)構(gòu)建方法,給出了S3C2410的復(fù)位電路、調(diào)試接口、電源電路、存儲(chǔ)器電路和串口電路等硬件組成。3.3電路設(shè)計(jì)3.3。1電源設(shè)計(jì)S3C2410工作時(shí)內(nèi)核需要1。8V電壓,I/O端口和外設(shè)需要3。3V電壓。VDDi/VDDiarm引腳口是供S3C2410內(nèi)核的1。8V電壓;VDDalive引腳是功能復(fù)位和端口狀態(tài)寄存器電壓.M12引腳RTCVDD是RTC模塊的1。8V電壓,用電池供電保證系統(tǒng)的掉電后保持實(shí)時(shí)時(shí)鐘.VDDOP引腳是I/O端口3。3V電壓;VDDMOP引腳是存儲(chǔ)器I/O端口電壓;還有一系列VSS引腳需要接到電源地上.3。3V電壓從SV用AMS1117-3。3轉(zhuǎn)換得到如圖3所示;1。8V從3。3V通過(guò)MIC5207-1.8轉(zhuǎn)換得到。如圖3所示。

溫馨提示

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

評(píng)論

0/150

提交評(píng)論