當(dāng)前位置:首頁 > 通信技術(shù) > 通信技術(shù)
[導(dǎo)讀]摘要:介紹了支持多串口同時(shí)抄表的智能儀表軟件構(gòu)架、驅(qū)動(dòng)層程序設(shè)計(jì)方法,并設(shè)計(jì)了一種支持多串口同時(shí)抄表的智能儀表程序。通過通信協(xié)議層和應(yīng)用層中的接收回調(diào)函數(shù)、發(fā)送回調(diào)函數(shù)、接收幀處理和發(fā)送幀處理詳細(xì)過程

摘要:介紹了支持多串口同時(shí)抄表智能儀表軟件構(gòu)架、驅(qū)動(dòng)層程序設(shè)計(jì)方法,并設(shè)計(jì)了一種支持多串口同時(shí)抄表的智能儀表程序。通過通信協(xié)議層和應(yīng)用層中的接收回調(diào)函數(shù)、發(fā)送回調(diào)函數(shù)、接收幀處理和發(fā)送幀處理詳細(xì)過程,有效地實(shí)現(xiàn)多個(gè)用戶根據(jù)自己的權(quán)限同時(shí)對(duì)同一塊儀表進(jìn)行抄讀。實(shí)踐證明,該設(shè)計(jì)獲得了較好的預(yù)期效果,具有良好的應(yīng)用前景。

引言

隨著計(jì)算機(jī)技術(shù)、通信技術(shù)、電子技術(shù)的發(fā)展,推動(dòng)了儀表行業(yè)快速發(fā)展;同時(shí),隨著人力成本的增加,人工抄表將會(huì)逐漸被淘汰;智能儀表將成為儀表行業(yè)發(fā)展的方向。可以預(yù)見,在未來20年儀表行業(yè)將經(jīng)歷一次革命,我國將由目前的人工抄表方式逐漸轉(zhuǎn)變?yōu)檫h(yuǎn)程抄表,各級(jí)水、氣和電力管理部門可以根據(jù)不同的權(quán)限對(duì)同一塊儀表進(jìn)行遠(yuǎn)程抄讀。為了支持多用戶同時(shí)抄表,本文設(shè)計(jì)了一種支持多串口同時(shí)抄讀的智能儀表程序,對(duì)程序設(shè)計(jì)流程做了詳細(xì)的闡述。

1 支持多串口智能儀表軟件構(gòu)架

支持多串口智能儀表軟件構(gòu)架如圖1所示,支持多串口智能儀表的軟件構(gòu)架分為4層:驅(qū)動(dòng)層、基于任務(wù)調(diào)度的操作系統(tǒng)、通信協(xié)議層和應(yīng)用層。驅(qū)動(dòng)層主要提供智能儀表的各種硬件驅(qū)動(dòng)。其中,串口驅(qū)動(dòng)程序?qū)崿F(xiàn)的功能包括:串口的配置、提供通信協(xié)議在串口發(fā)送列表和串口接收列表中注冊的接口函數(shù)、為通信協(xié)議層提供數(shù)據(jù)服務(wù)?;谌蝿?wù)調(diào)度的操作系統(tǒng)的設(shè)計(jì)可以提高程序的通用性和擴(kuò)展性;通信協(xié)議層和應(yīng)用層根據(jù)需要在操作系統(tǒng)中注冊任務(wù),如果以后需要增加一個(gè)功能,則可以直接增加一個(gè)任務(wù)而不需要對(duì)以前的代碼進(jìn)行改動(dòng)。

通信協(xié)議層主要對(duì)從物理層接收的數(shù)據(jù)幀和命令幀,按照通信協(xié)議的幀格式進(jìn)行解析和對(duì)從應(yīng)用層接收到的數(shù)據(jù)和命令按照通信協(xié)議的幀格式進(jìn)行組幀。應(yīng)用層主要實(shí)現(xiàn)智能電表和抄表客戶端應(yīng)用對(duì)象之間的通信。支持多協(xié)議的智能儀表軟件構(gòu)架如圖1所示。

2 驅(qū)動(dòng)層串口程序設(shè)計(jì)

通信協(xié)議層系統(tǒng)初始化時(shí),通信協(xié)議需要在每個(gè)串口的發(fā)送列表和接收列表中注冊。其中,串口發(fā)送協(xié)議列表和串口接收協(xié)議列表如下所示:

3 協(xié)議層和應(yīng)用層程序設(shè)計(jì)

在通信協(xié)議層定義一個(gè)類型為PROTOCOL的數(shù)組ProtocolPortList,ProtocolPortList數(shù)組的主要作用是:存放對(duì)應(yīng)串口接收的數(shù)據(jù)和要發(fā)送的數(shù)據(jù)、表征該串口目前的狀態(tài)。代碼如下:

PROTOCOL ProtocolPortList[SERIAL_PORT_COUNT];

typedef struct{

UINT8 RxBuff[RECV_FRAME_BUFF_LEN];

UINT8 TxBuff[SEND_FRAME_BUFF_LEN];

UINT8 ReceiveSuccessFlag;

UINT8 RxLen:

UINT8 TxLen;

}PROTOCOL;

RxBuff是用來存放從串口接收的數(shù)據(jù),TxBuff為要發(fā)送的數(shù)據(jù),如果接收到一幀合法數(shù)據(jù)將ReceiveSuccessFlag置0xFF,該標(biāo)志的作用是為操作系統(tǒng)提供一個(gè)處理RxBuff中數(shù)據(jù)的標(biāo)志,防止已經(jīng)接收的幀被后續(xù)幀覆蓋。RxLen為RxBuff接收字節(jié)的長度,TxLen為TxBuff要發(fā)送數(shù)據(jù)的長度。

3.1 接收回調(diào)函數(shù)程序設(shè)計(jì)

當(dāng)串口接收到一個(gè)字節(jié)后調(diào)用接收回調(diào)函數(shù),接收數(shù)據(jù)回調(diào)函數(shù)數(shù)據(jù)處理流程圖如圖2所示。首先判斷返回的channel是否為物理通道1、物理通道2或物理通道3。如果不是則將此數(shù)據(jù)拋棄,如果是則判斷ProtocolList[channel].ReceiveSuccesFlag是否為0xFF。如果是,說明該串口已經(jīng)接收到一幀數(shù)據(jù)但還沒有被處理,不能接收數(shù)據(jù)。如果不是,則判斷接收字節(jié)是否符合通信協(xié)議的幀格式,如果不符合則將接收字節(jié)拋棄,如果符合將接收字節(jié)Data存入接收緩沖區(qū)ProtocolList[channel].RxBuff中,并且將接收長度ProtocolList[channel].RxLen加1,最后判斷是否一幀數(shù)據(jù)接收完畢,如果接收完成則將ProtocolList[channel].ReeeiveSuiccesFlag置為0xFF。

3.2 消息格式

在應(yīng)用層和通信協(xié)議層中都有一個(gè)消息列表,分別來收集協(xié)議棧發(fā)送給它的消息和應(yīng)用層發(fā)送給通信協(xié)議層的消息。

Message MessageList[MAX_MESSAGE_NUM];

其中Message的結(jié)構(gòu)如下所示:

typedef struct{

Un8 Channel;

Un8 STaskID;

Un8 DTaskID;

Un8 MessageType;

Un8*Data;

}Message;

通道號(hào)為協(xié)議棧接收數(shù)據(jù)的串口號(hào),STaskID為源任務(wù)號(hào)(協(xié)議棧的任務(wù)號(hào)或應(yīng)用層的任務(wù)號(hào)),DTaskID為目的任務(wù)ID(協(xié)議棧的任務(wù)號(hào)或應(yīng)用層的任務(wù)號(hào)),MessageType代表什么類型的消息(讀數(shù)據(jù)請(qǐng)求、寫數(shù)據(jù)請(qǐng)求),Data為所要寫入數(shù)據(jù)的指針。

3.3 基于任務(wù)調(diào)度的操作系統(tǒng)對(duì)接收幀的處理

當(dāng)基于任務(wù)調(diào)度的操作系統(tǒng)執(zhí)行通信協(xié)議層任務(wù)時(shí)會(huì)搜索ProtocolList數(shù)組中哪個(gè)元素的ProtocolList[channel].ReceiveSuccesFlag為0xFF,然后對(duì)其ProtocolList[channel].RxBuff中的數(shù)據(jù)進(jìn)行處理,處理過程是:

