С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 1
Регистрация: 06.04.2009
Сообщений: 165
1

Проверка кода на отправку/получения данных по последовательному порту

24.02.2016, 22:10. Показов 1348. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Написал программу, которая должна отравлять через ком-порт координаты, следующим макаром - отправляет строку, ждет ответ и отправляет следующую:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
...
public void Read()
        {
            string message="";
            do
            {
                try
                {
                    message = serialPort2.ReadLine();
                }
                catch (TimeoutException)
                { }
 
            } while (message != "@0");
        }
 
        private void SendInf()  // відправка інформації на порт тип STRING
        {
            alpha.mul_X = alpha.textBox_mull(textBox_multiX.Text, textBox_multiX.Enabled);
            alpha.mul_Y = alpha.textBox_mull(textBox_multiY.Text, textBox_multiY.Enabled);
            alpha.mul_XY = alpha.textBox_mull(textBox_multiXY.Text, textBox_multiXY.Enabled);
 
            alpha.summ_X = alpha.textBox_summ(textBox_summX.Text, textBox_summX.Enabled);
            alpha.summ_Y = alpha.textBox_summ(textBox_summY.Text, textBox_summY.Enabled);
            alpha.summ_XY = alpha.textBox_summ(textBox_summXY.Text, textBox_summXY.Enabled);
 
            alpha.X = (int)(alpha.X * alpha.mul_X * alpha.mul_XY) + alpha.summ_X + alpha.summ_XY;
            alpha.Y = (int)(alpha.Y * alpha.mul_Y * alpha.mul_XY) + alpha.summ_Y + alpha.summ_XY;
 
            if (!serialPort2.IsOpen)   //перевірка на відкритий порт
            {
                serialPort2.PortName = ((string)comboBox_COM_ports.SelectedItem);
                serialPort2.Open();
                richTextBox2.Text += ((string)comboBox_COM_ports.SelectedItem);
                richTextBox2.Text += " opened.\n";
            }
            if (serialPort2.IsOpen)  //відправляєм інфу
                richTextBox2.Text += String.Format("{0},{1}{2}", alpha.X, alpha.Y, alpha.end_msg);
                richTextBox2.Text += "\n";   
            serialPort2.Write(
                    String.Format("{0},{1}{2}",alpha.X, alpha.Y, alpha.end_msg));
        }
...
Написать-то написал, да как проверить? Первое что приходит на ум - создать еще один текст-бокс через который будем слать обратно строки.. Я создал виртуальный com-мост (COM2-COM3) сервер-клиент, и теперь через текст-бокс по COM3 отправляю назад строки:
C#
1
2
3
4
5
6
7
8
9
10
11
...
 private void button1_Click(object sender, EventArgs e)
        {
            if (!serialPort3.IsOpen)   //перевірка на відкритий порт
            {
                serialPort3.PortName = "COM3";
                serialPort3.Open();
            }
            serialPort3.Write(textBox1.Text);
        }
...
Да вот незадача - после отправки сервером первой строки, никакие кнопки в форме не работают, когда проводить курсором по кнопкам "свернуть", "нразвернуть", "закрыть", видно их мерцание, тоесть программа в постоянном чтении и никакие кнопки в этот момент не работают. Как проверить работоспособность кода?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.02.2016, 22:10
Ответы с готовыми решениями:

Arduino. Прием данных по последовательному порту
Здравствуйте, подскажите пожалуйста, нашел в инете код приема 2-ух символов, но теперь по одному...

Потеря данных при обмене по последовательному порту. MATLAB vs контроллер
Здравствуйте, отправляю запрос в COM порт каждые две секунды (использую Matlab). полученные цифры...

Организовать работу с диском по последовательному порту
Доброго времени суток. Необходимо написать программу, которая будет передавать данные на дисковое...

Отправка константы класса по последовательному порту
Доброго времени суток! Помогите советом. Есть какой-то клас, где описана константа: class...

7
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
24.02.2016, 23:07 2
Ukrajinec, А в какой последовательности происходит отправка и получение?
0
3 / 3 / 1
Регистрация: 06.04.2009
Сообщений: 165
24.02.2016, 23:33  [ТС] 3
Цитата Сообщение от ORLENOK Посмотреть сообщение
А в какой последовательности происходит отправка и получение?
Вводится адрес документа с координатами. Оттуда берем нужные цыфры, открываем порт и отправляем клиенту. Ждем ответа о конце обработки координат. Отправляем следующую строку.

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void ReadFile(string filename)
        {
            string line;
            StreamReader reader = new StreamReader(richTextBox3.Text);
            while ((line = reader.ReadLine()) != null)
            {
                alpha.Find(line);
                if (alpha.Correct_coord == true)
                {
                    SendInf();
                    Read();
                }
 
            }
            reader.Close();
        }
0
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
25.02.2016, 00:15 4
Ukrajinec, Вы отправляете информацию на COM2, у Вас настроен виртуальный com-мост com2-com3, т.е. сообщении переадресовывается на com3 (я правильно понимаю это? просто раньше с этим не сталкивался), а потом Вы читаете COM2? Если я всё правильно понял, то на COM2 ничего не должно прийти и программа будет постоянно читать. Да и не должны ли отправка и чтение быть в разных потоках?
P.S. Извините, если хрень написал, раньше не работал с отправкой информации на порты
0
3 / 3 / 1
Регистрация: 06.04.2009
Сообщений: 165
25.02.2016, 00:50  [ТС] 5
Через COM2 сервер получает/отправляет инфу, через COM3 - клиент. Тоесть сервер через COM2 отправляет инфу на COM3, клиенту, который после обработки ее, отправляет некую строку через COM3 назад серверу на COM2.
Цитата Сообщение от ORLENOK Посмотреть сообщение
Извините, если хрень написал, раньше не работал с отправкой информации на порты
" Это тоже мой первый опыт не только с портами но и с C# тоже =))
Цитата Сообщение от ORLENOK Посмотреть сообщение
Да и не должны ли отправка и чтение быть в разных потоках?
Можно поточней как это можно реализовать в последовательных портах?

Добавлено через 19 минут
я немного не точно описал проблему, поэтому уточню - я не могу отправить строку для сервера, так как сервер после отправки координат, переключается в "режим постоянного чтения" и не дает на форме нажать на кнопку или даже поставить курсор в текст-бокс
0
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
25.02.2016, 00:58 6
Лучший ответ Сообщение было отмечено Ukrajinec как решение

Решение

Ukrajinec, Так вот поэтому и нужно распаралелить потоки. Сделать чтение в отдельном потоке, чтобы основной поток не был загружен. Можно использовать Backgroundworker например. Или что-то ещё придумать.
1
3 / 3 / 1
Регистрация: 06.04.2009
Сообщений: 165
25.02.2016, 02:01  [ТС] 7
ORLENOK, Спасибо, завтра попробую...
0
Эксперт .NET
11167 / 7091 / 1584
Регистрация: 25.05.2015
Сообщений: 21,456
Записей в блоге: 14
25.02.2016, 04:53 8
Лучший ответ Сообщение было отмечено Ukrajinec как решение

Решение

Ukrajinec, про TPL и Task почитайте. BackgroundWorker слегка устарел.
1
25.02.2016, 04:53
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2016, 04:53
Помогаю со студенческими работами здесь

Прием строки в Arduino Leonardo по последовательному порту
Здравствуйте, помогите пожалуйста, как передать в микроконтроллер Arduino Leonardo строку? Я...

Интервал ожидания ответа от устройства по последовательному порту
Скажите пожалуйста, Как мне самому задать время ожидания ответа от СОМ-порта? Можно ли добавить это...

Передача информации для LED через Arduino c ПК по последовательному порту
Доброго времени суток. Сделал бегущую строку на Arduino из трех матриц. Все работает идеально,...

Несоответствие заявленной скорости обмена по последовательному порту (виртуальный COM over USB)
Добрый день. Тоже вожусь с COM портом (В Windows Form C++). В принципе давно всё работает. Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru