我正在使用vb 2008和来自system.IO.Ports.SerialPort的serialport对象连接到我设备上的com2串口以从gps读取数据。但是当我尝试打开端口窗口时会出现IO异常。我的第一个想法是,其他一些程序正在使用端口,但确实我试图打开口袋putty(COM2 :)包括冒号和所有功能和gps数据流动的端口。在设备的文档中,制造商写道:
请注意GPS虚拟串口使用,数据读取不依赖于ComState。 CbInQue,读取串行数据需要指定长度。要测试正常在Sygic,Igo8,Careland地图中,详细方法请在CommTest ReadPortThread中使用参考。
我不明白他究竟是什么意思。
我的代码在另一个Wince设备上运行,但使用wince 5.0和CF 2.0
我感谢每一个答案
答案 0 :(得分:1)
您的端口名称错误。 Windows CE要求端口名称以冒号为后缀。异常消息可能告诉您找不到请求的端口名称。
将代码更改为:
mySerialPort.PortName = "COM2:"
答案 1 :(得分:0)
某些设备不提供对GPS的SerialPort访问,而是提供流式访问。尝试将GPS端口打开为文件:
您可能需要此互操作:http://code.google.com/p/win-mobile-code/source/browse/trunk/gps8/Gps8/GPS_Sample8/ReadFile.cs?r=89
然后尝试打开文件:
#region CN50raw
bgThread2 myStreamReaderThread;
private void OpenStream()
{
//background thread already running?
if (myStreamReaderThread == null)
{
string szPort="";
szPort = GetGPSPort();
if (szPort != "")
{
AddRawText("Start reading stream at '" + szPort +"'");
//start a new thread
myStreamReaderThread = new bgThread2(szPort);
myStreamReaderThread.bgThread2Event += new bgThread2.bgThread2EventHandler(myStreamReaderThread_bgThread2Event);
}
else
AddRawText("No raw GPS port found");
}
}
private void OpenStream(string szPort)
{
//background thread already running?
if (myStreamReaderThread == null)
{
if (szPort != "")
{
AddRawText("Start reading stream at '" + szPort + "'");
//start a new thread
myStreamReaderThread = new bgThread2(szPort);
myStreamReaderThread.bgThread2Event += new bgThread2.bgThread2EventHandler(myStreamReaderThread_bgThread2Event);
}
else
AddRawText("No raw GPS port found");
}
}
void myStreamReaderThread_bgThread2Event(object sender, bgThread2.BgThreadEventArgs bte)
{
AddRawText(bte.sString);
}
private void CloseStream()
{
if (myStreamReaderThread != null)
{
myStreamReaderThread.Dispose();
Application.DoEvents();
myStreamReaderThread = null;
}
Application.DoEvents();
mnuRAWStart.Enabled = true;
mnuRAWStop.Enabled = false;
}
#endregion
上面的getGpsPort函数使用MS GPSID注册表设置来查找原始端口名称。如果您的devcice支持GPSID,则您不需要以上所有内容,并且可以使用GPSID API获取GPS的位置数据。
检查您设备的注册表:
private string GetGPSPort()
{
string szStr="";
if (Registry.GetStringValue(Registry.HKLM,
"System\\CurrentControlSet\\GPS Intermediate Driver\\Multiplexer",
"DriverInterface",
ref szStr)
== 0)
{
return szStr;
}
else
{
if (Registry.GetStringValue(Registry.HKLM,
"System\\CurrentControlSet\\GPS Intermediate Driver\\Drivers",
"CurrentDriver",
ref szStr) == 0)
{
string szPath = "System\\CurrentControlSet\\GPS Intermediate Driver\\Drivers\\" + szStr;
if (Registry.GetStringValue(Registry.HKLM, szPath, "CommPort", ref szStr) == 0)
{
return szStr;
}
}
}
return "";
}
以上代码行是我的Windows Mobile(Compact Framework)GpsSample应用程序的源代码
文章:http://www.hjgode.de/wp/2010/06/11/enhanced-gps-sample-update/
代码http://code.google.com/p/win-mobile-code/source/browse/trunk/gps8/Gps8/GPS_Sample8/?r=89