Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа через COM порт: искажение данных

19K
05 сентября 2006 года
voral
5 / / 05.09.2006
Исходные:
Делаю проект на Visual C++. Программа будет передавать данные по COM порту железяке. Для разработки есть:
- программный эмулятор железяки (вещь проверенная)
- Virtual Serial Port Driver XP 5 - создает виртуальные порты и соединяет
- PortMon - мониторит порты
- ну и моя програма
Связь происходит по определенному протоколу. Железяка мастер - прога слейв. Для примиера схема связи:
железяка-COM1-COM6-программа

Проблема:
Если пакеты не большие по 5 байт. Обмен идет нормально.
Железяка отправляет пакет 16 байт. portmon отражает ушедший в порт1 пакет все правильно, а вот из 6 порта приходит только 13 байт: первые 9 байт правильные, а остальные неправильные (но при одном и том же пакете одинаковые). Ну и еще последний байт по значению правильный.


При открытии порта насройки одинаковые. portmon отражает это. Только одно отличие:
от железяки:
IOCTL_SERIAL_SET_HANDFLOW VSerial0 SUCCESS Shake:0 Replace:0 XonLimit:0 XoffLimit:0
от проги:
IOCTL_SERIAL_SET_HANDFLOW VSerial1 SUCCESS Shake:0 Replace:48 XonLimit:0 XoffLimit:0

Что это за параметр: Replace?
Как его установить?
Может сталкивались или есть идеи?


Помогите, плиз. Полтора дня бъюсь над этим.... :(
19K
05 сентября 2006 года
voral
5 / / 05.09.2006
ТОлько, что выяснил из данных пропадают все нулевые байты. Это решаемо или мне грешить на эмулятор соединения портов?

Кроме VSPD XP 5 какие-нибудь эмуляторы для соединения через сом-порты есть?
252
05 сентября 2006 года
koderAlex
1.4K / / 07.09.2005
а соединить порты мамы кабелем не пробовал ? ) как самое простое .
260
05 сентября 2006 года
Ramon
1.1K / / 16.08.2003
[QUOTE=voral]ТОлько, что выяснил из данных пропадают все нулевые байты. Это решаемо или мне грешить на эмулятор соединения портов?

Кроме VSPD XP 5 какие-нибудь эмуляторы для соединения через сом-порты есть?[/QUOTE]

Господин voral, Вы бы лучше код привели. Гадание на кофейной гуще и пляски с там тамами здесь не практикуются.

PS: И еще, в сети примеров класса-врапера для сериального порта видимо не видимо, выбираешь из них наиболее отвечающий требованиям, дорабатываешь если надо, прикручиваешь к нему свой протокол и радуешься.
16K
05 сентября 2006 года
aragaer
25 / / 28.07.2006
Если я правильно помню, сигнал Data send ready (или как его там) у COM-порта возникает тогда, когда в буфере пусто. Нулевой байт это и есть "пусто". Поэтому если ориентироваться на прерывания, идущие от COM-порта, то с нулевыми байтами могут быть проблемы.
19K
05 сентября 2006 года
voral
5 / / 05.09.2006
Всем спасибо за внимание.

ПРоблему решил. Заключалась она в виртуальных портах (точнее в порте COM 6). (независимо от того какой утилитой я организую). Создал (при помощи VSPD XP) соединеие COM1(overlaped) - COM3(overlaped) и все заработало.
На нотере (физически нет сомпортов). Соединение COM1-COM2 также все заработало.

Может это связано с тем что в биосе, вроде, предусмотрено только 4 компорта..........
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог