2017-12-13 6 views
1

Ich erstelle eine UWP APP, um die Daten von Waspmote Board zu erhalten, ich WindForm verwendet wurde, um es zu entwickeln, kann es funktionieren, aber weil UWP using System.IO.Port nicht unterstützt, so verwende ich using Windows.Devices.SerialCommunication; Ich schaue durch die Papiere , aber ich habe immer noch keine Ahnung, wie ich anfangen kann, wie kann ich den Windform-Code in UWP-Code umwandeln?Uwp serielle Geräte

der Windform Code wie unten

public Form1() 
    { 
     InitializeComponent(); 
     getAvailablePorts(); 
    } 
    void getAvailablePorts() 
    { 
     // Get a list of existing ports 
     String[] ports = SerialPort.GetPortNames(); 
     String[] baudrates = new String[] { "9600", "115200" }; 
     // Insert the lists into the combo boxes 
     comboBox1.Items.AddRange(ports); 
     comboBox2.Items.AddRange(baudrates); 
     // Select the default setting if at least a com port is found. 
     if (ports.Count() != 0) 
     { 
      comboBox1.SelectedIndex = 0; 
      comboBox2.SelectedIndex = 1; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (comboBox1.Text == "" || comboBox2.Text == "") 
      { 
       textBox1.Text = "Please select port settings"; 
      } 
      else 
      { 
       serialPort1.PortName = comboBox1.Text; 
       serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); 
       serialPort1.DataReceived += new 
       SerialDataReceivedEventHandler(serialPort1_DataReceived); 
       serialPort1.Open(); 
       progressBar1.Value = 100; 
       button1.Enabled = false; 
       button2.Enabled = true; 
      } 
     } 
     catch (UnauthorizedAccessException) 
     { 
      textBox1.Text = "UnauthorizedAccess"; 
     } 
    } 

    private void serialPort1_DataReceived(object sender, 
    SerialDataReceivedEventArgs e) 
    { 
     SerialPort sp = (SerialPort)sender; 
     string value = sp.ReadExisting(); 
     processValue(value); 
    } 
    //Delegate to update received data in the textbox 
    private delegate void processValueDelegate(string value); 
    private void processValue(string value) 
    { 
     if (this.InvokeRequired) 
     { 
      this.BeginInvoke(new processValueDelegate(processValue), 
      new object[] { value }); 
     } 
     else 
     { 
      // ... update GUI in here ... 
      textBox1.AppendText(value); 
      DataExtraction(value); 
     } 
    } 
    string UnreadBuffer = ""; 
    private void DataExtraction(string RxString) 
    { 
     UnreadBuffer += RxString; 
     // Search for Data Header "<=>" 
     int start = UnreadBuffer.IndexOf("<=>"); 
     int delimiter = UnreadBuffer.IndexOf("#"); 
     if (start >= 0) 
     { 
      string row = UnreadBuffer.Substring(start); 
      if (delimiter >= 0) 
      { 
       string[] ExtractedDataFields = row.Split('#'); 
       if (ExtractedDataFields.Length >= 7) 
       { 
        textBox2.Text = string.Format("{0:HH:mm:ss tt}", DateTime.Now); 
        textBox3.Text = ExtractedDataFields[1]; 
        textBox4.Text = ExtractedDataFields[2]; 
        textBox5.Text = ExtractedDataFields[3]; 
        textBox6.Text = ExtractedDataFields[5]; 
        UnreadBuffer = ""; 
       } 
      } 
     } 
    } 

enter image description here

enter image description here

* Und ich habe anohther Frage: Da UWP, nicht Serialport in Toolbox haben, was in UWP der Ersatz ist?

+0

Mögliches Duplikat von [UWP-Link zu seriellem Port] (https://stackoverflow.com/questions/47791149/uwp-link-to-serial-port) –

+0

I Think @Vincent hat diese Frage zu deinem vorherigen Thread beantwortet. In UWP müssen Sie [Windows.Devices.SerialCommunication-Namespace] (https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.SerialCommunication) relevante APIs verwenden, um dies zu erreichen. Er hat auch das offizielle Codebeispiel [Custom serial device sample] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CustomSerialDeviceAccess) erwähnt. Die Szenarien dieses Beispiels haben Ihnen tatsächlich mitgeteilt, wie Sie mit dem seriellen Gerät kommunizieren (einschließlich Lese- und Schreibdaten). –

+0

Ja, Sie finden alles in der Probe. Ich kann hier genau den gleichen Code schreiben, aber das wäre nutzlos. Sie sollten das Beispiel herunterladen und versuchen, Szenario 4 (lesen/schreiben) zu starten und beginnen, es für Ihren Bedarf zu optimieren. In UWP haben Sie kein 'SerialPort'-Steuerelement, das Sie löschen können und das alles für Sie übernimmt. Sie müssen zuerst die Geräte auflisten, das gewünschte konfigurieren und öffnen und dann die Ein-/Ausgabestreams abrufen, um die Daten zu lesen und zu schreiben. – Vincent

Antwort

0

Ich habe das schon mal gemacht, aber die Verbindung ist sehr instabil ich meinen Laptop mit einem Arduino verbunden, um einen Draht verwenden, aber irgendwann einmal nicht funktioniert iam so wütend, dass jetzt habe ich andere Verbindung zu verwenden, damit es funktioniert wie einen Server zu erstellen und alle mit node.js zu verknüpfen

Verwandte Themen