c# - 从串口读取数据
问题描述
我是 C# 和一般编程的新手。
我正在尝试与通过 USB 连接到我的计算机的欧姆表进行通信。
我能够配置设备甚至接收数据。但我无法访问这些数据。我可以将它打印到控制台上。(受微软网站上的代码启发)
这是我配置端口的“通信”类的构造函数:
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());
}
不幸的是,我无法将数据作为字符串返回。我的目标是对收到的数据进行一些计算。有人有什么想法吗?
来自德国的问候。
卢克
解决方案
您可以从缓冲区读取临时字节数组,然后将其作为字符串获取,请参见下面的示例。把这个放进去_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
.
推荐阅读
- javascript - 黑客是否可以从 iframe 外部检查保存到“window”的 javascript 对象?
- repast-simphony - Repast:如何根据多个条件获取特定的代理集?
- rest - 我可以使用 REST 进行除 CRUD 之外的任何其他操作,例如 BI 功能吗?
- javascript - Android youtube 播放器无法正常工作
- ios - 在自定义 UITableViewCell 中有多个按钮
- java - 将字符串值解析为 Int 数组
- java - 在 linux 中为我的站点使用证书时收到不安全的警告
- c++ - 有没有办法获取传递给函数的数组的大小?
- azure - Azure Ratecard Api 获取 VM 价格
- android - 如何在 Kotlin MVVM 数据绑定中解析 Json