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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не понятки с COM портом не могу извлечь данные? 
:(
    Опции темы
bek08
Дата 26.6.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет ребята помогите с ком портам работат вот программа не получается читать данные из порта. Хочу из тв тюнера извлечь данные!

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  COM.rar 26,27 Kb
PM MAIL   Вверх
xvr
Дата 27.6.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



dcb надо не только проинициализировать, но и установить. Где вызов SetCommState ?

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


Новичок



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

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



xvr,  Спасибо. Шас попробую. А в остальном все норм. в коде или надо где нибудь изменит..  
PM MAIL   Вверх
xvr
Дата 27.6.2011, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bek08 @  27.6.2011,  21:29 Найти цитируемый пост)
А в остальном все норм. в коде или надо где нибудь изменит..   

Внимательно не рассматривал, но в глаза ничего не бросилось

PM MAIL   Вверх
bek08
Дата 28.6.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал так str.Format("%i",sReceivedChar); str- возвращает число -52 но данные по прежнему нету с тв тюнера?

Добавлено через 10 минут и 59 секунд
И почему та Не выполнена функция SetCommState();
PM MAIL   Вверх
bek08
Дата 28.6.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вставил обратно этот str=sReceivedChar+"\r"; тепер говорит Assertion Failed
PM MAIL   Вверх
xvr
Дата 28.6.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

    char sReceivedChar;    
    while(true)
    {  
  ReadFile(hCom,&sReceivedChar,1024,&iSize,0/*&overlapped*/);  

Это неправильно. У вас sReceivedChar - это 1 char, а вы туда 1024 чара пытаетесь прочесть.
Должно быть char sReceivedChar[1024];.
Вот это -
Цитата

  str=sReceivedChar+"\r";          
тоже неправильно. Вы пытаетесь сложить строку (указатель) и чар (целое число). Результат - указатель, продвинутый на много байтов, и смотрящий черт знает куда

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


Новичок



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

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



Код

DWORD iSize;
    char sReceivedChar[1024];    
    while(true)
    {        
        
        ReadFile(hCom,&sReceivedChar,1/*sizeof(sReceivedChar)*/,&iSize,0/*&overlapped*/);                
        str=sReceivedChar; //это выводит толко MMMMMMMMMMMMMMMMMMMMMMMMMMM
        //str.Format("%i",sReceivedChar);// А это 15727304
        lpEdit->SetWindowText(str);        
        Sleep(10);                    
    }

Сделал так. Не понятно что за ММММММ и 15727304 ?
PM MAIL   Вверх
xvr
Дата 29.6.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Сделайте так -
Код


ReadFile(hCom,&sReceivedChar,sizeof(sReceivedChar)-1,&iSize,0); 
sReceivedChar[iSize]=0;

        str=sReceivedChar;
...

PM MAIL   Вверх
bek08
Дата 29.6.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо тебе xvr, Но тепер  в обще ничего не показывает.?
PM MAIL   Вверх
xvr
Дата 29.6.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bek08 @ 29.6.2011,  12:54)
Спасибо тебе xvr, Но тепер  в обще ничего не показывает.?

Видимо ничего не принял. В iSize 0. А ReadFile отвалил либо по ошибке, либо по таймауту.

PM MAIL   Вверх
bek08
Дата 29.6.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



xvr, Как правил но настроит тайм ауты
уменя 
Код

                ctm.ReadIntervalTimeout      =  10;
        ctm.ReadTotalTimeoutMultiplier    = 15;
        ctm.ReadTotalTimeoutConstant    = 10;
        ctm.WriteTotalTimeoutMultiplier    =10;
        ctm.WriteTotalTimeoutConstant    = 10;

Я в место СОМ1 написал ReadMe.txt тогда все нормально читает.. 
PM MAIL   Вверх
xvr
Дата 29.6.2011, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bek08 @  29.6.2011,  13:19 Найти цитируемый пост)
Как правил но настроит тайм ауты

Все таймауты в ms. Увеличите раз в 10.
И проверьте, что возвращает ReadFile. Если возвращает ошибку, то посмотрите, что вернет GetLastError()

PM MAIL   Вверх
bek08
Дата 30.6.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



GetLastError() возврашаеть код 6 не знаю что за ошибка?
PM MAIL   Вверх
bek08
Дата 30.6.2011, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет я ошибся код ошибки 0 просто если повторно открыт порт вылететь 6
вот код проверки я не понимаю если ошибки нет почем уже нет данных уже мозг кипит???
Код

TestEdit * lpEdit = (TestEdit *)param;
    CString str;     
    DWORD iSize,dwRC;
    int GE;
    BOOL Rerr;
    char sReceivedChar[1024],sMsg[512];
    
    
    while(true)
    {
        
        Rerr=ReadFile(hCom,&sReceivedChar,sizeof(sReceivedChar)-1,&iSize,0); 
        if(Rerr==FALSE)
        {            
            GE=GetLastError();
            LPVOID lpMsgBuf;
            lpMsgBuf = NULL;
            dwRC = FormatMessage( 
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM | 
            FORMAT_MESSAGE_IGNORE_INSERTS,
             NULL,
            GE, //  
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 
            (LPTSTR) &lpMsgBuf,
            0,
            NULL);
            if (dwRC && lpMsgBuf)
            {
                sprintf(sMsg, "COM open failed: Port=%s Error=%d - %s",
                    "COM2", GE, lpMsgBuf);
                //AfxMessageBox(sMsg);
                lpEdit->SetWindowText(sMsg);                    
                Sleep(100);    
            }
            else
            {
                sprintf(sMsg, "COM open failed: Port=%s Error=%d ",
                    "COM2", GE);
                lpEdit->SetWindowText(sMsg);                    
                Sleep(100);         
                //AfxMessageBox(sMsg);
            }            
            //str.Format("%d",GE);
            //lpEdit->SetWindowText(str);                    

        }
        else
        {        
         sReceivedChar[iSize]=0;
         str=sReceivedChar;                
         lpEdit->SetWindowText(str);                    
         Sleep(100);         
        }
    }    
    return 0;
 
извините за не красивы код!
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.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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