Click or drag to resize

PrecisePositionLibrary Namespace

簡介


本司將定位主要功能如網路監控、設備配置初始化、座標計算、定位濾波、聲光控制、卡片狀態等功能封裝成DLL,提供使用者可以進行二次開發。由於本司定位監控軟體是利用C#編寫而成,所以提供DLL檔案也是C#編寫而成,如果使用者是使用其他開發語言,請查詢如何調用本司提供C# DLL。

其中API部份僅提供座標存取、狀態存取與設備控制等功能,不包含數值處理函式,如定位卡片座標是由DLL解析封包後自行計算,使用者無法自行調用定位演算法來處理數值,只能取得座標及設定使用的演算法(TwoDim_TagHeightRange,TwoDim_TagHeightFixed,ThreeDim)。

■ 定位座標類別,網路監控、設備配置初始化、座標計算、定位濾波
■ 聲光控制類別,LED、蜂鳴器控制
■ 卡片狀態類別,卡片跌倒、卡片跌落

DLL調用流程


1. 初始化基站和卡片訊息(InitAnchorConf和InitTagConf)
2. 初始化網路訊息(InitNet)
3. 開始網路監聽(Start)
4. 上位應用在重寫的protected override void WndProc(ref Message m)函數中接收消息 (GetHGLobj)
5. 根據消息類型進行不同的處理 (m.Msg)
6. 釋放非託管記憶體區(FreeHGLOBAL)
7. 斷開連接(Stop)

在上面的流程中調用DLL中對應的函數的步驟,其中我們的應用程式主要在WndProc(ref Message m)函數中接收消息及處理不同的消息類型。如下所示
protected override void WndProc(ref Message m)
{
     switch(m.Msg)
     {
            case PrecisePositionLibrary.TPPID.WM_LOCATE_PACK:
                 if ((int)m.WParam == PrecisePositionLibrary.TPPID.WP_LOCATE_TAG)
                {
                         PrecisePositionLibrary.PrecisePosition.TagPacketReport tp;
                         if (!PrecisePositionLibrary.PrecisePosition.GetHGLobj(m.LParam, out tp))
                                  return;
                         PrecisePositionLibrary.PrecisePosition.FreeHGLOBAL(m.LParam);
                         ...處理tag定位消息...
                }
                break;
        }
}
Classes
  ClassDescription
Public classCode exampleAnchorLocateConf
AnchorLocateConf類別是一個基站的定位配置資訊類別,用來設置基站的高度、座標(含高度)以及所屬組別
Public classKalman
Kalman濾波

要想對Tag的座標點(x,y)進行過濾以得到較穩定的定位表現,我們必須創建兩個Kalman的濾波器物件 ,一個表示X的座標,一個表示Y的座標,如果座標包含z,則應當創建多一個Kalman的濾波器物件來表示Z

在創建Kalman濾波器物件時,我們需要提供4個變數,分別是X,P,Q,R
Public classPoint
Point類是一個座標類別,該類別有三個double成員變數X、Y、Z,這三個成員變數預設值都為-1d,當然我們在生成這個類別的物件時可以對兩個變數初始化

此Point類別有一個特殊地方是可以序列化,我們可以將座標訊息儲存到硬碟上
Public classPrecisePosition
主要功能如網路監控、設備配置初始化、座標計算、定位濾波、聲光控制、卡片狀態等功能封裝成DLL,提供使用者可以進行二次開發。

其中API部份僅提供座標存取、狀態存取與設備控制等功能,不包含數值處理函式,如定位卡片座標是由DLL解析封包後自行計算, 使用者無法自行調用定位演算法來處理數值,只能取得座標及設定使用的演算法(TwoDim_TagHeightRange,TwoDim_TagHeightFixed,ThreeDim)。 dll主要區分成三個類別,以下將個別說明DLL內容DLL調用流程

■ 定位座標類別,網路監控、設備配置初始化、座標計算、定位濾波
■ 聲光控制類別,LED、蜂鳴器控制
■ 卡片狀態類別,卡片跌倒、卡片跌落
Public classCode examplePrecisePositionTagControlConf
卡片控制類別,在調用public static bool StartTagControl(TagControlConf conf)函數時需要傳入該參數
Public classCode examplePrecisePositionTagControlParam
卡片控制參數類別
Public classCode exampleTagLocateConf
TagLocateConf 類是卡片的定位配置資訊類,主要用來設置Tag的高度。 只有使用LocateAlgorithm.TwoDim_TagHeightFixed才需要配置卡片,詳細說明參考列舉LocateAlgorithm
Public classCode exampleTPPID
TPPID類是消息類型類別,在主程式處理上報資料時, 我們需要重寫protected override void WndProc(ref Message m)函數用於處理這些消息
Structures
  StructureDescription
Public structureCode examplePrecisePositionAnchorPacketReport
AnchorPacketReport是DLL拋給主程式的基站消息結構體。
Public structureCode examplePrecisePositionTagControlResult
TagControlResult是DLL向主程式拋的卡片控制結果消息結構體。
Public structureCode examplePrecisePositionTagFallInfoReport
TagFallInfoReport是DLL向主程式拋的卡片跌落或跌倒狀態消息結構體
Public structureCode examplePrecisePositionTagPacketReport
TagPacketReport結構體是DLL拋給主程式的Tag消息結構體。
Enumerations
  EnumerationDescription
Public enumerationCode exampleParamsType
參數類型
Public enumerationCode examplePrecisePositionFallStatus
該列舉物件用於表示卡片狀態類型。
Public enumerationCode examplePrecisePositionLocateAlgorithm
該列舉物件列舉了三種定位演算法,在使用函數Start(...) 時需要指定一種定位演算法傳入。
Public enumerationCode examplePrecisePositionLocateType
該列舉物件用於解析TagPacketReport.LocateType參數。表示卡片上報的定位封包類型。 將TagPacketReport.LocateType參數與列舉值進行與(&)操作,如結果等於列舉數值,即為該定位類型。TagPacketReport.LocateType可能包含多種定位類型。
Public enumerationCode examplePrecisePositionReportMode
該列舉物件列舉了兩種定位消息的上報模式,在使用函數Start(...) 時需要配置該參數。