当前位置: 首页 > 编程语言 > C#

C#SerialCommunicationwithu-bloxgpsSharing

时间:2023-04-10 16:26:22 C#

C#SerialCommunicationwithu-bloxgps我有带USB连接的GPS和来自u-blox.com的驱动程序。当您插入USB时,驱动程序会安装一个弹出的虚拟COM端口。使用超级终端,我可以观察来自GPS的数据流。然后我想要我的程序中的数据,不是那么容易......我已经实现了一些使用serialPort类从GPS读取的方法,但没有成功。我以前用C#编写过几个串行设备读取器和写入器,但这个让我犹豫了。例如,simpleSerial中的简单代码不会给你任何东西,除非USB被拔出并重新插入。尝试在matlab中读取它,工作正常,但由于我的程序的其余部分需要GPS数据在c#中,这并不能解决问题。serialPort类中是否有一些我可以规避的高级C#东西?或者读取USB串行端口是否存在任何已知问题,我认为它就像我的GPS?我已经成功地将.Net2中的SerialPort类与虚拟端口上的gps结合使用。看来您的虚拟端口驱动程序略有关闭。如果找不到更新的驱动,建议调用WinAPI函数读取串口。例如,看看这段代码:http://www.codeproject.com/KB/system/SerialPortComm.aspx如果您可以使用超级终端与GPS通信,原则上没有理由不能在C#中使用。你确定你已经正确配置了串口,特别是波特率、数据位、停止位、奇偶校验和流量控制设置吗?您可以使用SysInternalsPortMon工具查看低级I/O并比较HyperTerminal和C#程序各自如何配置串行端口。也许这会提供一些有用的信息。从u-blox支持处获得此信息。以下十六进制命令将强制重置GPS模块上的看门狗。B56206040400000000000E64这是GPS中ARM7uP的低级命令它适用于所有u-bloxGPS接收器。byte[]data=newbyte[]{0xB5,0x62,0x06,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x0E,0x64};sp.Write(data,0,data.Length);这对我很有用。不确定这是否与您遇到的问题相同。我注意到如果RX_FLAG与SetCommMaskAPI一起使用,GetOverlappedResult似乎不会在第一个WaitCommEvent之后返回。似乎API正在等待某些事情发生,直到重置逗号(至少这是我观察到的)。但是,如果你去读取端口,仍然会收到一些数据,之后设备就不再响应了。在这种情况下,您需要拔下并重新插入设备以使其再次响应。但是,如果使用RX_CHAR,则GetOverLappedResult返回正确的状态并且设备行为正常。希望这些信息有所帮助问题是USB串行端口驱动程序或Microsoft的SerialPort类实现中的错误。我在使用Prolific制造的芯片(以及Prolific的驱动程序)的USB转串口适配器时遇到了完全相同的问题。我无法完全缩小问题的范围,但现在.NETFramework源代码可用,我将尝试进入SerialPort并查看问题所在。解决方案是使用不同的串行访问类。在.Net2.0之前,我编写了一个SerialStream类,出于某种原因,它似乎可以很好地与这些相同的USB到串行适配器一起工作,而SerialPort类则不能。您可以访问我的课程http://www.6bit.com/download/SerialStream.zip多年来,我向一些GPS程序员提供了相同的代码,他们也取得了成功。我使用以下代码通过USB与Arduino通信,它从Arduino发送和接收一个字节。这很简单,不会与GPS对话,但希望它能以某种方式提供帮助!publicstaticbyteReadByte(){bytebyteRead=newbyte();SerialPortport=newSerialPort("COM3",9600,Parity.None,8,StopBits.One);端口.Open();intbyteValue=port.ReadByte();端口.关闭();byteRead=Convert.ToByte(byteValue);返回字节读取;}publicstaticvoidSendByte(bytepacket){SerialPortport=newSerialPort("COM3",9600,Parity.None,8,StopBits.One);端口.Open();byte[]writeByte=newbyte[1];writeByte[0]=数据包;端口.Write(writeByte,0,1);端口.关闭();U-BloxGPS有同样的问题,但通过启用DTR和RTS属性设法解决了它。现在我可以很好地阅读NMEA句子了。我发现的一个问题是我仍然需要不时地移除GPS并将其重新插入USB端口。希望能帮到你。我在编写的应用程序中遇到了类似的问题,结果发现问题是我正在尝试使用SerialPort.WriteLine,当我真的需要发送n时,它发送了一个rn来结束该行。当我切换到SerialPort.Write并在末尾添加n时,一切都像HyperTerminal一样工作。尝试使用握手/流量控制。它们在使用USB串行适配器时也很有用。以上就是C#学习教程:C#串口通信与u-bloxgps的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处: