Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с com port и gps 
:(
    Опции темы
alex6999
Дата 9.2.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



перепробовал много способо найденных в интернете но никак не могу ничего прочитать с GPS
он у меня не на реальном ком-порту, а на USB висит, но винда определяет его как usb-com переходник
может в этом и дело, но карты работают отлично.

по таймеру(кстати может есть способ что-бы winapi вызывало мою функцию, когда чтото появится в порту) я читаю из порта
[code=cppb]
Len=ComPort->ReadBlock(Buf, 1000);
if (Len) Memo1->Lines->Add(AnsiString(Buf, Len));
[/code=cppb]

так вот из порта всегда читается ноль байт.
где у меня ошибка?
спасибо

Код

//---------------------------------------------------------------------------
__fastcall TComPort::TComPort(void)
{
 OverlappedStructure.Offset     = 0;
 OverlappedStructure.OffsetHigh = 0;
 OverlappedStructure.hEvent     = 0;
 iComNumber = 4;
 iBaudRate = 4800;
 hCom = INVALID_HANDLE_VALUE;
}
//---------------------------------------------------------------------------
int __fastcall TComPort::Open(int n)
{
 bool ierr;
 AnsiString ComName;
 ComName = "\\\\.\\COM"+IntToStr(n);

 if(hCom != INVALID_HANDLE_VALUE) Close();

 hCom = CreateFile(ComName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL,
  OPEN_EXISTING, 0, NULL);
 if (hCom == INVALID_HANDLE_VALUE)
   ShowMessage("Cannot Open COM"+IntToStr(n));

if(!SetupComm(hCom, 1024*32, 1024*9))
    {
;//        CloseHandle(hCom);
//        throw ECommError(ECommError::SETUPCOMM);
    }


// GetCommTimeouts(hCom, &Timeouts);
// Timeouts.ReadIntervalTimeout = MAXDWORD;
// Timeouts.ReadTotalTimeoutMultiplier = 0;
// Timeouts.ReadTotalTimeoutConstant = 0;
// Timeouts.WriteTotalTimeoutMultiplier = 0;
// Timeouts.WriteTotalTimeoutConstant = 0;
// ierr = SetCommTimeouts(hCom, &Timeouts);

// if(!ierr) ShowMessage("Cannot Set Timeouts for COM"+IntToStr(n));

 GetCommState(hCom, &dcbBuf);
 dcbBuf.BaudRate = iBaudRate;
 dcbBuf.fBinary = true;
 dcbBuf.fParity = false;
 dcbBuf.ByteSize = 8;
 dcbBuf.Parity = 0;
 dcbBuf.StopBits = 0;
 ierr = SetCommState(hCom, &dcbBuf);

 if(!ierr) ShowMessage("Cannot Set Speed for COM"+IntToStr(n));

 ierr = SetCommMask(hCom, EV_RXCHAR);

 if(!ierr) ShowMessage("Cannot Set Mask for COM"+IntToStr(n));

 return iComNumber = n;
}

DWORD __fastcall TComPort::ReadBlock(void *buf, int count)
{
 DWORD realCount;
 DWORD err=0;
 bool bResult = ReadFile(hCom, buf, count, &realCount, NULL);//&OverlappedStructure);

 // if there was a problem, or the async. operation's still pending ...
 if(!bResult)
    if (realCount)
   {
       LPVOID lpMsgBuf;

       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                     NULL,
                     GetLastError(),
                     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                     (LPTSTR)&lpMsgBuf,
                     0,
                     NULL);

       MessageBox(Application->Handle,
                  (const char *)lpMsgBuf,
                  "GetLastError",
                  MB_OK | MB_ICONINFORMATION);

       LocalFree(lpMsgBuf);

//        ShowMessage("Other Error "+IntToStr(err));
   } // end if

 return realCount;
}




PM MAIL   Вверх
xvr
Дата 10.2.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Обнули поля fOutxCtsFlow, fOutxDsrFlow, fDtrControl, fTXContinueOnXoff, fOutX, fInX и fRtsControl в переменной dcbBuf после строки 48
Проверь в терминале (HyperTerm) передает ли GPS приемник вообще что нибудь

PM MAIL   Вверх
chaos
Дата 10.2.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



alex6999, думаю для того что бы GPS начал что-то передавать, ему надо послать команду

Это сообщение отредактировал(а) chaos - 10.2.2009, 14:25
PM WWW   Вверх
alex6999
Дата 11.2.2009, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



xvr, спасибо, попробую и обнулить и в терминале проверить....
chaos, от блин.... я както и не подумал об этом.
наверное блин надо что послать. буду игратся
PM MAIL   Вверх
EEEEEE
Дата 12.2.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Из личного опыта.
Чтобы не мучиться с запросно-ответным метом получения, можно настроить выходной интерфейс приёмника под формат NMEA-0183 (символьный). 
Бинарный формат у каждого изготовителя свой, при том, что в основном большинство информации простому смертному не нужно.
PM MAIL   Вверх
Artemon
Дата 13.2.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



Цитата

думаю для того что бы GPS начал что-то передавать, ему надо послать команду


Нет, как правило GPS приемник сам начинает слать данные при включении, по крайне мере я ниразу не встречал приемника, которому нужно что-то посылать.

Я думаю здесь проблема в невыставленном TimeOut com порта.

Это сообщение отредактировал(а) Artemon - 13.2.2009, 07:26


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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