基于WINCE平台eVC编程要点之三——GPRS-RS232数据透明传输

 2008-6-26    

        英创提供的系列ARM9嵌入式主板,包括有EM9000嵌入式主板、EM9260嵌入式主板、EM9160嵌入式主板都是预装了正版WinCE操作系统,ARM9嵌入式主板的所有通讯接口均配置有标准的WinCE驱动程序。本文以串口通讯和GPRS通讯为例,侧重介绍利用GPRS进行数据透明传输的方案,该方案通过GPRS自动拨号上网,和远端网络数据中心建立TCP连接,从而实现远端数据中心和应用串口数据之间的透明传输功能。


        本文以英创的EM9260嵌入式主板为例来介绍GPRS数据透明传输的应用方案。在本方案中EM9260中COM2口接GPRS通讯模块,COM3口作为应用串口。关于EM9260主板接口的详细介绍请参见“EM9260数据手册”。


        在进行本方案测试时,首先需要建立一个远端数据中心,该数据中心作为服务器端,运行一个TCPServer的程序,特别需要注意的是该数据中心必须要具有互联网可访问的IP地址,GPRS拨号上网后才能访问该数据中心,互联网可访问的IP包括有静态IP、ADSL拨号上网后的IP等,关于这部分的内容请参见英创网站“GPRS/CDMA应用方案”一文的介绍。第二需要将EM9260主板上的以太网的网关参数设置为0,在访问外网时以确保系统选路时是通过GPRS访问,而不至于通过以太网的网关路由访问。设置的方法可以通过修改userinfo.txt文件内容,如:


[LOCAL_MACHINE]
DefaultGateway='0.0.0.0'     // 以太网的缺省网关参数设置为0
IPAddress='192.168.201.170'
SubnetMask='255.255.255.0'
[USER_EXE]
Name='\NandFlash\GPRS232.exe'
Parameters=''
[SYSTEM]
Store='50'

        该方案实现代码为GPRS232项目文件,在该例程中主要包括三部分的内容:GPRS自动拨号上网;作为TCP客户端的WinSock数据通讯;应用串口数据通讯。其中GPRS自动拨号上网部分在应用文档 “基于WINCE平台eVC编程要点之二 — WINCE下的GPRS应用”中有详细的介绍,这里就不再赘述。


        本方案例程中据启动了两个接收线程,一个串口通讯接收线程,一个是TCP Socket接收线程,各接收线程分别执行不同功能的回调函数。


// 串口接收线程调用回调函数,处理串口接收到的数据
void CALLBACK OnReceive( )
{
    if( ConnState==2 )
    {
        // 串口接收到的数据通过TCP连接发送到远端数据中心
        m_TCPClient.SendData( m_ceSer.DatBuf, m_ceSer.m_lDatLen );
    }
}


// WinSock接收线程调用回调函数,处理TCP连接接收到的数据
void CALLBACK OnRead( )
{
    BOOL bResult;
    // TCP连接接收到远端数据中心的数据通过应用串口发送到目标设备
    m_ceSer.WritePort( m_TCPClient.RecvBuf, m_TCPClient.m_nRecvLen );
}


// 处理WinSocket关闭操作
void CALLBACK OnClose( )
{
    char Buf[100];
    int  len;
    strcpy( Buf,'TCP connect closed' );
    len = strlen( Buf );
    m_ceSer.WritePort( Buf, len );
}


// WinSock出错处理,对TCP连接状态复位,主循环将重新进行拨号、重新建立TCP
// 连接的操作
void CALLBACK OnError( int nErrorCode)
{
    ConnState = 0;
}

        对本方案感兴趣的英创客户可以向英创技术部分索取相关代码。