2016-10-23 18 views
0

私はアプリケーションシリアルポートをC#で実装し、それを使ってデータを送信します。 でも動作しません。 "A"文字を送信し、ハードウェアが動作しない ハイパーターミナルApplicationまたは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):)

EDIT:COMのserveurにデータを送信するためにプロジェクト全体。 http://www.codeproject.com/Articles/678025/Serial-Comms-in-Csharp-for-Beginners

私は本当にCOMに送信するテキストに\ r \ nを追加する必要があると考えています。これは、ポートcomにその行が完全であり、それを読むことを伝えます。あなたはハイパーターミナルを使用しているとき

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

_port.Write(textBoxX1.Text.Trim()+ "\ r \ n")を使用する場合。 lcdデバイスに空の文字を表示します。 –

+0

これは、\ nまたは\ rがクライアントバッファを閉じるためのものではないからだと思います。 \ rまたは\ nだけ試してください。 それは動作しますか? (空の文字でさえ) – pix

+0

私はそれを使用しようとしますが、動作しません。ポートUSB 2.0が12文字を送信することができますが、USB 3.0を使用すると5文字以上を送信しない場合 –

1

それがキャリッジリターンを追加します。

はこれを試してみてください。 テキストの後に\ rを追加する必要があります。 例:A

関連する問題