2016-12-03 100 views
-3

任何人都可以檢查下面的C#代碼。在float sıcaklık = Convert.ToByte(seriPort.ReadExisting());有一個問題但我找不出什麼錯誤?我猜SerialPort無法獲取數據。C#問題無法讀取SerialPort

public partial class Form1 : Form 
{ 
    SerialPort seriPort; 
    public Form1() 
    { 
     InitializeComponent(); 
     seriPort = new SerialPort(); 
     seriPort.BaudRate = 9600; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     timer1.Start();    
     try 
     { 
      seriPort.PortName = textBox1.Text; 
      if (!seriPort.IsOpen) 
      MessageBox.Show("Bağlantı Kuruldu"); 
     } 
     catch 
     { 
      MessageBox.Show("Bağlantı Kurulmadı!"); 
     } 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     try 
     { 
      seriPort.Write("temperature"); 
      float sıcaklık = Convert.ToByte(seriPort.ReadExisting()); 
      textBox2.Text = sıcaklık.ToString(); 
      comboBox1.Items.Add(textBox2.Text); 
      System.Threading.Thread.Sleep(100); 
     } 
     catch (Exception) {} 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     timer1.Stop(); 
     seriPort.Close(); 
    } 
} 
+1

我沒有看到任何地方'seriPort.Open'?你認爲'if(!seriPort.IsOpen)'是否正確(https://translate.google.com/#auto/en/Ba%C4%9Flant%C4%B1%20Kuruldu)? –

+0

你應該在這條線上添加什麼樣的錯誤,所以我們可以幫助你更容易 –

+0

如果你吞下例外,你怎麼能找到失敗的原因? –

回答

0

首先。分配Name的端口後,你需要打開它,這樣的通信可以發生:

seriPort.PortName = textBox1.Text; 
// open the port 
seriPort.Open(); 

第二件事是,通信需要時間發生。想象一下你和某人說話。你問他目前的temperature。然後你必須等到你的搭檔發言直到結束。只有這樣你才能得到你想要的信息,你可以使用它。
由於您堅持使用同步方法,您必須爲設備提供儘可能多的時間來回答問題。你可以等待:

seriPort.Write("temperature"); 
// wait for the response 
System.Threading.Thread.Sleep(2000); 
float sıcaklık = Convert.ToByte(seriPort.ReadExisting()); 

我不會真的推薦這種同步方法,而是使用DataReceived。當您的設備向您發送數據並且您已收到數據時,它將被觸發。

SerialPort port = new SerialPort(); 
port.DataReceived += Port_DataReceived; 

private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 

    float sıcaklık = Convert.ToByte(seriPort.ReadExisting()); 
    // do what ever you want with this value 
} 

希望幫助