通过 C# 接收 RS485 命令

问题描述 投票:0回答:1

我一直在谷歌搜索,但没有找到任何代码来帮助我解决这个问题,也许我错过了什么? 我想接收 RS485 命令。 目前我只是收到垃圾。 这是我当前的代码,尽管我认为它没有帮助:

//C# CODE
byte[] arr = new byte[serialPort1.BytesToRead];
serialPort1.Read(arr, 0, serialPort1.BytesToRead);
String s = "";
foreach (byte b in arr)
{
     s += b.ToString() + " ";
}
/*String s = serialPort1.ReadByte().ToString();
while (serialPort1.BytesToRead > 0)
{
     s += " " + serialPort1.ReadByte().ToString();
     Thread.Sleep(10);
}*/
//String s = serialPort1.ReadLine().ToString();
richTextBox1.Invoke((MethodInvoker)delegate { richTextBox1.AppendText(s + "\n"); });

这只是一个测试,看看我是否可以收到数据。 有谁知道我如何通过串行端口接收数据并将它们显示在文本框中?

c# serial-port rs485
1个回答
0
投票

我不确定你的最终目标,但如果你只想 receive 数据并将它们显示在文本框中,那么标准 RS232 串行通信应该没有区别,这应该可以做到。本例中文本框的名称为 txtOutput.

开始:

  public Form1()
    {
        InitializeComponent();

        serialPort1.PortName=("COM1");
        serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
        serialPort1.Open();
    }

串口

  private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            try
            {
                SetText(serialPort1.ReadLine());

            }

            catch (Exception ex)
            {
                SetText(ex.ToString());
            }

        }

代表:

delegate void SetTextCallback(string text);

附加到文本框:

 private void SetText(string text)
        {
            if (this.txtOutput.InvokeRequired)
            {
             SetTextCallback d = new SetTextCallback(SetText);
             this.BeginInvoke(d, new object[] { text });
            }
            else
            {
                txtOutput.AppendText(text + "\r\n");
            }}

记得用波特率设置串行端口 1,并确保您已将串行端口添加到您的表单中。我已经使用标准串行连接测试了代码并且它正在运行。

© www.soinside.com 2019 - 2024. All rights reserved.