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

Реализация двунаправленного кольца на COM портах

22.04.2014, 21:40. Показов 1269. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо реализовать двунаправленное кольцо на COM портах
Кадр состоит из следующих полей:
Стартовый байт
Адрес отправителя
Адрес получателя
Тип кадра
Длинна поля данных
Данные
Стоповый байт
Проблема в том, что иногда не все данные приходят или приходят сразу оба кадра
Как проверят готовность COM порта к принятию данных?
Как внутри буфера определить где начало, а где конец кадра?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2014, 21:40
Ответы с готовыми решениями:

Рекурсивное создание двунаправленного кольца
Рекурсивное создание двунаправленного кольца, собственно это и задание. Подсобите для начала алгоритмом, а то наработки не могу дать,...

Реализация Двунаправленного списка
Ребят, что он хочет от меня, ошибка компиляции, понять не могу в чем проблема, у меня еще просто компилятор не пишет причину ошибки а...

Реализация двунаправленного списка на C#
Помоги, пожалуйста. Как реализовать процедуры перемещения элементов двунаправленного списка в очередь и наоборот, чтобы список...

6
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.04.2014, 22:19
Цитата Сообщение от AlexOpryshko1 Посмотреть сообщение
Как проверят готовность COM порта к принятию данных?
Проверять по свойству BytesToRead.
Цитата Сообщение от AlexOpryshko1 Посмотреть сообщение
Как внутри буфера определить где начало, а где конец кадра?
Так вы же сами передачу организовываете, значит знаете что передается.
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 41
22.04.2014, 22:23  [ТС]
То есть, мне нужно по байту вытаскивать из буфера com порта пока не встречу стоп байт?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.04.2014, 22:25
Цитата Сообщение от AlexOpryshko1 Посмотреть сообщение
То есть, мне нужно по байту вытаскивать из буфера com порта пока не встречу стоп байт?
Зачем? Организуйте цикл ожидания заполнения буфера порта, как он заполнился всей посылкой (вы же знаете, сколько байт должно прийти), так все считали.
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 41
22.04.2014, 22:34  [ТС]
Стоп
Допустим я отправляю с pc1 на pc2 10 байтов
На pc1 я знаю сколько отправил, а на pc2 как я узнаю сколько принять?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.04.2014, 22:37
Цитата Сообщение от AlexOpryshko1 Посмотреть сообщение
я отправляю с pc1 на pc2 10 байтов
Ну наверное столько сколько и отправили, я думаю. Разве нет?
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
23.04.2014, 14:55
Лучший ответ Сообщение было отмечено AlexOpryshko1 как решение

Решение

AlexOpryshko1, принятые данные складывайте в какой-нибудь List<byte>, после принятия каждого байта сравнивайте размер этого списка с ожидаемым размром принимаемого сообщения... как то так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
List<byte> InputBuffer;
...
try
{
InputBuffer.Add(serialPort1.BaseStream.ReadByte());
if(WantLength(InputBuffer)>=InputBuffer.Length)
{
//принят полный пакет
}
}
catch(TimeOutException e)
{
//время на принятие пакета истекло
}
...
int WantLength(List<byte> buffer)
{
if (buffer.Length<=5)
return int.MaxValue;
return (buffer[5]+6);
}
Добавлено через 1 минуту
и да, пакет в таком случае не может иметь размер больший чем 256 байт, и соответственно на данные уходят всего 250. это при условии что все информационные поля, что вы описали в первом посту, однобайтные.

Добавлено через 3 минуты
хм... там где-то цикл while() должен быть... если принятие идёт постоянно - то цикл вне try-catch, если принятие начинается после какого-то события - то внутри try-catch.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2014, 14:55
Помогаю со студенческими работами здесь

Реализация стека с использованием двунаправленного списка
Доброго времени суток! Нужно разработать подпрограммы работы со стеком, которые обеспечивают запись и чтение(стек организован на массиве...

Ввести внутренний и внешний радиусы кольца. Найти площадь кольца
1.Ввести внутренний и внешний радиусы кольца. Найти площадь кольца.

Определить радиус кольца r, если индукция магнитного поля в центре кольца B=3 мкТл
Помогите пожалуйста. На концах проволочного кольца сопротивлением R=5 Ом разность потенциалов U=3 В. Определить радиус кольца r, если...

Найти работу сил поля по перемещению заряда q из центра кольца в точку, находящуюся на оси кольца
Помогите, пожалуйста, решить. Кольцо радиуса R заряжено с линейной плотностью заряда ז. Найдите работу сил поля по перемещению заряда...

Сигналы на I/O портах
Есть вопрос по портам ввода-вывода (Xmega 128A1). Используются 16 выводов на разных портах, от А до Q, на каждом из них могут появиться...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru