Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35

COM порт - получение данных

01.02.2015, 23:42. Показов 5173. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно задача такая: для начало нужно получить любые данные с com порта с прибора.
Есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
ComPort.PortName = Convert.ToString(cboPorts.Text);
                ComPort.BaudRate = Convert.ToInt32(cboBaudRate.Text);
                ComPort.DataBits = Convert.ToInt16(cboDataBits.Text);
                ComPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cboStopBits.Text);
                ComPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), cboHandShaking.Text);
                ComPort.Parity = (Parity)Enum.Parse(typeof(Parity), cboParity.Text);
ComPort.Open();
             Thread.Sleep(500);
            int byteRecieved = ComPort.BytesToRead;
            byte[] messByte = new byte[byteRecieved];
            ComPort.Read(messByte, 0, byteRecieved);
            ComPort.Close();
Свойства для открытия порта ставятся динамически. Вопрос в том почему пустой массив байтов messByte?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2015, 23:42
Ответы с готовыми решениями:

Получение данных входящих на порт
Хочу написать программу, которая будет выводить на экран все, что приходит на определенный порт. Может кто-нибудь помочь ссылкой, кодом,...

Получение и передача данных через COM порт
Добрый день Мне кажется, я изобретаю велосипед и должно быть полно примеров такого кода. Но ничего найти не удалось. Суть:...

Получение данных по запросу через COM Порт
Добрый день. Сначала немного опишу общую картину. Имеется электронная индикаторная головка с подключение к ПК через USB порт, но...

51
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
01.02.2015, 23:44
Цитата Сообщение от сеня2007 Посмотреть сообщение
пустой массив байтов messByte?
А данные точно приходят? Известно их количество (в байтах)?
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
01.02.2015, 23:46  [ТС]
Вообще ничего не приходит. Вообще хоть 1 байт да должен прийти. Дело в том что переходник даже не горит 485
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
01.02.2015, 23:59
Цитата Сообщение от сеня2007 Посмотреть сообщение
переходник даже не горит
Так, давай все по порядку.
Что за переходник, какого типа, какое устройство (программа) отсылает вам данные, формат этих данных и так далее. Чем подробнее расскажете, тем легче можно помочь.
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
02.02.2015, 02:02  [ТС]
Переходник c2000 usb 485 интерфейс. Устройство незнакомое мне, могу скинуть протокол. Протокол.
0
1 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 79
02.02.2015, 06:55
Цитата Сообщение от сеня2007 Посмотреть сообщение
Собственно задача такая: для начало нужно получить любые данные с com порта с прибора.
Есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
ComPort.PortName = Convert.ToString(cboPorts.Text);
                ComPort.BaudRate = Convert.ToInt32(cboBaudRate.Text);
                ComPort.DataBits = Convert.ToInt16(cboDataBits.Text);
                ComPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cboStopBits.Text);
                ComPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), cboHandShaking.Text);
                ComPort.Parity = (Parity)Enum.Parse(typeof(Parity), cboParity.Text);
ComPort.Open();
             Thread.Sleep(500);
            int byteRecieved = ComPort.BytesToRead;
            byte[] messByte = new byte[byteRecieved];
            ComPort.Read(messByte, 0, byteRecieved);
            ComPort.Close();
Свойства для открытия порта ставятся динамически. Вопрос в том почему пустой массив байтов messByte?
Вот здесьhttp://www.kernelchip.ru/pcports.php уроки и конкретные примеры работы с ком портом. Очень доступно
Я с LPT работал по этому сайту ))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.02.2015, 06:59
сеня2007, написал бы сначала консольное приложение с захардкоженными параметрами, потом будешь наводить марафет с гуями. Открой порт и сделай блокирующий Read, напиши хоть один байт, и всё.
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
02.02.2015, 09:16  [ТС]
Так разница какая консоль или нет, дело в том что ответа нет вообще никакого. Я новичок в этом деле. Но вроде бы все должно быть!
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.02.2015, 09:21
сеня2007, вы сами читали протокол? Там же ясно сказано: датчики начинают отвечать только по запросу Мастер-устройства. У вас же никаких запросов для попытки получить ответ я не увидел...
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
02.02.2015, 12:32
...ну и кроме отсутствия запроса добавил бы по самой логике приложения: вы, TC, открыли порт, подождали 500 мс, потом вздумали прочитать и сразу закрыли порт. А теперь представьте, что данных еще нет или уже ушли, а вы тут такой взяли и закрыли порт. У обертки ComPortнаверняка есть собственное событие поступления данных и собственный поток их чтения, не изобретайте велосипеды. При бесконечном считывании необходимости постоянно открывать-закрывать порт нет.
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
02.02.2015, 21:38  [ТС]
Пишу так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  byte[] p = new byte[10];
   for( int i = 0; i < 10; i++ ) p[i] = 0;
 
   /* Пакет для передачи */
   p[0] = 0xB5;
   p[1] = 1;
   p[2] = 0;
   p[3] = 0x29;
   for( int z = 1; z < 4; z++ ) p[4] = (p[4] + p[z])%256;
            ComPort.Write(*p, 0,5);
            for( int i = 0; i < 10; i++ ) p[i] = 0;
            Thread.Sleep(500);
            int byteRecieved = ComPort.BytesToRead;
            byte[] messByte = new byte[byteRecieved];
            ComPort.Read(messByte, 0, byteRecieved);
