首页 文章

通过C#接收RS485命令

提问于
浏览
0

我一直在谷歌搜索,没有找到任何代码来帮助我,也许我错过了什么?我想收到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"); });

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

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,并确保已将串行端口添加到表单中 . 我已经使用标准串行连接测试了代码并且它正在运行 .

相关问题