当前位置: 代码迷 >> Windows Mobile >> GPS开发,该如何解决
  详细解决方案

GPS开发,该如何解决

热度:170   发布时间:2016-04-25 08:05:10.0
GPS开发
我开发了一个通过串口(System.IO.Ports.SerialPort)获取GPS信息的程序在wm5.0/wm6.0都运行的正常,但今天拿了一个wm6.1的PDA就用不了(部署和直接复制过去都不行),在open的时候(COM3 4800)一直抛出IOException异常。

我用Gpsviewer、beelineGPS扫描,COM3 4800是可以用的。

这是部分代码
初始化是
  this.serialPort1.BaudRate = 4800;
  this.serialPort1.StopBits = System.IO.Ports.StopBits.One;
  this.serialPort1.DataBits = 8;
  this.serialPort1.PortName = "COM3";
  //其它属性为默认值


点“开始读取时”
  timer1.Enabled = false;
  if (serialPort1.IsOpen)
  serialPort1.Close();

  //if (!serialPort1.IsOpen) 
  // serialPort1.Open(); //在wm6.1出错位置;

  timer1.Enabled = true;


在"timer1_Tick"
  this.Text = System.DateTime.Now.ToString("HH:mm:ss");

  ////我将下面两句放在打开串口方法中,同样会出错
  if (!serialPort1.IsOpen)
  serialPort1.Open(); //在wm6.1出错位置;
   
  if (_isAddText) //_isAddText 是否把文本添加到textbox1
  textBox1.Text += serialPort1.ReadExisting();

(请不要让我用WM上面自带例子的方式去访问)

  还有一个问题是,我之前做的都是直接访问GPS的硬件端口,我用这种方式去访问GPS的程序端口时一直都访问不到数据,不知道为什么。

先谢谢各位了


------解决方案--------------------
GPS 串口打开出错吧,检查一下这个 COM 口
------解决方案--------------------
最近WM版块很多问GPS开发的,建议LZ搜索一下其他的帖子。
------解决方案--------------------
是不是给另外一个程序占用了端口了,你查一下。
------解决方案--------------------
serialPort1.Open(); //在wm6.1出错位置;

确认你其他的程序在此时没有占用这个端口,如你的gpsview,因为你直接串口编程,它是独占的。

另外,迷惑你明知wm6封装了gps获取的方法,你却不用。为什么?
------解决方案--------------------
先查查com口对不对,com口是可以从注册表查找的,可以从下面的注册表查找(最好两个位置都查):
RegistryGetString(HKEY_LOCAL_MACHINE,
L"System\\CurrentControlSet\\GPS Intermediate Driver\\Multiplexer",
L"DriverInterface",
pszInBuffer,
MAX_PATH);
RegistryGetString(HKEY_LOCAL_MACHINE,
L"System\\CurrentControlSet\\GPS Intermediate Driver\\Drivers\\Control Panel Configured Device",
L"CommPort", 
pszInBuffer,
MAX_PATH);
------解决方案--------------------
http://blog.csdn.net/dongdingbaihe/archive/2010/03/25/5416129.aspx
看看这个,楼主可以不通过串口进行测试程序,可以通过PC机装有Windows Mobile SDK6来测试,希望对你有用
------解决方案--------------------
先查查com是否设置正确;

好像看到你的程序没有设置com的流控之类的属性啊~~
例如RtsEnable这些属性。


------解决方案--------------------
if (serialPort1.IsOpen)
serialPort1.Close();

这样开串口应该说明不了问题,照楼主描述的情况,串口本身的通讯异常是可以排除的,那剩下应该就是初始化错误,要么被占用了。可怜的串口问题,一直很困扰。

关注
  相关解决方案