2016-12-25 36 views
2

データを入力して送信すると、「正しくないパラメータ」というメッセージが表示されます。次のプログラムにエラー/例外/問題がありますか?シリアル通信でC#のパラメータが正しくありません

もう1つの質問:シリアルポート経由で接続されたコントローラ間でプロトコルを実装するための構造を使用することをお勧めしますか? WriteLine方法が間違って動作するように

public partial class MainWindow : Window 
{ 
    SerialPort serial = new SerialPort(); 
    // PortName, BaudRate, Parity, DataBits, StopBits 
    public MainWindow() 
    { 
     InitializeComponent(); 
     serial.PortName = "COM1"; 
     serial.BaudRate = 9600; 
     serial.DataBits = 8; 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     string ports = serial.PortName; 
     PortCB.Items.Add(ports); 
     PortCB.SelectedIndex = 0; 
     Close.IsEnabled = false; 
    } 
    //button to open serial port 
    private void Open_Click(object sender, RoutedEventArgs e) 
    { 
     Open.IsEnabled = false; 
     Close.IsEnabled = true; 
     try 
     { 
      serial.PortName = PortCB.Text; 
      serial.Open(); 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    //button to close serial port 
    private void Close_Click(object sender, RoutedEventArgs e) 
    { 
     Open.IsEnabled = true; 
     Close.IsEnabled = false; 
     try 
     { 
      serial.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    //send message typed in a text box 
    private void Send_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      if(serial.IsOpen) 
      { 
       serial.WriteLine(SendTB.Text); 
       SendTB.Clear(); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    //show message receive received in a text block 
    private void Receive_Click(object sender, RoutedEventArgs e)  
    { 
     try 
     { 
      if (serial.IsOpen) 
      { 
       ReceiveTB.Text = serial.ReadExisting(); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    //close the serial port if at all open 
    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     if(serial.IsOpen) 
      serial.Close(); 
    } 
} 
+0

コントローラがこのメッセージを送信しますか? "不適切なパラメータ" –

+0

シリアルポートにデータを送信しようとすると、先ほどのコードからこのメッセージが表示されます。現時点では、シリアルポートにエミュレータを使用しています。私はUSBケーブルが到着するまでシリアルを待っています、私はそれを注文しました。 –

答えて

0

それはそうです:

は、ここに私のコードです。以下に、あなたのSend_Click方法を変更しよう:

private void Send_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     if(serial.IsOpen) 
     { 
      serial.Write(SendTB.Text + "\n"); 
      SendTB.Clear(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

シリアルポートを介して結合したコントローラとの間のプロトコルを実装するための構造を使用することをお勧めしますか?

私は何を意味するのかはっきりしませんが、私は答えようとします:シリアルポートを介してASCII表現かrawバイトフローのどちらかでデータを送信できます。理論的には、あなたの構造体を直列化、伝送、および逆直列化することは可能でなければなりませんが、これを行う方法を正確に言うことはできません。

+0

各パラメータを文字列に変換し、それをasciiとしてシリアルに送信します。受信機で逆の操作を行う。文字列をトリミングし、2つの差分データの間に特別な文字を追加することを検討してもよい。 –

+0

writeとwritelnは基本的に同じことを除いて、次の文字列は新しい行に出力される。ケーブルを使用するとエラーは発生しません。おそらく、エミュレータのいくつかの問題。 –

関連する問題