国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于內存共享的多道分析器與應用軟件數(shù)據(jù)交換的設計

2021-11-03 08:04宋青鋒趙龍于海明張偉
電子技術與軟件工程 2021年16期
關鍵詞:共享內存分析器通信協(xié)議

宋青鋒 趙龍 于海明 張偉

(丹東東方測控技術股份有限公司 遼寧省丹東市 118000)

多道分析器早已在多種產(chǎn)品中應用,有模擬多道分析器,也有數(shù)字多道分析器。不同分析儀產(chǎn)品對多道分析器的需求不同,就形成了不同硬件通信接口和不同硬件通信協(xié)議的情況,應用軟件就要根據(jù)使用的多道分析器情況,更改硬件接口和通信協(xié)議,導致不同產(chǎn)品或者同一產(chǎn)品不同版本的應用軟件都不同。這樣對于應用軟件開發(fā)和軟件版本管理都增加了工作量,同時硬件通信協(xié)議對于每一個軟件開發(fā)人員都是開放的,也不利于多道分析器硬件技術的保密。為了將多道分析器與應用軟件的數(shù)據(jù)交換過程統(tǒng)一化,使用共享內存技術,開發(fā)多道分析器的接口服務軟件,將多道分析器與電腦之間的硬件通信封裝起來。多道分析器廣泛應用于中子活化多元素分析儀中[1-2],隨著產(chǎn)品銷售領域的不斷拓展,硬件及軟件的功能不斷的改變,對多道分析器硬件與應用軟件數(shù)據(jù)交互統(tǒng)一性的需求更加強烈。

1 數(shù)據(jù)交換的方法

由于不同多道分析器的硬件接口不同,通信協(xié)議也不同,在電腦端開發(fā)一個接口服務軟件,負責與多道分析器硬件進行通信。接口服務軟件將與多道分析器通信解析得到的數(shù)據(jù)按照一定的格式封裝,然后與應用軟件在同一臺電腦的情況下進行數(shù)據(jù)的交換。實現(xiàn)EXE 程序間數(shù)據(jù)交換的方法有多種,比如利用剪貼板、利用消息機制、利用SOCKET 和利用內存映射等,本設計采用共享內存映射的方法。在WINDOWS 操作系統(tǒng)中,任何一個進程不允許訪問另一個進程的數(shù)據(jù),

包括變量、對象和內存分配等,但是在進程中創(chuàng)建一個內存映射對象,將文件映射到內存中,另一個進程可以訪問此內存中的數(shù)據(jù)。首先調用CreateFileMapping 函數(shù)把文件映射到內存,然后調用MapViewOfFile 函數(shù)把文件映像到進程地址空間上,接著通過MapViewOfFile 函數(shù)返回的映像內存地址指針寫數(shù)據(jù)或讀數(shù)據(jù),最后通過調用UnmapViewOfFile 函數(shù)釋放映像內存[3]。

2 接口服務軟件設計

接口服務軟件基于VC++開發(fā),各功能模塊的工作過程如圖1所示。軟件的主要功能包括:建立共享內存、數(shù)據(jù)的接收與發(fā)送、數(shù)據(jù)格式的轉換、共享內存的讀寫以及軟件退出時釋放共享內存。

圖1:接口服務軟件工作過程

軟件在初始化時建立共享內存映像并獲取句柄,供后續(xù)訪問內存使用。共享內存的屬性設置為可讀可寫,接口服務軟件對外寫數(shù)據(jù)和接收數(shù)據(jù)使用同一個內存區(qū)域,建立共享內存的主要代碼如下:

在接口服務軟件中實現(xiàn)USB、串口和網(wǎng)口通信,接收到硬件數(shù)據(jù)后,軟件對硬件數(shù)據(jù)進行解析,轉換成固定結構的數(shù)據(jù),然后將數(shù)據(jù)寫入共享內存中。向硬件發(fā)送數(shù)據(jù)的過程與接收數(shù)據(jù)的過程相反,先讀取共享內存中的數(shù)據(jù),然后按照硬件通信協(xié)議進行數(shù)據(jù)幀的轉換,最后將數(shù)據(jù)幀發(fā)送到硬件。讀寫共享內存的數(shù)據(jù)以結構體類型定義,主要代碼如下:

在結構體中成員變量kind 來表示這組數(shù)據(jù)的類型,比如表示數(shù)據(jù)是多道分析器的能譜數(shù)據(jù)、配置參數(shù)數(shù)據(jù)或者脈沖數(shù)據(jù)等,具體的數(shù)據(jù)內容存儲在成員變量data 數(shù)組中,數(shù)據(jù)的有效個數(shù)用成員變量dataNum 來指示。在讀取共享內存中的數(shù)據(jù)時需要知道數(shù)據(jù)是否被更新,寫入數(shù)據(jù)時也需要通知應用軟件數(shù)據(jù)是否更新,為了解決這個問題,在數(shù)據(jù)結構中加入了兩個成員變量id 和old_id。在向共享內存寫入數(shù)據(jù)時,將id 和old_id 設置不同的值,表示數(shù)據(jù)被更新。在讀取共享內存中的數(shù)據(jù)時,查詢id 和old_id 的值,若兩個變量的值不同,則數(shù)據(jù)被更新過。

接口服務軟件的界面如圖2所示,在軟件的通信接口中可以選擇USB、COM、UDP、TCP Server 和TCP Client,選擇適當?shù)耐ㄐ沤涌诤?,設置正確的接口參數(shù)就可以與多道分析器進行通信。接口服務軟件可以讀取硬件系統(tǒng)工作溫度和探測器高壓值,對探測器的運行狀態(tài)進行監(jiān)測。在多個多道分析器同時應用的情況下,通過讀取硬件ID(身份識別碼)來區(qū)分連接的硬件。

圖2:接口服務軟件界面

應用軟件負責采集能譜數(shù)據(jù)和解譜分析,多道分析器的硬件屬性設置及工作狀態(tài)監(jiān)控都在接口服務軟件中完成。為了防止接口服務軟件通信參數(shù)和硬件屬性參數(shù)被意外更改,設置了功能鎖定密碼,只有輸入正確的解鎖密碼才能使用相應功能。如圖3所示是硬件屬性設置及狀態(tài)監(jiān)控界面,此功能可以讀取多道分析器的能譜數(shù)據(jù)并顯示,支持多種觸發(fā)模式的探測器信號及多道分析器內部信號的采集,用于分析信號狀態(tài)。讀取硬件的參數(shù),修改后發(fā)送到多道分析器硬件中。

圖3:硬件屬性設置及狀態(tài)監(jiān)控界面

3 應用軟件訪問共享內存

應用軟件要訪問共享內存中的數(shù)據(jù),首先也需要建立共享內存映像文件。多個進程要共享單個文件映像對象必須使用相同的名字來訪問該文件映像對象[4]。應用軟件建立的共享內存映像文件名稱要與接口服務軟件建立的共享內存映像文件名稱一致。應用軟件在寫入共享內存數(shù)據(jù)時要設置不同的id 和old_id 值,讀取共享內存時需要查詢id 和old_id 的值。為了便于應用軟件的開發(fā),去掉應用軟件與訪問共享內存時的繁瑣操作,將訪問共享內存的具體操作和判斷全部封裝到Dll 動態(tài)鏈接庫[5]中。Dll 動態(tài)鏈接庫提供的接口函數(shù)主要有:

DMCASERVERDATA * CreateDmcaData (int DmcaNumber,char OpenDmcaServer,const char *DmcaServerFilePath);

BOOL WriteDmca(DMCASERVERDATA *m_pDmcaServerData,char *cmd);

int ReadDmca(DMCASERVERDATA *m_pDmcaServerData,BOOL bGetFlag);

BOOL DeleteAllDmcaData(DMCASERVERDATA **m_pDmcaServerData,BOOL KillDmcaServer);

BOOL DmcaDataValid(DMCASERVERDATA *m_pDmcaServer Data);

BOOL HideDmcaServer(DMCASERVERDATA *m_pDmcaServer Data);

BOOL DisplayDmcaServer(DMCASERVERDATA *m_pDmca ServerData);

首先應用軟件調用函數(shù)CreateDmcaData( )來創(chuàng)建共享內存映像,然后應用軟件可以調用函數(shù)WriteDmca( )向共享內存中寫入數(shù)據(jù),調用函數(shù)ReadDmca( )讀取共享內存中的數(shù)據(jù),使用完成后可以調用函數(shù)DeleteAllDmcaData( )釋放共享內存映像。在使用共享內存映像前可以調用函數(shù)DmcaDataValid( ),根據(jù)函數(shù)返回值判斷共享內存是否有效。應用軟件調用函數(shù)HideDmcaServer( )可以將接口服務軟件界面隱藏到后臺運行,調用函數(shù)DisplayDmcaServer()可以使接口服務軟件界面顯示出來。

4 結語

通過使用共享內存技術,設計了多道分析儀與應用軟件之間進行數(shù)據(jù)交換的接口服務軟件,將不同硬件接口和不同協(xié)議的多道分析器與應用軟件之間的數(shù)據(jù)交換實現(xiàn)了統(tǒng)一的數(shù)據(jù)結構。多道分析器的改進、升級將不會影響應用軟件的接口部分程序,同時訪問數(shù)據(jù)提供動態(tài)鏈接庫,應用軟件不需要關心具體的硬件通信。

猜你喜歡
共享內存分析器通信協(xié)議
酒精分析器為什么能分辨人是否喝過酒
通過QT實現(xiàn)進程間的通信
基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設計
多邊形電極線形離子阱質量分析器的結構與性能
基于PCI總線的多處理器協(xié)同機制研究
基于DMX512通信協(xié)議的多路轉發(fā)器設計與研究
基于NS-3的PLC多頻通信協(xié)議仿真平臺設計與實現(xiàn)
RSSP-I、RSSP-Ⅱ及SAHARA三種安全通信協(xié)議實現(xiàn)技術簡介
一種高效RTAI 共享內存管理層的研究與實現(xiàn)*
萨迦县| 潜山县| 绿春县| 贵定县| SHOW| 色达县| 固始县| 盖州市| 边坝县| 绩溪县| 祁阳县| 色达县| 普兰店市| 汨罗市| 道真| 富裕县| 泗洪县| 长岛县| 华安县| 柳江县| 莆田市| 永和县| 河西区| 同仁县| 安康市| 渑池县| 分宜县| 沽源县| 陕西省| 安福县| 嘉义市| 连平县| 岫岩| 毕节市| 讷河市| 新蔡县| 大荔县| 霍州市| 延庆县| 潼关县| 马山县|