首页资源分类电源技术 > Windows CE系统中卫星通信的实现.pdf

Windows CE系统中卫星通信的实现.pdf

已有 460221个资源

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人消费电子

文档信息举报收藏

标    签: WindowsCE系统中卫星通信的实现

分    享:

文档简介

Windows CE系统中卫星通信的实现.pdf

文档预览

第 26卷第 2期 2006年 2月   计算机应用 Computer App lications   Vol. 26 No. 2 Feb. 2006 文章编号 : 1001 - 9081 (2006) 02 - 0505 - 03 W indows CE系统中卫星通信的实现 李韶芳 ,朱宝山 ,文  江 ,曹  闻 (信息工程大学 测绘学院 ,河南 郑州 450052) yyx0712@ sina. com ) 摘  要 :介绍了 W indow s CE系统下嵌入式设备与卫星信号接收机之间进行通信的一般方法 ,详 细设计了一个实用的多线程实时通信解决方案 ,并以 GPS系统的通信格式为例实现了一种提取其定 位信息的方法 。实验证明 ,该方法在 PDA 上能够实时 、正确地获取 GPS的定位信息 ,从而证明该方案 是可行的 、正确的 。 关键词 :卫星通信 ;嵌入式 ;多线程 ;信息提取 中图分类号 : TP393  文献标识码 : A Solution of sa tellite comm un ica tion in W indows CE L I Shao2fang, ZHU B ao2shan, W EN J iang, CAO W en (Institu te of S u rvey ing and M apping, Inform a tion Eng ineering U n iversity, Z hengzhou Henan 450052, Ch ina) Abstract: A common method of communication between embedded devices and satellite receivers was introduced. To resolve the p roblem of real2time communication, this paper designed a p ractical multithreading scheme and realized a method which can extract information from satellite signals, using the communication format of GPS. The result of the test in PDA p roves that the method can correctly extract the position information of the GPS signals, and can satisfy the requirement of real2 time communication. Key words: satellite communication; embedded; multithreading; information extracting 1  嵌入式设备与卫星接收机的通信 通常 GPS定位信息接收系统主要由 GPS接收天线 、变频 器 、信号通道 、微处理器 、存储器以及电源等部分组成 。由于 GPS定位信息内容较少 ,因此一般使用 RS2232串口将定位信 息 (NEMA0183语句 )从 GPS接收机传送到嵌入式设备中进 行信息提取处理 。实现串口通信有多种方法 [1 ] ,本文使用 W in32 AP I函数对其进行编程处理 。 在 W indow s CE系统下不允许直接对硬件端口进行控制 操作 ,所有的端口均被视为“文件 ”,因此在对串口进行侦听 之前需要用以下方式来打开串口 : HANDLE hCom = CreateFile ("COM1: " , GENER IC_READ | GENER IC _ WR ITE, 0, NULL, OPEN _ EX ISTING, NULL, NULL) ; 如果该函数成功返回 , hCom 即为串行端口 COM1 的句 柄 。注意以下两点与 VC + + 6. 0中有所不同 [2 ] : 1) 第一个参数是串口名的字符串 ,必须加“: ”; 2) 第 6个参数不能为 F ILE_FLAG_OVERLAPPED ,只能 是 NULL ,这是因为该函数在 CE系统中不支持重叠 I/O。尽 管如此 ,我们仍可以使用多个线程来执行同样效果的重叠操 作 。因此串口信息的发送和接收必须以多线程的方法加以实 现。 对串口的配置主要是对串口状态参数设置 、超时结构设 置和串口事件掩码的设置 。串口状态参数可以由一个 DCB 结构获得 。常用的可能更改的参数一般是数据传输率 、数据 位 、停 止 位 和 校 验 位 。串 口 的 超 时 参 数 可 以 通 过 一 个 COMM TIM EOUTS超时结构来设置 。和 DCB 结构一样 ,超时 参数的设置也是先获得串口的超时结构 ,再更改其中需要修 改的值 ,最后再把结构赋值回串口 。串口响应什么事件是通 过函数 SetCommM ask设置串口事件掩码来实现的 ,在这里设 置为 EV _RXCHAR,它表示串口接收到一个字符就激活串口 事件 ,使用函数 W aitCommEvent即可接收到该事件 。 串口的读写使用 ReadFile 函数和 W riteFile函数 。由于 CE下串口不支持重叠 I/O ,因此它们的最后一个参数 (指向 异步结构变量的指针 )都必须为空 (NULL ) 。 串口的关闭比较简单 ,使用 CloseHandle ( )函数即可 。 2  多线程解决方案 在卫星导航系统与 GSM 网络联合使用的情况下 ,串口不 仅要接收卫星数据 ,还要向外发送数据 。 由于串口数据的接收和发送是不规律的 ,所以可能会有 在短时间内大量数据高速涌入的情况发生 ,再加上定位信息 的解析计算量比较大 ,嵌入式设备的性能又比较差 ,此时系统 可能来不及处理所有信息 ,从而导致信息丢失 。 鉴于以上考虑 ,本文设计了三个辅助线程和两个数据缓 冲区来解决这一问题 。两个数据缓冲区分别是数据输入缓冲 区和数据输出缓冲区 。输入缓冲区中存储接收到的但未解析 的串口数据 ;输出缓冲区储存已生成好的但未发送的数据 。 三个辅助线程分别是监视线程 、解析线程和发送线程 。监视 线程用于监视串口状态 ,实时 、完整地接收数据 ;解析线程把   收稿日期 : 2005 - 08 - 30;修订日期 : 2005 - 11 - 08   作者简介 :李韶芳 (1981 - ) ,男 ,山西晋城人 ,硕士研究生 ,主要研究方向 :数字图像处理 、地理信息系统 ;  朱宝山 ( 1964 - ) ,男 ,河南平顶 山人 ,副教授 ,主要研究方向 :图像处理与应用 ;  文江 (1977 - ) ,男 ,四川康定人 ,硕士研究生 ,主要研究方向 :数字图像处理 、地理信息系统 、模 式识别 ;  曹闻 (1979 - ) ,男 ,山东泰安人 ,助教 ,主要研究方向 :遥感图像处理 、地理信息系统. © 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net  50 6    计算机应用 2006年 串口数据解析为定位信息 ;发送线程把数据输出缓冲区中的 数据发送至串口 。它们的逻辑关系如图 1所示 。 当一个线程从某个共享 资源中读取数据的时候 ,可 能另外一个线程却要往该资 源写入数据 。为了不使读写 操作相冲突 ,本文使用三个 临界区变量来处理串口 、输 入缓冲区和输出缓冲区这类 被多个线程共享的资源的使 用协调问题 ,这里分别命名 为 ComSync, InBufSync 和 图 1 多线程流程关系图 OutBufSync。访问 它 们 之 前 , 要 锁 定 临 界 区 变 量 ( EnterCriticalSection) ,以保证在本线程访问该资源时 ,其他线 程不能更改该资源 ,在访问操作完成之后还必须要解锁临界 区变量 (LeaveCriticalSection) 。 同时 ,为了协调各线程 之间不同 操 作 的 执 行 顺 序 [3 ] ,还定义了 6个事件 ,它 们分别是 :解析事件 、解析完 成事件 、发送事件 、发送完成 事件 、发送线程结束事件 、解 析线程结束事件 。事件的激 活使用 SetEvent函数 ,关闭 使用 ResetEvent函数 。 图 2 监视线程工作流程图 数据的接收由监视线程 完成 。其流程如图 2 所示 。 监视 线 程 使 用 函 数 W aitCommEvent等待串口数 据的到来 。为了使监视线程 占用 共 享 资 源 的 时 间 尽 量 少 ,在获得串口的使用权后 , 可将串口数据先复制到一个 临时变量中 ,然后立刻放弃 串口的使用权 。同理 ,在获 得输入缓冲区的使用权并把 临时变量中的数据写入到输 入缓冲区后 ,也要立刻放弃 图 3 发送线程工作流程图 其使用权 。然后 ,监视线程 便激活解析事件 ,通知解析 线程开始工作 ,监视线程则 继续下一次等待串口数据的 到来 。若用户主线程要结束 监视线程, 可使用函数 CloseHandle将其强制结束 。 数据的发送由发送线程 来完 成 。其 流 程 如 图 3 所 示 。发 送 线 程 使 用 函 数 W aitForM ultip leObjects 来 等 待发 送 事 件 或 线 程 结 束 事 件 ,其中前者的优先级较高 。 和监视线程一样 ,访问输出 缓冲区和串口之前都应先锁 图 4 解析线程工作流程图 定临界区变量 ,访问后再解锁临界区变量 。发送线程如果等 到发送事 件 后 , 则 从 输 出 缓 冲 区 中 取 出 数 据 , 并 使 用 函 数 W riteFile将该数据发送到串口 ,然后检查输出缓冲区是否为 空 ,若是则关闭发送事件 ,等待下一次的发送事件 ,若否则继 续把输出缓冲区中的数据发送至串口 。如此循环直至输出缓 冲区为空 ,然后再关闭发送事件 。若用户主线程要结束发送 线程 ,只需激活发送线程结束事件 ,发送线程会先将输出缓冲 区中的数据全部发送到串口 ,然后再响应结束事件 ,退出循 环 ,结束自己 。 数据的解析由解析线程来实现 。其流程如图 4所示 。解 析线程等待到监视线程激活的解析事件后 ,便从数据输入缓 冲区取得原始的串口数据 ,根据通讯格式将其中的信息提取 出来 ,并激活解析完成事件以通知主线程接收信息 ,然后判断 输入缓冲区是否为空 ,若是则关闭解析事件 ,等待下一次解析 事件的激活 ,若不是则从输入缓冲区中取出下一条命令进行 解析 ,直至缓冲区为空 。解析线程的结束和发送线程一样 ,由 用户主线程激活解析线程结束事件 ,解析线程会先将输入缓 冲区中的数据全部解析完 ,然后再响应线程结束事件 ,退出循 环 ,结束自己 。 三个辅助线程的主循环分别如下 。 1) 监视线程的主循环 W h ile (监视线程未被结束 ) { 使用函数 W aitCommEvent无限等待串口事件 ; If (是接收字符事件 ) { 锁定串口临界区变量 ComSync; 使用 ClearCommError获得串口数据长度 ; If (串口数据长度大于 0) { 使用 ReadFile读取串口数据到临时变量 ; 解锁串口临界区变量 ComSync; 锁定输入缓冲区临界区变量 InBufSync; 将临时变量复制到输入数据缓冲区中 ; 解锁输入缓冲区临界区变量 InBufSync; 激活解析事件 ; } } E l se 解锁串口临界区变量 ComSync; } 2) 发送线程的主循环 W h ile (发送线程结束标志为假 ) { 使用 W aitForMultip leObjects函数无限等待两个事件的发生 ; If (是发送事件 ) If (输出缓冲区不为空 ) { 锁定变量 OutBufSync; 将输出缓冲区中数据复制到临时变量中 ; 解锁 OutBufSync; 锁定串口临界区变量 ComSync; 使用 W riteFile函数把临时变量中数据发送至串口 ; 解锁串口临界区变量 ComSync; 激活发送完成事件 ; } E l se 关闭发送事件 ; E l se 设置监视线程结束标志为 TRUE; } 3) 解析线程的主循环 W h ile (解析线程结束标志为假 ) { 使用 W aitForMultip leObjects函数无限等待两个事件的发生 ; If (是解析事件 ) { If (输入缓冲区不为空 ) { 锁定串口临界区变量 ComSync; © 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 第 2期 李韶芳等 : W indow s CE系统中卫星通信的实现    50 7 使用 ReadFile函数把串口数据复制到临时变量中 ; 解锁串口临界区变量 ComSync; 锁定变量 InBufSync; 将临时变量中数据复制到输入缓冲区中 ; 解锁 InBufSync; 激活解析完成事件 ; } E lse 关闭解析事件 ; } E lse 设置解析线程结束标志为 TRUE; } 3  定位信息的提取 定位信 息 的 提 取 由 解 析 线 程 来 完 成 。下 面 以 GPS的 NEMA0183协议语句为例介绍定位信息的提取方法 。 GPS接收机只要处于工作状态就会不断地把接收并计算 出的 GPS导航定位信息通过串口传送到 W indow s CE 系统 中 。前面的代码只负责从串口接收数据并将其放置于缓存 , 在没有进一步处理之前缓存中是一长串字节流 ,这些信息在 没有经过分类提取之前是无法加以利用的 。因此 ,必须通过 程序将各个字段的信息从缓存字节流中提取出来 ,将其转化 成有实际意义的 ,可供高层决策使用的定位信息数据 。同其 他通讯协议类似 ,对 GPS进行信息提取必须首先明确其帧结 构 ,然后才能根据其结构完成对各定位信息的提取 。对于本 文所使用的 GARM IN GPS天线板 ,其发送到计算机的数据主 要由帧头 、帧尾和帧内数据组成 ,根据数据帧的不同 ,帧头也 不相同 ,主要有“$ GPGGA ”、“$ GPGSA ”、“$ GPGSV ”以及 “$ GPRMC”等 。这些帧头标识了后续帧内数据的组成结 构 ,各帧均以回车符和换行符作为帧尾标识一帧的结束 。对 于通常的情况 ,我们所关心的定位数据如经纬度 、速度 、时间 等均可以从 " $ GPRMC"帧中获取得到 ,该帧的结构及各字 段释义如下 [4 ] : $ GPRMC, < 1 > , < 2 > , < 3 > , < 4 > , < 5 > , < 6 > , < 7 > , < 8 > , < 9 > , < 10 > , < 11 > , < 12 > , < 13 > CR LF < 1 > UTC _ TIM E 24 小 时 制 的 标 准 时 间 , 格 式 为 “hhmm ss”; < 2 > 通信状态 , A 为有效位置 , V 为非有效接收警告 , 即当前天线视野上方的卫星个数少于 3颗 ; < 3 > 纬 度 值 , 格 式 为“dddmm. mmmm ”, ddd 表 示 度 (o) , mm. mmmm表示分 ( ′) ; < 4 > 标明南北半球 , N 为北半球 、S为南半球 ; < 5 > 经 度 值 , 格 式 为“dddmm. mmmm ”, ddd 表 示 度 (o) , mm. mmmm表示分 ( ′) ; < 6 > 标明东西半球 , E为东半球 、W 为西半球 ; < 7 > 地面上的速度 ,范围为 000. 0 ~999. 9,单位为海 里 /小时 ; < 8 > 真实航向 ,范围为 000. 0~359. 9,单位为度 ( °) ; < 9 > UTC_DATE标准日期 , 格式为 ddmmyy,年份应该 在 1970~2040之间 ; < 10 > 地磁 偏 移 量 , 范 围 为 000. 0 ~180. 0, 单 位 为 度 ( °) ; < 11 > 地磁偏转方向 ,为 E表示东 ,为 W 表示西 ; < 12 > 系统定位模式 ; < 13 > 校验和域 ,格式为“. . xx”, xx表示校验和 。 至于其他几种帧格式 ,除了特殊用途外 ,平时并不常用 , 虽然接收机也在源源不断地向主机发送各种数据帧 ,但在处 理时一般先通过对帧头的判断而只对“$ GPRMC”帧进行数 据的提取处理 。如果情况特殊 ,需要从其他帧获取数据 ,处理 方法与之也是完全类似的 。由于帧内各数据段由逗号分割 , 因此在处理缓存数据时一般是通过搜寻 ASC II码“$”来判 断是否是帧头 ,在对帧头的类别进行识别后再通过对所经历 逗号个数的计数来判断出当前正在处理的是哪一种定位导航 参数 ,并作出相应的处理 。下面就是对缓存 pBuf中的数据进 行解帧处理的主要代码 ,本文在此只提取地理坐标和时间 。 Fo r( i = 0; i < nDataLength; i + + ) { If ( pBuf[ i]是 " $"字符 ) { nComma ID = 0; If ( pBuf[ i]是 " , " ) / /找到帧头 / /逗号计数器 / /找到逗号 nComma ID + + ; E l se{ Switch (nComma ID ) { Case 1 : / /读取时间 依次把 pBuf中 i~i + 6的内容转换为字符串 ,并加入到 字符串 szTime中 ; i = i + 6; b reak; Case 3 : / /读取纬度 依次把 pBuf中 i~ i + 10 的内容转换为字符串 ,并加入 到字符串 szLatitude中 ; i = i + 10; b reak; Case 5 : / /读取经度 依次把 pBuf中 i~ i + 10 的内容转换为字符串 ,并加入 到字符串 szLongitude中 ; i = i + 10; b reak; D efau lt: b reak; } } } } 现在已将所需信息提取到内存 ,即时间 、日期以及经纬度 分别 保 存 在 字 符 串 型 变 量 szTime、szLatitude 和 szLongitude 中 。将提取到的数据再稍作变换即可交给用户主线程了 。 4  结语 通过本文的设计方法可以将 GPS定位导航信息从 GPS 接收机完整接收 ,通过对定位参数的提取可将其应用于其他 高层应用系统 (如移动导航系统 )中 。本文设计的多线程解 决方案经 eM bedded V isual C + + 3. 0编译通过 ,程序在型号为 HP hx2110 的 PDA 上 测 试 , 运 行 正 常 , 并 且 达 到 了 PDA 从 GPS接收机实时获取定位信息的要求 。 参考文献 : [1 ] 龚建伟 ,雄光明. V isual C + + / Turbo C串口通信编程实践 [M ]. 北京 :电子工业出版社 , 2004. [2 ] BOL ING D. W indows CE程序设计 [M ]. 北京博彦科技发展有限 公司 ,译. 北京 :北京大学出版社 , 1999. [3 ] BEVER IDGE J, W IENER R. Multithreading App lications in W in32 [M ]. 候捷 ,译. 武汉 :华中科技大学出版社 , 2002. [4 ] 谭思亮 , 邹超群 , 等. V isual C + +串口通信工程开发实例导航 [M ]. 第 1版. 北京 :人民邮电出版社 , 2003. © 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。