C#WPF串口通信转换?

时间:2013-11-06 17:41:28

标签: c# string serial-port

你好,我是一个完整的新手,我问的是愚蠢的问题,所以感谢你的时间......

我正在尝试将一个字符串命令发送到我拥有的设备 - 我通过USB控制的“机器人” - >串行端口。这个字符串应该是这样的:01013100010010它应该告诉某个步骤电机做出特定的步骤。每次我尝试发送那样的字符串:01013100010010它什么都不做,但如果我打开超级终端并发送它就像它执行命令一样。

我需要将其转换为特殊内容还是其他问题?

另一件事是如何在按下按钮时分配要发送的字符串“:01013100010010”,以便有人可以向我显示如何执行此操作的示例代码,即在按钮单击时发送数据我将不胜感激!

以下是我现在的代码,它是一个简单的用户界面:

    private void button2_Click(object sender, EventArgs e)
    {
        if (!serialPort1.IsOpen)
        {
            serialPort1.PortName = "COM2";
            serialPort1.BaudRate = 9600;
            serialPort1.Parity = System.IO.Ports.Parity.None;
            serialPort1.DataBits = 8;
            serialPort1.StopBits = System.IO.Ports.StopBits.One;
            serialPort1.Handshake = System.IO.Ports.Handshake.None;
            serialPort1.ReadTimeout = 500;
            serialPort1.WriteTimeout = 500;
            serialPort1.DtrEnable = true;
            serialPort1.RtsEnable = true;
            serialPort1.Open();

            richTextBox1.Text = "Connected";
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if(serialPort1.IsOpen){
            string text = richTextBox1.Text;
                serialPort1.WriteLine(text);}
    }
}

}

2 个答案:

答案 0 :(得分:0)

添加:

serialPort1.NewLine = "\r\n";

答案 1 :(得分:0)

您需要在SerialPort上书写。要做到这一点,使用这样的东西

        serialPort1.Open();
        serialPort1.Write(@":01013100010010");
        Thread.Sleep(200);
        serialPort1.Close();

我在代码上使用Thread.Sleep,因为在我的工作中,如果我们只是编写然后关闭端口,有时我们的设备不会收到完整的命令。

@edit:在客户端上运行的示例代码

portaserial = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
portaserial.Open();
portaserial.Write(mensagem.ToString());
Thread.Sleep(500);
portaserial.Close();

来源:我自己