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

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

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

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Написал программу, которая должна отравлять через ком-порт координаты, следующим макаром - отправляет строку, ждет ответ и отправляет следующую:
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). полученные цифры (цифры с контроллера и время) записываю в...

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

7
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
24.02.2016, 23:07
Ukrajinec, А в какой последовательности происходит отправка и получение?
0
3 / 3 / 1
Регистрация: 06.04.2009
Сообщений: 165
24.02.2016, 23:33  [ТС]
Цитата Сообщение от 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
Ukrajinec, Вы отправляете информацию на COM2, у Вас настроен виртуальный com-мост com2-com3, т.е. сообщении переадресовывается на com3 (я правильно понимаю это? просто раньше с этим не сталкивался), а потом Вы читаете COM2? Если я всё правильно понял, то на COM2 ничего не должно прийти и программа будет постоянно читать. Да и не должны ли отправка и чтение быть в разных потоках?
P.S. Извините, если хрень написал, раньше не работал с отправкой информации на порты
0
3 / 3 / 1
Регистрация: 06.04.2009
Сообщений: 165
25.02.2016, 00:50  [ТС]
Через COM2 сервер получает/отправляет инфу, через COM3 - клиент. Тоесть сервер через COM2 отправляет инфу на COM3, клиенту, который после обработки ее, отправляет некую строку через COM3 назад серверу на COM2.
Цитата Сообщение от ORLENOK Посмотреть сообщение
Извините, если хрень написал, раньше не работал с отправкой информации на порты
" Это тоже мой первый опыт не только с портами но и с C# тоже =))
Цитата Сообщение от ORLENOK Посмотреть сообщение
Да и не должны ли отправка и чтение быть в разных потоках?
Можно поточней как это можно реализовать в последовательных портах?

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

Решение

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

Решение

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru