英創(chuàng)提供的系列ARM9嵌入式主板,包括有EM9000嵌入式主板、EM9260嵌入式主板、EM9160嵌入式主板都是預(yù)裝了正版WinCE操作系統(tǒng),ARM9嵌入式主板的所有通訊接口均配置有標(biāo)準(zhǔn)的WinCE驅(qū)動(dòng)程序。本文以串口通訊和GPRS通訊為例,側(cè)重介紹利用GPRS進(jìn)行數(shù)據(jù)透明傳輸?shù)姆桨福摲桨竿ㄟ^(guò)GPRS自動(dòng)撥號(hào)上網(wǎng),和遠(yuǎn)端網(wǎng)絡(luò)數(shù)據(jù)中心建立TCP連接,從而實(shí)現(xiàn)遠(yuǎn)端數(shù)據(jù)中心和應(yīng)用串口數(shù)據(jù)之間的透明傳輸功能。
本文以英創(chuàng)的EM9260嵌入式主板為例來(lái)介紹GPRS數(shù)據(jù)透明傳輸?shù)膽?yīng)用方案。在本方案中EM9260中COM2口接GPRS通訊模塊,COM3口作為應(yīng)用串口。關(guān)于EM9260主板接口的詳細(xì)介紹請(qǐng)參見(jiàn)“EM9260數(shù)據(jù)手冊(cè)”。
在進(jìn)行本方案測(cè)試時(shí),首先需要建立一個(gè)遠(yuǎn)端數(shù)據(jù)中心,該數(shù)據(jù)中心作為服務(wù)器端,運(yùn)行一個(gè)TCPServer的程序,特別需要注意的是該數(shù)據(jù)中心必須要具有互聯(lián)網(wǎng)可訪問(wèn)的IP地址,GPRS撥號(hào)上網(wǎng)后才能訪問(wèn)該數(shù)據(jù)中心,互聯(lián)網(wǎng)可訪問(wèn)的IP包括有靜態(tài)IP、ADSL撥號(hào)上網(wǎng)后的IP等,關(guān)于這部分的內(nèi)容請(qǐng)參見(jiàn)英創(chuàng)網(wǎng)站“GPRS/CDMA應(yīng)用方案”一文的介紹。第二需要將EM9260主板上的以太網(wǎng)的網(wǎng)關(guān)參數(shù)設(shè)置為0,在訪問(wèn)外網(wǎng)時(shí)以確保系統(tǒng)選路時(shí)是通過(guò)GPRS訪問(wèn),而不至于通過(guò)以太網(wǎng)的網(wǎng)關(guān)路由訪問(wèn)。設(shè)置的方法可以通過(guò)修改userinfo.txt文件內(nèi)容,如:
[LOCAL_MACHINE]
DefaultGateway='0.0.0.0' // 以太網(wǎng)的缺省網(wǎng)關(guān)參數(shù)設(shè)置為0
IPAddress='192.168.201.170'
SubnetMask='255.255.255.0'
[USER_EXE]
Name='\NandFlash\GPRS232.exe'
Parameters=''
[SYSTEM]
Store='50'
該方案實(shí)現(xiàn)代碼為GPRS232項(xiàng)目文件,在該例程中主要包括三部分的內(nèi)容:GPRS自動(dòng)撥號(hào)上網(wǎng);作為T(mén)CP客戶端的WinSock數(shù)據(jù)通訊;應(yīng)用串口數(shù)據(jù)通訊。其中GPRS自動(dòng)撥號(hào)上網(wǎng)部分在應(yīng)用文檔 “基于WINCE平臺(tái)eVC編程要點(diǎn)之二 — WINCE下的GPRS應(yīng)用”中有詳細(xì)的介紹,這里就不再贅述。
本方案例程中據(jù)啟動(dòng)了兩個(gè)接收線程,一個(gè)串口通訊接收線程,一個(gè)是TCP Socket接收線程,各接收線程分別執(zhí)行不同功能的回調(diào)函數(shù)。
// 串口接收線程調(diào)用回調(diào)函數(shù),處理串口接收到的數(shù)據(jù)
void CALLBACK OnReceive( )
{
if( ConnState==2 )
{
// 串口接收到的數(shù)據(jù)通過(guò)TCP連接發(fā)送到遠(yuǎn)端數(shù)據(jù)中心
m_TCPClient.SendData( m_ceSer.DatBuf, m_ceSer.m_lDatLen );
}
}
// WinSock接收線程調(diào)用回調(diào)函數(shù),處理TCP連接接收到的數(shù)據(jù)
void CALLBACK OnRead( )
{
BOOL bResult;
// TCP連接接收到遠(yuǎn)端數(shù)據(jù)中心的數(shù)據(jù)通過(guò)應(yīng)用串口發(fā)送到目標(biāo)設(shè)備
m_ceSer.WritePort( m_TCPClient.RecvBuf, m_TCPClient.m_nRecvLen );
}
// 處理WinSocket關(guān)閉操作
void CALLBACK OnClose( )
{
char Buf[100];
int len;
strcpy( Buf,'TCP connect closed' );
len = strlen( Buf );
m_ceSer.WritePort( Buf, len );
}
// WinSock出錯(cuò)處理,對(duì)TCP連接狀態(tài)復(fù)位,主循環(huán)將重新進(jìn)行撥號(hào)、重新建立TCP
// 連接的操作
void CALLBACK OnError( int nErrorCode)
{
ConnState = 0;
}
對(duì)本方案感興趣的英創(chuàng)客戶可以向英創(chuàng)技術(shù)部分索取相關(guān)代碼。
成都英創(chuàng)信息技術(shù)有限公司 028-8618 0660