|
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
|
||||||
.NET 4.x Прием сигнала по RS-23201.02.2012, 15:38. Показов 14064. Ответов 10
Метки нет (Все метки)
Здравствуйте, специалисты, помогите пожалуйста разобраться с приемом по RS-232, пол дня потратил впустую.
Я создал коротенкую программу, параметры порта и установки знакомой многим программе terminal, приведены в прилагаемом скрине. Я сейчас попробую все изложить чтобы не упустить какой-то момент, если где-то будет непонятно, переспросите я все разъясню. В общем вот этот код
Работает идеально сам на себя. Если запустить вторую такую копию, назначить другой порт то эти две программы также замечательно обмениваются друг с другом. Но как только я захотел передать с программы terminal такое же слово, мой оптимизм испарился. В момент приема, моя программа весит в событии, затем заканчивается установленное время ожидания приема и выскакивает исключение "превышено время ожидания". Ни каких данных я не получаю, и непонятно почему срабатывает тогда событие по приему, если он ни чего не получает. Помучавшись немного я заменил строку ReadLine на ReadChar, и у меня что-то получилось, я передал один символ и принял вместо символа число (но это понятно, надо его декодировать), попробовал другой метод Readbyte, и передал уже не один символ а три (123), и тут снова началась абракадабра, он принимает то 50, то 51 (последний, предпоследний). Я понимаю если бы он читал только первый символ (49), или последний (51), но это вообще рандом какой-то. Что-то я пробовал еще, уже не помню, там вообще непонятные числа на приеме. И грешить на эту программку terminal не очень охото, пакеты она отправляет исправно, пачками, у меня контроллер их успешно ловил и оборабатывал. Пожалуйста помогите, может есть какие-то принципы о которых я не знаю. Заранее благодарю.
1
|
||||||
| 01.02.2012, 15:38 | |
|
Ответы с готовыми решениями:
10
RS-232. Передача и прием данных Прием данных с RS-232 на больших скоростях. Выбор решения и вектор развития Прием сигнала. |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 01.02.2012, 15:59 | |
|
Для правильной передачи данных настройки на обоих портах должны совпадать (Baud rate, data bits, stop bits, parity, handshake).
В приведенном вами коде отсутствуют какие-либо установки настроек порта. Вероятно, выставлены в дизайнере.
1
|
|
|
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
|
|
| 01.02.2012, 16:47 [ТС] | |
|
да, выставлены в дизайнере и вроде все совпадает, на приложенном скрине видно
Добавлено через 1 минуту и главное моя програмка в этот терминал то кидает стабильно, а наоборот не очень
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 01.02.2012, 16:51 | |
|
1
|
|
|
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
|
||||||
| 02.02.2012, 05:35 [ТС] | ||||||
|
блин...
![]() мне кажется это я уже танцы с бубном начал устраивать. сейчас ком порта нету под рукой, завтра попробую отпишусь. Спасибо. Добавлено через 12 часов 37 минут Здравствуйте, поменял количество стопбитов на 1, потом везде сделал 2, и ни чего ![]() Я помню, что я это уже от отчаяния начал колдовать. поэтому такое несоответствие отпечаталось. В общем не работает. Причем я заметил, что обработчик события
0
|
||||||
|
86 / 86 / 6
Регистрация: 14.01.2011
Сообщений: 265
|
|
| 02.02.2012, 05:46 | |
|
Попробуйте работу с com портом на чистом winapi!
Исходники для программ передачи/приёма символов через com-порты
2
|
|
|
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
|
|
| 02.02.2012, 08:57 [ТС] | |
|
короче я нашел разницу, вот тот рисунок строки 123, у которого сигнал длиннее, это моя программа (извините за анатомические подробности),
где короче, это сигнал terminala. Причем эти два сигнала схожи, но последние три импульса в конце непонятны. Но terminal распознает эти импульсы легко. Подскажите пожалуйста, какая у меня стоит установка которая требует наличие эти три последних импульса?
1
|
|
|
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
|
||||||
| 02.02.2012, 13:51 [ТС] | ||||||
|
вроде эти три импульса какое-то "А" в шестнадцатеричной.
Добавлено через 3 часа 16 минут Я поиследовал еще немного и оказалось что толком работает только один метод чтения, все остальные имеют какие-то глюки, может кого натолкнет на какие-то мысли, каждый метод закоментирован и описание тоже.
1
|
||||||
|
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
|
|||||||||||||
| 02.02.2012, 14:09 | |||||||||||||
|
Уважаемый leonidSDF, не выдержал Ваших плясок с бубном и поэтому решил вмешатся!
Просто разные методы предназначены для разных случаев чтения! Вам необходимо точно знать что Вы посылаете в порт и что хотите сосчитать! Есть такое замечательное понятие как протокол обмена Вы его не используете отсюда и все Ваши беды! например, чтобы прочитать правильно всю строку (любой длины), поставте признак конца строки
и тогда Ваш код
2
|
|||||||||||||
|
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
|
|||||||
| 02.02.2012, 17:03 [ТС] | |||||||
|
еще я узнал как пользоваться методом readByte() оказывается что если написать такой кусочек
Но вот только странно, ведь этот метод, когда встречает пустое место в буфере то возвращает -1(так написано в описании), но если написать такой же кодик но в условии поставить tempInt !=-1, то ни чего не получится. Он считает три символа, а потом зависнит и будет ждать пока не закончится время. И почему этот метод, в первой реализации, как-то странно отпечатывал байты - парами, а потом куски от оставшихся. Может быть я привык к контроллерам, будем считать что идет непрерывно передача данных, пришло прерывание(сработало событие) прочитал данные, буфер свободен, на его место уселось другое число, сново сработало событие и так далее, ведь ПК работает на гараздо большей частоте чем скорость 9600, а тут как будто не успевает. И как например считать из буфера массив байтов или символов, он считывает все сразу в массив или тоже есть какие-то тонкости типа newLine(результат плясок я приводил выше). Спасибо
1
|
|||||||
|
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
|
|||||||||||||||||||
| 02.02.2012, 17:49 | |||||||||||||||||||
Сообщение было отмечено как решение
Решениенапример рассмотрим посылку- в первом байте содержится число передаваемых байт, затем нужное число байт данных и байт контрольной суммы. И все! Прочитав первый байт, Вы уже знаете сколько Вам надо читать, байт КС всегда последний(кстати его можно и не передавать) это для надежности связи его передают и вычисляют КС, если не совпало-ошибка. По поводу "тонкости типа newLine" я обычно при таком типе обмена, загоняю принятые байты в стек,и жду когда количество принятых будет равно необходимому вот пример(не особо партесь по поводу переменных, это код готового проекта, я даю Вам принцип)
Добавлено через 26 минут Вообще протокол должен содержать следующее 1-признак начала передачи(например байт 0x55) 2-байт числа байтов в кадре ...данные 3-байт контрольной суммы (КС) 4-признак конца передачи например байты соответствующие "\r\n" (0x0A, 0X0D)
2
|
|||||||||||||||||||
| 02.02.2012, 17:49 | |
|
Помогаю со студенческими работами здесь
11
[Windows Phone] Поиск и прием gps сигнала Attiny 13 прием и передача ик сигнала Улучшить приём Wi-Fi и качество сигнала Прием сигнала с пульта радио управления Что отвечает за приём сигнала wi-fi, какой чип подобрать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Управление камерой с помощью скрипта 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. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|