2016-10-23 71 views
0

我用C#实现应用程序串口并使用它发送数据。 但不工作。 我发送“A”字符和我的硬件不工作 ,但我发送超级终端应用程序或SimpleTerm并工作。串口不工作,但在超级终端工作

我的代码的应用程序:

if (_port.IsOpen) 
      { 
       _port.Close(); 
      } 
      _port.PortName = cmport.Text; 
      _port.Parity = (Parity)Enum.Parse(typeof(Parity), cmparity.Text); 
      _port.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmstopbit.Text); 
      _port.DataBits = Convert.ToInt32(cmdatabit.Text); 
      _port.BaudRate = Convert.ToInt32(cmboundrate.Text); 
      _port.Handshake = Handshake.None; 
      if (!_port.IsOpen) 
        { 
         _port.Open(); 
        } 

        _port.Write(textBoxX1.Text.Trim()); 
+0

使用Handshake.RequestToSend,从您的代码中删除所有_port.Close()调用。 –

回答

1

您是如何设定的串行端口?

检查这个网站:https://code.msdn.microsoft.com/windowsdesktop/SerialPort-brief-Example-ac0d5004

using System; 
using System.IO.Ports; 
using System.Text; 

namespace SerialPortExample 
{ 
    /// <summary> 
    /// Interfaces with a serial port. There should only be one instance 
    /// of this class for each serial port to be used. 
    /// </summary> 
    public class SerialPortInterface 
    { 
     private SerialPort _serialPort = new SerialPort(); 
     private int _baudRate = 9600; 
     private int _dataBits = 8; 
     private Handshake _handshake = Handshake.None; 
     private Parity _parity = Parity.None; 
     private string _portName = "COM1"; 
     private StopBits _stopBits = StopBits.One; 


    /// <summary> 
    /// Holds data received until we get a terminator. 
    /// </summary> 
    private string tString = string.Empty; 
    /// <summary> 
    /// End of transmition byte in this case EOT (ASCII 4). 
    /// </summary> 
    private byte _terminator = 0x4; 

    public int BaudRate { get { return _baudRate; } set { _baudRate = value; } } 
    public int DataBits { get { return _dataBits; } set { _dataBits = value; } } 
    public Handshake Handshake { get { return _handshake; } set { _handshake = value; } } 
    public Parity Parity { get { return _parity; } set { _parity = value; } } 
    public string PortName { get { return _portName; } set { _portName = value; } } 
    public bool Open() 
    { 
     try 
     { 
      _serialPort.BaudRate = _baudRate; 
      _serialPort.DataBits = _dataBits; 
      _serialPort.Handshake = _handshake; 
      _serialPort.Parity = _parity; 
      _serialPort.PortName = _portName; 
      _serialPort.StopBits = _stopBits; 
      _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived); 
     } 
     catch { return false; } 
     return true; 
    } 

    void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     //Initialize a buffer to hold the received data 
     byte[] buffer = new byte[_serialPort.ReadBufferSize]; 

     //There is no accurate method for checking how many bytes are read 
     //unless you check the return from the Read method 
     int bytesRead = _serialPort.Read(buffer, 0, buffer.Length); 

     //For the example assume the data we are received is ASCII data. 
     tString += Encoding.ASCII.GetString(buffer, 0, bytesRead); 
     //Check if string contains the terminator 
     if (tString.IndexOf((char)_terminator) > -1) 
     { 
      //If tString does contain terminator we cannot assume that it is the last character received 
      string workingString = tString.Substring(0, tString.IndexOf((char)_terminator)); 
      //Remove the data up to the terminator from tString 
      tString = tString.Substring(tString.IndexOf((char)_terminator)); 
      //Do something with workingString 
      Console.WriteLine(workingString); 
     } 
    } 

} 
} 

贵textBoxX1.Text.Trim()包含结束字符? (_terminator):)

编辑:整个项目将数据发送到COM serveur。 http://www.codeproject.com/Articles/678025/Serial-Comms-in-Csharp-for-Beginners

我真的认为你应该将\ r \ n添加到发送给COM的文本中,这会告诉端口com该行已完成并将读取它。

试试这个:

_port.Write(textBoxX1.Text.Trim() + "\r\n"); 
+0

当使用_port.Write(textBoxX1.Text.Trim()+“\ r \ n”);在液晶显示器上打印一个空字符。 –

+0

我认为这是因为\ n或\ r不关闭客户端缓冲区。 只试用\ r或\ n。 它工作吗? (即使有空字符) – pix

+0

我尝试使用它,但不工作。当端口USB 2.0可以发送12个字符但使用USB 3.0时不能发送超过5个字符 –

1

当您使用超级终端,它会增加一个回车。 你必须在你的文字后加\ r。 示例:A \ r