2016-11-15 6 views
1

Ich mache eine WindowsForm-App, um aktuelle Werte zu einem Meter zu simulieren. Ich weiß nicht, wie man die Werte aus dem Textfeld nimmt und über den COM-Port sendet. dies ist der Code, den ich im Moment bekamC# Daten an Comport senden

namespace ValueSim1 
{ 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void comboBox1_DropDown(object sender, EventArgs e) 
    { 
     // Get all serial ports name 
     string[] ports = SerialPort.GetPortNames(); 

     // Clear comboBox list to get latest serial ports in each dropdown. 
     comboBox1.Items.Clear(); 

     foreach (string port in ports) 
     { 
      // Output serial port to dropdown list. 
      comboBox1.Items.Add(port); 
     } 
    } 

    private static SerialPort serialPort1; 

    private void button1_Click(object sender, EventArgs e) 
    { 

     if (comboBox1.Text != "") 
     { 
      serialPort1.PortName = comboBox1.Text; //comboBox1.Text set to PortName 

      serialPort1.BaudRate = 19200; //Baudrate is set (fix.) 

      //if serial port has opened, it must be closed at first. 
      if (serialPort1.IsOpen == true) 
      { 
       serialPort1.Close(); 
      } 
      //open the serial port after confirmation serial port closed. 
      if (serialPort1.IsOpen == false) 
      { 
       serialPort1.Open(); 

       if (serialPort1.IsOpen == true) //message window shows serial port status. 
       { 
        MessageBox.Show("Open Success\n" + serialPort1.PortName.ToString() + " " + serialPort1.BaudRate.ToString()); 
       } 
       else 
       { 
        MessageBox.Show("COM Port error"); 
       } 
      } 
     } 
    } 

    private void groupBox1_Enter(object sender, EventArgs e) 
    { 

    } 

    private void textBox5_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 
    } 
} 

Antwort

0

die Dokumentation für die Serialport-Klasse: https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx

Es gibt einen Write (String) -Methode, so

serialPort1.Write(comboBox1.Text); 

sollen arbeiten Siehe https://msdn.microsoft.com/en-us/library/y2sxhat8(v=vs.110).aspx

+0

Also habe ich 5 Parameter wie Intensität, Frequenz usw. und eine Taste, wenn ich sie drücke, möchte ich alle diese Parameter an das Messgerät senden. Wenn ich die serialPort.write Befehle in den button_click setze, sollte das tun? –

+0

Sie müssten wissen, was der Zähler als Eingabe erwartet und formatieren Sie die Zeichenfolge, die Sie entsprechend senden. Erwartet der Zähler, dass die Parameter durch Komma getrennt sind, in einer bestimmten Reihenfolge, getrennt durch CRLF, Parameter fester Länge - so lange es eine String-Eingabe erwartet und Sie es richtig formatieren, dann sollte das funktionieren. Wenn der Zähler andere Kodierungen erwartet, zB Byte-Werte, kann eine der anderen Write-Methoden geeignet sein. – PaulF

+0

zurück mit einer Frage. Wenn ich versuche, einen Port zu öffnen, bekomme ich Folgendes: Ausnahme ausgelöst: 'System.NullReferenceException' in ValueSim1.exe "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt." –

0

Verwendung SerialPort1.WriteLine(string); z

 SerialPort1.WriteLine(textBox1.Text); 

Es gibt auch andere Überlastung für die Write() und WriteLine() Verfahren, das verwendet werden kann. vergewissern Sie sich, dass Sie die Dokumentation richtig gelesen haben.

here is a link to the microsoft documentation for the serial port class

Versuchen Sie es, wie Sie Code zu lesen.

+0

zurück mit einer Frage. Wenn ich versuche, einen Port zu öffnen, bekomme ich dies: Ausnahme ausgelöst: 'System.NullReferenceException' in ValueSim1.exe "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt. " –

+0

anstelle von privaten statischen SerialPort serialPort1; verwenden Sie private statische SerialPort serialPort1 = new SerialPort(); – Ogbe