• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種飛控系統(tǒng)參數(shù)管理的嵌入式解決方案

      2023-03-30 07:30:14詹福宇
      關(guān)鍵詞:存儲(chǔ)介質(zhì)飛控控系統(tǒng)

      詹福宇*,徐 亮,陳 林

      (中電科特種飛機(jī)系統(tǒng)工程有限公司,四川 成都)

      大多數(shù)軟件都會(huì)涉及到參數(shù)的存儲(chǔ)與讀取,小至運(yùn)行單片機(jī)的軟件,大至操作系統(tǒng)級(jí)別的軟件,均會(huì)有專門的子程序或者模塊進(jìn)行參數(shù)的讀寫和存儲(chǔ)。不同開發(fā)平臺(tái)下,參數(shù)管理會(huì)存在一定的差異化,例如Windows 和Linux 下的軟件則會(huì)以ini、xml 或json 等配置文件的形式保存參數(shù);而單片機(jī)等嵌入式環(huán)境下,由于資源的限制無(wú)法使用這些功能接口,需要另外設(shè)計(jì),一般將參數(shù)是保存EEPROM或ROM等。

      文獻(xiàn)[1]和文獻(xiàn)[2]中介紹了嵌入式平臺(tái)中參數(shù)存儲(chǔ)介質(zhì)、數(shù)據(jù)類型設(shè)計(jì)、讀寫接口設(shè)計(jì)等。文獻(xiàn)[3]發(fā)明了一種應(yīng)用于呼吸機(jī)的嵌入式設(shè)備的參數(shù)管理方法、嵌入式設(shè)備的參數(shù)管理系統(tǒng)、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以及嵌入式設(shè)備,但是該專利中沒有涉及上位機(jī)通信、數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)、多線程通信等功能,另外飛控系統(tǒng)相對(duì)呼吸機(jī)更加復(fù)雜。

      飛控系統(tǒng)是一個(gè)復(fù)雜、高效、可靠的嵌入式系統(tǒng)[4],針對(duì)飛行參數(shù)記錄儀的研究工作[5-6]很多,但是涉及飛控系統(tǒng)參數(shù)管理的資料相對(duì)很少。本研究提出一種飛控系統(tǒng)參數(shù)管理的完整解決方案,包括參數(shù)的定義、獲取、更新、保存,跨線程支持以及上位機(jī)通信協(xié)議等。

      1 飛控參數(shù)管理模塊要求

      (1)高效性,參數(shù)修改必須及時(shí)通知并更新所用應(yīng)用該參數(shù)的模塊。

      (2)可靠性,飛控參數(shù)會(huì)直接影響飛行安全,因此參數(shù)更新過(guò)程必須可靠,尤其是在多線程訪問的情況下。

      (3)模塊化,每個(gè)模塊具備獨(dú)立定義自己參數(shù),不影響其他模塊,參數(shù)可以在所有C 文件定義。

      (4)擴(kuò)展性,產(chǎn)品升級(jí),若涉及增加、刪除、修改參數(shù),應(yīng)不影響其它參數(shù),不影響上位機(jī)通信協(xié)議。

      2 飛控參數(shù)管理模塊設(shè)計(jì)

      2.1 飛控參數(shù)管理框架

      飛控參數(shù)管理系統(tǒng)框架(見圖1),主要包含三層:

      圖1 飛控參數(shù)管理框架

      (1)存儲(chǔ)介質(zhì),可以是EPPEOM、FLASH、FILE等永久存儲(chǔ)介質(zhì)。

      (2)參數(shù)管理配置模塊,提供了一套API 接口用于管理飛控參數(shù)。

      (3)上位機(jī)通信模塊,可以通過(guò)上位機(jī)進(jìn)行參數(shù)查詢和修改等。

      本研究方案中每一個(gè)飛控參數(shù)都可能存在多份拷貝:

      (1)參數(shù)管理模塊維護(hù)一份包含所有參數(shù)的元數(shù)據(jù)和當(dāng)前值的表__param_table。

      (2)每個(gè)模塊獨(dú)立保存所使用參數(shù)的副本,運(yùn)行過(guò)程中檢測(cè)PARAM_UPDATE 事件則將副本同步為__param_table 中的值。

      2.2 飛控參數(shù)結(jié)構(gòu)設(shè)計(jì)

      參數(shù)結(jié)構(gòu)設(shè)計(jì)由param_info_t 和param_data_t 兩個(gè)結(jié)構(gòu)體定義:

      (1)param_info_t,結(jié)構(gòu)體,包括分組名、變量名(全局唯一)、默認(rèn)值、類型、標(biāo)志位(修改需要重啟、解鎖后禁止修改、是否系統(tǒng)預(yù)留等)和真實(shí)值地址。

      (2)param_data_t,結(jié)構(gòu)體,包括參數(shù)當(dāng)前使用值、狀態(tài)位(表征參數(shù)是否修改,是否保存,是否啟用等)等。

      2.3 飛控參數(shù)變量定義

      參數(shù)變量定義包括param_info_t 和param_data_t兩部分,前者用于存儲(chǔ)參數(shù)元數(shù)據(jù),后者用于存儲(chǔ)參數(shù)使用值。為了便于用戶使用,一般通過(guò)PARAM_DEFINE_FLOAT/INT32 等一系列宏來(lái)簡(jiǎn)化參數(shù)定義,比如:

      其中PARAM_EXPORT 宏將param_info_t 變量定義到lds 文件指定的ParamTab section 區(qū)域,這樣參數(shù)可以定義在任意*.c 文件,但均可統(tǒng)一通過(guò)section 地址來(lái)索引和查找,便于軟件模塊化開發(fā)。

      通過(guò)以下方式獲取參數(shù)表格的首地址和數(shù)量,其中__param_section_start 和__param_section_end 是lds文件中ParamTab 區(qū)域的首尾地址:

      2.4 飛控參數(shù)讀寫流程

      飛控參數(shù)通過(guò)唯一變量名進(jìn)行索引, 一個(gè)典型的參數(shù)讀寫流程見圖 2。param_find 函數(shù)從__param_table 中搜索第一個(gè)與name 相匹配的參數(shù),返回其句柄,并將該參數(shù)的狀態(tài)設(shè)置為“已使用”;param_get函 數(shù) 將 參 數(shù) 當(dāng) 前 值param_info_ptr->data->value 拷貝到本地,用于飛控計(jì)算。運(yùn)行過(guò)程如果檢測(cè)到PARAM_UPDATE 事件,則重新拷貝。

      圖2 飛控參數(shù)典型讀寫流程

      param_set 函數(shù)用于修改參數(shù)的當(dāng)前值,同時(shí)將該參數(shù)的狀態(tài)設(shè)置為“已修改”和“未保存”,并廣播一個(gè)PARAM_UPDATE 事件,其它模塊收到該事件,會(huì)將最新的參數(shù)值拷貝到本地。

      2.5 飛控參數(shù)存儲(chǔ)機(jī)制

      如圖3 所示,飛控啟動(dòng)時(shí),調(diào)用param_load 函數(shù)從默認(rèn)存儲(chǔ)介質(zhì)中讀取param_save_head_t 和param_save_data_t 數(shù)據(jù)并校驗(yàn):如果校驗(yàn)失敗,則調(diào)用param_save 函數(shù)將“已修改”參數(shù)來(lái)初始化存儲(chǔ)介質(zhì);如果校驗(yàn)成功,則在for 循環(huán)中調(diào)用param_find 和param_set 函數(shù)將參數(shù)修改為存儲(chǔ)值,并廣播PARAM_UPDATE 事件,通知其它模塊參數(shù)已經(jīng)更新了。

      圖3 飛控參數(shù)存儲(chǔ)控制流程

      運(yùn)行過(guò)程中,PARAM_AUTO_SAVE 后臺(tái)線程,如果檢測(cè)PARAM_UPDATE 事件(一般調(diào)用param_set 函數(shù)時(shí)觸發(fā)),則將所有標(biāo)記為“已修改”的參數(shù)保存到存儲(chǔ)介質(zhì)中,同時(shí)將參數(shù)狀態(tài)設(shè)置為“已保存”,但不會(huì)重置“已修改”狀態(tài),保存到存儲(chǔ)的結(jié)構(gòu)體數(shù)據(jù)為:

      (1)param_save_head_t,存儲(chǔ)頭部信息,包含時(shí)間戳、參數(shù)個(gè)數(shù),以及參數(shù)HASH 校驗(yàn)。

      (2)param_save_data_t,存儲(chǔ)參數(shù)內(nèi)容,包含變量名和變量值,變量名作為參數(shù)的唯一索引,即使飛控軟件升級(jí)了,參數(shù)列表發(fā)生了變化,仍可以通過(guò)變量名與升級(jí)后的參數(shù)列表建立一一對(duì)應(yīng)關(guān)系,不會(huì)因?yàn)槌绦蛏?jí)導(dǎo)致已存參數(shù)失效或丟失。

      2.6 與上位機(jī)通信接口

      上位機(jī)對(duì)飛控參數(shù)的操作主要是獲取所有參數(shù)(見圖4)、讀取某個(gè)參數(shù)(見圖5)、修改某個(gè)參數(shù)(見圖6)。需要說(shuō)明的是,通過(guò)改變PARAM_LIST 的屬性值,可以下載特定屬性的參數(shù),比如只下載被修改的參數(shù),或者只下載EKF 分組的參數(shù),另外上位機(jī)在接收參數(shù)過(guò)程中,會(huì)進(jìn)行超時(shí)和序號(hào)連續(xù)性判斷。

      圖4 上位機(jī)獲取所有參數(shù)流程

      圖5 上位機(jī)讀取某個(gè)參數(shù)流程

      圖6 上位機(jī)修改某個(gè)參數(shù)流程

      為了防止批量下載參數(shù)時(shí)阻塞通信鏈路,飛控每個(gè)發(fā)送周期(20 ms)只發(fā)送3 個(gè)參數(shù),也就是每秒發(fā)送150 個(gè)參數(shù),占用帶寬約43.36 kbps,絕大部分?jǐn)?shù)據(jù)鏈都能滿足這個(gè)傳輸要求,比如Microhard P900 數(shù)傳擁有57.6 kbps~276 kbps 無(wú)線速率。

      3 嵌入式軟件實(shí)現(xiàn)

      某飛控系統(tǒng)基于RT-Thread V4.1.x[7]嵌入式實(shí)時(shí)操作系統(tǒng);編譯工具鏈為GNU Arm Embedded Toolchain 10.3-2021.10[8];處理器為STM32H753II,CPU 主頻480 MHz,擁有2 Mb Flash 和1 Mb RAM,飛控內(nèi)部運(yùn)行了各種傳感器驅(qū)動(dòng)、姿態(tài)位置估計(jì)、航線管理、位置控制、姿態(tài)控制等30 多個(gè)模塊,一共有649 個(gè)參數(shù),其中整數(shù)132 個(gè),浮點(diǎn)數(shù)517 個(gè)。

      通過(guò)軟件在環(huán)測(cè)試、硬件在環(huán)測(cè)試,以及真機(jī)飛行測(cè)試等,通過(guò)累積1 660 多個(gè)小時(shí)試驗(yàn),參數(shù)管理模塊工作正常,能夠正確的讀取、修改、存儲(chǔ)飛控參數(shù),上位機(jī)實(shí)時(shí)對(duì)參數(shù)進(jìn)行管理,修改后的參數(shù)能夠及時(shí)同步使用模塊,試驗(yàn)過(guò)程沒有出現(xiàn)參數(shù)管理故障。

      4 結(jié)論

      本研究提出了一套完整的飛控系統(tǒng)參數(shù)管理解決方案,涵蓋了飛控參數(shù)的讀取、修改、存儲(chǔ)以及與上位機(jī)通信等,支持多線程、支持模塊化,并成功應(yīng)用到某飛控系統(tǒng)。試驗(yàn)結(jié)果表明該方案完整、高效、可靠,并具備良好的擴(kuò)展性,滿足飛控系統(tǒng)嵌入式軟件要求。

      猜你喜歡
      存儲(chǔ)介質(zhì)飛控控系統(tǒng)
      關(guān)于DALI燈控系統(tǒng)的問答精選
      聯(lián)調(diào)聯(lián)試中列控系統(tǒng)兼容性問題探討
      民用飛機(jī)飛控通電自檢測(cè)安全性研究
      無(wú)人機(jī)飛控軟件架構(gòu)設(shè)計(jì)初探
      檔案館移動(dòng)存儲(chǔ)介質(zhì)管理方法探討
      02 飛控技術(shù)與機(jī)場(chǎng)安保引關(guān)注
      一種使用存儲(chǔ)介質(zhì)驅(qū)動(dòng)的方式
      飛控系統(tǒng)故障告警實(shí)時(shí)監(jiān)控軟件的設(shè)計(jì)與實(shí)現(xiàn)
      一種新型列控系統(tǒng)方案探討
      硬盤
      CHIP新電腦(2015年3期)2015-04-02 11:28:15
      贵州省| 福建省| 新源县| 巫山县| 沧州市| 昌吉市| 东至县| 东辽县| 绵阳市| 新宾| 辽中县| 白玉县| 永安市| 波密县| 健康| 南澳县| 巨鹿县| 抚松县| 泾川县| 安龙县| 习水县| 肥乡县| 化州市| 清水县| 尉犁县| 吉首市| 西林县| 南部县| 天峻县| 水富县| 聊城市| 蓝山县| 甘洛县| 文山县| 德安县| 襄汾县| 呼和浩特市| 鲁山县| 明光市| 红原县| 汾西县|