Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 10:13   #1
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
Радость Как записать в COM порт символы CR и LF ???

Ребят, как записать в COM порт символы возврата каретки и переноса сроки CR и LF?
При попытке записи посредствам команды WriteFile, каждый символ транслируется в HEX, всё бы ничего, но символы CR и LF транслируются не правильно. Как бы сделать так, чтоб они транслировались именно в 0D и 0A ?
FarStar вне форума Ответить с цитированием
Старый 06.06.2011, 10:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
но символы CR и LF транслируются не правильно
Врете

Отранслируйте сами.
p51x вне форума Ответить с цитированием
Старый 06.06.2011, 10:51   #3
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

Ну почему же.
Вот есть у меня строка в ASCII такого плана :010609000001EF CR LF
которую надо отправить на контроллер, но надо отправить в HEX,
причём ":" должно равняться "3A",
а CR и LF соответственно "0D" и "0A".
Тоесть строка должна быть такого плана:
3A 39 31 39 36 30 39 30 30 30 30 30 31 45 46 0D 0A
Как быть - то ?
FarStar вне форума Ответить с цитированием
Старый 06.06.2011, 11:07   #4
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

А вообще можно ли как то выбирать тип данных, которые я хочу отправить в COM порт? Вот в программах-терминалах, например COM port tool kit, можно выбирать что ты отправляешь, строку в ASCII или в HEX. Можно ли где - то это настроить?
FarStar вне форума Ответить с цитированием
Старый 06.06.2011, 13:12   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
А вообще можно ли как то выбирать тип данных, которые я хочу отправить в COM порт?
Байты, что в них уже ваша забота.

Цитата:
Вот в программах-терминалах
Перевод хекс-строки в байты - тема избитая и элементарная.

Цитата:
Тоесть строка должна быть такого плана:
3A 39 31 39 36 30 39 30 30 30 30 30 31 45 46 0D 0A
Объявить массив чаров и осознать "\r\n" в С++

Последний раз редактировалось p51x; 06.06.2011 в 13:15.
p51x вне форума Ответить с цитированием
Старый 06.06.2011, 14:00   #6
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

А таймауты обязательно настраивать в ком порте или стандартные подойдут?
FarStar вне форума Ответить с цитированием
Старый 06.06.2011, 14:57   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Все зависит от оконечного устройства и протокола.
p51x вне форума Ответить с цитированием
Старый 06.06.2011, 15:48   #8
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

Да чё ж делать то...не работает ничего :-))
Вот есть программа COM Port toolkit. В ней я могу выбрать тип вводимых дланных типа HEX и ввести строку 3A 39 31 39 36 30 39 30 30 30 30 30 31 45 46 0D 0A
Отправляю в порт и контроллер на неё правильно реагирует.
В С++ пишу:
char buf[]="3A 39 31 39 36 30 39 30 30 30 30 30 31 45 46 0D 0A";
WriteFile(Тра лала,buf,strlen(buf)тра лала);
И КОНТРОЛЛЕР ВООБЩЕ НИКАК НЕ РЕАГИРУЕТ....
Думаю, что это значит только одно - программа COM Port ToolKit как то по хитрому отправляет это сообщения, не так как я, по этому всё и работает.
Где косяк то ?
FarStar вне форума Ответить с цитированием
Старый 06.06.2011, 15:54   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
char buf[]="3A 39 31 39 36 30 39 30 30 30 30 30 31 45 46 0D 0A";
Откройте учебник и посмотрите как задаются в с++ 16-ричные числа.
p51x вне форума Ответить с цитированием
Старый 06.06.2011, 16:06   #10
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
char buf[]="3A 39 31 39 36 30 39 30 30 30 30 30 31 45 46 0D 0A";
Откройте учебник и посмотрите как задаются в с++ 16-ричные числа.
Ну подскажи мне итить колотить.
Ты имеешь ввиду это что ли:
buf[]="0x3A 0x39 0x31....." ? Так тоже не работает.....
FarStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прослушать порт SERG1980 Работа с сетью в Delphi 3 31.10.2008 09:43
как узнать порт? [Smarik] Свободное общение 0 04.07.2008 22:38
Как опросить COM-порт Д'якон Win Api 10 23.02.2008 12:15
Как записать в com -порт или модем двоичные данные sergrom Win Api 10 25.06.2007 15:15
Как открыть порт? Анатолий74Rfckb Работа с сетью в Delphi 5 04.02.2007 19:38