Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6

SerialPort не принимает данные

15.01.2013, 16:43. Показов 3842. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В MSDN есть два примера передачи данных по СОМ-порту: с использованием дополнительного потока и с обработчиком событий. И конечно же оба у меня не заработали.. С помощью эмулятора СОМ-портов создал два порта в режиме моста, на одном запущен Гипертерминал, на другом - моя прога. С программы в терминал данные отправляются без всяких ошибок, но когда пытаюсь напечатать что-нибудь в терминале, моя программа никак не реагирует на отправленный текст.
В обработчике событий ставил брекпойнт - ни разу не сработал.
Кликните здесь для просмотра всего текста
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
using System;
using System.IO.Ports;
 
namespace ConsoleCOM
{
    class Program
    {     
        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM17");
 
            mySerialPort.BaudRate = 9600;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.One;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
 
            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
 
            mySerialPort.Open();
 
            Console.WriteLine("Press any key to continue...");
            Console.WriteLine();
            Console.ReadKey();
            mySerialPort.Close();
        }
 
        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            Console.WriteLine("Data Received:");
            Console.Write(indata);
        }
    }


В проге с доп. потоком постоянно вылезает исключение IOException с текстом "This operation returned because the timeout period expired." на строчке -
C#
1
string message = _serialPort.ReadLine();
Пробовал ставить
C#
1
_serialPort.ReadTimeout = SerialPort.InfiniteTimeout;
- не помогло..

Когда на обоих портах включал Гипертерминалы, текст нормально передавался в обе стороны. Настройки портов одинаковые - 9600 8-N-1. Мистика какая-то..

Вообще, на других форумах часто встречается похожая проблема, и ни где ещё я не встретил нормального решения.

А затевал я всё это дело для связи компа с микроконтроллером. Вот теперь думаю, не попробовать ли настроить МК как HID-устройство, а не СDС. Правда пока не знаю, как из Шарпа посылать команды для HID. Может у кого есть идеи или опыт реализации подобных программ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2013, 16:43
Ответы с готовыми решениями:

Serialport.write и serialport.basestream.write - в чем разница
в чем разница между следующими способами отправки данных на ком-порт?: serPort.BaseStream.Write(data,0,datalen); ...

Как отправлять данные в SerialPort из разных форм?
Друзья! Подскажите! Программа под Windows на C#: Окно. По нажатию кнопки создается ещё одна форма и выполняется form2.ShowModal(); ...

Zabbix принимает не те данные
Добрый день ситуация такая: Есть батник который передает данные в Zabbix когда запускаешь батник через cmd то все нормально он мне выводит...

9
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6
17.01.2013, 08:14  [ТС]
Вот же.. Оказалось всё дело в эмуляторе СОМ-портов.
Если кому интересно: сначала я использовал вот эту программу http://www.hhdsoftware.com/fre... rial-ports
Однако она оказалась весьма глючной. Хотя непонятно почему же работала связь между двумя терминалами

Потом я попробовал http://www.eterlogic.com/Products.VSPE.html
и.. бинго! Всё заработало.
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
17.01.2013, 09:19
Вот и хорошо.
Мне показалось удобнее пользоваться обработчиком событий.
0
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6
17.01.2013, 18:19  [ТС]
Да, действительно удобнее.

Теперь появился новый вопрос, но наверное его лучше задать на другом форуме. Но всё же, может кто-нибудь знает.
Насколько я понимаю передача данных по виртуальному СОМ-порту через USB не ограничивается скоростью этого порта, т.е. например, если настроить порт на 9600 бод, фактически данные будут передаваться быстрее. Боды же нужны только для физических портов и RS-232. Тогда как бы узнать реальную скорость передачи, хотя бы примерно, для оценки возможностей. Что-то не верится, что она будет определяться скоростью USB-девайса (low, full, hi), больно много получится..
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
17.01.2013, 20:02
Скорее всего скорость будет зависеть от самого медленного из:
- само устройство
- пропускная способность USB шины и арраратного тракта.
- скорость работы драйвера виртуального порта
- скорость софта, работающего с устройством через порт.

В любом из этих мест можно поиметь как естественные. так и рукотворные тормоза.
0
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6
17.01.2013, 21:32  [ТС]
Так как, к сожалению, пока нет возможности проверить работу USB-девайса, пришлось дальше мучать эмулятор СОМ-порта. Пробовал отправлять данные порциями различной длины и замерять скорость. В итоге вышло, что 6МБ отправляются в среднем за 30 секунд..мда..как-то совсем удручающе.. Но может в железе будут другие результаты, как раз таки из-за вышеперечисленных факторов.
0
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 6
17.01.2013, 21:51
Цитата Сообщение от ogremage Посмотреть сообщение
Так как, к сожалению, пока нет возможности проверить работу USB-девайса, пришлось дальше мучать эмулятор СОМ-порта. Пробовал отправлять данные порциями различной длины и замерять скорость. В итоге вышло, что 6МБ отправляются в среднем за 30 секунд..мда..как-то совсем удручающе.. Но может в железе будут другие результаты, как раз таки из-за вышеперечисленных факторов.
Здравствуйте! Есть небольшой опыт в этой теме. Подключал когда-то свой мк к компьютеру при помощи адаптера USB-RS-485. На платке с мк стоял драйвер RS-485-USART. Установив драйвер адаптера он получается как виртуальный COM-порт. Выбранная в терминале скорость обмена соответствует скорости обмена с мк.
0
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6
17.01.2013, 23:09  [ТС]
Цитата Сообщение от voler Посмотреть сообщение
Выбранная в терминале скорость обмена соответствует скорости обмена с мк.
В случае использования переходника, да. Для того, чтобы "подогнать" скорость передачи по USB-шине к скорости стандарта RS-xxx и USART. А если МК имеет аппаратную поддержку USB, тогда скорость определяется только USB-шиной и может плавать. По крайней мере к такому выводу я пришёл, читая зарубежные форумы и книжку Джэйн Аксельсон. Но в любом случае скоро всё станет ясно, МК куплен, осталось лишь спаять схему и посмотреть
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
08.02.2017, 09:41
ElenRey, последний пост в этой теме - январь 2013. Ты серьёзно?
0
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6
11.02.2017, 11:40  [ТС]
А я уже и забыл про это тему
Всё давно и успешно работает, на HID и на WinUSB. Если кому-то нужно, могу поделиться опытом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2017, 11:40
Помогаю со студенческими работами здесь

Программа не принимает введенные данные
Здравствуйте, не могу понять почему программа не видит "scanf(%c,&stlb_sim)" в строке 5 Koordinati_stlb(char *koord_stlb){ char...

Сокеты: клиент не принимает данные
Написал простой консольный чат. Почему в клиенте функция recv возвращает ошибку 10038? Сервер: #include "stdafx.h" ...

MySQL не принимает данные на русском языке
Работаю в WinXP с Apache+PHP+MySQL. Когда вставляешь данные из PHP в текстовое поле таблицы на русском языке, оператор mysql_query() не...

Функция recv принимает неизвестные данные
Проконтролировал отладчиком программу. Выяснил что клиент получает пустую строку т.е. (""), хотя на сервере никакой отправки не...

Не принимает данные с формы для удаление
есть скрипт для вывода данных с MySQL. но не работает FOREACH. выдает ошибку Warning: Invalid argument supplied for foreach() in...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru