999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種電能表的業務模型研究

2024-11-25 00:00:00劉曉輝趙廣東
科技風 2024年32期

摘要:在電能表軟件開發中,在開發業務遇到跟其他業務有功能交集時,往往通過調用其他業務提供的函數接口實現,久而久之,業務功能會形成一張網,難于拆解,難于維護,造成新人上手慢、培養時間長、項目開發進度不可控等問題。為了解決上述問題,需要搭建一個業務模型,在業務功能開發時,使各個業務功能模塊化。每個模塊采用相同的固定式接口模型,彼此之間相互獨立,沒有函數直調,模塊間的信息往來通過系統框架提供的接口實現。通過這種業務模型,成功實現模塊間的耦合分離,固定業務開發模式,降低了開發難度。

關鍵詞:業務模型;時序圖;消息處理;業務注冊

中圖分類號:TP311.1文獻標識碼:A

在電能表軟件系統中,業務模塊包含通信、測量、控制、事件、上報等內容。項目成員從事開發不同的業務模塊,編寫出來的代碼經常是沒有固定套路,走讀代碼困難,業務模塊間耦合嚴重,增加了代碼后期維護難度。為了解決這種狀況,研究一種新的業務模型,讓業務功能開發出的代碼具備低耦合、高效能、易維護,顯得尤為重要。

1業務模型原理

該種業務模型采用業務注冊、消息驅動的機制,實現業務代碼的運行。總體上分5個接口函數,分別是初始化函數、讀數據函數、寫數據函數、消息處理函數及顯示處理函數,如圖1所示:

每個不同的業務功能均采用該業務模型,多個業務模塊之間都只跟中間層進行交互,避免業務模塊相互間的耦合調用。業務模型采用C++語言實現,利用其封裝繼承特性,實現業務模型的固定化開發套路,大大提高軟件開發效率,易用易維護。

2業務模型的設計

2.1對象注冊

在業務對象定義時,利用業務模塊的構造函數完成業務模塊自身注冊,系統將獲取該注冊業務對象,為后期的數據管理及消息觸發提供支持。其數據結構如圖2所示:

CModule類為業務基類,其提供業務模塊的5個接口函數,這5個接口函數用于中間層系統調用。

DATA_REG為業務數據結構體,其中包含數據名、數據大小、記錄型數據深度、數據類型、eeprom地址等。

CServiceModule為業務類,負責5個接口和數據的具體實現。

2.2業務初始化

OnInitData函數負責業務模塊eeprom數據或flash數據的上電或掉電讀取工作,用來還原ram變量中的值。例如電表中正向有功電能,反向有功電能這些值在電表掉電后上電都是要從eeprom中恢復的,這個工作就在該函數內實現。

2.3業務讀數據

OnReadData函數負責本模塊定義的數據對外的讀出操作,將ram、eeprom或flash中的數據拷貝到外部緩沖區,供其他業務模塊訪問本模塊數據時使用,這種使用方式是間接性通過框架進行讀取,不是直接的函數調用。

2.4業務寫數據

OnWriteData函數負責本模塊定義的數據的寫入操作,其他業務模塊通過中間層系統提供的寫接口函數間接回調該函數,將ram、eeprom或flash中的數據進行更新替換,訪問方式跟讀數據類似。

2.5業務消息處理

OnTriggerForApp函數負責本模塊響應消息的處理,消息包含定時消息(毫秒消息、秒消息、分鐘消息等)、硬件驅動觸發消息及模塊間協作消息等,如圖3所示:

(1)COtherModule為另外一個業務模塊類名,跟CServeModule類似。

(2)DispatchMessage為中間層系統提供的消息派送處理接口函數,負責將消息傳遞到其他業務模塊的消息處理函數內。

2.6顯示

OnShow函數負責本模塊顯示功能處理。在該函數內可以出現顯示相關操作,如調用底層顯示接口完成對應顯示功能。

3業務模型實現

3.1業務注冊

在業務模塊構造函數內,調用系統框架提供的注冊函數RegistModule,將業務模塊對象指針this及數據信息傳給系統框架,為系統框架后期的業務模塊調度使用。系統提供的注冊函數RegistModule定義如下:u8RegistModule(CMODULE*pObj,u8nAppID),其中pObj為業務模塊對象指針,nAppID為業務模塊id,用于區分各個業務模塊。具體流程如圖4所示:

3.2初始化

業務模塊注冊完畢后,系統運行時會調用業務模塊注冊的初始化函數,完成業務模塊的初始化動作,具體實現流程如圖5所示:

3.3讀數據

業務模塊相互之間通常需要獲取數據,如通信業務模塊在收到主站發送的抄讀數據業務幀時,需要到其他業務模塊將其數據抄讀回來,由協議層組織成幀報文返還給主站。框架提供ReadAppData接口實現該功能,協議路由層調用該接口,該接口內部通過業務模塊對象指針訪問該業務模塊的OnReadData函數,從而實現了數據的訪問。實現流程如圖6所示:

3.4寫數據

寫數據的實現跟讀數據很相似,用途是供其他業務模塊設置本模塊數據時調用。當其他業務模塊需要設置非本模塊數據時,調用系統提供的WriteAppData接口函數,該接口函數內通過業務模塊指針調用其OnWriteData回調函數。具體流程如圖7所示:

3.5消息處理

業務模塊業務功能的執行靠消息驅動,系統提供DispatchMessage接口函數負責消息的觸發。當一個業務模塊需要另外一個業務模塊幫助完成一個動作時,可以定義個消息id,通過DispatchMessage接口函數將消息傳遞到對應的業務模塊消息處理函數OnTriggerForApp內,函數OnTriggerForApp負責響應該消息,并執行對應的代碼。實現流程如圖8所示:

3.6顯示

每個業務模塊可能都有顯示的需求,那么顯示相關的實現代碼就在OnShow函數內實現。依照業務模塊在系統內注冊的順序,系統在主循環中每秒調用每個業務模塊顯示處理函數OnShow一次,保持正常刷新。實現流程如圖9所示:

結語

對于功能越來越復雜的電能表,業務功能的獨立性顯得越來越重要,固定式的業務模型開發模式大大地降低了新員工入門門檻,提高了代碼的可維護性。經過在電能表中的驗證,該業務模型真正地實現了業務模塊的獨立,業務模塊間業務往來依靠消息驅動,不再直接調用其他業務模塊的函數接口,避免了業務蜘蛛網的形成。人員之間的影響大大降低,各自在各自的業務模塊內實現業務功能,模塊業務接口完全一致,適合集中培訓,代碼維護更容易。

參考文獻:

[1]李無言.一步步寫嵌入式操作系統:ARM編程的方法與實踐[M].北京:電子工業出版社,2011.

[2]彭為,黃科,雷道仲.單片機典型系統設計實例精講[M].北京:電子工業出版社,2006.

[3]徐愛鈞.單片機高級語言C51應用程序設計[M].北京:電子工業出版社,2001.

[4]RobertL.Kruse,AlexanderJ.Ryba.C++數據結構與程序設計[M].錢麗萍,譯.北京:清華大學出版社,2004.

[5]LubomirF.Bic,AlanC.Shaw.操作系統原理[M].梁洪亮,譯.北京:清華大學出版社,2005.

作者簡介:劉曉輝(1980—),男,漢族,河南許昌人,本科,中級工程師,主要研究方向:電能表軟件設計;趙廣東(1985—),男,漢族,河南禹州人,本科,中級經濟師,研究方向:項目管理費用管理。

主站蜘蛛池模板: 亚洲精品无码抽插日韩| 国产精品亚欧美一区二区| 国产精品.com| 国产爽妇精品| 精品自窥自偷在线看| 美女被操91视频| 亚洲成人在线网| 国产色婷婷视频在线观看| 亚洲一区色| 亚洲国产综合自在线另类| 国产精品毛片在线直播完整版| 国产麻豆福利av在线播放| 亚洲天堂精品视频| 久久免费观看视频| 成人韩免费网站| 香蕉伊思人视频| 亚洲人人视频| 免费无码在线观看| 色欲色欲久久综合网| 欧美国产菊爆免费观看| 中文字幕无码av专区久久| 真人高潮娇喘嗯啊在线观看 | 91精品国产情侣高潮露脸| 高潮毛片无遮挡高清视频播放| 国产精品jizz在线观看软件| 午夜精品久久久久久久99热下载| 亚洲成网777777国产精品| 久久国产毛片| www.亚洲色图.com| 91精品小视频| 精品久久人人爽人人玩人人妻| 国产欧美日韩一区二区视频在线| 婷婷伊人五月| 亚洲精品午夜天堂网页| 欧美一级99在线观看国产| 亚洲最大福利网站| 日韩东京热无码人妻| 亚洲男人天堂2020| 亚洲午夜福利精品无码不卡| 亚洲免费三区| 午夜毛片免费观看视频 | 亚洲视频免费在线看| 天堂中文在线资源| 国产超碰在线观看| 中文字幕不卡免费高清视频| 国产裸舞福利在线视频合集| 成人av专区精品无码国产| 亚洲综合久久成人AV| 91九色国产在线| 國產尤物AV尤物在線觀看| 欧美.成人.综合在线| 香蕉eeww99国产在线观看| 国产人成网线在线播放va| 欧美成人a∨视频免费观看 | 日韩专区欧美| 免费在线a视频| 国产黄色爱视频| 亚洲成人播放| 亚洲综合中文字幕国产精品欧美 | 国产91成人| 国产国拍精品视频免费看| 亚洲综合色在线| 一区二区三区国产精品视频| 欧美精品啪啪| 亚洲AV无码久久天堂| 欧美日韩在线亚洲国产人| 国产一级精品毛片基地| 国产成人高清亚洲一区久久| 亚洲国产精品日韩av专区| 久青草免费视频| 狼友视频国产精品首页| 亚洲精品免费网站| 国产精品性| 91精品啪在线观看国产60岁| 国产精品女人呻吟在线观看| 成人年鲁鲁在线观看视频| 色老头综合网| 四虎成人精品在永久免费| 亚洲av片在线免费观看| 综合久久久久久久综合网| 欧美在线国产| 国产爽歪歪免费视频在线观看|