當前位置:首頁 » 操作系統 » 資料庫dtu

資料庫dtu

發布時間: 2022-12-14 19:21:45

⑴ 遠程數據採集系統設計,數據傳輸到上位機。通過3G無線傳輸,傳到監控中心後,怎麼把數據存儲SQL資料庫

數據中心動態庫說明

1、數據類型

typedefUINT u32t;

typedefUCHAR u8t;

typedefUSHORT u16t;

typedefULONG u64t;

2、數據結構

1) 用以區分標識各台DTU的數據結構

typedefstruct_modem_info_t_

{

u32t m_modemId; //Modem模塊的ID號

u8t m_phoneno[12]; //Modem的11位電話號碼,必須以''字元結尾

u8t m_dynip[4]; //Modem的4位動態ip地址

u64t m_conn_time; //Modem模塊最後一次建立TCP連接的時間

u64t m_refresh_time; //Modem模塊最後一次收發數據的時間

}ModemInfoStruct;

2) DTU數據包的數據結構

#defineMAX_RECEIVE_BUF1450

typedefstruct_modem_data_t

{

u32t m_modemId; //Modem模塊的ID號

u64t m_recv_time; //接收到數據包的時間

u8t m_data_buf[MAX_RECEIVE_BUF+1]; //存儲接收到的數據

u16t m_data_len; //接收到的數據包長度

u8t m_data_type; //接收到的數據包類型,

// 0x01:用戶數據包

// 0x02:對控制命令幀的回應

}ModemDataStruct;

以上u64t類型的時間是基於GMT時間1970年1月1日0:00:000以來的秒數指示時間值,即當前時間距1970年1月1日0點0分0秒以秒為單位的數值。在大多數語言都提供轉換函數。

3、API函數說明

1) BOOLDSStartService(u16tuiListenPort);

功能:啟動伺服器的數據服務

參數:u16ListenPort:服務的偵聽埠

返回:成功返回TRUE,失敗返回FALSE;

說明:啟動伺服器的數據服務。啟動數據服務後,伺服器偵聽在指定埠。

如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

2) BOOLDSStopService(void);

功能:停止伺服器的數據服務

參數:無

返回:成功返回TRUE,失敗返回FALSE;

說明:停止伺服器的數據服務。所有的DTU都將下線。

如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

3) BOOLDSGetNextData(ModemDataStruct*pDataStruct,u16twaitseconds);

功能:讀取下一條DTU送上來的信息

參數:pDataStruct:存放DTU所送上來的信息和數據的結構,讀函數執行成功後,返回的數據存放到該參數指向的結構中

waitseconds:本函數讀到數據後立即返回;如果沒有數據到達,則等待最長waitseconds(時間單位:秒)的時間,直到有數據到達,取值范圍從0~65535,如果取值為0表明本函數將立即返回。另外,當在另一個線程中執行成功了DSStopService()後,本函數將立即返回。

返回:成功返回TRUE,失敗返回FALSE;

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

4) BOOLDSSendData(u32tmodemId,u16tlen,u8t*buf);

功能:向指定ID號的的DTU發送數據

參數:modemId:DTU的ID號,用以標識一個DTU

len:待發送的數據長度(位元組數),數據長度必須小於或等於1450個位元組

buf:待發送的數據

返回:成功返回TRUE,失敗返回FALSE;

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

5) BOOLDSSendControl(u32tmodemId,u16tlen,u8t*buf);

功能:向指定ID號的的DTU發送控制命令

參數:modemId:DTU的ID號,用以標識一個DTU

len:待發送的控制命令長度(位元組數),數據長度必須小於或等於1000個位元組

buf:待發送的控制命令幀

返回:成功返回TRUE,失敗返回FALSE

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。]

6) u32tDSGetModemCount(void);

功能:取得當前在線的所有的DTU的總數

參數:無

返回:得到在線的DTU的數量

7) BOOLDSGetModemByPosition(u32tpos,ModemInfoStruct*pModemInfo);

功能:取得指定位置的DTU的數據;

參數:pos:DTU列表中的位置信息,0代表第一個DTU位置;

pModemInfo:指向用以保存DTU信息的數據結構;

返回:成功返回TRUE,失敗返回FALSE

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

一般來說DSGetDtuCount()和DSGetDtuByPosition()函數配合使用,用以查看當前所有DTU的信息,如下例所示:

u32t uiDtuCount;

uiDtuCount=DSGetDtuCount();

DtuInfoStruct dtuInfo;

u32t i;

for(i=0;i<uiDtuCount;i++)

{

DSGetDtuByPosition(i,&dtuInfo);

//對dtuInfo進行操作

}

8) voidDSGetLastError(char*str,intnMaxBufSize);

功能:獲得先前API執行時發生的錯誤;

參數:str:用來存放錯誤信息的緩沖區;

nMaxStrSize:緩沖區的最大長度,如果錯誤信息的大小超過了這個值,則此函數將把錯誤信息的尾部截除。

返回:無

9) BOOLDSDisconnect(u32tmodemId);

