Tag: 串口

C#SerialPort类用法

这个问题的灵感来自于这里的问题和答案: 使用C#的SerialPort类将命令传递到Comm端口 问题本身回答了我遇到的一些问题,但为我提出了一些其他问题。 演示中的答案如下: var serialPort = new SerialPort(“COM1”, 9600); serialPort.Write(“UUT_SEND \”REMS\\n\” \n”); 用于基本串口使用。 另请注意: 要获得任何响应,您必须挂钩DataReceived事件。 我的问题如下。 我是否必须使用DataReceived event还是可以使用serialPort.ReadLine ? serialPort.ReadLine的确切function是什么? 我还需要在我的应用程序中使用serialPort.Open()和serialPort.Close()吗?

寻找第三方SerialPort解决方案

我正在寻找第三方串口解决方案(商业或开源同样受欢迎)。 .NET Serial Port类中存在一些已知的错误,它们给我提供了各种线程错误。 有没有知道任何适用于C#WPF应用程序的好的第三方解决方案? [编辑]我遇到过类似的问题

如何设置序列特殊字符?

在我不断寻求与某些传统设备接口的过程中,我发现供应商提供的软件将特殊字符设置为: 00 00 00 00 11 13 但.NET的SerialPort类将它们设置为: 1A 00 00 1A 11 13 我想我有两个问题: 这些字节意味着什么? 如何告诉SerialPort使用一组特定的特殊字符? 后者是我真正关心的,但我怀疑前者是有用的知道。 更新:以下不起作用: byte[] specialchars = { 0x00, 0x00, 0x00, 0x00, 0x11, 0x13 }; this.port.NewLine = System.Text.Encoding.ASCII.GetString(specialchars); 更新2:根据要求,这里是供应商提供的应用程序的 Portmon日志(已过滤以删除数千个IOCTL_SERIAL_GET_COMMSTATUS条目)以及我尝试匹配第一个交换 。

C#.Net Serial DataReceived对于高速率数据,事件响应太慢

我已经在VS2008 express中使用基于表单的程序设置了一个SerialDataReceivedEventHandler。 我的串口设置如下: 115200,8N1 Dtr和Rts启用 ReceivedBytesThreshold = 1 我有一个设备,我通过BlueTooth,USB转串口连接。 超级终端以任何数据速率接收数据。 数据以22字节长的数据包定期发送。 该设备具有可调节的数据发送速率。 在低数据速率,10-20Hz,下面的代码很好,没有问题。 但是,当我将数据速率提高到25Hz以上时,会在一次呼叫时开始接收多个数据包。 我的意思是每个传入的数据包都应该有一个事件触发器。 在更高的输出速率下,我在调用事件时立即测试了缓冲区大小(BytesToRead命令),然后缓冲区中有多个数据包。 我认为事件发生的速度很慢,当它到达代码时,更多的数据包已经打到了缓冲区。 我做的一个测试是看每秒触发事件的次数。 在10Hz,我得到10个事件触发器,真棒。 在100Hz,我得到类似40个事件触发器,不好。 我的数据速率目标是100HZ是可接受的,200Hz首选,300Hz最佳。 这应该工作,因为即使在300Hz,这只是52800bps,不到设置的115200波特率的一半。 我在看什么? public Form1() { InitializeComponent(); serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(Display_Results)); } private void Display_Results(object s, EventArgs e) { serialPort1.Read(IMU, 0, serial_Port1.BytesToRead); }

使用Android-emulator通过COM从外部应用程序测试AT命令

我需要将AT命令发送到带有C#的usb GSM调制解调器。 问题是我没有GSM调制解调器或GSM设备尚未开发然后我正在寻找一个模拟器。 我发现的唯一模拟GSM调制解调器是随Android SDK一起提供的。 我现在的问题是通过COM端口发送AT命令到Android模拟GSM调制解调器,就像我需要在我的实际应用程序中做的那样。 有一些方法可以到达Android模拟GSM调制解调器的COM(虚拟Usb-Com)端口,并发送AT命令连接到互联网? 有人在这里讲述,但它无法帮助我。

在多个表单上使用相同的串行端口实例

我是C#新手,我正在尝试使用一个通用的串行端口,用于3种不同的forms: Form2, Form3, Form4 这不需要Form1.cs ,因为只需要启动其他表单的程序。 基本上,所有3个表单必须同时从同一个串行端口接收数据。 我面临的问题是只有一个表单可以从串口接收数据,但其他两个表单不能。 我发现了一个与此类似的问题: 在两种不同的表单上使用相同的串口数据接收事件 这个问题跟我的相似吗? 如果是,我可以知道在哪里将示例代码放在我的代码中的上述链接中吗? 有人可以帮忙吗? 提前致谢! Form1中: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); Form3 f3 = new Form3(); f3.Show(); Form4 f4 = new Form4(); f4.Show(); } private void […]

找到Arduino所连接的端口

我知道如何列出可用的串行端口,但每次连接Arduino时我能找到合适的COM端口吗? 应该像MessageBox.Show(COMport);一样打印COM端口MessageBox.Show(COMport); 我想在Visual C#应用程序中读/写Arduino数据。 [ 这对我不起作用]

在c#中使用线程读取COM端口

我想要一些关于线程的建议,因为我是新手。 我在线阅读了几篇关于线程的文章。 我在读com端口数据。 我想使用线程,以便它每5秒读取一次数据并更新列表框中的数据。 目前,正在读取所有数据。 我不确定从哪里开始。 我应该从哪里开始我的线程代码? 我正在使用Windows Form,c#VS2008。 这是我从com端口读取数据的代码: void datareceived(object sender, SerialDataReceivedEventArgs e) { myDelegate d = new myDelegate(update); listBox1.Invoke(d, new object[] { }); } public void update() { while (serialPortN.BytesToRead > 0) bBuffer.Add((byte)serialPortN.ReadByte()); ProcessBuffer(bBuffer); } private void ProcessBuffer(List bBuffer) { int numberOfBytesToRead = 125; if (bBuffer.Count >= numberOfBytesToRead) { listBox1.Items.Add(“SP: ” + […]

无法尝试从串行端口接收数据

嗨我有一个端口连接到我的电脑,它不断发送数据,我的目标是从它接收数据并打印出来。 问题是我真的不知道它发送的是什么类型的数据,我该怎么读它… private void Button_Receive_Data_Click(object sender, EventArgs e) { GroupBox_Serial_Transmit.Enabled = false; #region string Port_Name = ComboBox_Available_SerialPorts.SelectedItem.ToString(); int Baud_Rate = Convert.ToInt32(ComboBox_Standard_Baundrates.SelectedItem); COMport = new SerialPort(Port_Name, Baud_Rate); #endregion COMport.ReadTimeout = 3500; //3.5 sekundes try { COMport.Open(); if (COMport.IsOpen == true) { TextBox_System_Log.Text = Port_Name + Environment.NewLine + Baud_Rate; ReceivedData = COMport.ReadExisting(); this.Invoke(new EventHandler(ShowData)); GroupBox_Serial_Transmit.Enabled = true; […]

使用C#从Mettler Toledo秤设备读取数据

我正在使用C#代码从Mettler Toledo秤设备读取数据。 这是我的完整代码: private SerialPort port = new SerialPort(“COM1”, 4800, Parity.None, 8, StopBits.One); public Inwardsfrm() { InitializeComponent(); port.DtrEnable = true; port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); } private void Inwardsfrm_Load(object sender, EventArgs e) { if (port.IsOpen == false) try { port.Open(); } catch (Exception oex) { MessageBox.Show(oex.ToString()); } } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { this.Invoke(new […]