Не получается вывести данные с 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д