我是C#和编程的新手。
我正在尝试与通过USB连接到我的计算机的欧姆表进行通信。
我能够配置设备甚至接收数据。 但是我无法访问此数据。我可以将其打印到控制台上。 (受到Microsoft网站上代码的启发)
这是我配置端口的“通信”类的构造函数:
public SCPI_Commands()
{
_SerialPort.PortName = SetPortName(_SerialPort.PortName);
_SerialPort.BaudRate = 115200;
_SerialPort.Parity = Parity.None;
_SerialPort.DataBits = 8;
_SerialPort.StopBits = StopBits.One;
_SerialPort.Handshake = Handshake.None;
_SerialPort.ReadTimeout = 500;
_SerialPort.WriteTimeout = 500;
_SerialPort.Open();
_SerialPort.DataReceived += _serialPort_DataReceived;
}
这是我的函数,它向设备发送查询(常数Measurment_Value表示欧姆表可以理解的scpi命令):
public void get_measurement()
{
_SerialPort.WriteLine(Measurment_Value);
}
这是私有功能,用于检查设备是否正在发送数据并将其打印在控制台上(不确定此功能的工作原理):
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(_SerialPort.ReadLine());
}
不幸的是,我无法以字符串形式返回数据。我的目标是对接收到的数据进行一些计算。 有人有什么想法吗?
来自德国的问候。
卢克
答案 0 :(得分:5)
您可以从缓冲区读取临时字节数组,然后将其作为字符串获取,请参见以下示例。将其放入_serialPort_DataReceived
// this the read buffer
byte[] buff = new byte[9600];
int readByteCount = _serialPort.BaseStream.Read(buff, 0, _serialPort.BytesToRead);
// you can specify other encodings, or use default
string response = System.Text.Encoding.UTF8.GetString(buff);
旁注
如果要在使用SerialPort时保持理智,请始终以字节数组形式发送和接收。然后,使用Encoding
获得等效的字符串。