如何使用StreamReader读取和转换串口数据?

时间:2013-12-15 12:57:14

标签: c# serial-port streamreader

我尝试过6种不同的方法。当它出现时,我只是一个初学者。我需要能够获得此轴位置信息。下面是位置30000和0的示例。

这是我发送位置信息请求后进入串口的内容。 - 其他时候它可能是Velocity我试图阅读。这将是从100到33000的任何地方。

Here is what I am trying to read:

        Hex                       Ascii

FF 2F 30 60 33 30 30 30 30 03    ÿ/0`30000.    

有时这个:

FF 2F 30 60 30 03                ÿ/0`0.   

我已经向我的控制器发送了请求。 它已经发回了我的回复。 我可以通过我的终端程序看到它。但我的程序不起作用。 我试过使用.ReadByte和.ReadExisting,没有成功。

//BUTTON TO READ THE PORT AND ATTEMPT TO CONVERT DATA TO USABLE DATA.

private void Com10rcvbutton_Click(object sender, EventArgs e)
 {
   try
   {
       string line = serialPort1.ReadLine();
    StreamReader sr = new StreamReader(line);
    sr.BaseStream.Position = 0x04;
    byte[] buffer = new byte[0];
    sr.BaseStream.Read(buffer, 4, 8);
    foreach (byte myByte in buffer)

    textBox1.Text += myByte.ToString("X") + " ";
    sr.Dispose();


   }   
   catch(Exception ex)
   {
       MessageBox.Show(ex.Message);

   }
   finally
   {
       MessageBox.Show("Your Serial Test Code is Done");
   }
}

提前感谢您的帮助......

1 个答案:

答案 0 :(得分:1)

根据我的串口通信经验,我从未使用StreamReader。您应该能够使用事件驱动的方法。

如果设备在VCP(虚拟Com端口)中运行,那么就像使用System.IO.Ports.SerialPort类型一样简单。您需要了解有关该设备的一些基本信息,如果您不知道,可以从Windows管理(设备管理器)中收集大部分信息。在这样构建之后:

SerialPort port = new SerialPort(portNo, baudRate, parity, dataBits, stopBits);may or may not需要设置一些额外的标志,例如请求发送(RTS)和数据终端就绪(DTR)

port.RtsEnable = true;
port.DtrEnable = true;

然后,打开端口。

port.Open();

要收听,您可以将事件处理程序附加到port.DataReceived,然后使用port.Read(byte[] buffer, int offset, int count)

port.DataReceived += (sender, e) => 
{ 
    byte[] buffer = new byte[port.BytesToRead];
    port.Read(buffer,0,port.BytesToRead);
    // Do something with buffer
};

要发送,您可以使用port.Write(byte[] buffer, int offset, int count)