C# 从串行端口读取字节

C# 从串行端口读取字节,c#,serial-port,C#,Serial Port,我已经编写了从串行端口以字节数组的形式读取数据并在文本框中显示的代码。代码编译良好,但工作不正常: private void button2_Click(object sender, EventArgs e) { if (serialPort1.IsOpen == false) serialPort1.Open(); serialPort1.WriteLine(textBox1.Text); int bytes = serialPort1.BytesToR

我已经编写了从串行端口以字节数组的形式读取数据并在文本框中显示的代码。代码编译良好,但工作不正常:

private void button2_Click(object sender, EventArgs e)
{
    if (serialPort1.IsOpen == false)
        serialPort1.Open();
    serialPort1.WriteLine(textBox1.Text);
    int bytes = serialPort1.BytesToRead;
    byte[] byte_buffer = new byte[bytes];
    serialPort1.Read(byte_buffer, 0, bytes);
    //textBox2.Text = " ";
    for (int t = 0; t < bytes; t++)
    {
        textBox2.Text += (byte_buffer[t]).ToString();
    }
}
private void按钮2\u单击(对象发送者,事件参数e)
{
if(serialPort1.IsOpen==false)
serialPort1.Open();
serialPort1.WriteLine(textBox1.Text);
int bytes=serialPort1.BytesToRead;
byte[]byte_buffer=新字节[字节];
serialPort1.Read(字节\缓冲区,0,字节);
//textBox2.Text=“”;
for(int t=0;t
你走错了路

单击按钮将打开serialPort1;当然然后它将尝试读取缓冲区。但是你只是用同样的方法打开了端口

请看本教程:


它将带您了解C#中的所有串行通信。您当然不希望仅在按钮按下事件处理程序上打开和读取端口。

使用按钮2事件将数据发送到端口。将所需的代码(用于发送数据)放入SynchronizationContext(使用方法)

接下来,注册SerialPort类的DataReceived事件并在那里进行读取(再次封装到同一SynchronizationContext对象中,否则串行端口读取/写入将超时)

干杯

  serialPort1.WriteLine(textBox1.Text);
  int bytes = serialPort1.BytesToRead;
字节值将始终为零。除非您调试此代码并单步执行以降低其速度。传输使用WriteLine()编写的字节需要时间。而且设备处理它们需要时间。而且需要时间才能收到响应。这加起来有很多毫秒


您需要通过循环来解决这个问题,重复调用Read()方法,直到得到完整的响应。如果您正确设置了SerialPort.NewLine属性,那么很可能仅仅调用ReadLine()就足以解决您的问题。

调试完成了吗?textBox1.Text中是否有值?还有,您是如何创建串行端口的?SerialPort端口=新的SerialPort(“COM1”,9600,奇偶校验。无,8,停止位。1);等等…“代码不能正常工作”-解释原因,显示输入和输出以及您期望发生的情况。是的。我使用SerialPort port=new SerialPort创建了串行端口(“COM1”,9600,奇偶校验。无,8,停止位。1);有时在textbox1中没有值,有时错误的值“代码工作不正常”意味着:例如,当我在键盘上按“s”时,我在textbox1中看不到它的值。