Не получается вывести данные с COM-порта в окне - C#
Формулировка задачи:
Всем привет! Изучаю C#. Разбираю работу с COM-портом.
Задача: проверить какие COM-порты есть в системе и вывести их в ComboBox, пропинговать внешнее устройство, открыть порт, записать данные, считать данные, вывести считанные данные в окне, закрыть порт.
Разобрал массу примеров. В итоге получилось реализовать все, кроме вывода считанных данных в окне. По миганию светодиодов в устройстве вижу, что данные на открытие и закрытие проходят. А вот увидеть получаемые данные не могу.
Пробовал подключать стандартные программы работы с COM-портами - устройство возвращает данные в COM-порт в ответ на посылку.
Подскажите, пожалуйста, где и что я не так делаю?
Код:
Все стабильно работает, но что-то не могу врубиться:
1.сначала я отправляю данные (5 байт) в устройство, затем мне необходимо читать полученные в ответ данные; как увязать отправку и получение данных?
2.как вывести считанные данные из переменной в окне?
Перепробовал код из примеров, найденных в сети - либо выдает ошибки, либо не выводит принятые данные.
Буду признателен, если покажете кусок кода и/или объясните.
Всем спасибо.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; using System.IO; namespace Port_1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string[] enableComPorts = SerialPort.GetPortNames(); foreach (string port in enableComPorts) { comboBox1.Items.Add(port); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { //comboBox1.Text = comboBox1.SelectedItem.ToString(); //serialPort1.PortName = comboBox1.Text; } private void ButConnect_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) // если порт открыт { serialPort1.Close(); // закрыть } else { // если закрыт , открываем serialPort1.PortName = ((string)comboBox1.SelectedItem); serialPort1 = new SerialPort(serialPort1.PortName, 112000, Parity.None, 8, StopBits.One); { try { serialPort1.Open(); if (serialPort1.IsOpen) { ButConnect.Enabled = false; ButDisconnect.Enabled = true; } } catch (Exception e1) { MessageBox.Show(e1.Message); } //Передаю команду Connect byte[] data = { 11, 22, 00, 00, 00 }; serialPort1.Write(data, 0, data.Length); } } } //private string stroka = ""; //private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //{ // this.Invoke(new EventHandler(DoUpdate)); //} //private void DoUpdate(object s, EventArgs e) //{ // stroka = stroka + serialPort1.ReadExisting(); //} //****** поток ком порта private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string command = serialPort1.ReadLine(); this.BeginInvoke(new LineReceivedEvent(LineReceived), command); } private delegate void LineReceivedEvent(string command); private void LineReceived(string command) { listBox1.Text = command; } private void ButDisconnect_Click (object sender, EventArgs e) { try { //Передаю команду Disconnect byte[] data = { 22, 11, 00, 00, 00 }; serialPort1.Write(data, 0, data.Length); serialPort1.Close(); if (serialPort1.IsOpen) { } else { ButConnect.Enabled = true; ButDisconnect.Enabled = false; } } catch (Exception e2) { MessageBox.Show(e2.Message); } } //Закрываем порт при закрытии окна программы программы private void Form1_FormClosing(object sender, FormClosingEventArgs e) { byte[] data = { 01,02,00,00,00,00,00,00,00 }; serialPort1.Write(data, 0, data.Length); serialPort1.Close(); } private void textBox1_TextChanged(object sender, EventArgs e) { } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } } }
Решение задачи: «Не получается вывести данные с COM-порта в окне»
textual
Листинг программы
byte[] array = new byte[port.BytesToRead]; port.Read(array, 0, port.BytesToRead);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д