首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于Windows CE的物流车载终端设计 003

基于Windows CE的物流车载终端设计 003

专门为参考点定义了一个数据结构(gpx2xy.h):

  本设计定义了用于存储参考点信息的数据文件的格式,如表4所列。

  上述工作完成之后,参考点数据的存储和读取就比较简单了。基准点和车辆位置的计算都只是简单的代数计算过程,容易实现。至于地图的显示和控制则需要通过Windows CE的API接口来完成。
  
  3.2 GPRS模块

  本车载终端采用GPRS Modem与控制中心进行无线数据通信,对GPRS Modem的控制和读写通过串口进行。由于与控制中心交互的数据种类较多,因此定义了相应的应用层数据包格式。数据包的所有字段均采用单字节ASCII编码且为固定长度。在发送端,数值型字段需要在发送前格式化为定长字符串再封装到数据包中;在接收端,需要将数据包中的格式化字符串还原为数值型常量。数值型字段不足部分以字符“0”为前导字符进行填充;字符型字段不足部分以空格(SPACE,0x20)为前导字符填充。字符串型字段的长度不包括字符串结尾的NULL字符(在C语言中为0x00)。所有采用UNICODE编码的字符数据在封装到数据包中之前必须进行转换。

  定义的数据包主要有以下几类:客户端位置更新数据包;客户端接件信息数据包;客户端送达签收数据包;服务器新任务数据包;客户端确认数据包;服务器确认数据包;客户端车辆故障数据包;客户端道路堵塞数据包。

  为了能够正确解析数据包中的数据,所有数据包都具有相同的包头(head),即数据包类型(packet type)、时间戳标记(time stamp)、数据包顺序号(packet sequencenumber)3个字段。当接收到一个数据包之后,根据包头中的类型字段就能判断该数据包主体部分的长度,由此即可正确解析出包中的内容。包头之后是数据包主体(body)部分,不同数据包类型有着不同的字段和长度。上述8种定义类型之外的数据包均为未定义类型,应当被丢弃。类型为NTSK、TMLF、RCNG的数据包需要接收端的确认;而RECV、SEND、UPDT、CACK、SACK这5种类型的数据包不需要确认。

  GPRS Modem的数据传输与接收是通过串口编程来实现的。Windows CE平台上的串口编程依赖于与文件相关的API接口:CreateFile( )打开串口,ReadFile( )从串口读取数据,WriteFile ( )向串口写入数据。由于网络数据包的到来是一个异步过程,因此还需要处理串口的异步事件:GetCommMask( )取得串口已经设置的事件,SetCom-mMask( )设置串口事件集,WaitCommEvent( )等待预先设置的串口事件集中的某一事件发生。
  
  3.3 称重与打印模块

  该模块实现了电子称重和凭单打印功能。

  由于采用ZNE-100T以太网口转串口模块把Liod板的以太网口扩充为3个串口,因此对外扩的3个串口的访问是通过以太网口进行的,这涉及Windows CE下的网络编程。对外扩串口的控制是通过向ZNE-100T模块的3003端口写入控制命令字来实现的;数据的收发是通过ZNE-100T模块的4001端口实现的。

  网络编程接口采用的是Winsock1.1,采用面向连接的TCP协议。对数据的读写采用了非阻塞的方式:写操作直接将数据写到套接口的输出缓冲区中;而数据的读取因为是一个异步过程,因此放在一个单独的线程中完成。在此线程中定义了OnRead( )、OnError( )、OnDisconnect( )回调函数,用于把线程中读取到的数据递交给上层或者处理读取过程中发生的异常事件。

  由于打印机、电子秤、GPS都是通过ZNE-100T模块进行控制的,而Liod板提供的以太网口只有一个,因此在任何时刻都只能与打印机、电子秤、GPS三者中的一个通信,而其他两个设备的串口则处于关闭状态。这是通过向ZNE-100T模块的3003端口发送不同的控制命令字完成的。

  对于称重,只存在由C8051F020单片机向Liod板的单向数据传输,称量的范围为40 g~5 100g,因此重量数据采用2个字节表示,单位为g。为了确保数据传输的准确,除了2个字节的重量数据之外,还加入了几个字节的冗余数据。电子秤的数据帧格式如下:

  其中,0xAA 0x55作为起始标记;结尾处的0x05既表明重量数据帧的长度,也作为结束标记。

  就打印机而言,控制命令字和要打印的数据都在同一个数据流中发送给打印机,由打印机去区分命令和数据。由于Windows CE默认支持的字符集是UNICODE字符集,因此输出给打印机的字符需要转换成多字节字符发送给打印机才能正确打印,这是通过标准C提供的wcs-tombs( )库函数实现的。
  
  3.4 语音提示模块

  考虑到配送人员在驾驶车辆的过程中不便于时刻留意系统中任务的变化情况,因此在车载终端上加入了语音提示模块。

  Windows CE提供了音频API接口:

  BOOL WINAPl PlaySound(LPCSTR pszSound,HMOD-ULE hmod,DWORD fdwSound);
该函数的第1个参数表示要播放的音频文件,第2个参数设置为NULL,第3个参数指定影响声音播放的一些标志。因此,语音模块的实现就是在不同的情况下播放不同的提示声音。
  
  4 结 论

  基于Liod评估板的车载物流终端集成了电子地图、GPS定位、GPRS无线通信、打印与称重、语音提示等功能。由于采用栅格
返回列表