Ругается на:
Неявное преобразование типа "int" в "byte" невозможно. Существует явное преобразование p[4] = (p[4] + p[z])%256
К указателю должен быть применен оператор * или -> ComPort.Write(*p, 0,5);
Может быть кто знает как с этим справиться?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.02.2015, 21:52
Цитата Сообщение от сеня2007 Посмотреть сообщение
Может быть кто знает как с этим справиться?
А зачем вы вообще используете указатель?
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
02.02.2015, 21:54  [ТС]
Хотя да можно просто передать переменную. Как мне быть с первой ошибкой?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.02.2015, 22:17
Цитата Сообщение от сеня2007 Посмотреть сообщение
Как мне быть с первой ошибкой?
сеня2007, я посмотрю внимательнее описание протокола и попробую написать вам пример. Но не сегодня, скорее всего завтра. Так вас устроит?
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
02.02.2015, 22:31  [ТС]
Конечно. Устроит любой пример. Буду ждать. Примного благодарен
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.02.2015, 23:20
Цитата Сообщение от сеня2007 Посмотреть сообщение
Буду ждать.
Попробуйте узнать, есть ли в наличии более полное описание протокола. Тут оно довольно куцее. Надо бы подробнее.
0
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
03.02.2015, 00:24  [ТС]
Есть класс описанный на с++, реализующий протокол:
класс

Добавлено через 38 секунд
Больше никаких данных нет
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.02.2015, 09:24
...хватит партизанить, выложите полную версию протокола. У вас описание резко обрывается и продолжается с пункта 1.10, потом перескакивает с 1.13 на 2.3. А беглый запрос на формат запроса "<SB><ADDR><NBB><CMD><D1><D2>...<Dn><CHK S>" дает ссылку на тему с моими ответами на программерсе с обсуждением обмена с уровнемером ПМП-200, видимо дерут друг у друга протоколы.

Больше никаких данных нет
это надо прежде всего вам. Потрудитесь связаться с разрабами и попросить полную версию.
1
1 / 1 / 0
Регистрация: 01.02.2015
Сообщений: 35
03.02.2015, 13:02  [ТС]
Не дают все что мне дали я скинул сюда, больше ничего нет. Помогите чем можете!!
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
03.02.2015, 13:09
Цитата Сообщение от сеня2007 Посмотреть сообщение
Не дают
Ну так им нужна программа или нет? Тем кто дал вам такое задание? Вот и пусть дают протокол полностью!
Цитата Сообщение от сеня2007 Посмотреть сообщение
Помогите чем можете!!
Помочь-то не так сложно, но поймите-же, ЧТО я буду подставлять программе как запрос? Пустые байты? Максисиум что можно сделать - написать нечто вроде каркаса, но без точных значений запроса, соответствующих протоколу, это не заработает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2015, 13:09
Помогаю со студенческими работами здесь

Получение данных с весов, подключенных к ПЛК PSA-04.12.0220.00.00 через COM-порт over радиоканал
Помогите новичку. Появилась необходимость поправить программку, написанную на Дельфи. Исходников нет - насколько смогла, декомпилировала,...

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

Передача данных в COM порт
Привет всем! Помогите с кодом. Есть цифровой магнитофон для охранных нужд. В руководстве пользователя есть такая таблица кодов для...

Передача данных на com порт
Здравствуйте. Написал прогу, которая отправляет сообщение по байтово в виде char, как переделать ее так, чтобы отправлялось в виде массива,...

Передача данных на COM-порт
Проблемма в том что при передаче масива байтов на COM-порт программа зависает, а на COM-порт ничего не передаётся(проверялось...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru