c# - 从串口读取数据

标签 c# serial-port

我是 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)函数,它检查设备是否正在发送数据并将其打印在控制台上(不确定这个函数是如何工作的):

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 获取等效字符串。

关于c# - 从串口读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52441385/

相关文章:

python - 面对视频流套接字编程的问题

serial-port - 串行端口在 Surface Book 上无法工作

java - JTextField 未从串行端口更新

python - PySerial 与变量的通信

c# - 怎样做才能只得到一个列表?

c# - 旋转面魔方C#

c# - 有没有一种方法可以指定一个类型,除非使用自定义转换器,否则反序列化必须失败?

c# - 请求 header 未转发到 IdentityServer4

c# - 如何处理循环引用 - 或者 - 中断在公开 Entity Framework 数据模型的 WCF 服务中返回的第一级子级下的引用?

c++ - 使用 QT 的周期性代码