Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2013, 10:25   #1
gbvsl
 
Регистрация: 17.06.2013
Сообщений: 5
По умолчанию Приём данных в программу от COM порта

Добрый день я в С# практически не понимаю. Вот собрал по кускам такую програмку, моя задача принимать данные от ком порта которые идут каждые 15 секунд , роскидывать их по нужным текст боксам.
Но у меня проблема: сейчас всё работает по нажатию на кнопку 4,а мне нужно чтоб это происходило автоматически.Очень прошу помогите это сделать. Приём и передачча по TX RX(UART) прерывание не использую
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO.Ports;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public String c; 
        public String bb;
        public Form1()
        {
            InitializeComponent();
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 4800;
            serialPort1.DtrEnable = true;


        }
        

        
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] myPort; //создаем массив строк
            myPort = System.IO.Ports.SerialPort.GetPortNames(); // в массив помещаем доступные порты
            comboBox1.Items.AddRange(myPort); //теперь этот массив заносим в список(comboBox) 

        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            serialPort1.Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            serialPort1.BaudRate = 4800;
            serialPort1.PortName = comboBox1.Text.ToString();
            if (serialPort1.IsOpen == false)
            {
                serialPort1.Open();
                label2.Text = "Порт подключен";
            }


            

        }


        
        private void button4_Click(object sender, EventArgs e) //По нажатию  данные принимаются
        {
            // Передача данных из текстового поля в порт
           
            c = serialPort1.ReadExisting();

            

            // Прием данных и вывод его в окно программмы
           
             string words = c;


             if (words.IndexOf("Kletka1") > -1)
             
             {

                 if (words.Trim() != "")
                     textBox2.Text = (words); 
             }
             if (words.IndexOf("Kletka2") > -1)
             {

                 if (words.Trim() != "")
                     textBox3.Text = (words);
             }
             if (words.IndexOf("Kletka3") > -1)
             {

                 if (words.Trim() != "")
                     textBox4.Text = (words);
             }

}
       

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        

       

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {







        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            if (serialPort1.IsOpen == true)

                serialPort1.Close();
            label2.Text = "Порт отключен";
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

       

       

        
       
       ///////////

        ////////////////
    }
}
gbvsl вне форума Ответить с цитированием
Старый 17.06.2013, 13:39   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...ставь таймер (или в потоке), проверяй окончание приема пакета, отсылай.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 18.06.2013, 10:33   #3
gbvsl
 
Регистрация: 17.06.2013
Сообщений: 5
По умолчанию

Вы наверно не так поняли меня.
По нажатию кнопки оно читает буфер и принятые данные распределяет по текст боксам как мне нужно.Единственная проблема у меня это сделать чтоб вместо того чтоб кнопку нажимать для чтения, мне нужно автоматически это делать,тупо чтоб читало порт,так как с МК данные идут в чёткой последовательности и с четким интервалом около раза в 15 секунд.
Так как я вообще не шарю C# я не хочу заморачиваться с прерываниями по приходу данных,нужно чтоб оно тупо читало и если что то есть в буфере просто распределяло.Кароче делало всё то что и сейчас только само без нажатия на кнопку.
Пожалуйста если можете внесите нужные изменения в мой код. Я для проверки использую пока виртуальные Ком порты соеденённые друг с другом.Сейчас всё работает как и хочу, но если нажимаю на кнопку.
gbvsl вне форума Ответить с цитированием
Старый 18.06.2013, 10:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну так в таймер вынести чтение и делов то.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.06.2013, 12:38   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
не хочу заморачиваться с прерываниями по приходу данных
вы не только в C# не шарите, а вообще в методологии работы с портами. Cказано, в потоке проверяем наличие данных в буфере.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.06.2013, 10:49   #6
gbvsl
 
Регистрация: 17.06.2013
Сообщений: 5
По умолчанию

Не спорю поэтому я и прошу кусочек кода
gbvsl вне форума Ответить с цитированием
Старый 19.06.2013, 10:51   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...пример есть в MSDN. Заглядывали?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.06.2013, 12:10   #8
gbvsl
 
Регистрация: 17.06.2013
Сообщений: 5
По умолчанию

Да.
Но может не то что то смотрел.
Просто я не понимаю почему не получается
Если я вместо private void button4_Click(object sender, EventArgs e)
пишу private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
то оно не принимает само(((
gbvsl вне форума Ответить с цитированием
Старый 21.06.2013, 10:43   #9
gbvsl
 
Регистрация: 17.06.2013
Сообщений: 5
По умолчанию

пожалуйста помогите
gbvsl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приём данных с COM порта Евгений55 Microsoft Office Excel 3 05.01.2013 16:46
Приём/передача данных delphi7 -Jack- Работа с сетью в Delphi 2 27.06.2012 07:51
Приём данных через СОМ порт Серж_ Общие вопросы C/C++ 0 13.06.2010 01:25
Приём данных с com порта kyc0k Помощь студентам 3 28.03.2008 15:04
Как разрешить Форме1 приём данных? Rahim1993 Общие вопросы Delphi 12 19.01.2008 09:57