2016-12-07 7 views
0

コントローラと通信するプログラムを作成しようとしています。コントローラは、接続が正常に確立されたときには「ようこそ」メッセージを送信し、実際には通信ソフトウェアを使用して接続したときにコントローラに通知します。しかし、以下の.NETコードを使用すると、ウェルカムメッセージは表示されません。それを超えて、それは動作します。どのように私はこのメッセージをキャプチャすることができます。それは接続が確立された瞬間に送信されるようです。接続時にシリアルウェルカムメッセージをキャプチャする#

また、私は接続後にコントローラと正常に通信することができますが、接続が開かれた瞬間に送信されるウェルカムメッセージが表示されないようです。

using System; 
using System.IO.Ports; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public delegate void AddDataDelegate(String myString); 
     public AddDataDelegate myDelegate; 
     SerialPort sp; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public void AddDataMethod(String myString) 
     { 
      richTextBox1.AppendText(myString); 
      richTextBox1.SelectionStart = richTextBox1.Text.Length; 
      richTextBox1.ScrollToCaret(); 
     } 
     private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      {     
       sp = new SerialPort(comboBox1.SelectedItem.ToString(),Int32.Parse(comboBox2.SelectedItem.ToString())); 
       sp.DataReceived += SerialPort_OnDataReceived; 
       sp.Close(); 
       sp.Open(); 
       richTextBox1.AppendText("open\n"); 
       button2.Enabled = true; 
       button3.Enabled = true; 
      } 
      catch (Exception ex) 
      { 
       richTextBox1.AppendText(ex.Message); 
      } 
     } 
     void SerialPort_OnDataReceived(object sender,SerialDataReceivedEventArgs args) 
     { 
      SerialPort sp = sender as SerialPort;    
      string s = sp.ReadExisting(); 
      richTextBox1.Invoke(this.myDelegate, new Object[] { s }); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      sp.WriteLine(textBox1.Text); 
      textBox1.Text = ""; 
     }  

     private void button3_Click(object sender, EventArgs e) 
     { 
      sp.DiscardOutBuffer(); 
      sp.DiscardInBuffer(); 
      sp.Close(); 
      richTextBox1.AppendText("\nclosed\n"); 

     } 
     private void Form1_Load_1(object sender, EventArgs e) 
     { 
      this.myDelegate = new AddDataDelegate(AddDataMethod); 
      string[] Ports = SerialPort.GetPortNames(); 
      comboBox2.SelectedIndex = comboBox2.Items.Count - 1; 
      Array.Sort(Ports, (a, b) => string.Compare(a.Substring(3).PadLeft(3, '0'), b.Substring(3).PadLeft(3, '0'))); 
      foreach (string port in Ports) 
      { 
       comboBox1.Items.Add(port); 
      } 
      comboBox1.SelectedIndex = 0; 
     } 

    } 
} 
+0

'DataRecevied'のブレークポイントはこれまでにヒットしましたか?あなたは 'SerialPort'設定のプロパティーを少ししか設定しておらず、ボーレート、ビットサイズ、ハンドシェイクなどをチェックしています。 – Sinatr

+0

シリアルポートは、OSIネットワークレイヤモデルの最下部にあります。彼らは "接続"について豆を知らないので、TCPが使うプロトコルの種類が必要です。あなたは一般的にコントローラを* something *でくすぐらなければならず、単一の "\ r"または "\ n"を送信するほど簡単です。電源投入後、RTSまたはDTRハンドシェーク信号がオンになるのを待っています。マニュアルを確認するか、電話を使用してください。あるいは、何も受け取っていないだけであれば、ハンドシェイクプロパティを無視したときの結果になります。 –

+0

Sinatr、私は接続時にコントローラと通信することができます。私はそれにコマンドを送ることができます(textBox1経由)とヒッチをせずに応答を受信します。唯一の問題は、私が最初の歓迎メッセージを得ることができないということです。このメッセージには、基本的にキャプチャしたいコントローラのバージョン番号が含まれています。 'シリアル'のその他のパラメータは問題ありません。実際には、これはUSBデバイスです。 –

答えて

0

私はそれを試しました。接続とポートからデータをプルしようとする間に若干の遅延が必要です。

関連する問題