Click or drag to resize

PrecisePositionLibrary Namespace

簡介


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

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

DLL調用流程


1. 初始化基站和卡片訊息(InitAnchorConf和InitTagConf)
2. 初始化串列埠訊息(InitUart)
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;

                          ...處理tag定位消息...

                         PrecisePositionLibrary.PrecisePosition.FreeHGLOBAL(m.LParam);
                }
                break;
           default:
                base.WndProc(ref m);
                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)。

Public classCode exampleTagLocateConf
TagLocateConf 類是卡片的定位配置資訊類,主要用來設置Tag的高度。 只有使用LocateAlgorithm.TwoDim_TagHeightFixed才需要配置卡片,詳細說明參考列舉LocateAlgorithm
Public classCode exampleTPPID
TPPID類是消息類型類別,在主程式處理上報資料時, 我們需要重寫protected override void WndProc(ref Message m)函數用於處理這些消息
Structures
  StructureDescription
Public structureCode examplePrecisePositionTagPacketReport
TagPacketReport結構體是DLL拋給主程式的Tag消息結構體。
Enumerations
  EnumerationDescription
Public enumerationCode exampleParamsType
參數類型
Public enumerationCode examplePrecisePositionLocateAlgorithm
該列舉物件列舉了三種定位演算法,在使用函數Start(...) 時需要指定一種定位演算法傳入。
Public enumerationCode examplePrecisePositionReportMode
該列舉物件列舉了兩種定位消息的上報模式,在使用函數Start(...) 時需要配置該參數。