• 
    

    
    

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

      基于B/S的雙CCD相機精度靶測控系統(tǒng)軟件架構(gòu)設(shè)計

      2022-12-26 12:53:50高嘉韻倪晉平
      計算機測量與控制 2022年12期
      關(guān)鍵詞:機軟件下位瀏覽器

      高嘉韻,倪晉平,徐 飛

      (1.西安工業(yè)大學(xué) 光電工程學(xué)院,西安 710000; 2.西安工業(yè)大學(xué) 計算機學(xué)院,西安 710000)

      0 引言

      靶場試驗測試作為武器研發(fā)、生產(chǎn)和測試的重要一環(huán),主要對武器的各種性能指標進行的檢測,以確定武器是否能夠達到預(yù)期的指標要求。立靶密集度測試是槍彈生產(chǎn)檢驗的關(guān)鍵參數(shù),雙線陣交會精度靶密集度參數(shù)測量系統(tǒng)因較高的測量精度、使用方便以及相對較低的使用成本而被廣泛使用[1-3]。系統(tǒng)包括三個部分,上位機軟件、數(shù)據(jù)采集處理下位機軟件和精度靶采集系統(tǒng),其中上位機軟件就是本文要設(shè)計實現(xiàn)的。

      目前國內(nèi)外對于該領(lǐng)域的測控軟件通常采用C/S(客戶端/服務(wù)器)架構(gòu)實現(xiàn)的,軟件形成兩層結(jié)構(gòu),服務(wù)器負責處理具有復(fù)雜邏輯的業(yè)務(wù)功能,客戶端實現(xiàn)用戶界面和簡單的數(shù)據(jù)處理。這種架構(gòu)軟件實際使用中一般需要專門的客戶端軟件安裝使用安裝,處理出現(xiàn)的問題難度較大,也難以功能擴展,可能會出現(xiàn)開發(fā)一個全新的軟件的情況[4]。如丁力等[5]設(shè)計C/S架構(gòu)的控制管理系統(tǒng)有如下缺點:系統(tǒng)擴展性差,業(yè)務(wù)變更不靈活;兼容性差,開發(fā)工具不兼容,獨立客戶端安裝;維護和升級成本高。

      結(jié)合上述問題,精度靶測試系統(tǒng)上位機軟件采用拓展性和維護性方便、簡單、共享性強和訪問簡單的B/S(瀏覽器/服務(wù)器)架構(gòu)開發(fā)[6-7]。將用戶界面等在瀏覽器端實現(xiàn),為了不僅能簡化系統(tǒng)的維護,還可以降低使用成本,將所有的功能邏輯都集中到了服務(wù)器端。

      1 軟件需求分析

      1.1 系統(tǒng)概述

      雙線陣交會精度靶測控系統(tǒng)整體上可分為精度靶測控系統(tǒng)軟件上位機部分、數(shù)據(jù)采集處理下位機部分和精度靶采集硬件系統(tǒng)三部分,如圖1所示。其中將上位機部分習(xí)慣稱為控制端,下位機和精度靶硬件采集系統(tǒng)整體稱為測量端,從使用角度來說,一般情況下上位機和測量端之間間隔100米左右,通過網(wǎng)線進行連接,實現(xiàn)遠程指令控制和數(shù)據(jù)傳輸?shù)氖褂眯枨蟆?/p>

      圖1 精度靶測控系統(tǒng)整體結(jié)構(gòu)圖

      精度靶測控系統(tǒng)功能主要是實現(xiàn)對整個試驗流程進行控制,需要上位機執(zhí)行相應(yīng)的控制命令,判斷當前的任務(wù)或流程執(zhí)行情況,以及是否進入下一個控制命令[8];其次是接收下位機傳輸?shù)臄?shù)據(jù)。這里控制方面主要需要實現(xiàn)遠程控制網(wǎng)絡(luò)繼電器操作以及任務(wù)開始、結(jié)束的控制,數(shù)據(jù)方面主要是對下位接收的數(shù)據(jù)進行一個直觀顯示和存儲。

      1.2 功能需求

      精度靶系統(tǒng)對于上位機的要求是能夠及時準確的接收下位的數(shù)據(jù),同時對整個試驗流程進行功能控制。從上述情況來看,上位機主要實現(xiàn)功能分為以下幾個:

      1) 電源開關(guān)控制:上位機軟件啟動后,檢測與網(wǎng)絡(luò)繼電器連接狀態(tài),向網(wǎng)絡(luò)繼電器發(fā)送控制命令,從而實現(xiàn)遠程控制下位機和精度靶硬件部分的電源開關(guān)。

      2) 狀態(tài)檢測:下位機軟件和精度靶硬件采集部分啟動后,下位機軟件獲取和硬件的連接狀態(tài),將連接狀態(tài)發(fā)送到上位機軟件進行顯示,方便使用者知道下位機和精度靶硬件采集部分的連接情況,便于出現(xiàn)異常狀態(tài)問題的快速解決。

      3) 試驗參數(shù)設(shè)置:該功能是精度靶測試試驗前的相關(guān)參數(shù)初始化設(shè)置,包含試驗任務(wù)的名稱、組數(shù)、每組的次數(shù)和試驗操作人員的相關(guān)信息設(shè)置,以及測試用的彈種數(shù)據(jù)包含彈徑、彈長和彈速的設(shè)置。

      4) 測試試驗:該功能包含了多個子功能,開始試驗、數(shù)據(jù)顯示、試驗密集度參數(shù)計算、試驗組數(shù)和結(jié)束試驗。開始試驗是使用者操作上位機向下位機發(fā)送開始試驗的控制命令,下位機接收到指令后進入測試狀態(tài);數(shù)據(jù)顯示是上位機軟件把從下位機接收到的試驗數(shù)據(jù)結(jié)果進行展示;試驗密集度參數(shù)計算是由上位機完成的,在試驗中,上位機接收到試驗數(shù)據(jù)大于等于三的時候,程序會自動進行參數(shù)結(jié)果的計算,也可以手動選擇計算;試驗組數(shù)是在試驗中進行試驗組別切換;試驗結(jié)束同開始試驗,用戶操作上位機向下位機發(fā)送試驗結(jié)束指令,且該功能不設(shè)置前置條件。

      5) 歷史數(shù)據(jù):在試驗中,上位機會把從下位機接收到的試驗結(jié)果和密集度參數(shù)計算的結(jié)果全部保存到本地數(shù)據(jù)庫,并且以任務(wù)創(chuàng)建時間為名稱區(qū)別存儲,通過任務(wù)創(chuàng)建時間或名稱檢索對應(yīng)的歷史試驗數(shù)據(jù),還可以選擇所需試驗任務(wù)數(shù)據(jù)導(dǎo)出到Excel。

      2 軟件設(shè)計

      2.1 整體設(shè)計

      基于B/S架構(gòu)的上位機軟件的整體結(jié)構(gòu)如圖2所示,依據(jù)整體框圖的結(jié)構(gòu)層次,進一步闡述層與層之間模塊的設(shè)計和信息的交互。上位機軟件整體分為上層、中層和下層,表示層位于最上層,是為了與用戶進行交互的層面,用戶在界面觸發(fā)相關(guān)控制命令的按鈕操作,隨之用戶的請求及數(shù)據(jù)由表示層接收,接著對數(shù)據(jù)進行處理,最后顯示處理后的數(shù)據(jù)。業(yè)務(wù)邏輯層作為紐帶存在于表示層和數(shù)據(jù)之間,需要依據(jù)業(yè)務(wù)的具體功能需求,實現(xiàn)相對應(yīng)的業(yè)務(wù)功能。該軟件系統(tǒng)數(shù)據(jù)來自與下位機的通信獲得,所以設(shè)計在中間層需要搭建TCP服務(wù)器進行數(shù)據(jù)交互。數(shù)據(jù)層主要實現(xiàn)對數(shù)據(jù)庫的增刪改查,用于TCP服務(wù)器存儲從下位機獲取來的數(shù)據(jù)以及向歷史數(shù)據(jù)查詢功能模塊提供數(shù)據(jù)支持。

      圖2 上位機軟件系統(tǒng)整體框圖

      服務(wù)器和瀏覽器作為B/S軟件架構(gòu)的核心。其中瀏覽器作為用戶直接操作的層面,主要包含功能操作、發(fā)送請求和獲取數(shù)據(jù),最后通過瀏覽器展示出來。服務(wù)器承載了大多數(shù)的業(yè)務(wù)分析數(shù)據(jù)處理,也是真正的實現(xiàn)界面應(yīng)用層各模塊的業(yè)務(wù)邏輯,例如在和數(shù)據(jù)庫部分的交互中,專門設(shè)計了數(shù)據(jù)緩存處理,數(shù)據(jù)查詢的優(yōu)化等。更重要的是,在與下位機的交互中,提供可靠的數(shù)據(jù)傳輸,較好的傳輸性能。

      根據(jù)軟件系統(tǒng)整體設(shè)計數(shù)據(jù)流圖,如圖3所示,對上位機軟件的功能需求進行分析整理,以技術(shù)出發(fā)的角度,上位機軟件服務(wù)器部分設(shè)計實現(xiàn)了應(yīng)用Netty通信框架、HTTP傳輸方式[9]、數(shù)據(jù)庫等的搭建。其中,服務(wù)器的Netty通信框架的設(shè)計與實現(xiàn)應(yīng)用是核心問題,保證了和下位機之間穩(wěn)定的數(shù)據(jù)傳輸。Netty多用于搭建數(shù)據(jù)通信底層部分,并且是基于TCP通信協(xié)議實現(xiàn),Netty因其非阻塞通信方式,實現(xiàn)了優(yōu)異的性能而被廣泛應(yīng)用,也是目前大多數(shù)框架的主流或被服務(wù)端首選用來搭建軟件底層框架。

      圖3 軟件系統(tǒng)整體數(shù)據(jù)流圖

      2.2 相關(guān)技術(shù)

      2.2.1 B/S架構(gòu)

      目前軟件常用的開發(fā)模式有兩種,C/S和B/S[10]。C/S模式,范圍比較有限,大部分基于局域網(wǎng)環(huán)境使用,因為它的架構(gòu)主要是由表示層和數(shù)據(jù)層構(gòu)成的,所以使用方式必須是安裝獨有客戶端使用,且難以一次開發(fā)實現(xiàn)多平臺的使用。C/S這種架構(gòu)還有著一些其他缺點,舉例來說,在開發(fā)者方面,客戶端的升級和維護增加了工作量;對于用戶來說,時常進行迭代也增加了使用成本。因此,需要簡化客戶端的安裝部署工作。

      B/S模式下,選擇了瀏覽器成為客戶端,避免進行繁瑣的客戶端安裝工作,使其可以專注于業(yè)務(wù)功能邏輯的開發(fā)實現(xiàn)。B/S是一個由三個主要部分組成的Web應(yīng)用程序:瀏覽器、服務(wù)器、數(shù)據(jù)庫[11]。承擔用戶交互的主要應(yīng)用軟件,成為了瀏覽器部分,但是不承擔業(yè)務(wù)部署和功能性開發(fā),服務(wù)器端即可完成所有的業(yè)務(wù)邏輯。并且通過瀏覽器即可訪問系統(tǒng),瀏覽器的UI設(shè)計更加美觀多樣化,升級方便。

      2.2.2 Netty框架

      Netty 是一個利用 Java 的高級網(wǎng)絡(luò)的能力,隱藏其背后的復(fù)雜性而提供一個易于使用的 API 的客戶端/服務(wù)器框架[12]。Netty實現(xiàn)了多種通信協(xié)議的支持,因其使用簡單,對非阻塞通信方式進行封裝;功能強大,支持多種主流協(xié)議,內(nèi)置集成了解碼功能;穩(wěn)定,目前已經(jīng)修復(fù)了框架已發(fā)現(xiàn)的缺陷。所以,它已經(jīng)成為大多框架和項目實現(xiàn)的底層,并被許多開發(fā)者青睞。Netty框架的底層實現(xiàn)包括了一個非阻塞的IO架構(gòu),允許開發(fā)人員輕松地編寫相關(guān)的應(yīng)用程序,以達到優(yōu)化網(wǎng)絡(luò)編程的目的,雖然Netty的底層框架邏輯實現(xiàn)非常復(fù)雜,但是其API簡單易用,開發(fā)者在編程中易于繞開業(yè)務(wù)層實現(xiàn)。其構(gòu)成有三個模塊:傳輸服務(wù),支持的協(xié)議和核心模塊[13]。

      Netty在設(shè)計上有以下幾個優(yōu)點:NIO通信;無鎖化的串行設(shè)計理念;高效的并發(fā)編程;高性能的序列化框架等[14]。本系統(tǒng)選擇Netty主要是三方面的優(yōu)勢:并發(fā)高、傳輸可靠和封裝好。

      1)并發(fā)高:對比于BIO(阻塞IO),Netty框架是基于非阻塞IO開發(fā)的網(wǎng)絡(luò)通信框架。其單線程能處理的連接數(shù)比BIO要高出很多。當建立了一個連接之后,接著還有兩個步驟,先是將客戶端發(fā)過來的數(shù)據(jù)全部接收,然后是在服務(wù)器處理完請求給客戶端響應(yīng)。這也是NIO和BIO的一個主要區(qū)別。在BIO中,等候客戶端發(fā)送數(shù)據(jù)這個過程是阻塞的,這樣就造成了一個線程只能處理一個請求的情況,而且計算機的處理線程也不是無限的。但是在NIO中,當一個套接字建立好以后,Thread類不會像BIO一樣將其阻塞,而且將請求推到了選擇器,由選擇器去不停地遍歷所有產(chǎn)生的套接字,當有一個套接字建立,選擇器就會通知Thread類,然后交由Thread類處理后再響應(yīng)給客戶端,這樣整個流程是非阻塞的。

      2)傳輸快:Netty的數(shù)據(jù)發(fā)送和接收主要是使用bytebuffer,其使用對外內(nèi)存直接對套接字進行讀寫操作。如果使用傳統(tǒng)的堆內(nèi)存對套接字進行讀寫,Java虛擬機會將buffer直接復(fù)制一份到內(nèi)存中后再寫入套接字,多了一次緩沖區(qū)的內(nèi)存復(fù)制操作。但是Netty提供了一種組合ByteBuf,可以避免這樣的情況,因為其并沒有將Buffer組合起來,而是保存了它們的引用,本質(zhì)上是避免了數(shù)據(jù)的復(fù)制,實現(xiàn)了零拷貝。Netty中還使用了FileChannel的transfer to 方法,此方法依賴于操作系統(tǒng)實現(xiàn)零拷貝機制。

      3)封裝好:編程過程中,從代碼量來看,Netty有很多自帶處理方法,實現(xiàn)連接、請求和接入等[16]。如ChannelHandler及其實現(xiàn)類,ChannelHandler 接口定義了許多事件處理的方法, Netty開發(fā)中需要自定義一個 Handler 類去實現(xiàn) ChannelHandle接口或其子接口或其實現(xiàn)類,然后我們可以通過重寫這些方法去實現(xiàn)具 體的業(yè)務(wù)邏輯。channelActive通道就緒事件,channelRead通道讀取數(shù)據(jù)事件,exceptionCaught通道發(fā)生異常的事件。

      3 軟件設(shè)計關(guān)鍵技術(shù)

      在軟件整體設(shè)計中提到,TCP服務(wù)器的設(shè)計與實現(xiàn)是上位機系統(tǒng)中最關(guān)鍵部分。承擔著與下位機通信,接收、發(fā)送、解析、保存數(shù)據(jù)等功能。其中主要就是可靠接收傳輸消息和及時發(fā)送消息指令,同時考慮到功能需求分析中下位機會頻繁發(fā)送數(shù)據(jù)等問題,故選用了Netty通信框架搭建TCP服務(wù)器底層,通信架構(gòu)如圖4所示。在Netty通信框架的應(yīng)用過程中主要研究了適應(yīng)于本系統(tǒng)基于Netty的通信實現(xiàn)、傳輸中TCP粘包拆包處理和心跳監(jiān)測機制的應(yīng)用。

      圖4 通信框架圖

      3.1 基于Netty的通信實現(xiàn)

      Netty被定義為是一個基于Java 非阻塞I/O(輸入/輸出)的異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用框架[17-18],提供了高層次的抽象來簡化TCP服務(wù)器的編程,具有高性能和高可靠性的特點,且廣泛應(yīng)用于客戶端與服務(wù)器之間長連接、高并發(fā)的場景。近幾年,Netty框架在計算機互聯(lián)網(wǎng)行業(yè)熱門起來,已經(jīng)成為了Java網(wǎng)絡(luò)編程框架的首選。

      基本實現(xiàn)思路,通信的讀寫邏輯均是啟動階段實現(xiàn)連接數(shù)據(jù)的讀寫邏輯,其通過邏輯處理鏈Pipeline來添加邏輯處理器。首先,下位機連接成功回調(diào)處理器的channelActive()方法,當下位機和上位機分別接收到對方的消息回調(diào)自己的處理器的channelRead()方法;接著是上位機和下位機向?qū)Ψ綄憯?shù)據(jù)的時候調(diào)用writeAndFlush()方法,規(guī)定上位機和下位機之間交互信息的二進制數(shù)據(jù)傳輸載體為ByteBuf。

      Netty服務(wù)器端的實現(xiàn),是被動的接收發(fā)送請求,為了避免出現(xiàn)服務(wù)器之間多端口產(chǎn)生沖突的問題,將服務(wù)器的端口號固定且綁定為6000。首先,創(chuàng)建ServerBootstrap()實例,設(shè)置并且綁定Reactor()線程池:EventLoopGroup,EventLoop就是處理所有注冊到該線程的選擇器上的;設(shè)置并綁定服務(wù)器端的Channel();TCP鏈路建立時創(chuàng)建ChannelPipeline()方法,添加并設(shè)置ChannelHandler(),用來處理網(wǎng)絡(luò)事件;綁定監(jiān)聽端口并啟動服務(wù)端;然后進入Netty獨有流程,通過多路復(fù)用器輪詢,進行網(wǎng)絡(luò)事件通知,最后執(zhí)行Netty系統(tǒng)和業(yè)務(wù)通過執(zhí)行pipline中的方法最終調(diào)度調(diào)用HandlerChannel()方法,過程如圖5所示。

      圖5 基于Netty服務(wù)器實現(xiàn)流程圖

      實現(xiàn)部分代碼如下:

      public void run() throws Exception{

      try{

      ServerBootstrap serverBootstrap = new ServerBootstrap();//創(chuàng)建服務(wù)器端的啟動對象,配置參數(shù)

      serverBootstrap.group(groupBoss, groupWorker) //兩個處理線程組設(shè)置

      .option(ChannelOption.SO_BACKLOG, 1024) // 線程隊列并發(fā)數(shù)的設(shè)置

      .channel(NioServerSocketChannel.class)

      .childOption(ChannelOption.SO_KEEPALIVE, true) //保持活動的連接狀態(tài)設(shè)置

      .childHandler((ChannelInit)(ch)->{});

      //服務(wù)器啟動并綁定端口

      bind(serverBootstrap, PORT);

      // 對關(guān)閉通道進行監(jiān)聽

      cf.channel().closeFuture().sync();

      } catch (Exception e) {

      log.error(" netty服務(wù)啟動異常 " + e.getMessage());

      } finally {

      workerGroup.shutdownGracefully();

      bossGroup.shutdownGracefully();

      }

      }

      在Netty框架的設(shè)計與實現(xiàn)應(yīng)用的過程中,主要實現(xiàn)了基礎(chǔ)的數(shù)據(jù)通信交互后,因為TCP使用的是一種“數(shù)據(jù)流”的方式傳輸,還需要設(shè)計并且解決基于TCP數(shù)據(jù)傳輸過程中出現(xiàn)的粘包拆包的問題。

      3.2 TCP數(shù)據(jù)處理

      TCP是一種“數(shù)據(jù)流”的協(xié)議,處理數(shù)據(jù)包以流的方式,所以在接收數(shù)據(jù)的時候不能完整的得到一條數(shù)據(jù)稱為TCP粘包拆包。Netty這里提供了消息定長度,將傳輸消息大小固定不夠的空位用空格補齊然后發(fā)送;符號分割即用特殊符合進行標識,接收方遇到標識符就知道是下一條數(shù)據(jù);發(fā)送長度,每次發(fā)送數(shù)據(jù)的時候?qū)⑦@條數(shù)據(jù)的長度一并發(fā)送,這樣對方解析的時候根據(jù)長度來判斷數(shù)據(jù)接收是否完整。本軟件采用了換行符的處理方式,結(jié)合Netty提供的多種解碼器來解決這種問題。并且設(shè)計了自己的處理方法,順序遍歷ByteBuffer中的刻度字節(jié)[19],查找標志位“/n”。

      不斷地從TCP緩沖區(qū)中讀取數(shù)據(jù),每次都需要判斷這是不是一個完整的包讀取完后,假如當下讀到的消息不能夠拼成完整的業(yè)務(wù)數(shù)據(jù)包,那就先把該數(shù)據(jù)保留,再從TCP緩沖區(qū)中讀出待得到完整的消息包。數(shù)據(jù)內(nèi)容正確需要進行業(yè)務(wù)處理,推向前臺頁面或者存入數(shù)據(jù)庫,流程如圖6所示。

      圖6 TCP數(shù)據(jù)處理流程圖

      實現(xiàn)部分代碼如下:

      class Solution(SocketChannel ch){

      ch.pipeline().addLast(new IdleStateHandler(5,0,0));//換行符處理

      ch.pipeline().addLast(new LineBaseFrameDecoder(1024));

      ch.pipeline().addLast(new StringDecoder());//編碼

      ch.pipeline().addLast(new StringEncoder());//解碼

      ch.pipeline().addLast(new MyServerHandler());

      }

      實現(xiàn)了TCP傳輸中粘包拆包問題的解決方法后,還需要通過對Netty框架提供的心跳機制功能接口進行研究,來實現(xiàn)狀態(tài)檢測管理功能模塊。

      3.3 狀態(tài)監(jiān)測管理

      在使用的過程中,會出現(xiàn)網(wǎng)絡(luò)不穩(wěn)定的情況,而在TCP通信中,發(fā)生網(wǎng)絡(luò)問題就會導(dǎo)致上下位機連接中斷。沒有通信連接,那就無法發(fā)現(xiàn)相互掉線,這時候需要通過心跳機制實現(xiàn)狀態(tài)監(jiān)測。類似一端發(fā)送一個數(shù)據(jù)包內(nèi)容給對面,另一端收到后馬上返回一個響應(yīng)包,這樣的一個數(shù)據(jù)交互就是心跳交互[20]。通俗來說,就是定時發(fā)送一個自定義的心跳包,讓對方知道己方的存在,來確保連接的有效性。

      下位機每間隔1 s向上位機發(fā)送一個包含特殊內(nèi)容數(shù)據(jù)的消息Ping,上位機收到后馬上返回一個消息Pong,于是雙方通過這樣一對心跳消息來確定TCP的連接是否斷開,如圖7所示。

      圖7 心跳機制

      在本文中,依據(jù)功能需求,基于心跳機制的原理,借助Netty提供的IdleStateHandler類,來實現(xiàn)處理下位機的連接狀態(tài)。

      public userEventTriggered

      (ChannelHandlerContext ctx, Object evt){

      if(evt instanceof IdleStateEvent){

      IdleStateEvent e =( IdleStateEvent) evt;

      switch(e.state()){

      case READER_IDLE:

      handlerReaderIdle(ctx);

      break;

      case WRITER_IDLE;

      handleWriterIdle(ctx);

      break;

      case ALL_IDLE:

      handlerAllIdle(ctx);

      break;

      }

      }

      }

      其中需要通過創(chuàng)建通用類負責接收心跳,客戶端發(fā)送心跳,在上文中提到過,使用Netty提供的IdleStateHandler類實現(xiàn)心跳的關(guān)鍵,根據(jù)不同的idle類型發(fā)生不同的idle類事件,而該事件的捕捉就是通過上文的userEventTriggered實現(xiàn)的。

      心跳機制的實現(xiàn),下位機就需要按照設(shè)定周期頻繁的發(fā)送數(shù)據(jù)包,上位機就必須能夠響應(yīng)和處理下位機發(fā)送來的數(shù)據(jù)請求。這里,Netty框架提供的NettyServerHandler類又實現(xiàn)了多個重要的方法,設(shè)計使用非公平鎖機制提高系統(tǒng)的吞吐量,更好地處理與客戶端的連接、斷開和數(shù)據(jù)讀取。非公平鎖是指多個線程獲取鎖的順序,并不是按照申請鎖的順序,有可能申請的線程比先申請的線程優(yōu)先獲得鎖,收發(fā)效率較高。

      4 通信測試

      對本系統(tǒng)軟件數(shù)據(jù)通信進行測試和試用,上位機軟件測試環(huán)境為Intel(R) Core(TM) i3-8100,內(nèi)存8 GB,CPU3.6 GHz,硬盤1 T,操作系統(tǒng)Windows 7 64位;下位機操作系統(tǒng)為Windows7,上下位機之間為千兆網(wǎng)絡(luò)連接,測試環(huán)境框架如圖8所示。

      圖8 通信測試環(huán)境框架圖

      4.1 模擬測試

      本系統(tǒng)上位機軟件關(guān)鍵部分在于TCP服務(wù)器的設(shè)計,采用Netty通信框架設(shè)計,實現(xiàn)穩(wěn)定可靠的上下位機數(shù)據(jù)傳輸,滿足上位機接收處理下位機頻繁的數(shù)據(jù)發(fā)送需求。TCP服務(wù)器部分屬于底層開發(fā),所以采用WebSocket技術(shù)通過Web頁面進行模擬測試的數(shù)據(jù)展示。WebSocket是一種新的協(xié)議在HTML5下,其還是基于TCP的協(xié)議本質(zhì)上說。實現(xiàn)了全雙工通信在瀏覽器端與服務(wù)器之間,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息,實現(xiàn)數(shù)據(jù)推送,主動由服務(wù)端推送向瀏覽器端;完成一次握手,由瀏覽器和服務(wù)器,即可以建立長時間的連接在兩者之間,實現(xiàn)數(shù)據(jù)傳輸,更加方便我們進行通信模擬測試。如圖9所示,對下位機部分進行了模擬設(shè)計實現(xiàn),充分達到真實的使用情況,實現(xiàn)心跳機制發(fā)送狀態(tài)數(shù)據(jù),以及模擬坐標數(shù)據(jù)發(fā)送。

      圖9 下位機模擬程序

      模擬下位機實現(xiàn)狀態(tài)數(shù)據(jù)發(fā)送,以周期1 s的時間模擬下位機向上位機發(fā)送狀態(tài)的協(xié)議內(nèi)容和手動發(fā)送模擬的測量試驗結(jié)果坐標數(shù)據(jù)。上位機通過瀏覽器頁面展示由下位機發(fā)送的心跳狀態(tài)數(shù)據(jù)和坐標試驗數(shù)據(jù),TCP服務(wù)器模擬接收數(shù)據(jù)測試結(jié)果如圖10所示。

      圖10 上位機數(shù)據(jù)接收測試圖

      通過模擬測試,下位機所發(fā)送的狀態(tài)檢測數(shù)據(jù)和試驗坐標數(shù)據(jù)上位機的TCP服務(wù)器都能正常接收,且全部顯示到測試頁面,滿足基本的功能需求。

      4.2 性能測試

      最后對上位機接收數(shù)據(jù)處理性能進行對比測試。根據(jù)功能需求分析所提出的技術(shù)指標要求,需要上位機對接收數(shù)據(jù)的處理不能低于每秒鐘一個請求。創(chuàng)建兩組不同周期數(shù)據(jù)發(fā)送的對比測試,第一組設(shè)計1 000個樣本數(shù)據(jù),以周期1 s發(fā)送數(shù)據(jù),測試服務(wù)器接收處理請求的性能;第二組同樣設(shè)計1 000個樣本數(shù)據(jù),發(fā)送速率比第一組提高10倍以周期100 ms發(fā)送數(shù)據(jù),測試服務(wù)器接收處理請求的性能。這里采用JMeter開源測試軟件,模擬一個下位機以周期1 s的時間向上位機發(fā)送數(shù)據(jù)判斷上位機TCP服務(wù)器的接收情況,如圖11所示。由測試吞吐量結(jié)果可知,每秒能夠處理請求的次數(shù)約為1,能夠滿足功能需求。

      圖11 第一組性能測試結(jié)果

      第二組性能測試將數(shù)據(jù)發(fā)送速率設(shè)為100 ms,對服務(wù)器處理性能測試,測試結(jié)果如圖12所示。

      圖12 第二組性能測試結(jié)果

      從上述的兩組對比性能測試中,在1 000個樣本數(shù)據(jù)的情況下,將數(shù)據(jù)發(fā)送速率從1 s提高10倍的測試結(jié)果看,第一組的吞吐量測試結(jié)果為服務(wù)器每秒處理請求約1個,第二組的吞吐量測試結(jié)果為服務(wù)器每秒處理請求約8個,滿足性能要求以及技術(shù)指標。

      4.3 實際測試

      進行了模擬測試和性能測試后,再對上位機軟件進行系統(tǒng)測試,測試的內(nèi)容為將上位機軟件置于真實的使用環(huán)境,測試上位機軟件是否能達到效果。

      把上位機軟件置于試驗測試的界面,如圖13所示。從彈丸發(fā)射開始計算時間起始,上位機界面顯示模擬坐標計算為時間結(jié)束,來衡量數(shù)據(jù)通信和軟件系統(tǒng)響應(yīng)的情況。同時作為對性能測試的一個補充測試。

      圖13 實際測試

      通過對整個精度靶的系統(tǒng)聯(lián)調(diào)測試,可以得到在實際使用環(huán)境中的結(jié)果。從圖中的測試結(jié)果可以看到,從彈丸發(fā)射開始計時到最后上位機顯示坐標位置整個過程時間發(fā)生都在1 s以內(nèi),忽略掉計時操作的時間以及系統(tǒng)的響應(yīng)時間,數(shù)據(jù)的通信部分能夠滿足相應(yīng)的技術(shù)指標要求,整體上使用能夠滿足數(shù)據(jù)實時顯示的要求。

      5 結(jié)束語

      本文針對精度靶系統(tǒng)軟件功能的需求分析,參考一些該類型軟件,設(shè)計了一個采用B/S架構(gòu)的CCD精度靶上位機軟件,關(guān)鍵設(shè)計了上位機服務(wù)器整體結(jié)構(gòu)和核心模塊Netty通信架構(gòu)。通過模擬測試上位機滿足通過網(wǎng)絡(luò)穩(wěn)定接收下位機傳輸數(shù)據(jù)的功能需求;解決了C/S模式軟件的擴展難度大,維護成本高和用戶后期使用升級復(fù)雜等問題。與C/S模式不同,B/S模式軟件的界面是基于瀏覽器進行首次全新開發(fā),和服務(wù)器采用HTTP進行交互。本系統(tǒng)軟件目前前端頁面部分還未完善,存在頁面布局和功能缺陷問題。

      經(jīng)分析選擇B/S架構(gòu)的設(shè)計思想[22]和面向?qū)ο蟮木幊谭妒剑档土烁髂K代碼之間的耦合性,使得軟件維護的效率提升,同時節(jié)省了軟件開發(fā)的成本,在一類具有上下位機工作屬性的控制軟件[23]設(shè)計方面具有重要意義。

      猜你喜歡
      機軟件下位瀏覽器
      反瀏覽器指紋追蹤
      電子制作(2019年10期)2019-06-17 11:45:14
      發(fā)射機房監(jiān)控系統(tǒng)之下位機
      道岔監(jiān)測系統(tǒng)上位機軟件設(shè)計
      景洪電廠監(jiān)控系統(tǒng)下位機數(shù)據(jù)傳輸網(wǎng)絡(luò)改造
      圍觀黨“下位”,吐槽帝“登基”
      北京紀事(2016年5期)2016-05-07 13:17:02
      基于正交試驗法的北斗用戶機軟件測試用例設(shè)計
      環(huán)球瀏覽器
      再見,那些年我們嘲笑過的IE瀏覽器
      PCI-e高速數(shù)據(jù)采集卡的驅(qū)動與上位機軟件設(shè)計
      電子器件(2015年5期)2015-12-29 08:43:12
      CAN總線并發(fā)通信時下位機應(yīng)用軟件設(shè)計
      新建县| 盖州市| 沙坪坝区| 镇平县| 乌拉特中旗| 海宁市| 芜湖市| 仁怀市| 宽城| 桂东县| 兰考县| 五原县| 平舆县| 南澳县| 贵港市| 德江县| 竹北市| 五台县| 贵溪市| 玉门市| 观塘区| 台中县| 武汉市| 宁安市| 陆丰市| 永春县| 寿宁县| 平度市| 邹城市| 洪湖市| 兴安盟| 资讯 | 于田县| 乌兰察布市| 新田县| 古浪县| 若尔盖县| 仁化县| 阿合奇县| 刚察县| 建瓯市|