①首先按照通信協(xié)議層的幀格式對(duì)接收數(shù)據(jù)進(jìn)行解析。

②解析出需要發(fā)往應(yīng)用層的數(shù)據(jù),按一定的消息格式(包含發(fā)送數(shù)據(jù)和通道號(hào))組成一條消息,然后將其發(fā)送給應(yīng)用層,應(yīng)用層收到這個(gè)消息后將其存入AMessageList應(yīng)用層消息列表中。

當(dāng)處理完成后將ProtocolList[channel].RxLen置0,將ProtocolList[channel].ReceiveSuccessFlag置0,以便于該channel串口通道可以接收下一幀數(shù)據(jù)。

基于任務(wù)調(diào)度的操作系統(tǒng)會(huì)按一定的調(diào)度時(shí)間來搜索ProtocolList中各個(gè)串口通道是否接收到一個(gè)完整的幀并進(jìn)行處理,這樣就能夠?qū)崿F(xiàn)協(xié)議棧對(duì)多個(gè)串口接收到的數(shù)據(jù)幀進(jìn)行及時(shí)處理,多串口同時(shí)進(jìn)行通信。

基于任務(wù)調(diào)度的操作系統(tǒng)會(huì)按一定的調(diào)度時(shí)間來搜索AMessageList是否為空,如果不為空則對(duì)相應(yīng)的消息進(jìn)行處理,這樣就能夠?qū)崿F(xiàn)應(yīng)用層對(duì)收到的多個(gè)消息進(jìn)行及時(shí)處理,實(shí)現(xiàn)并行通信。

3.4 協(xié)議層對(duì)從應(yīng)用層接收到的消息處理

智能儀表需要向客戶機(jī)返回抄讀數(shù)據(jù)時(shí),首先智能儀表應(yīng)用層將抄讀數(shù)據(jù)按照一定的消息格式組成一條消息,然后將該消息發(fā)送給通信協(xié)議層。通信協(xié)議層收到該消息后將其存入PMessageList協(xié)議層消息列表中。

基于任務(wù)調(diào)度的操作系統(tǒng)會(huì)按一定的調(diào)度時(shí)間來搜索PMessageList是否為空,如果不為空則對(duì)相應(yīng)的消息進(jìn)行處理。

通信協(xié)議層對(duì)消息的處理過程如下:

①通信協(xié)議層將消息進(jìn)行解析,解析出發(fā)送的Data和發(fā)送通道channel。

②將需要發(fā)送的數(shù)據(jù)按照通信協(xié)議的幀格式進(jìn)行組幀,并存儲(chǔ)于ProtocolList[channel].TxBuff中。ProtocolList[channel].TxLen為需要發(fā)送的長度。

③調(diào)用串口發(fā)送函數(shù),將該幀數(shù)據(jù)通過串口channel發(fā)送出去。

3.5 發(fā)送回調(diào)函數(shù)程序設(shè)計(jì)

當(dāng)channel的串口將協(xié)議層數(shù)據(jù)幀發(fā)送出去后會(huì)調(diào)用發(fā)送回調(diào)函數(shù)將ProtocolList[channel].TxLen置為0。

結(jié)語

本文根據(jù)智能儀表的發(fā)展方向和多用戶同時(shí)抄表的需求,闡述了設(shè)計(jì)支持多串口同時(shí)抄表的智能儀表程序的必要性。給出了支持多串口同時(shí)抄表的智能儀表軟件構(gòu)架、驅(qū)動(dòng)層程序設(shè)計(jì)、通信協(xié)議層程序設(shè)計(jì)和應(yīng)用層程序設(shè)計(jì)。它可以使多個(gè)抄表部門根據(jù)各自的權(quán)限同時(shí)對(duì)同一塊儀表進(jìn)行抄讀和設(shè)置。該設(shè)計(jì)可以廣泛地應(yīng)用于智能儀表行業(yè),從而推動(dòng)我國儀表行業(yè)的發(fā)展和國際化。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