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