注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工业自动化网络论坛 -- 工业自动化网络论坛(非专题) -- 协议标准

中国工控网搜索:

 自动化企业招聘

更多..

 登陆:密码:  注册  密码

搜索:

工业自动化网络论坛(非专题)分类  

全部论题

协议标准

硬件配置

发表人:emtronix 发表时间:2011/1/31 12:30:00  

 

 本栏论题: C#通过串口读取GPS模块定位数据的方法  [3407]

    有人云:'GPS的应用,仅受人们的想象力制约。'GPS问世以来,已充分显示了其在导航定位领域的霸主地位。许多领域也由于GPS的出现而产生革命性变化。目前,几乎全世界所有需要导航定位的用户,都被GPS的高精度、全天候、全球覆盖、方便灵活和优质价廉所吸引。在嵌入式产品的开发应用中,很多领域都涉及到GPS导航和定位的应用;英创的很多用户,就是在英创的嵌入式主板的基础上,外接GPS应用模块,来实现GPS在各种领域的合理运用。英创随之也向用户提供了相关GPS的方案和例程,供用户在实际应用中进行参考。本文介绍了英创C# GPS例程通过串口读取GPS模块定位数据的方法。
      GPS模块只要处于工作状态就会源源不断地把接收并计算出的GPS导航定位信息传送到连接到它的嵌入式主板(www.emtronix.com)串口之上,在没有进一步处理之前,传送的数据是一长串字节流信息。因此必须经过程序将其转化为有实际意义的;可供高层决策使用的定位信息数据。与其他通信协议类似,GPS模块都遵循NMEA-0183协议,GPS进行信息提取,必须明确其帧结构,然后才能根据其结构完成对各个定位信息的提取;其发送到串口的数据主要由帧头,帧尾和帧内数据组成。根据数据帧的不同,帧头也不相同,主要有“#GPGGA”,“$GPGSA”,“$GPRMC”等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾标识一帧的结束。对于通常的情况,大家所关心的定位数据如经纬度、速度、时间、航向等均以“$GPRMC”中获取得到。该帧的结构及各字段释义如下:
      例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
      字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
      字段1:UTC时间,hhmmss.sss格式
      字段2:状态,A=定位,V=未定位
      字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
      字段4:纬度N(北纬)或S(南纬)
      字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
      字段6:经度E(东经)或W(西经)
      字段7:速度,节,Knots
      字段8:方位角,度
      字段9:UTC日期,DDMMYY格式
      字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
      字段11:磁偏角方向,E=东W=西
      字段16:校验值
      对于用户的应用程序来讲,要读取GPS模块的定位数据,无非是实现两个简单的步骤:(1)读取串口数据;(2)将读取的数据解析出来。
      我们以预装了WinCE嵌入式操作系统的ARM9主板EM9161来连接GPS模块,用C#来实现读取GPS模块发过来的串口数据,最方便的方法是直接使用VS2005提供的SerialPort串口类,这个串口类提供一个DataRecieved事件响应机制,可以简单方便地读取串口数据,如:
      private SerialPort myserialPort = new SerialPort();//定义SerialPort串口类对象myserialPort
        ……
      myserialPort.DataReceived += new SerialDataReceivedEventHandler(myserialPort_DataReceived);
      //当串口有数据收到时,启动myserialPort_DataRecieved事件函数
      收到的串口数据是标准的string字符串,以“$GPRMC”开头的帧为例,收到的每一帧数据string都以回车换行符为结尾,可以以回车换行符为标志将数据string提取出来;而且这个数据帧的每个元素均以逗号分隔,可以通过逗号分隔将这个数据帧的每个元素提取到一个string数组里面进行进一步处理。如:
      string GPS_text = ''; //字符串GPS_text = 接收到的串口数据,缺省定义为空
      //串口有数据收到
      private void myserialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
      {
        GPS_text = GPS_text + myserialPort.ReadExisting(); //读取串口数据
        if (GPS_text.EndsWith('\n')) //如果GPS_text字符串最后一个字符是“回车”
        {
          Invoke(new EventHandler(update_data)); //通过Invoke方法执行update_data函数
        }
      }
      private void update_data(object sender, EventArgs e)
      {
        string[] GPS_info = GPS_text.Split(','); //按照逗号分隔把$GPRMC各种信号分割到字符串数组
          …… //处理GPS_info字符串数组,完成GPS数据显示、处理等功能
        GPS_text = ''; //置空GPS_text以便存储新的串口接收到的字符串
      }
      英创(www.emtronix.com)提供的例程运行界面如下:
   
   
   
   

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