Tag: serial port

在C#中查找有关通过USB连接的所有串行设备的信息

我的项目需要在连接到USB时检测特定设备。 我可以识别此设备的唯一方法是通过其描述/设备名称,而不是com端口。 我发现执行正确的function是使用WMI查询并检查name属性: ManagementObjectSearcher searcher = new ManagementObjectSearcher(“Select * from WIN32_SerialPort”); foreach (ManagementObject port in searcher.Get()) { deviceName = (string)foundPort.GetPropertyValue(“Name”); … 我最初通过连接手机对此进行了测试,查询按预期返回了COM3上找到的手机。 然后,我连接了另一个设备(一个USB到串行转换器,它更像我需要这个项目的设备),查询根本找不到它。 它只能找到手机。 但是,此设备显示在设备管理器中的端口COM4上。 为了更多地讨论我,SerialPort类找到了两个设备,但它没有提供识别设备所需的信息: string[] tempPorts = SerialPort.GetPortNames(); 我在SO和其他地方阅读过很multithreading,但找不到满意的解决方案。 有人可以澄清为什么WIN32_SerialPort查询找不到我的其他设备? 是不是因为某种原因被认为是win32串口? 并且,有人可以指出我解决这个问题的方向吗?

在C#中,我如何收听已经打开的COM(串行)端口?

我正在使用一个与我的COMM端口对话的程序,但是我已经创建了另一个程序,我想“嗅探”通信端口消息,并对这些消息执行自己的操作。 这在.NET c#中是否可行?

串行端口轮询和数据处理

我试图从传感器到微控制器的几个串口读取。 每个串行端口将接收超过2000个测量值(每个测量值为7个字节,全部为hex)。 他们同时开枪。 现在我正在从4个串口进行轮询。 此外,我将每个测量值转换为String并将其附加到Stringbuilder。 当我完成接收数据后,它们将被输入到文件中。 问题是CPU消耗非常高,从80%到100%不等。 我浏览了一些文章并将Thread.Sleep(100)放在最后。 它可以在没有数据时减少CPU时间。 当BytesToRead小于100时,我还在每次轮询结束时放置Thread.Sleep。它只在某种程度上有所帮助。 有人可以提出一个解决方案来从串口轮询并处理我得到的数据吗? 也许每次我得到的东西附加都会导致问题? //I use separate threads for all sensors private void SensorThread(SerialPort mySerialPort, int bytesPerMeasurement, TextBox textBox, StringBuilder data) { textBox.BeginInvoke(new MethodInvoker(delegate() { textBox.Text = “”; })); int bytesRead; int t; Byte[] dataIn; while (mySerialPort.IsOpen) { try { if (mySerialPort.BytesToRead != 0) { //trying to […]

如何在C#中使用SerialPort端口对象的dataReceived事件?

我正在尝试创建一个小应用程序来收集从连接到COM10的外部传感器接收的数据。 我已成功创建了一个小型C#控制台对象和应用程序,它使用for循环打开端口并将数据流传输到文件一段固定的时间。 我想转换此应用程序以使用dataReceived事件来代替流。 阅读前5个SerialPort提示后 ,我似乎仍然无法工作,也不知道我错过了什么。 我重写了控制台应用程序,以便所有代码都在Main中并粘贴在下面。 有人可以帮助启发我,为什么事件处理程序port_OnReceiveDatazz没有被调用,即使我知道硬件有数据被发送到端口? 谢谢 阿齐姆 PS:感谢@Gabe , @ Jason Down和@abatishchev的所有建议。 我很难过,似乎无法让事件处理程序工作。 也许它与设备有关。 我只能在一个线程中读取端口并将数据直接传输到文件中。 码 namespace serialPortCollection { class Program { static void Main(string[] args) { const int bufSize = 2048; Byte[] buf = new Byte[bufSize]; //To store the received data. SerialPort sp = new SerialPort(“COM10”, 115200); sp.DataReceived += port_OnReceiveDatazz; // Add […]