我尝试过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");
}
}
提前感谢您的帮助......
答案 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)