Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с COM портом. Не читает. Функция ReadFile для COM порта возв. лож 
V
    Опции темы
Den64
Дата 6.2.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: нет
Всего: 2



  К компорту ничего неподключено, выход(Tx) соединён со входом(Rx) порта. Т.е что передано из порта то и должно быть принято.
  Открытие порта и передача работают правильно, а приём возвращает False.
  Не найду ошибку, подозреваю функцию ReadCOM.
  Подскажите что нетак делаю. (Хоть какие предположения плиз)

Код


void __fastcall TForm1::Button1Click(TObject *Sender)  //кнопка
  {
   static unsigned char OutMassageCOM[16];
   static unsigned char InMassageCOM[16];

   HANDLE p=OpenCOM("COM1"); // открывает порт

   OutMassageCOM[0]=1;   
   WriteCOM(p,OutMassageCOM,1); // передаёт сообщение длинной 1 байт

   Sleep(80); //ждёт 80 мСек

   if (ReadCOM(p,InMassageCOM,1))  Edit3->Text="Ok";// приём (возвр ошибку)
   else   Edit3->Text="Error";

   CloseHandle(p); // закрывает порт
  }

bool ReadCOM(HANDLE COMFile, void * buffer, int count = 1)// чёта ниправильна
  {
   unsigned long int a = 0;
   return ReadFile(COMFile,
            buffer,
            count,
            &a,
            NULL);
  }

HANDLE OpenCOM(char * NameCOMPort)
  {
   return CreateFile(NameCOMPort,                
                     GENERIC_READ/GENERIC_WRITE, 
                     0,                          
                     NULL,                       
                     OPEN_EXISTING,              
                     FILE_ATTRIBUTE_NORMAL,      
                     0);                         
  }

bool WriteCOM(HANDLE COMFile,void* buffer, int count = 1)
  {
   unsigned long int a1 = 0;
   unsigned long int* a=&a1;
   return WriteFile(COMFile, 
                    buffer,  
                    count,   
                    a,       
                    NULL);   
}


--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
Romikgy
Дата 6.2.2007, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(Den64 @  5.2.2007,  23:33 Найти цитируемый пост)
Т.е что передано из порта то и должно быть принято.

эт те не lpt порт, у сом порта 2 буфера на передачу и на прием, из этого следует , что , то что ты передал на передачу ты никогда не прочитаешь заново,
а было бы синхроное чтение, то получил бы висяк


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Den64
Дата 6.2.2007, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: нет
Всего: 2



Спасибо за отает Romikgy.

На щёт таво что то что передал больше не примешь я несогласен, всё что поступило на вход сохраняется во входном буфере до прочтения.
 Подключал вход и к устройству. Устройство отвечает, но прочитать немогу.
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
Anikmar
Дата 6.2.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 59



А что GetLastError говорит? Что за ошибка конкретно?
PM MAIL ICQ   Вверх
Den64
Дата 6.2.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: нет
Всего: 2



Не проверял на счёт GetLastError. Щас проверю. Спасибо.
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
Den64
Дата 6.2.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: нет
Всего: 2



GetLastError возвращает 5.

В помощи(C++Builder6)  пока ненашол..
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
Romikgy
Дата 6.2.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Код

LPVOID lpMsgBuf;
 
FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL 
);

// Display the string.
MessageBox( NULL, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );

// Free the buffer.
LocalFree( lpMsgBuf );




--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Den64
Дата 8.2.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: нет
Всего: 2



С помошью подсказок Romikgy и Anikmar нашол жука.
GetLastError выдавала 5.
Воспользовался функцией FormatMessage выдала: Отказано в доступе.
Затем я увидел что у меня вместо символа "|" стоит символ "/".

Код


HANDLE OpenCOM(char * NameCOMPort)
  {
   return CreateFile(NameCOMPort,                
                 // GENERIC_READ/GENERIC_WRITE, 
  /*нужно*/  GENERIC_READ|GENERIC_WRITE,
                     0,                          
                     NULL,                       
                     OPEN_EXISTING,              
                     FILE_ATTRIBUTE_NORMAL,      
                     0);                         
  }

Разрешена была только запись.

--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
Sleepman
Дата 27.2.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.1.2005
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Den64 @  6.2.2007,  00:33 Найти цитируемый пост)
К компорту ничего неподключено, выход(Tx) соединён со входом(Rx) порта. Т.е что передано из порта то и должно быть принято.


Мне необходимо нечто похожее, поэтому поинтересуюсь у автора...
другие пины разъема висят открытыми (пин заземления не надо никуда совать - заземлять),
Не хочу просто комп убить.

У меня задача похожая... но в конечном итоге выглядит не так.
Мне нужно написать драйвер, пристыковать его к стандартным драйверам послед. порта и в
момент происхождения прерывания... он должен, ну хотя бы что-нибудь "крикнуть".

Начну хотя бы с user-mode ... приложения
Металл перемычки, кстати, не имеет значения?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.