C# 如何使用StreamReader读取和转换serialport数据?

C# 如何使用StreamReader读取和转换serialport数据?,c#,serial-port,streamreader,C#,Serial Port,Streamreader,我尝试了6种不同的方法。说到这一点,我实在是太初学了。我需要能够获得这个轴位置信息。下面是位置30000和0的示例 这是在我发送位置信息请求后进入串行端口的内容。-其他时候,我可能是在尝试阅读速度。从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

我尝试了6种不同的方法。说到这一点,我实在是太初学了。我需要能够获得这个轴位置信息。下面是位置30000和0的示例

这是在我发送位置信息请求后进入串行端口的内容。-其他时候,我可能是在尝试阅读速度。从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");
   }
}

提前谢谢你的帮助

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

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

SerialPort端口=新的串行端口(端口号、波特率、奇偶校验、数据位、停止位)
您需要设置一些附加标志,例如发送请求(RTS)和数据终端就绪(DTR)

然后,打开端口

port.Open()

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


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

它将不工作,因为SerialPort.ReadLine()在收到SerialPort.NewLine字符串之前不会返回。你收到的不是真正的文本,而是二进制数据。您可以使用
serialPort1.NewLine=newstring((char)3,1)蹒跚而行和ReadLine()将起作用。好的,我将此代码放入程序中。我现在正在取回数据。但是到目前为止所有的数据都是十六进制的。非常感谢…我的字节是
var dataItems=new byte[]{0x68、0x01、0x61、0x01、0x06、0x1B、0x4A、0x60、0x0B、0x86、0xE8、0x46、0x04、0x68、0x04、0x02、0x04、0x22、0x04、0x04、0x04、0x20、0x04、0x40、0x02、0x06、0x02、0x02、0x26、0x02、0x02、0x46、0x76、0xDB、0x16}然后我在做端口写入(dataItems,0,dataItems.Length)然后按照您的代码,我尝试读取缓冲区,但无法检查接收到的字节
port.RtsEnable = true;
port.DtrEnable = true;
port.DataReceived += (sender, e) => 
{ 
    byte[] buffer = new byte[port.BytesToRead];
    port.Read(buffer,0,port.BytesToRead);
    // Do something with buffer
};