功能:斷開指定ID號的DTU連接

參數:modemId:DTU的ID號,用以標識一個DTU

返回:成功返回TRUE,失敗返回FALSE

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

4、函數的具體使用

3) 導入動態庫

調用WINDOWSAPI函數LoadLibrary裝載動態庫,如下:

HMODULE DllMule; //指向動態庫的句柄

BOOL(*DSStartService)(u16t); //定義一個指向函數的地址的指針

hDllMole=LoadLibrary(「gprsdll.dll」);

If(hDllMole!=NULL) //判斷調用是否成功

{

//從動態庫中取函數地址

DSStartService=GetProcAddress(hDllMole,」DSStartService」);

if(DSStartService!=NULL) //判斷是否取到該函數地址

{

if((*DSStartService)(5001)!=FALSE)

MessageBox(「啟動成功」);

Else

MessageBox(「啟動失敗」);

}

}

在程序開始時需要調用動態庫,程序運行完畢後,要釋放動態庫,調用windowsAPI函數FreeLibrary可釋放動態庫:

FreeLibrary(hDllMole);//TRUE-successFALSE-failed

程序中LoadLibrary次數必須和FreeLibrary相同,每調用一次LoadLibrary,相應的應該調用一次FreeLibrary,保證每次調用後都會釋放。

4) 啟動服務

首先從動態庫中取到該函數地址,取到地址後,就可以執行該函數,如下:

BOOL(*DSStartService)(u16t); //定義一個指向函數的地址的指針

DSStartService=(BOOL(*)(u16t))GetProcAddress(hDllMole,「DSStartService」);

if(DSStartService!=NULL)

{

(*DSStartService)(5001);

}

5) 停止服務

BOOL(*DSStopService)(void);

DSStopService=(BOOL(*)(void))GetProcAddress(hDllMole,「DSStopService」);

If(DSStopService!=NULL)

(*DSStopService)();

6) 讀數據

BOOLDSGetNextData(ModemDataStruct*,u16t);

DSGetNextData=

(BOOL(*)(ModemDataStruct*,u16t))GetProcAddress(hDllMole,「DSGetNextData」);

if(DSGetNextData!=Null)

if((*DSGetNextData)(&dtudata,100)==0) //dtudata為DtuDataStruct型結構

//如果沒有數據最長等待100秒

{

//處理結構dtudata中的數據

}

7) 發送數據

BOOLDSSendData(u32t,u16t,u8t*);

DSSendData=(BOOL(*)(u32t,u16t,u8t*))GetProcAddress(hDllMole,「DSSendData」);

if(DSSendData!=NULL)

{

(*DSSendData)(nID,len,buf);

}

8) 用戶列表

底層服務維護一張用戶列表,記錄當前在線用戶的信息,DSC如果想知道底層用戶列表,需要調用提供的API函數:DSGetModemCount、DSGetModemByPosition

for(u32ti=0;i<(*DSGetModemCount)();i++)

{

(*DSGetModemByPosition)(i,&dtuinfo);

//1、處理記錄用戶信息記錄dtuinfo中的信息;

}

9) 錯誤信息

可以通過調用DSGetLastError()函數來獲得上次調用API函數失敗後的具體的錯誤信息。

charszErrorMsg[256];

DSGetLastError(szErrorMsg,255);

這個是廈門才茂DTU動態庫文件,如果需要咨詢更詳細,可以直接聯系廈門才茂技術,或者直接到他們網站咨詢

⑵ 申請DTU大學的研究生需要什麼資格,能夠介紹一下DTU大學研究生的申請過程嗎

選校或者選專業定位可以參考留學志願參考系統 https://site.douban.com/292841/widget/notes/193232597/note/632302814/
輸入GPA、專業等信息,系統會自動從資料庫中匹配出與你情況相似的同學案例,看看他們成功申請了哪些院校和專業,也可以按照留學目標來查詢,看看你的目標院校和專業都哪些背景(語言成績多少分、學校背景如何、什麼專業、GPA多少等)的學生申請了,也從而對比自身情況,制定大致的目標和方向。

熱點內容
用什麼dns伺服器地址快 發布:2025-05-15 04:52:59 瀏覽:26
手機端so反編譯 發布:2025-05-15 04:50:55 瀏覽:610
linuxlamp安裝 發布:2025-05-15 04:50:45 瀏覽:578
sqlplus緩存區怎麼設置 發布:2025-05-15 04:50:44 瀏覽:857
shell腳本環境變數 發布:2025-05-15 04:45:18 瀏覽:693
安卓nba2k18什麼時候出 發布:2025-05-15 04:38:42 瀏覽:393
王者安卓轉蘋果為什麼顯示失敗 發布:2025-05-15 04:35:49 瀏覽:18
手機優酷緩存視頻格式 發布:2025-05-15 04:13:45 瀏覽:210
公益電影分鏡頭腳本插畫 發布:2025-05-15 04:08:37 瀏覽:961
數據壓縮編碼 發布:2025-05-15 03:58:44 瀏覽:726