我使用vb2008和system.IO.Ports.SerialPort中的串口对象连接到我的设备上的com2串口,当我试图打开端口时,从gps.But读取数据时出现IO异常。我的第一个想法是,其他程序正在使用该端口,但请确保我尝试使用pocket-putty (COM2:)打开该端口,包括冒号和所有函数,并且gps数据正在流动。制造商在设备的文档中这样写道:
请注意,对于GPS虚拟串口使用,数据读取不依赖于ComState。CbInQue,读取串口数据需要指定长度。要测试Sygic,Igo8,Careland映射中的法线,请使用CommTest ReadPortThread中的引用。
我不明白他到底是什么意思。
我的代码在另一台Wince设备上运行,但使用wince 5.0和CF 2.0
我感谢你的每一个回答
发布于 2014-03-24 08:38:00
您的端口名称错误。Windows CE要求端口名称以冒号为后缀。异常消息可能会告诉您未找到请求的端口名称。
将代码更改为:
mySerialPort.PortName = "COM2:"发布于 2014-03-24 12:37:53
一些设备不提供对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注册表设置来查找原始端口名称。如果您的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
https://stackoverflow.com/questions/22584414
复制相似问题