|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
||||||
Передача через COM - порт: разобраться с количеством битов04.12.2012, 17:00. Показов 8292. Ответов 21
Метки нет (Все метки)
Была поставлена задача проверить работу последовательного порта.
Передаваемые данные генерируются, принимаемые данные накапливаются в памяти; дополнительный контроль - суммированием посылок с циклическим переносом; скорость обмена - от 1200 до 19200 Бод; длина байта - 5 бит. Поскольку всего 5 бит информационные, то достаточно полинома 3 степени и 3 бит для проверки, что вписывается в байт. Мне показалось, что отправлять целый байт с 3 битами проверочных символов, это кощутство, да и на производительности хреново скажется. Поэтому решил допихивать их в байт с информацией.Хотя тоже спорный вопрос. Возник вопрос, как подобное действие совершить? Саму передачу я вижу как то так.
Возможно я не понимаю самого смысла и правильнее будет собрать сначала 4 байта информации( 8 сгенерированных чисел) затем воспользоваться CRC 4 и получить еще 4 байта хеша и отправить в догонку? В общем вопросов много, нужно, чтобы кто то помог поставить мозги на место.
0
|
||||||
| 04.12.2012, 17:00 | |
|
Ответы с готовыми решениями:
21
Передача данных через ИК порт Передача сообщений через com порт на си Передача через COM-порт. Отображение |
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
||
| 04.12.2012, 17:09 | ||
|
что могу сказать, есть хороший класс SerialPort в неймспейсе System.IO.Ports позволяет легко получать/отправлять данные на СОМ порт. CRC советую вычеслять для посылке в целом, а не для одного байта в посылке. могу скинуть метод генерации CRC16 (2 байта), если надо. слишком большой CRC, на мой взгляд, не нужен, т.к. он в первую очередь отлавливает нечётные ошибки, и его увеличение мало что даст (хотя в этом могу ошибаться).
0
|
||
|
|
|
| 04.12.2012, 17:12 | |
|
...вам проверять работу связи в условиях помех нужно или абы чтобы было? Или модуль протокола какой реализуете? Hу реализуйте контроль CRC как сумму всех предыдущих байт.
CRCL = LOW (CRC); CRCH = HIGH (CRC) + LOW (CRC); и двумя байтами в конце.
0
|
|
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
|||||||||||||||||
| 04.12.2012, 17:36 [ТС] | |||||||||||||||||
|
О классе знаю, но использовать его запрещено.
Поэтому я выкручивался через ReadFile WriteFile. Для этого пришлось их импортировать.
Добавлено через 12 минут
Никаким модулем протокола это и не пахнет, просто мне нужно получить данные, как изменяется реальная скорость передачи данных с CRC проверкой в зависимости от настроек порта. Мне важен сам факт нахождения ошибки, даже не важно какой. Это такая лабораторная работа. Поэтому задание такое кривое.
0
|
|||||||||||||||||
|
|
||
| 04.12.2012, 17:51 | ||
p.s.: вот ежели вы по реализуете запрос на повтор передачи ошибочно принятого пакета, вот тогда - да.
0
|
||
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
||
| 04.12.2012, 18:00 | ||
|
не совсем, можно интервал между посылками не делать, а отправлять следующий запрос по приходу ответа.
таким образом время потери при отправки сообщения с CRC = (время формирования CRC)+(количество байт в CRC * 8)/скорость в бодах другое дело что, насколько я вижу, при данном коде непонятно сколько время уйдёт на генерацию странной ошибки (чёрт его знает насколько продуктивный класс рандома), а потом, сверху него, всё равно высчитается CRC, что делает данную проверку совсем уж странной.
0
|
||
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
||||
| 04.12.2012, 18:24 [ТС] | ||||
|
Я принципи это прекрасно понимаю, но преподаватель поставил такое задание, мне нужно нарисовать ему график и показать , что программа работает.
Нет, суть задачи в том, что через видимые промежутки времени мне нужно сгенерировать число, состоящее из 5 бит, затем передать его, на принимающей стороне стоит буфер и накапливает их, когда буфер заполняется, он тупо выводит мне полученные данные и результаты в соответствующие listbox'ы. Добавлено через 11 минут
Возможно моя проблема в том, что 5 бит я рассматриваю, как последоватльность из 5 двоичных символов и вполне естественно хочу дописать к ним еще 3 проверочных.
0
|
||||
|
|
|
| 04.12.2012, 20:08 | |
|
...вы все время упоминаете полином. А сами понимаете, каким образом он будет корректировать (не обнаруживать) ошибку? Потому как CRC и использование циклического кода-полинома - не одно и то же, почитайте про БЧХ-коды.
0
|
|
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
||
| 04.12.2012, 20:26 [ТС] | ||
|
В общем решил сделать так, байты отправляю по мере создания, когда набирается пачка и n(заданное число), вычисляю CRC и отправляю следом. Возникла проблема. Все пачки приходят с ошибкой , но генерация случайной ошибки отключена. И на глаз, такое ощущение, что когда начинаю, он выводит мусор сначала, а потом уже нужные мне символы,в итоге получаю сдвиг и Хэш, понятное дело, не совпадает.
Прилагаю целиком проект.
Ни задача, ни программа не имеют никакого хоть сколько-нибудь требуемого для решения реальных задач смысла.Потому что те ограничения, накладываемые на задачу( запрет использования стандартных средств API для осуществления дополнительного контроля, использование только средств Win32 API работы с файлами (функции CreateFile, GetCommState и т.д.) делают эту задачу не более чем обучающей.
0
|
||
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
|
| 04.12.2012, 21:55 [ТС] | |
|
Да мой преподаватель выделил нам VirtualSerialPortDriver 6.9.Там создается сразу пара портов.Я попробовал запустить предложенную вами программу,но потерпел неудачу. Если я запускаю программу, потом portmon,то выдает Ошибка чтения структуры DCB для принимающего порта. Причем повторный запуск не помогает, приходится снова Build программу и только после этого она снова начинает запускаться.
Щас буду пытаться
0
|
|
|
|
||
| 04.12.2012, 22:08 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
|
| 04.12.2012, 23:04 [ТС] | |
|
Посмотрим.
Добавлено через 54 минуты Собственно, вот что я получил: Для отправляющего порта. #0A <COM2: 2012.12.04 22:55:01.987 TX> #08#06#04#02#F9#61#11#10#0E#0C#0A <COM2: 2012.12.04 22:55:02.864 TX> #1C#07#19#17#16#14#12#76#BF#01#1F#1D#1C# 1A#23#19#09#07#05#03#02#4C#45#11#0F#0D <COM2: 2012.12.04 22:55:04.935 TX> #0B#09#A9#E2#18#17#15#13#11#F9#4E#00#1E# 1D#1B#19#5D#14#08#06#05#03#01#30#78#10#0 E <COM2: 2012.12.04 22:55:07.016 TX> #0C#0B#09#C4#1E#18#16#14#12#11#A8#E2#00# 1E#1C#1A#18#CC#84#07#06#04#02#00#F5#E9#0 F <COM2: 2012.12.04 22:55:09.087 TX> #0D#0C#0A <COM2: 2012.12.04 22:55:09.413 TX> #08#91#C8#17#15#13#12#10#8C#A6#1F#1D#1B# 19#18#E8#33#07#05#03#01#1F#05#54#0E#0D#0 B <COM2: 2012.12.04 22:55:11.487 TX> #09#07#5D#3D#16#14#13#11#0F#F1#A2#1E#1C# 1A#19#17#C5#CB#06#04#02#01#1F#68#A8#0E#0 C <COM2: 2012.12.04 22:55:13.569 TX> #0A <COM2: 2012.12.04 22:55:13.674 TX> #08#07#0C#91#15#14#12#10#0E#24#32#1D#1C# 1A#18#16#41#9B#05#03#02#00#1E#ED#8C#0D#0 B <COM2: 2012.12.04 22:55:15.747 TX> #09#08#06#78#25#15#13#11#0F#0E#DD#76#1D# 1B#19#17#15#F5#1E#04#03#01#1F#1D#68#7D#0 C <COM2: 2012.12.04 22:55:17.825 TX> #0A <COM2: 2012.12.04 22:55:17.935 TX> #09#07#05#01#E8#14#12#10#0F#0D#F0#8B#1C# 1A#18#16#15#99#72#04#02#00#1E#1D#39#D1#0 B И для принимающего порта <COM3: 2012.12.04 22:55:01.991 RX> #08#06#04#02#19#01#11#10#0E#0C#0A <COM3: 2012.12.04 22:55:02.870 RX> #1C#07#19#17#16#14#12#16#1F#01#1F#1D#1C# 1A#03#19#09#07#05#03#02#0C#05#11#0F#0D <COM3: 2012.12.04 22:55:04.939 RX> #0B#09#09#02#18#17#15#13#11#19#0E#00#1E# 1D#1B#19#1D#14#08#06#05#03#01#10#18#10#0 E <COM3: 2012.12.04 22:55:07.020 RX> #0C#0B#09#04#1E#18#16#14#12#11#08#02#00# 1E#1C#1A#18#0C#04#07#06#04#02#00#15#09#0 F <COM3: 2012.12.04 22:55:09.092 RX> #0D#0C#0A <COM3: 2012.12.04 22:55:09.422 RX> #08#11#08#17#15#13#12#10#0C#06#1F#1D#1B# 19#18#08#13#07#05#03#01#1F#05#14#0E#0D#0 B <COM3: 2012.12.04 22:55:11.492 RX> #09#07#1D#1D#16#14#13#11#0F#11#02#1E#1C# 1A#19#17#05#0B#06#04#02#01#1F#08#08#0E#0 C <COM3: 2012.12.04 22:55:13.573 RX> #0A <COM3: 2012.12.04 22:55:13.678 RX> #08#07#0C#11#15#14#12#10#0E#04#12#1D#1C# 1A#18#16#01#1B#05#03#02#00#1E#0D#0C#0D#0 B <COM3: 2012.12.04 22:55:15.752 RX> #09#08#06#18#05#15#13#11#0F#0E#1D#16#1D# 1B#19#17#15#15#1E#04#03#01#1F#1D#08#1D#0 C <COM3: 2012.12.04 22:55:17.834 RX> #0A <COM3: 2012.12.04 22:55:17.942 RX> #09#07#05#01#08#14#12#10#0F#0D#10#0B#1C# 1A#18#16#15#19#12#04#02#00#1E#1D#19#11#0 B Большинство символов совпадает, но кое где проскакивают совершенно разные.
0
|
|
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
||||||
| 05.12.2012, 16:28 [ТС] | ||||||
|
Таймаут 300, скорость обмена 1200. Таймер где то в районе 600+- для пачки из 5 символов. Вообще я теперь столкнулся немного с другой проблемой. У меня переданная и принятая информация совпадают, а вот хэш нет....
Добавлено через 16 часов 23 минуты В общем, на данный момент я дошел до следующего.Сами данные у меня передаются правильно.CRC оба раза вычисляется одинаковый, но из-за того, что в настройках Com порта стоит 5 бит, после пересылки на принимающий порт изначальный хеш портится и при сравнении выдает ошибку....Надо править реализацию CRC или шаманить с передачей?
0
|
||||||
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
||||||
| 05.12.2012, 17:14 [ТС] | ||||||
|
В файле ImportFunc.
Просто иначе я вообще не могу понять для чего в задании указывается,что 5 бит информационные.от полинома 3 степени отказались. Или предлагаете реализовать CRC3?Тем более, что проверяю я не каждое число, а целый пакет.
0
|
||||||
|
0 / 0 / 0
Регистрация: 05.11.2011
Сообщений: 13
|
|
| 05.12.2012, 22:43 [ТС] | |
|
А что я неправильно сказал?Этот параметр, как утверждает MSDN, отвечает за "The number of bits in the bytes transmitted and received." То есть количество бит в байте передаваемой и принимаемой информации.Поскольку числа я генерирую от 0 до 31, то в двоичном представлении оно не более 5 бит и нормально передается.А вот когда я вычисляю CRC16, то используется весь байт, то есть все 8 бит.Когда я его передаю,в соответствии с настрочками приходит лишь 5 из 8 бит.Остальные скорее всего просто отбрасываются(не уверен, может затираются).Поэтому отправив, например, CRC хэш 255 254,я получу 31 и 30.Попытаясь сравнить его с внов вычесленным CRC от полученных данных, я получаю всегда ошибку. В итоге данные верные, а хэш не совпадают, и изменение хэша происходит именно в момент передачи чтения.
Что в моих рассуждениях неверно? А прошу я помоч с тем, как выкручиваться из этой ситуации. Если я изменю настрочку lpDCB.ByteSize = 8; то программа будет делать все,как надо, но тогда теряется смысл самого задания в том, что инф символов может быть только 5.
0
|
|
|
|
|||
| 05.12.2012, 23:46 | |||
0
|
|||
| 05.12.2012, 23:46 | |
|
Помогаю со студенческими работами здесь
20
Передача данных через Com порт Передача данных через последовательный порт Передача файлов на телефон через COM порт Передача данных через com -порт на микроконтроллер Получение и передача данных через COM порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|