基于ARM的火災信息傳輸網關設計
3.2 總體概述
網關軟件系統(tǒng)按照功能分為4個模塊。
(1)網絡通信模塊
主要負責信息往網絡上的傳遞,將該網關獲取的火警,故障等信息依照特定的網絡協(xié)議準確無誤地傳遞給上層的應用服務器,同時還要負責接收來自服務器的數據,如配置信息,控制指令等。具體來說,網絡通信模塊又可以分為兩個子模塊:數據通信和數據處理。數據通信的工作只是負責從網絡上獲取數據或者將數據發(fā)送到網絡。數據處理主要負責組包和解包,涉及到通信協(xié)議。當數據區(qū)有數據需要網絡通信模塊處理時,數據處理子模塊會首先從數據區(qū)取出數據,并分析、判斷數據類型,根據數據類型組包,然后將包交給數據通信子模塊發(fā)送。
(2)串口采集模塊
主要負責通過串口獲取消防主機的狀態(tài),并進行分析,分離出有用信息,并將其寫入數據區(qū),供其他模塊使用,它是信息傳輸網關的核心。
由于消防主機眾多,而且協(xié)議又各不相同,因此串口采集模塊需要根據消防主機定制。在此,同樣將串口采集模塊分為兩個子模塊:數據采集和數據加工。數據采集通過特定的對話方式(和具體的消防主機有關)從消防主機獲取數據,數據加工讀取這些數據,并按照消防主機協(xié)議進行解析,提取初步的信息,如消息類型(火警還是故障),探頭地址(內部編碼地址)。然后依照內部協(xié)議組包,并寫入數據區(qū),以后的工作就交由網絡通信模塊。
(3)系統(tǒng)控制模塊
主要用于控制信息傳輸網關的硬件設備,如指示燈、按鍵、燈等。它從數據區(qū)讀取控制指令,根據控制指令執(zhí)行特定的硬件控制??刂浦噶羁赡苡删W絡通信模塊產生,如上層服務器發(fā)送查崗請求,網絡通信模塊經過數據處理轉化為響喇叭指令,寫入數據區(qū)。當然,控制指令可以由任何模塊產生。系統(tǒng)控制模塊可以返回硬件狀態(tài)信息,也是通過寫狀態(tài)信息到數據區(qū)來實現信息傳遞的。
(4)系統(tǒng)維護模塊
主要負責確保系統(tǒng)各個模塊的正常運行,同時記錄及上傳工作日志,供系統(tǒng)維護人員參考,同時收集上來的數據經過分析和挖掘,可以作為產品性能指標制定的依據。各模塊在建立之初將會在數據區(qū)注冊,維護模塊通過這個注冊信息實現心跳應答機制來判斷各個模塊的工作狀態(tài)。同時,還將數據區(qū)中的日志信息提取出來寫入日志文件,并提出發(fā)送日志文件請求給網絡通信模塊。
每個模塊依照分工完成職能之內的工作,不屬于職能內的工作通過寫入數據區(qū)交由職能模塊去完成。數據區(qū)是各個模塊傳遞信息的媒介,通過格式化的數據寫入和讀取,實現模塊間的信息共享和職能分工。
3.3 各模塊詳細設計
3.3.1 流程分析
核心管理模塊是嵌入式網關入口,當嵌入式網關加電啟動,嵌入式網關的操作系統(tǒng)負責啟動核心管理模塊。此時,其他模塊還未啟動。核心模塊首先為其他模塊啟動初始化系統(tǒng)環(huán)境,如創(chuàng)建管道,共享內存等。接著,核心模塊啟動其他模塊。這時,系統(tǒng)將啟動完成。接著,核心模塊建立定時器,創(chuàng)建定時器是為了定時地檢測其他模塊,以判斷其他模塊的狀態(tài),稱這個過程為“心跳”。
當以上過程完成后,核心管理模塊開始監(jiān)視所有管道,當管道有數據時,他讀取定長的數據并分析,找出源地址、目的地址及命令字。根據命令字類型的不同做不同的處理。程序流程圖如圖4所示。本文引用地址:http://2s4d.com/article/150981.htm
(1)初始化。初始化的主要工作是為模塊間的通信建立有名管道,每個與核心模塊通信的進程有一個管道。當前系統(tǒng)需要創(chuàng)建四個管道。其他模塊如果想要使用管道,必須首先打開管道。所有與管道的通信都有API供其他用戶使用。
(2)啟動其他模塊。核心模塊通過子進程調用execl()來啟動其他模塊。每個其他模塊都是一個可執(zhí)行程序,通常位于一個固定的路徑及固定的文件名。每個模塊在啟動之后需要向核心模塊發(fā)送注冊信息,這些信息包括模塊標識、進程ID、進程狀態(tài)等。登記信息由核心模塊保留,供以后使用。
(3)創(chuàng)建定時器。核心模塊需要定時地檢測其他模塊的生存狀況,通過注冊一個定時器,可以定時地觸發(fā)檢測功能。
(4)開始監(jiān)聽。當所有初始化工作完成以后,核心模塊開始進入工作狀態(tài)。它的主要工作就是負責處理管道信息。通過使用select()函數可以實現同時監(jiān)聽多個管道。當某個管道有數據,核心模塊讀取數據包(格式詳見后文),并解析出包頭,得到包的源地址,目的地址,及控制字并加以分析,選擇處理流程。處理流程包括:數據中轉,巡檢,系統(tǒng)維護等。當該數據包處理完成以后,核心模塊返回繼續(xù)等待下一個數據包。
(5)處理數據中轉。其他模塊間無法直接通信,都必須通過核心模塊進行中轉。數據包中指明了包的源地址,目的地址及控制字。這里的控制字說明數據需要中轉,核心模塊解析到數據包需要中轉,就將包寫入到給定目的地址的模塊管道。
(6)處理巡檢。服務器需要定時地檢測前置機各個模塊的狀態(tài),于是發(fā)送巡檢請求給網絡模塊,網絡模塊解析后組包發(fā)送給核心模塊,核心模塊在分析包發(fā)現該包是巡檢請求,于是通過kill()函數及注冊記錄信息,判斷各個模塊的狀態(tài),并組包發(fā)送給服務器。
(7)處理系統(tǒng)維護。系統(tǒng)維護的主要任務是為了保證系統(tǒng)所有模塊的正常運行。前面初始化了一個定時器,通過定時器,可定時地查詢其他模塊的狀態(tài)。當發(fā)現某個模塊異常,核心模塊將重啟該模塊。
3.3.2 關鍵數據結構
(1)包格式:
(2)模塊ID定義
如表1所示:
評論