Tag: serial port

如何在C#中向串行设备发送字节?

我有一个使用串行(通过USB适配器)与我的PC连接的设备。 我很难在C#中很好地发挥它。 我知道它工作正常,因为供应商提供的软件表现得如预期的那样。 我也知道我能够使用我的代码接收数据,这要归功于重复发送“OK”的测试模式。 这是我的代码: private SerialPort port; public SerialConnection() { this.port = new SerialPort(“COM3”, 38400, Parity.None, 8, StopBits.One); this.port.WriteTimeout = 2000; port.ReadTimeout = 2000; this.port.Open(); this.port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); } public void SendCommand(byte[] command) { this.port.Write(command,0,command.Length); string chars = “”; foreach (byte charbyte in command) chars += (char)charbyte; Console.WriteLine(” -> ” + chars); } […]

SerialPort UnauthorizedAccessException

有时我的某些集成测试会因上述消息而失败。 我正在使用下面的代码来准备端口。 for(int i = 0; i < 5; i++) { try { port.Open(); if (port.IsOpen) break; } catch (Exception e) { try { port.Close(); } catch (Exception) {} Thread.Sleep(300); } } 我的假设是因为它不能阻止端口的当前线程(因为它会尝试关闭它),它必须是另一个没有正确清理而死的线程或进程(其他测试之一 – 没有其他访问这个港口)。 有没有办法重置SerialPort的状态,以便新的线程/进程可以再次访问它? 谢谢, 理查德

清除C#中的串口接收缓冲区

只想知道我们如何在C#中清除串口的接收缓冲区。 好像接收缓冲区中的数据只是不断积累。 例如,输入数据流是:[数据A],[数据B],[数据C]。 我想要的数据只是[数据C]。 我想这样做,当我收到[数据A]和[数据B]时,我会做一个明确的缓冲区。 只有收到[数据C]时,我才会继续处理。 这是用C#做的吗?

SerialPort类问题

我试图让串口接收正确的消息时遇到很多问题。 它不断截断消息。 这是我的代码,我将尝试在代码之后详细说明。 public SerialComms(SerialPort sp) { this.sp = sp; this.sp.Open(); this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); do { Console.WriteLine(“port open waiting message”); Console.ReadKey(); } while(!_terminate); this.sp.Close(); } void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { string dataReceived; StringComparer strComp = StringComparer.OrdinalIgnoreCase; SerialPort sp = (SerialPort)sender; int i = sp.BytesToRead; byte[] _byte = new byte[i]; char[] _char = new […]

如何以编程方式在C#中查找所有可用的波特率(serialPort类)

有没有办法找出特定系统通过C#支持的所有可用波特率? 这可以通过设备管理器 – >端口获得,但我想以编程方式列出这些。 谢谢。

如何在c#中找到蓝牙设备的COM端口号?

我公司开发了一种使用虚拟COM端口通过蓝牙与PC通信的设备。 现在我们需要用户首先将设备与PC(MS Windows操作系统)配对,然后手动输入它的com端口号到我们的应用程序中(我敢打赌,95%的用户会因此而失败)。 所以我希望我的应用程序向用户提供配对蓝牙设备列表(他们的“友好名称”列表),之后我想自动找出被选中设备的COM端口号。 我怎么能在c#中做到这一点? (赞赏独立于安装的蓝牙堆栈的解决方案)。 提前致谢。

从串口解析/格式化数据 – C#

我开发了一个监听串口的小程序。 我的程序正在接收数据。 问题是,它没有以所需的格式显示它(一个字符串)。 我的程序接收的数据有两个字符串,例如: ID:34242 State:NY 邮编:12345 StreetType:Ave 它由块显示,一些数据传递到下一行: ID:34242 State:N Y Zip:12 345 Street Type:Ave 我使用了SerialDataReceive事件处理程序来接收我的数据,它看起来像这样: private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort spL = (SerialPort) sender; int bufSize = 20; Byte[] dataBuffer = new Byte[bufSize]; Console.WriteLine(“Data Received at”+DateTime.Now); Console.WriteLine(spL.Read(dataBuffer, 0, bufSize)); string s = System.Text.ASCIIEncoding.ASCII.GetString(dataBuffer); Console.WriteLine(s); } 如您所见,我将字节检索到缓冲区,创建一个字节数组来保存数据,并使用ASCII编码将字节转换为字符串。 我尝试使用ReadLine()但我的数据没有使用该函数显示事件。 有没有人知道任何其他方法来解析和格式化数据到一个字符串?

如何找到可用的COM端口?

如何在我的电脑中找到可用的COM端口? 我正在使用框架v1.1。 是否可以找到所有COM端口? 如果可能的话,帮我解决问题。

如何检测来自电话线的来电显示?

是否可以直接从调制解调器或电话线读取字节而不会丢失任何信息? 如果在振铃后使用SerialPort ,则在ReceiveData事件上没有任何ReceiveData 。 我想直接从该行读取来电显示信息。 我的调制解调器不支持来电显示。

使用.NET框架读取串行端口的正确方法是什么?

我在这里阅读了很多关于如何使用.NET SerialPort类从串口读取数据的问题,但没有一种推荐的方法对我来说已经certificate是完全有效的。 这是我现在使用的代码: SerialPort port = new SerialPort(“COM1”); port.DataReceived += new SerialDataReceivedEventHandler(MyDataReceivedHandler); 和事件处理程序: void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { int count = port.BytesToRead; byte[] ByteArray = new byte[count]; port.Read(ByteArray, 0, count); } 但有时候我仍然缺少一些数据。 我尝试过在事件处理程序中读取数据的不同方法,但没有运气。 由于.NET 4.5为执行某些异步任务带来了新的可能性,例如可能在SerialPort流上使用的ReadAsync方法,我很想知道处理这些情况的推荐方法是什么。